

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
<a name="best-practices-sparql-batch"></a>

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 `VALUES` perilaku `FILTER` dan 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.