如何在DBPEDIA中使用SPARQL查询书籍的发布日期

时间:2017-03-11 22:33:52

标签: sparql ontology dbpedia sparqlwrapper

我正在尝试检索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 .}
     }

2 个答案:

答案 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 .}
     }

其他一些评论:

  • 将前缀放到SPARQL查询中,以便其他人可以在没有任何异常的情况下运行它(也在将来) - 当前的SPARQL查询使用dbpedia-owl但是这个查询没有预先定义在{{3不再 - 它被称为dbo而不是
  • 带我到第二点 - &gt;如果您使用的是公共SPARQL端点,请显示其URL
  • 您可以开始调试您自己的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
相关问题