Istnieje kilka sposobów, aby to zrobić. Najprostszą i czystą metodą SPARQL 1.0 jest użycie UNION
np.
SELECT * WHERE
{
{ ?s _:prop "v1" } UNION { ?s _:prop "v2" }
# Use ?s in other patterns
}
To chyba najprostsza metoda, ale jeśli trzeba wiele ograniczeń na ?s
może szybko dostać nieporęczny.
Druga metoda polega na użyciu funkcji IN
w klauzuli FILTER
, wymaga to implementacji SPARQL 1.1, np.
SELECT * WHERE
{
?s _:prop ?value .
FILTER(?value IN ("v1", "v2"))
# Use ?s in other patterns
}
problemem jest to, że za pomocą IN
można wykonać bardzo słabo, jeśli masz wiele alternatyw lub dużej ilości danych, które mogą być dopasowane przez ?s _:prop ?value
Trzecim sposobem jest użycie klauzuli VALUES
co znowu wymaga sparql 1.1 realizacja:
SELECT * WHERE
{
VALUES (?value) { ("v1") ("v2 ") }
?s _:prop ?value .
# Use ?s in other patterns
}
jest to prawdopodobnie najlepsza opcja, ponieważ skaluje go do wielu alternatyw lepiej (w zależności od implementacji SPARQL) i jest chyba najładniejszy się czytać i pisać.