2016-03-10 3 views
0

Я пытаюсь понять SPARQL и обходиться с помощью инструмента SPARQL, который предоставляется dbpedia. Я прочитал документацию w3, и теперь я хочу создать свой собственный запрос. Я хотел бы найти имена всех книг в dbpedia, написанных J. J. R. Tolkien.Фундаментальное понимание SPARQL

Поэтому я «разработан» этот запрос:

SELECT ?name WHERE { ?name ?author "J._R._R._Tolkien". 
         ?name ?mediaType "Print"} 

Результат пуст, но я бы, по крайней мере ожидаем, что эта книга выскакивают: http://dbpedia.org/page/The_Lord_of_the_Rings

Может кто-нибудь сказать мне, что моя концептуальная ошибка является?

+1

Во-первых, я бы предложил прочитать что-то о RDF, в частности о принципе «субъект - предикат - объект» и ресурсах, литералах и т. Д. Во-вторых, как только вы поймете основы RDF - и SPARQL - это язык запросов для данных на основе RDF, вы увидите, что вам понадобится предикат для отношения «написано», вам нужно выяснить направление этого отношения в набор данных, над которым вы работаете, и, как правило, более эффективно использовать URI ресурса «J._R._R._Tolkien» – AKSW

ответ

2

Я хотел бы рассмотреть его страницу DBpedia, а затем выбрать желаемые свойства. В вашем случае два хороших кандидата: notableWork и author. Вот запрос с обоими из них, эффективно используя последний.

PREFIX : <http://dbpedia.org/resource/> 
PREFIX o: <http://dbpedia.org/ontology/> 
PREFIX p: <http://dbpedia.org/property/> 

SELECT DISTINCT ?is_author_of #?has_notable_work 
FROM <http://dbpedia.org/> 
WHERE { 
:J._R._R._Tolkien rdf:type o:Writer ; 
#o:notableWork ?has_notable_work ; 
^p:author ?is_author_of . 
} 

Я использовал rdf:type o:Writer, чтобы уменьшить возможную неоднозначность (отсутствует, в случае использования URI отдельного ресурса в DBpedia) и ^, чтобы получить правильное направление. Мое предпочтение от ?is_author_of и ?has_notable_work вместо, например, ?book и ?popular_book были потому, что я не уверен, что это за работа.

+0

. Как следует «rdf: type o: Writer» уменьшить любую двусмысленность при использовании ресурса URI , что на самом деле является уникальным идентификатором. Для меня это совершенно непонятно и избыточный тройной шаблон. – AKSW

+0

В этом случае это действительно избыточно. Но, как редко можно указать на отдельный ресурс, я положил его на пользу хорошей привычки, понимая, что фактический запрос скорее использовал бы REGEX или какой-либо другой способ, который позволил бы двусмысленно, а использование Толкина - это всего лишь временная контрольная работа. Но спасибо, я изменил свой ответ, чтобы отразить это. –

Смежные вопросы