Я пробовал аналогичный запрос, но также получил исключение при разборе.Я просмотрел код парсера SPARQL rdflib, и, похоже, не существует правила для обработки IN
или NOT IN
.Я бы предположил, что эта функция не реализована.
В любом случае, я не уверен, что вы используете его правильно.Взглянув на определение NOT IN
в спецификации SPARQL 1.1 ..., он определяет оператор IN
для использования со списком выражений.Поэтому вы должны сделать:
FILTER (?item NOT IN (?SetB))
И я не совсем уверен, что вы можете использовать переменные в правой части, потому что все примеры в спецификации используютterm. edit : см. сообщение RobV, возможно использование переменных в обходе RLH
с одним запросом
Одно из возможных решенийДля вас может подойти OPTIONAL
и bound
(оба поддерживаются в rdflib).Что-то вроде ...
SELECT ?title WHERE {
some logic defining ?item
OPTIONAL {
some logic defining ?SetB
}
FILTER (bound(?SetB) && ?setB != ?item)
}
Не зная больше о вашем запросе, я не могу лучше посоветовать с этим делом.
Обходной путь с двумя запросами
Самый простой способ решить эту проблему с помощью rdlib - использовать фильтры и два запроса. Первый запрос извлекает все возможные значения для ?SetB
.Ant во втором запросе вы динамически создаете фильтр:
SELECT ?title WHERE {
some logic defining ?item
FILTER (?item != <setb_val1> && ?item != <setb_val2> &&
... && ?item != <setb_val2>)
}