Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在DBPEDIA中使用SPARQL查询图书出版日期_Sparql_Ontology_Dbpedia_Sparqlwrapper - Fatal编程技术网

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

如何在DBPEDIA中使用SPARQL查询图书出版日期,sparql,ontology,dbpedia,sparqlwrapper,Sparql,Ontology,Dbpedia,Sparqlwrapper,我正在尝试检索DBpedia中书籍的出版日期和页数。我尝试了以下查询,结果为空。我看到这些是book()下的属性,但无法检索它 我想知道代码中是否有错误,或者dbpedia是否没有存储这些与书籍相关的日期 SELECT ?book ?genre ?date ?numberOfPages WHERE { ?book rdf:type dbpedia-owl:Book . ?book dbp:genre ?genre . ?book dbp:firstPublica

我正在尝试检索DBpedia中书籍的出版日期和页数。我尝试了以下查询,结果为空。我看到这些是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/

前缀dbo:
前缀dbp:
选择?书籍?流派?日期?页数
在哪里{
?预订dbo:预订;
dbp:体裁?体裁;
dbo:firstPublicationDate?日期。
可选{书本dbp:numberOfPages?numberOfPages.}
}
一些补充意见:

  • 将前缀放在SPARQL查询中,以便其他人可以在没有任何异常的情况下运行它(将来也是如此)-当前SPARQL查询使用
    dbpedia owl
    ,但这一查询不再是在上预定义的-取而代之的是
    dbo
  • 这就引出了第二点->如果您使用的是公共SPARQL端点,请显示其URL
  • 您可以开始调试自己的SPARQL查询,只需从SPARQL查询的一部分开始,然后添加更多的三元组模式,例如,在您的情况下,您可以检查是否有任何具有以下属性的三元组:

    前缀dbp:
    选择*WHERE{book dbp:firstPublicationDate?date}限制10
    
更新
正如Ivo Velitchkov在下面的回答中所注意到的,dbo:firstPublicationDate属性仅用于漫画等,即定期出版的书面作品。因此,结果将为空。

dbp: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
选择类(将(不同的)计数为实例)
在哪里{
?s?日期;
a级
}
分组
按描述排序(?实例)
限制1000

尝试使用
dbp:releaseDate
谢谢你的帮助。如果您能告诉我为什么“dbp:firstPublicationDate”不起作用,那将很有帮助。DBpedia是通过一组不断发展的提取器/转换器从Wikipedia内容填充的。如果您想要的数据不存在提取器,或者数据不在Wikipedia上,或者映射不符合您的预期。。。你不会得到你期望的结果。是的,看起来这个属性更多地用于漫画等,即定期出版的书面作品。非常感谢