如何在 Wikidata 上创建一个 SPARQL 查询,以获取所有具有 Project Gutenberg 电子书 ID 的书籍?

Posted

技术标签:

【中文标题】如何在 Wikidata 上创建一个 SPARQL 查询,以获取所有具有 Project Gutenberg 电子书 ID 的书籍?【英文标题】:How can I create a SPARQL query on Wikidata that gets all books that have a Project Gutenberg Ebook ID? 【发布时间】:2019-02-27 22:41:04 【问题描述】:

我注意到一些关于 Wikidata 的书籍有古腾堡计划的电子书 ID。是否可以在 Wikidata 查询服务上构建一个查询来查找所有具有此属性的书籍?我是 SPARQL 的新手。

【问题讨论】:

你能举一个维基数据上具有这个电子书 ID 的书的例子吗? 当然:wikidata.org/wiki/Q6511 【参考方案1】:

您可以看到,如果您将鼠标悬停在 https://www.wikidata.org/wiki/Q6511 上的 Project Gutenberg 电子书 ID 的链接上,在 SPARQL 中使用的实际属性代码是 https://www.wikidata.org/wiki/Property:P2034,或简称为 wdt:P2034

要通过 SPARQL 检索所有具有电子书 ID 的项目,只需进行基本的三重匹配即可:

SELECT ?work ?bookId
WHERE  ?work wdt:P2034 ?bookId 

当然,您可以按照您认为合适的方式扩展此查询。例如,要检索书的(英文)标题而不仅仅是标识符,您可以执行以下操作:

SELECT ?title ?ebook_id
WHERE  
     ?work rdfs:label ?title; 
           wdt:P2034 ?ebook_id. 
     FILTER(langMatches(lang(?title), "en")) 

只需添加三重模式和过滤器的正确组合即可。

【讨论】:

以上是关于如何在 Wikidata 上创建一个 SPARQL 查询,以获取所有具有 Project Gutenberg 电子书 ID 的书籍?的主要内容,如果未能解决你的问题,请参考以下文章

使用 WikiData Sparql 高效查询抽象元素

sparql 选择 wikidata group_by 和 concat

SPARQL UNION不产生第二个查询的结果。

如何优化我的递归 SPARQL 查询?

为啥这个 SPARQL 查询超时以及如何优化这个查询?

如何打开自定义 wikidata RDF 转储