Фильтрация с опциями в SPARQL
У меня есть набор данных (предоставляется через D2RQ), из которого я могу выполнить следующий запрос SPARQL
SELECT ?index ?freetext ?label WHERE
{
?s a prov:Agent ;
skos:notation ?index.
?s skos:description ?freetext .
OPTIONAL { ?s skos:prefLabel ?label }
}
и получить разумный результат обратно:
index freetext label
--------------------------
1 "Some text containing Manchester" "Lancashire"
2 "Some text containing Liverpool" -
3 "Some text containing Manchester and Liverpool" "The North"
4 "Some text containing London" -
Пока все хорошо... теперь я хочу вернуть строки, в которых упоминается Ливерпуль:
SELECT ?index ?freetext ?label WHERE
{
?s a prov:Agent ;
skos:notation ?index.
?s skos:description ?freetext .
OPTIONAL { ?s skos:prefLabel ?label }
FILTER (regex(str(?freetext), "Liverpool", "i"))
}
который я хочу вернуть
index freetext label
--------------------------
2 "Some text containing Liverpool" -
3 "Some text containing Manchester and Liverpool" "The North"
но это снова возвращает все 4 строки - т.е. фильтрация не имеет никакого эффекта. Я перепробовал каждую комбинацию FILTER EXISTS
, FILTER NOT EXISTS
, MINUS
я могу придумать вопрос, но не помог.
Что я пытаюсь сделать возможным?