对 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 页面,然后选择所需的属性。在你的例子中,两个好的候选者是 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
来减少可能的歧义(none,以防在 dbpedia 中使用单个资源的 URI),并使用 ^
来获得正确的方向。我更喜欢 ?is_author_of
和 ?has_notable_work
而不是例如?book
和 ?popular_book
是因为我不确定他的作者是什么作品。
我试图理解 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 页面,然后选择所需的属性。在你的例子中,两个好的候选者是 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
来减少可能的歧义(none,以防在 dbpedia 中使用单个资源的 URI),并使用 ^
来获得正确的方向。我更喜欢 ?is_author_of
和 ?has_notable_work
而不是例如?book
和 ?popular_book
是因为我不确定他的作者是什么作品。