Dbpedia sparql дает пустой запрос на мой запрос, что не так? - PullRequest
0 голосов
/ 23 мая 2019

Я делаю запрос sparql на этом сайте . Это дает мне пустой результат, что не так с моим запросом?

prefix foaf:    <http://xmlns.com/foaf/0.1/>
select * where {
?s rdf:type foaf:Person.

} LIMIT 100

Этот запрос в порядке, но когда я добавляю второй шаблон, я получаю пустой результат.

?s foaf:name 'Abraham_Robinson'.

prefix foaf:    <http://xmlns.com/foaf/0.1/>
select * where {
?s rdf:type foaf:Person.
?s foaf:name 'Abraham_Robinson'.
} LIMIT 100

Как исправить мой запрос, чтобы результат включал эту запись:

http://dbpedia.org/resource/Abraham_Robinson

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Полагаю, Кингсли неправильно воспринимает это как поиск в свободном тексте, а не как простое сравнение строк.

Запрос, который Кингсли отправил и связал ранее , не даетрешение , по тем же причинам, что и исходный запрос, не удалось, как указано в комментарии 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
0 голосов
/ 29 мая 2019

Следующий запрос должен работать.Сейчас он не работает из-за необходимости обновить текстовый индекс, связанный с этим экземпляром (в данный момент выполняется):

PREFIX foaf:    <http://xmlns.com/foaf/0.1/>
SELECT * where {
?s rdf:type foaf:Person.
?s foaf:name "'Abraham Robinson'".
} 
LIMIT 100

Обратите внимание, как фраза помещается в одинарные кавычки, которые находятся в двойных кавычках.цитаты.

Если литеральное содержимое помечено языком, как в случае с DBpedia, запрос на точное совпадение будет иметь форму (уже разъясненную в ответе @ TallTed):

PREFIX foaf:    <http://xmlns.com/foaf/0.1/>
SELECT * where {
?s rdf:type foaf:Person.
?s foaf:name 'Abraham Robinson'@en.
} 
LIMIT 100

This Ссылка на страницу результатов SPARQL должна дать решение после обновления индекса.

...