#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 >