Эквивалентность SPARQL для оператора SQL IN () - PullRequest
7 голосов
/ 27 августа 2011

Есть ли эквивалентность SPARQL для оператора SQL IN()? Я фильтрую свои результаты и теперь использую:

FILTER ( lang(?label) = 'en' )

Я хочу что-то вроде:

FILTER ( lang(?label) IN ('en', 'de') )

Возможно ли это с SPARQL?

Ответы [ 2 ]

10 голосов
/ 27 августа 2011

В SPARQL 1.1 да .

FILTER ( lang(?label) IN ('en', 'de') )

должно работать.

До версии 1.1 вам понадобится большое дизъюнкция:

FILTER ( (lang(?label) = 'en') || (lang(?label) = 'de') )
1 голос
/ 29 марта 2018

Согласно официальной документации W3C ,

IN

boolean  rdfTerm IN (expression, ...)

Оператор IN проверяет, находится ли термин RDF слевасторона находится в значениях списка выражений с правой стороны.Проверка выполняется с помощью оператора «=», который проверяет то же значение, определенное сопоставлением оператора.

Список нулевых терминов в правой части является допустимым.

Ошибки в сравнениях приводят к тому, что выражение IN вызывает ошибку, если проверяемый термин RDF не найден в другом месте в списке терминов.

Оператор IN эквивалентен выражению SPARQL:

(lhs = expression1) ||(lhs = expression2) ||...

Примеры:

enter image description here

Итак, IN оператор принимает список вейлов .Ниже приведен пример, который вы можете попробовать с SPARQL, используя синтаксис FILTER + IN :

SELECT ?s1 
WHERE 
{
      ?s1 rdf:type dbpedia-owl:Scientist.
      FILTER (?s1 IN (<http://example.com/#1>,<http://example.com/#2>, <http://example.com/#3>)) 
 }
...