Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
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
VALUESmenyertakan duplikat dalam hasil Anda. Anda dapat secara eksplisit menghilangkan duplikat tersebut dengan menambahkanDISTINCTke klausulSELECT. Namun mungkin ada situasi saat Anda benar-benar ingin duplikat dalam hasil kueri untuk injeksi nilai berulang.Namun, versi
FILTERdanFILTER...INmengekstrak nilai hanya sekali ketika nilai yang sama muncul beberapa kali. -
Kasus kedua terkait dengan fakta bahwa
VALUESselalu melakukan pencocokan yang tepat, sedangkanFILTERmungkin menerapkan jenis promosi dan melakukan pencocokan fuzzy dalam beberapa kasus.Misalnya, ketika Anda menyertakan literal seperti
"2.0"^^xsd:floatdi klausa nilai-nilai Anda, kueriVALUESsama persis dengan literal ini, termasuk nilai literal dan tipe data.Sebaliknya,
FILTERmenghasilkan 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
VALUESperilakuFILTERdan saat menghitung literal string atau. URIs
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.