我正在尝试检索DBpedia中图书的出版日期和编号页面。我尝试了以下查询,它给出了空结果。我看到这些是book(http://mappings.dbpedia.org/server/ontology/classes/Book)下的属性,但无法检索它。
我想知道代码中是否有错误,或者dbpedia是否存储了与图书相关的日期。
SELECT ?book ?genre ?date ?numberOfPages
WHERE {
?book rdf:type dbpedia-owl:Book .
?book dbp:genre ?genre .
?book dbp:firstPublicationDate ?date .
OPTIONAL {?book dbp:numberOfPages ?numberOfPages .}
}
答案 0 :(得分:0)
基于映射的属性使用名称空间http://dbpedia.org/ontology/
,因此前缀必须是dbo
而不是dbp
,代表http://dbpedia.org/property/
。
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
SELECT ?book ?genre ?date ?numberOfPages
WHERE {
?book a dbo:Book ;
dbp:genre ?genre ;
dbo:firstPublicationDate ?date .
OPTIONAL {?book dbp:numberOfPages ?numberOfPages .}
}
其他一些评论:
dbpedia-owl
但是这个查询没有预先定义在{{3不再 - 它被称为dbo
而不是您可以开始调试您自己的SPARQL查询,只需从它的一部分开始并添加更多三重模式,例如在您的情况下,您可以使用
检查属性是否存在任何三元组PREFIX dbp: <http://dbpedia.org/property/>
SELECT * WHERE {?book dbp:firstPublicationDate ?date } LIMIT 10
正如Ivo Velitchkov在下面的回答中所注意到的,财产dbo:firstPublicationDate
仅用于漫画等,即定期发布的书面作品。因此,结果将是空的。
答案 1 :(得分:0)
dbp:firstPublicationDate
不起作用有两个原因:
首先,正如第一个答案中所指出的,您使用了错误的前缀。
但即使你纠正它,你也会发现你仍然没有结果。然后,最好的办法是用最少数量的图案进行测试,在这种情况下,你应该像第一个出版日期的书籍一样,只有两个三重模式。如果您仍然无法获得结果,则应测试<http://dbpedia.org/ontology/firstPublicationDate>
实际上如何与此类查询一起使用:
SELECT ?class (COUNT (DISTINCT ?s) AS ?instances)
WHERE {
?s <http://dbpedia.org/ontology/firstPublicationDate> ?date ;
a ?class
}
GROUP BY ?class
ORDER BY DESC(?instances)
LIMIT 1000