Database 使用SPARQL查询获取城市的州/省
我有以下SPARQL查询:Database 使用SPARQL查询获取城市的州/省,database,sparql,wikidata,Database,Sparql,Wikidata,我有以下SPARQL查询: SELECT ?item ?itemLabel WHERE { ?item wdt:P17 wd:Q16; (wdt:P31/(wdt:P279*)) wd:Q515. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } 在本例中,返回加拿大的城市。我还想显示状态/过程,例如,预期输出应为 ... Montreal Quebec ... 或者,如果我要为美国
SELECT ?item ?itemLabel WHERE {
?item wdt:P17 wd:Q16;
(wdt:P31/(wdt:P279*)) wd:Q515.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
在本例中,返回加拿大的城市。我还想显示状态/过程,例如,预期输出应为
...
Montreal Quebec
...
或者,如果我要为美国城市运行查询
...
Los Angeles California
...
如何扩展查询以显示州/省?您必须沿着位于行政区域实体中的财产的路径,然后找到要停止的点,即,一旦实体是加拿大的一个省:
SELECT ?item ?itemLabel ?regionLabel
WHERE { ?item wdt:P17 wd:Q16;
(wdt:P31/(wdt:P279*)) wd:Q515;
wdt:P131* ?region .
?region wdt:P31 wd:Q11828004
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
更一般地说,对于一个国家的州,我们必须找到一些通用术语来表示它。这种三重模式可以做到这一点:
?region (wdt:P31/(wdt:P279*)) wd:Q107390
但是,属性路径对于三元组存储非常糟糕,并且可能会超时
以下查询至少返回一个国家的顶级地区:
select ?region ?regionLabel
{ VALUES ?country {wd:Q30} # get the top level regions of the country
?region wdt:P17 ?country .
?region wdt:P31/wdt:P279* wd:Q10864048 .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } }
这并不是那么简单。您必须遵循通过属性的路径,然后找到某个要停止的点,即,一旦实体是:
SELECT?item?itemLabel?regionLabel,其中{item wdt:P17 wd:Q16;(wdt:P31/(wdt:P279*)wd:Q515;wdt:P131*?region。?region wdt:P31 wd:Q11828004服务wikibase:label{bd:serviceParam wikibase:language“en”。}
@AKSW谢谢,这对加拿大很有效。我试图让它与美国一起工作,并使用了以下查询:SELECT?item?itemlab?regionLabel其中{item wdt:P17 wd:Q30;(wdt:P31/(wdt:P279*)wd:Q515;(wdt:P131*)?region。?region wdt:P31 wd:Q35657。服务维基库:label{bd:serviceParam wikibase:language“en”。}
但我得到了一个超时错误。有没有可能使这个查询更“一般”,以便它可以很容易地适用于北美和欧洲国家?好吧,我们必须找到一些表示一个国家的国家的通用术语。这种三元组模式可以做到:?region(wdt:P31/(wdt:P279*)wd:Q107390
——但同样,属性路径对于三元组存储非常糟糕,并且可能会超时。好吧,我至少可以给你一个查询,返回国家的顶级区域,也许你可以将其重用为:select?region?regionLabel{VALUES?country{wd:Q30}获取国家的顶级地区?地区wdt:P17?国家。?地区wdt:P31/wdt:P279*wd:Q10864048.服务wikibase:label{bd:serviceParam wikibase:language“en”。}
我想知道是否有办法在一次查询中不仅为一个国家,而且为任何国家获得更高的行政区划。例如,为任何城市获得Q15916867。