Praktik Terbaik Neptune Menggunakan SPARQL - Amazon Neptune

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 dari spesifikasi Bahasa Kueri SPARQL 1.1.

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 menambahkan DISTINCT ke klausul SELECT. Namun mungkin ada situasi saat Anda benar-benar ingin duplikat dalam hasil kueri untuk injeksi nilai berulang.

    Namun, versi FILTER dan FILTER...IN mengekstrak nilai hanya sekali ketika nilai yang sama muncul beberapa kali.

  • Kasus kedua terkait dengan fakta bahwa VALUES selalu melakukan pencocokan yang tepat, sedangkan FILTER 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, kueri VALUES 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, seperti xsd:double.

    catatan

    Tidak ada perbedaan antara perilaku FILTER dan VALUES 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.