これを行うにはいくつかの方法があります。最も単純で純粋な SPARQL 1.0 の方法は、UNION
たとえば次を使用することです。
SELECT * WHERE
{
{ ?s _:prop "v1" } UNION { ?s _:prop "v2" }
# Use ?s in other patterns
}
これはおそらく最も単純な方法ですが、これに複数の制約が必要な場合は、?s
すぐに扱いにくくなります。
2 番目の方法は、節でIN
関数を使用することです。これには、SPARQL 1.1 の実装が必要です。FILTER
SELECT * WHERE
{
?s _:prop ?value .
FILTER(?value IN ("v1", "v2"))
# Use ?s in other patterns
}
ここでの問題は、IN
多くの選択肢がある場合、または一致する可能性のあるデータが多い場合、使用のパフォーマンスが非常に低下する可能性があることです。?s _:prop ?value
余談- 多くのオプティマイザは、実際にはこの 2 番目の方法を内部で最初の方法に拡張します。
3 番目の方法はVALUES
、SPARQL 1.1 の実装を再度必要とする句を使用することです。
SELECT * WHERE
{
VALUES (?value) { ( "v1" ) ( "v2 " ) }
?s _:prop ?value .
# Use ?s in other patterns
}
これは、(SPARQL の実装に応じて) 多くの代替手段により適切にスケーリングされ、おそらく読み書きが最も優れているため、おそらく最良のオプションです。