对 SPARQL 的基本理解

Fundamental understanding of SPARQL

我试图理解 SPARQL 并使用 dbpedia. I've read the w3 文档提供的 SPARQL 工具,现在我想创建我自己的查询。我想找到 J. J. R. Tolkien 编写的 dbpedia 中所有书籍的名称。

因此我 "designed" 这个查询:

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

结果是空的,但我至少希望这本书会弹出: http://dbpedia.org/page/The_Lord_of_the_Rings

谁能告诉我,我的概念错误是什么?

我的好方法是查看他的 DBpedia 页面,然后选择所需的属性。在你的例子中,两个好的候选者是 notableWorkauthor。这是对它们两者的查询,有效地使用了后者。

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 来减少可能的歧义(none,以防在 dbpedia 中使用单个资源的 URI),并使用 ^ 来获得正确的方向。我更喜欢 ?is_author_of?has_notable_work 而不是例如?book?popular_book 是因为我不确定他的作者是什么作品。