Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Praktik Terbaik Neptune Menggunakan SPARQL
Ikuti praktik terbaik ini saat menggunakan bahasa kueri SPARQL dengan Neptune. Untuk informasi tentang menggunakan SPARQL di Neptune, lihat Mengakses grafik Neptunus dengan SPARQL.
Mengajukan Kueri Semua Grafik Bernama secara Default
Amazon Neptune mengasosiasikan setiap tripel dengan grafik bernama. Grafik default ditetapkan sebagai gabungan dari semua grafik bernama.
Jika Anda mengirimkan kueri SPARQL tanpa secara eksplisit menentukan grafik melalui kata kunci GRAPH
atau konstruksi seperti FROM NAMED
, Neptune selalu menganggap semua tripel dalam instans DB Anda. Misalnya, kueri berikut mengembalikan semua tripel dari titik akhir Neptune SPARQL:
SELECT * WHERE { ?s ?p ?o }
Tripel yang muncul di lebih dari satu grafik dikembalikan hanya sekali.
Untuk informasi tentang spesifikasi grafik default, lihat bagian Set Data RDF
Menentukan Grafik Bernama yang Akan Dimuat
Amazon Neptune mengasosiasikan setiap tripel dengan grafik bernama. Jika Anda tidak menentukan grafik bernama ketika memuat, memasukkan, atau memperbarui tripel, Neptune menggunakan grafik bernama fallback yang ditentukan oleh URI, http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph
.
Jika Anda menggunakan pemuat massal Neptune, Anda dapat menentukan grafik bernama untuk digunakan untuk semua triple (atau quad dengan posisi keempat kosong) menggunakan parameter parserConfiguration: namedGraphUri
. Untuk informasi tentang sintaks perintah Load
pemuat Neptune, lihat Perintah Loader Neptune.
Memilih Antara FILTER, FILTER...IN, dan VALUES di Kueri Anda
Ada tiga cara dasar untuk menyuntikkan nilai-nilai dalam kueri SPARQL: FILTER
, FILTER...IN
, dan VALUES
.
Misalnya, anggaplah Anda ingin mencari teman dari beberapa orang dalam satu kueri. Menggunakan FILTER
, Anda mungkin menyusun kueri Anda sebagai berikut:
PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s = ex:person1 || ?s = ex:person2)}
Kueri ini mengembalikan semua tripel dalam grafik yang memiliki ?s
yang terikat ke ex:person1
atau ex:person2
dan memiliki edge keluar berlabel foaf:knows
.
Anda juga dapat membuat kueri menggunakan FILTER...IN
yang mengembalikan hasil yang setara:
PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s IN (ex:person1, ex:person2))}
Anda juga dapat membuat kueri menggunakan VALUES
yang dalam kasus ini juga mengembalikan hasil yang setara:
PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. VALUES ?s {ex:person1 ex:person2}}
Meskipun dalam banyak kasus kueri ini secara semantik setara, ada beberapa kasus di mana kedua varian FILTER
berbeda dari varian VALUES
:
-
Kasus pertama adalah ketika Anda menyuntikkan nilai duplikat, seperti menyuntik orang yang sama dua kali. Dalam hal ini, kueri
VALUES
menyertakan duplikat dalam hasil Anda. Anda dapat secara eksplisit menghilangkan duplikat tersebut dengan menambahkanDISTINCT
ke klausulSELECT
. Namun mungkin ada situasi saat Anda benar-benar ingin duplikat dalam hasil kueri untuk injeksi nilai berulang.Namun, versi
FILTER
danFILTER...IN
mengekstrak nilai hanya sekali ketika nilai yang sama muncul beberapa kali. -
Kasus kedua terkait dengan fakta bahwa
VALUES
selalu melakukan pencocokan yang tepat, sedangkanFILTER
mungkin menerapkan jenis promosi dan melakukan pencocokan fuzzy dalam beberapa kasus.Misalnya, ketika Anda menyertakan literal seperti
"2.0"^^xsd:float
di klausa nilai-nilai Anda, kueriVALUES
sama persis dengan literal ini, termasuk nilai literal dan tipe data.Sebaliknya,
FILTER
menghasilkan kecocokan fuzzy untuk literal numerik ini. Pertandingan dapat mencakup literal dengan nilai yang sama tetapi tipe data numerik yang berbeda, sepertixsd:double
.catatan
Tidak ada perbedaan antara perilaku
FILTER
danVALUES
ketika melakukan enumerasi string literal atau URI.
Perbedaan antara FILTER
dan VALUES
dapat mempengaruhi optimasi dan strategi evaluasi kueri yang dihasilkan. Kecuali kasus penggunaan Anda memerlukan pencocokan fuzzy, sebaiknya gunakan VALUES
karena menghindari pencarian kasus khusus yang berkaitan dengan casting jenis. Akibatnya, VALUES
sering menghasilkan kueri yang lebih efisien yang berjalan lebih cepat dan lebih murah.