我尝试了解SPARQL并使用dbpedia提供的SPARQL工具。我已经阅读了w3文档,现在我想创建自己的查询。我想找到J. J. R. Tolkien编写的dbpedia中所有书籍的名称。
因此我“设计”了这个查询:
SELECT ?name WHERE { ?name ?author "J._R._R._Tolkien".
?name ?mediaType "Print"}
结果是空的,但我至少会期待这本书出现: http://dbpedia.org/page/The_Lord_of_the_Rings
有人可以告诉我,我的概念错误是什么?
答案 0 :(得分:2)
我的好方法是查看他的DBpedia页面,然后选择所需的属性。在您的情况下,两个好的候选人是var id1 = arr1.reduce(function(p,v,i){p[v.id] = i; return p;}, {}),
id2 = arr2.reduce(function(p,v,i){p[v.id] = i; return p;}, {});
for(key in id1){
if (id2.hasOwnProperty(key)){
var element1 = arr1[id1[key]],
element2 = arr2[id2[key]];
theFunction(element1.value1, element2 .value2);
}
}
和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 .
}
来减少可能的歧义(如果在dbpedia中使用单个资源的URI,则没有),rdf:type o:Writer
可以获得正确的方向。我偏好^
和?is_author_of
而非... ?has_notable_work
和?book
是因为我不确定他的作品是什么类型的作品。