如何通过属性查找Wikidata实体?

10
我想知道是否有一种使用Wikidata API通过指定的属性查找实体的方法。例如,有许多具有Freebase ID属性(Property:P646)的实体。它是唯一的标识符,我想通过此标识符获取实体。 有人知道如何实现吗?
3个回答

13

[更新的答案:使用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(documentation):

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

在这里,我用值为/m/0gnfq的属性646查询wikidata实体。
答案将如下所示:
{
  "status": {
    "error": "OK",
    "items": 1,
    "querytime": "161ms",
    "parsed_query": "STRING[646:'/m/0gnfq']"
  },
  "items": [
    180736
  ]
}

我在寻找的实体是 Q180736
这里,查询使用了 string 参数,因为在wikidata中,freebase ID是字符串形式。但是对于属性涉及到wikidata实体作为值类型的情况,你需要使用 claim 参数。以下是文档中的一个示例:

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


目前看起来似乎没有其他选项。这样一个雄心勃勃的项目竟然没有这么简单的功能,有点奇怪。 - Ihor
这篇关于wdq工具背景故事的2013年9月文章对这个问题非常有深入的见解:显然事情并不那么简单。 - maxlath

1

我也更喜欢使用Wikidata Query API,但如果您需要有关项的更多信息,则可以使用Wikidata API。例如,在您的情况下,所有链接到Freebase identifier (P646)属性的项为:

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

1

现在有一个 SPARQL 端点,位于 https://query.wikidata.org

您可以在那里输入您的 Wikidata 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接