从维基数据项中获取 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 操作按名称获取实体的 属性 列表。我完全错过了我可以通过 titles
和 sites
参数进行查找以获取实体,而不是仅使用相同的操作通过其 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] 的实体=] 它的价值。
我研究维基数据 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 操作按名称获取实体的 属性 列表。我完全错过了我可以通过 titles
和 sites
参数进行查找以获取实体,而不是仅使用相同的操作通过其 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] 的实体=] 它的价值。