如何使用Wikidata API查找城市实体?

时间:2018-02-07 16:22:30

标签: wikidata wikidata-api

我试图根据其名称的一部分找到一个城市(通常是https://en.wikipedia.org/wiki/Lavo%C3%BBte-sur-Loire,一个法国城市)

我找到的唯一方法是首先要求" Lavoute" (没有重音)通过以下请求。

https://fr.wikipedia.org/w/api.php?action=opensearch&generator=links&format=xml&search=lavoute&prop=pageprops&gpllimit=50&ppprop=wikibase_item&format=json

它会返回5个链接,然后使用此信息通过所有结果请求具有良好价值的所有结果(具有属性P281意味着它是一个城市)

https://www.wikidata.org/w/api.php?action=wbgetentities&titles=Lavo%C3%BBte-sur-Loire&sites=enwiki|frwiki&format=json

有更简单的方法吗?

1 个答案:

答案 0 :(得分:5)

正如您所说,您希望根据其名称的一部分找到一个城市,以下是您的问题的解决方案:

SELECT ?location ?locationLabel WHERE {
 ?location wdt:P17 wd:Q142.
 ?location wdt:P31 ?settlement .
 ?settlement wdt:P279 wd:Q3266850 .
 ?location rdfs:label ?de_label .
 FILTER (lang(?de_label) = "en") .
 FILTER (regex((?de_label), "Lavoûte")).

 SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
 }

请参阅此链接,您可能还会对您的问题有所了解: https://opendata.stackexchange.com/questions/11675/most-efficient-way-to-get-the-wikidata-entity-for-a-city-given-as-a-string