我想知道,有没有办法使用他们的API通过指定的属性找到维基数据实体。例如,有很多实体具有 Freebase ID 属性 (Property:P646)。这是唯一标识符,我想通过此标识符获取实体。
有人知道如何实现这一目标吗?
[更新答案:使用 SPARQL 端点]
wdq 将被官方 SPARQL 端点取代,其中此查询如下所示:
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
SELECT ?item ?itemLabel WHERE {
?item wdt:P646 "/m/0gnfq" .
}
您可以在 query.wikidata.org 尝试
要以 JSON 格式获取此查询的结果,您可以在"https://query.wikidata.org/sparql?format=json&query=YOURQUERY"发出请求,其中 YOURQUERY 是 URI 编码的 SPARQL 查询:
https://query.wikidata.org/sparql?format=json&query=PREFIX%20wikibase%3A%20%3Chttp%3A%2F%2Fwikiba.se%2Fontology%23%3E%20PREFIX%20wdt%3A%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fprop%2Fdirect%2F%3E%20SELECT%20%3Fitem%20%3FitemLabel%20WHERE%20%7B%20%3Fitem%20wdt%3AP646%20%22%2Fm%2F0gnfq%22%20.%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%22%20.%20%7D%20%7D
[旧答案:使用 WDQ]
你可以像这样获取 wmflabs API(文档):
http://wdq.wmflabs.org/api?q=string[646:/m/0gnfq]
在这里,我查询具有价值/m/0gnfq
的属性646
的维基数据实体。
答案将如下所示:
{
"status": {
"error": "OK",
"items": 1,
"querytime": "161ms",
"parsed_query": "STRING[646:'/m/0gnfq']"
},
"items": [
180736
]
}
因此,我一直在寻找的实体是Q180736
.
在这里,查询使用string
参数,因为自由基ID是维基数据中的字符串,但对于暗示维基数据实体为值类型的属性,您需要使用claim
参数。文档中的示例:
claim[138:676555] 返回所有以 命名的项 (第138页)阿西西的弗朗西斯(Q676555)。
SPARQL 端点 https://query.wikidata.org
在那里,您可以输入维基数据的SPARQL查询,例如,对于Freebase属性,它可能看起来像这样:
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX v: <http://www.wikidata.org/prop/statement/>
PREFIX q: <http://www.wikidata.org/prop/qualifier/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?subject ?subjectLabel WHERE {
?subject wdt:P646 ?object .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
} LIMIT 10
我也更喜欢维基数据查询API,但如果您需要有关项目的更多信息,可以使用维基数据API。例如,在您的情况下,链接到 Freebase 标识符 (P646) 属性的所有项都是:
https://www.wikidata.org/w/api.php?action=query&format=xml&generator=backlinks&gblnamespace=0&gbllimit=5000&prop=info&gbltitle=Property:P646