Есть несколько способов сделать это. Простейшим и чистым методом SPARQL 1.0 является использование UNION
, например.
SELECT * WHERE
{
{ ?s _:prop "v1" } UNION { ?s _:prop "v2" }
# Use ?s in other patterns
}
Это, вероятно, самый простой способ, но если вам нужно несколько ограничений на ?s
это может быстро получить громоздким.
Второй метод заключается в использовании функции IN
в предложении FILTER
, для этого требуется реализация SPARQL 1.1, например.
SELECT * WHERE
{
?s _:prop ?value .
FILTER(?value IN ("v1", "v2"))
# Use ?s in other patterns
}
Проблема здесь в том, что с помощью IN
может выполнять очень плохо, если у вас есть много альтернатив или много данных, которые могут быть сопоставлены с помощью ?s _:prop ?value
Третьего метода заключается в использовании пункта VALUES
который снова требует SPARQL 1.1 реализация:
SELECT * WHERE
{
VALUES (?value) { ("v1") ("v2 ") }
?s _:prop ?value .
# Use ?s in other patterns
}
Это, вероятно, самый лучший вариант, поскольку он масштабируется для многих альтернатив лучше (в зависимости от реализации SPARQL) и, возможно, самый приятный для чтения и записи.