[英]How to query for publication date of books using SPARQL in DBPEDIA
我正在尝试检索DBpedia中书籍的出版日期和页数。 我尝试了以下查询,但结果为空。 我看到这些是本书( 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 .}
}
基于映射的属性使用名称空间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
但是在正式的DBpedia上不再预先定义了它-而是称为dbo
您可以开始调试自己的SPARQL查询,只需简单地从它的一部分开始,然后添加更多的三元模式,例如,在您的情况下,您可以使用
PREFIX dbp: <http://dbpedia.org/property/> SELECT * WHERE {?book dbp:firstPublicationDate ?date } LIMIT 10
正如Ivo Velitchkov在下面的回答中注意到的那样,属性dbo:firstPublicationDate
仅用于dbo:firstPublicationDate
等,即定期出版的书面作品。 因此,结果将为空。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.