Фильтрация с опциями в 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я могу придумать вопрос, но не помог.

Что я пытаюсь сделать возможным?

0 ответов

Другие вопросы по тегам