繁体   English   中英

如何在DBPEDIA中使用SPARQL查询书籍的出版日期

[英]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 .}
     }

一些其他评论:

  • 将前缀放在SPARQL查询中,这样其他人就可以在没有任何例外的情况下运行它(将来也可以)-当前的SPARQL查询使用dbpedia-owl但是在正式的DBpedia上不再预先定义了它-而是称为dbo
  • 第二点->如果您使用的是公共SPARQL端点,请显示其URL
  • 您可以开始调试自己的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM