sparql - 为什么此 wikidata 查询不选择荷兰省份
问题描述
我正在尝试在 wikidata 中查询所有次国家行政单位的人口数量。如果我手动查找荷兰省或俄罗斯州或法国地区,则该信息似乎可用于大多数此类次国家地区。
我创建了以下查询:
SELECT ?land ?landLabel ?is_een ?is_eenLabel ?inwonertal WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
?land wdt:P31 wd:Q56061.
OPTIONAL { ?land wdt:P17 ?land. }
OPTIONAL { ?land wdt:P31 ?is_een. }
OPTIONAL { ?land wdt:P1082 ?inwonertal. }
}
limit 10000
其中 Q56061 是“行政领土实体”,P17(土地 = 国家),P31(is_een = is_a),P1082(inwonertal = 人口)
此查询仅返回 4271 个结果。为什么查询会错过例如https://www.wikidata.org/wiki/Q694(南荷兰省)?也许是因为 Q694 是 Q134390(荷兰省)的一个实例,它是 Q56061(行政领土实体)的子类?
不仅要过滤 Q56061(adm 区域实体)而且要过滤 Q56061 的所有子类,查询应该是什么样子?为了限制输出,我最好只过滤比 Q6256(国家)低一个地理级别的 Q56061 的子类。可以这样做吗?
解决方案
?land wdt:P31 wd:Q56061
您只查询 Q56061(“行政区域实体”)的实例。
大多数实体,例如https://www.wikidata.org/wiki/Q134390,都是 Q56061 的子类的实例。要包含此类情况,您需要按如下方式调整查询
?land wdt:P31/wdt:P279 wd:Q56061
:(P279 是子类的 Wikidata 属性。)
通常,您希望包括子类的子类(以及向下的任意数量的级别)。这可以通过写来实现?land wdt:P31/wdt:P279* wd:Q56061
。但是,对于您的示例,这需要超过 60 秒的执行时间,因此它不会成功。
要将输出限制为国家以下的一个地理级别,您可以使用https://www.wikidata.org/wiki/Q10864048(“一级行政国家细分”):
SELECT ?land ?landLabel ?is_een ?is_eenLabel ?inwonertal WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
?land wdt:P31/wdt:P279* wd:Q10864048.
OPTIONAL { ?land wdt:P17 ?land. }
OPTIONAL { ?land wdt:P31 ?is_een. }
OPTIONAL { ?land wdt:P1082 ?inwonertal. }
} limit 10000
推荐阅读
- python - Nodejs Pythonshell找不到脚本
- wpf - 如何在单个窗口(通过框架)WPF 上导航多个页面
- android - 图像未显示在 React-native 的 Build Apk 中
- xamarin - Xamarin Picker - Selecteditem 无法处理页面加载
- c - 字符串缓冲区输入问题
- docker - 如何为 docker 中的详细信息指定注释
- python - 自定义对象列表
- python - 熊猫更改列表中项目的索引名称
- gcloud - 如何使用 GCloud 命令将新域添加到现有的谷歌托管 SSL 证书
- angular - 离子/角度将对象推送到数组对象