You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SPARQL在Wikidata中一次性查询多个城市的面积等信息?

Wikidata 批量城市信息SPARQL查询解决方案

首先修正你原有查询的小问题:你之前单城市查询里写的?label是变量,正确写法应该是用固定属性rdfs:label匹配城市名称。

完整可运行批量查询代码

SELECT ?town ?townName ?area ?areaUnit ?population ?coordinate ?countryName WHERE {
  # 批量填入你的475个城市名,语言标签和城市名语言保持一致即可,示例用英文@en
  VALUES ?cityName { "Paris"@en "London"@en "Beijing"@en "Shanghai"@en }
  
  ?town rdfs:label ?cityName;
    wdt:P2046 ?area;
    wdt:P625 ?coordinate;
    wdt:P1082 ?population;
    wdt:P17 ?country.
  
  # 获取城市可读名称,可自行调整过滤语言,要中文就保留LANG(?townName) = "zh"
  ?town rdfs:label ?townName.
  FILTER(LANG(?townName) = "zh" || LANG(?townName) = "en")
  
  # 获取可读国家名称,无需手动映射Qid
  ?country rdfs:label ?countryName.
  FILTER(LANG(?countryName) = "zh" || LANG(?countryName) = "en")
  
  # 可选:获取面积单位标注,不需要可以删除以下三行
  ?area wikibase:quantityUnit ?areaUnitEntity.
  ?areaUnitEntity rdfs:label ?areaUnit.
  FILTER(LANG(?areaUnit) = "zh" || LANG(?areaUnit) = "en")
}

对应问题解答

  • 是否可以单次查询完成475座城市信息检索:可以,使用SPARQL的VALUES关键字定义所有要查询的城市名集合即可,不需要重复写SELECT语句。你可以用任意文本工具把CSV里的城市名批量处理为"城市名"@en的格式,空格分隔后填入VALUES的大括号中,单次运行即可返回所有结果,直接导出合并好的CSV。如果遇到重名城市,可通过返回的国家字段筛选你需要的目标城市即可。
  • 国家字段转可读名称:上述查询中已经加入了国家名称获取逻辑,通过rdfs:label属性和语言过滤,直接返回中文或英文的国家名称,不会再出现wd:Q30这类标识符。
  • 面积单位处理:Wikidata的面积属性P2046默认返回单位为平方公里,上述查询中加入了可选的单位返回逻辑,结果中会明确标注面积单位,你如果不需要可以删除对应代码行。
  • 是否可以直接引用CSV作为查询条件:query.wikidata.org暂不支持直接上传本地CSV作为查询条件,你可以用Excel的公式功能批量给城市名添加引号和@en后缀,475条数据只需要1分钟就能处理完成,粘贴到VALUES部分即可使用。

额外可选方案

你提到的城市列表来自联合国《World Urbanization Prospects》的30万以上人口城市集合,Wikidata已经收录了该数据集的关联条目,你也可以直接用该数据集的标识作为查询过滤条件,不需要手动输入所有城市名,进一步降低出错概率。

内容的提问来源于stack exchange,提问作者Vonvorv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:06:06