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



我使用Wikidata API已经有一段时间了。我知道如何通过名称和Q号获取项目(实体)。但我似乎不知道如何让他们的属性正确。我要找的是P214(作者的viaf标识符)

例如,我已经使用这个查询来获取作者的全名

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

返回一个包含页面名称和链接到包含"Douglas Adams"的页面的数组。但是没有属性

那么我可以使用Q id列表来查询属性,像这样

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

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

是否有更简单的方法通过项目名称获取项目属性列表?

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

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

我最终弄清楚了如何使用wbgetenentities操作按名称获取实体的属性列表。我完全错过了我可以通过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),用普通对象符号?o代替wd:Q42,将得到我所有具有viaf ID属性的实体及其值。

相关内容

  • 没有找到相关文章

最新更新