Не удается выполнить определенный запрос SPARQL в DBpedia :/

#sparql #dbpedia

#sparql #dbpedia

Вопрос:

На этом сайте, например, возьмите первый запрос SPARQL и создайте что-то очень похожее:

 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX p: <http://dbpedia.org/property/>
SELECT *
WHERE {
    ?name p:name <http://dbpedia.org/resource/Olivier_Theyskens> .
}
  

Попробуйте выполнить его: <a rel="noreferrer noopener nofollow" href="https:///dbpedia.org/snorql/?query= PREFIX rdf:
PREFIX p:
SELECT *
WHERE {
?name p:name .
}» rel=»nofollow»>здесь

И я не получаю никаких результатов. Однако измените запрос следующим образом:

 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX p: <http://dbpedia.org/property/>
SELECT *
WHERE {
    ?name p:name ?otherthing.
}
  

И я получаю результаты, даже если это не те результаты, которые я хочу.

Почему не работает первый запрос — что я делаю не так? :/

Ответ №1:

В данном случае, я думаю, это потому, что вы упорядочиваете оператор запроса в обратном порядке.

Ресурс DBpedia ( <http://dbpedia.org/resource/Olivier_Theyskens> ) является сущностью или субъектом ( ?s ), свойство ( p:name ) является атрибутом или предикатом ( ?p ), а значение этого свойства ( ?name ) является значением или объектом ( ?o ).

SPARQL ожидает, что все операторы будут { ?s ?p ?o } , но ваш, похоже, записан как { ?o ?p ?s }

Подводя итог, если вы попробуете этот запрос —

 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX p: <http://dbpedia.org/property/>
SELECT *
WHERE 
  {
    <http://dbpedia.org/resource/Olivier_Theyskens>  p:name  ?name  .
  }
  

— вы получите <a rel="noreferrer noopener nofollow" href="https:///dbpedia.org/sparql?default-graph-uri=http://dbpedia.orgamp;query=PREFIX rdf:
PREFIX p:
SELECT *
WHERE {
p:name ?name .
}
amp;debug=onamp;timeout=amp;format=text/htmlamp;save=displayamp;fname=» rel=»noreferrer»>те результаты, которые, как я думаю, вам нужны.

Ответ №2:

Проблема с вашим первым запросом заключается в том, что p:name ссылается на литерал, и вы пытаетесь сопоставить URI.

Если вы хотите, чтобы ваш первый запрос сработал, вы должны использовать свойство http://dbpedia.org/ontology/artist , которое ссылается на URI, а не на литерал:

 SELECT *
WHERE {
    ?s <http://dbpedia.org/ontology/artist> <http://dbpedia.org/resource/The_Velvet_Underground> .
}
  

Обратите внимание, что для свойств объекта используется другое пространство имен для свойства, которое <http://dbpedia.org/ontology/artist> содержит ontology это пространство имен вместо property ontology .

Комментарии:

1. Я понимаю… Это довольно хлопотно, потому что эту ссылку я получаю из другой базы данных, которая возвращает только » dbpedia.org/resource/The_Velvet_Underground «. Это единственная информация, которую я получаю из этой базы данных. Итак, в принципе, решения моей проблемы нет?

2. Извините, я только что завершил переработанный вопрос, вам нужно использовать другой предикат < dbpedia.org/ontology/artist >