Полагаю, Кингсли неправильно воспринимает это как поиск в свободном тексте, а не как простое сравнение строк.
Запрос, который Кингсли отправил и связал ранее , не даетрешение , по тем же причинам, что и исходный запрос, не удалось, как указано в комментарии AKSW, т. е. -
foaf:name
значения обычно не заменяют пробелы подчеркиванием, как впервоначальная стоимость;т. е. 'Abraham_Robinson'
должно было быть 'Abraham Robinson'
foaf:name
строки, как правило, помечены как langtagged, и это в этом случае, так что на самом деле должно быть 'Abraham Robinson'@en
Включая исправления AKSW с этой строкой ?s foaf:name 'Abraham Robinson'@en.
, запрос %0D%0Aselect%20*%20where%20%7B%0D%0A%3Fs%20rdf%3Atype%20foaf%3APerson.%0D%0A%3Fs%20foaf%3Aname%20%27Abraham%20Robinson%27%40en.%0D%0A%7D%20LIMIT%20100&format=text%2Fhtml&CXML_redir_for_subjs=121&CXML_redir_for_hrefs=&timeout=30000&debug=on&run=%20Run%20Query%20" rel="nofollow noreferrer"> работает .
Все это говорит о том, что вы можете предпочесть альтернативный запрос, который выдаст результаты независимо от того,не значение foaf:name
помечено как langtagged и заменены ли пробелы подчеркиванием. Этот специфичен для Virtuoso, а дает результаты быстрее , потому что функция bif:contains
использует свои индексы свободного текста, будет -
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT *
WHERE
{
?s rdf:type foaf:Person ;
foaf:name ?name .
?name bif:contains "'Abraham Robinson'" .
}
LIMIT 100
Общий SPARQL, использующий REGEX FILTER
, работает как с Virtuoso, так и с другими хранилищами RDF, но дает результаты медленнее , поскольку REGEX
не использует индексы свободного текста, как в -
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT *
WHERE
{
?s rdf:type foaf:Person ;
foaf:name ?name .
FILTER ( REGEX ( ?name, 'Abraham Robinson' ) ) .
}
LIMIT 100