从维基数据项中获取 VIAF 标识符

Get VIAF identifier from a Wikidata Item

我研究维基数据 API 有一段时间了。我知道如何通过名称和 Q 号获取项目(实体)。但我似乎无法弄清楚如何正确设置它们的属性。我正在寻找的是 P214(作者的 viaf 标识符)

例如,我已经在使用此查询通过全名获取作者

https://www.wikidata.org/w/api.php?action=wbsearchentities&search=Douglas%20Adams&language=en

returns 一组页面名称并链接到名称为 "Douglas Adams" 的页面。但没有属性。

然后我可以使用 Q id 列表来查询属性,就像这样

https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q42&language=en 

viaf 属性 和 Q42 的价值在那里。但这是一种笨拙的方法,因为我从第一个查询中获得了一个结果列表,然后我必须遍历它们并查询每个结果以获取我正在寻找的属性。

tl;dr : 是否有更简单的方法来按项目名称获取项目属性列表?

一种可能有效的间接方法是在您的会话开始时下拉所有包含 P213 的 Q 项目的综合列表 - 有 about a million,所以它会有几 MB,并且然后对于每次搜索,检查您的搜索结果是否在该本地列表中。如果是,请继续进行进一步的 API 调用以查看详细信息 - 如果不是,您将不会感兴趣,因此您可以跳过它们。

这不会让您在会话期间添加任何 VIAF 项目,但日常变化相对较小,因此这不应该是一个主要问题。

我最终想出了如何使用 wbgetentities 操作按名称获取实体的 属性 列表。我完全错过了我可以通过 titlessites 参数进行查找以获取实体,而不是仅使用相同的操作通过其 QID 进行搜索。

让我转向这个解决方案的是这个例子(隐藏在页面底部):

api.php?action=wbgetentities&sites=enwiki&titles=Berlin&languages=en

一个小缺点是我还必须提供 sites 参数,但我可以接受

编辑:

SPARQL API 正是我一直需要的!!!

PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd: <http://www.wikidata.org/entity/> 
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?viaf WHERE {
  wd:Q42 wdt:P214 ?viaf   
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" .
  }
}

现在我正在为 Q42 (adams) 获取所有 P214 (viaf),将 wd:Q42 替换为普通对象符号 ?o,将获取所有具有 VIAF ID [=35] 的实体=] 它的价值。