如何按属性查找Wikidata实体?

时间:2014-11-29 12:32:03

标签: wikidata wikidata-api

我想知道,有没有办法通过指定的属性使用他们的API查找维基数据实体。例如,有很多实体具有Freebase ID属性(属性:P646)。它是唯一标识符,我希望通过此标识符获取实体。

任何人都知道如何实现这一目标?

3 个答案:

答案 0 :(得分:10)

[更新回答:使用SPARQL端点]

wdq正在被官方SPARQL端点取代,此查询如下所示:

PREFIX wdt: <http://www.wikidata.org/prop/direct/>
SELECT ?item ?itemLabel WHERE {
  ?item wdt:P646 "/m/0gnfq" .
}

你可以try it at query.wikidata.org

要在JSON中获取此查询的结果,您可以在&#34; https://query.wikidata.org/sparql?format=json&query=YOURQUERY&#34;其中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(documentation):

http://wdq.wmflabs.org/api?q=string[646:/m/0gnfq]

在这里,我使用值646的Property /m/0gnfq查询wikidata实体。

答案如下:

{
  "status": {
    "error": "OK",
    "items": 1,
    "querytime": "161ms",
    "parsed_query": "STRING[646:'/m/0gnfq']"
  },
  "items": [
    180736
  ]
}

我正在寻找的实体是Q180736

此处,查询使用string参数,因为freebase ID是wikidata中的字符串,但对于将wikidata实体视为值类型的属性,您需要使用claim参数。文档中的一个例子:

  

claim [138:676555]返回所有以其命名的项目   (P138)阿西西的弗朗西斯(Q676555)。

答案 1 :(得分:1)

现在在https://query.wikidata.org

处有一个SPARQL端点

在那里,您可以输入维基数据的SPARQL查询。例如,对于Freebase属性,它可能如下所示:

<div class="tagBox" ng-repeat="item in inputs">
    <input ng-model="itemValue[$index]">
</div>

答案 2 :(得分:1)

我也更喜欢issue 132,但如果您需要有关这些项目的更多信息,请使用Wikidata Query API。例如,在您的情况下,链接到Wikidata API属性的所有项目都是:

https://www.wikidata.org/w/api.php?action=query&format=xml&generator=backlinks&gblnamespace=0&gbllimit=5000&prop=info&gbltitle=Property:P646