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

如何反转Wikidata的SPARQL查询中拼接的行政层级值顺序

加拿大城市行政层级标签倒序拼接解决方案

核心修改思路:在原有可运行查询的基础上,新增行政层级排序逻辑,无需调整实体遍历方向,即可实现从国家到城市的正序拼接效果。

修正后可直接运行的SPARQL代码

SELECT 
  (GROUP_CONCAT(?locationLabel; separator = ' > ' ORDER BY ?level ASC) as ?locationLabels)
  ?city ?cityLabel
WHERE 
{
  ?city wdt:P17 wd:Q16. # 筛选属于加拿大的城市
  ?city wdt:P31 wd:Q21507383. # 筛选加拿大的省/地区首府
  ?city wdt:P131* ?location. # 遍历城市所属的所有上级行政实体

  # 计算行政层级:数值越小代表层级越高,国家层级为0,省/地区为1,区县为2,城市为3
  BIND(
    IF(?location = wd:Q16, 0, 
      IF(EXISTS {?location wdt:P131 wd:Q16}, 1, 
        IF(EXISTS {?location wdt:P131/wdt:P131 wd:Q16}, 2, 3)
      )
    ) AS ?level
  )

  # 可选过滤:移除已撤销的历史行政实体,避免出现"纽芬兰自治领"这类历史层级
  FILTER NOT EXISTS { ?location wdt:P576 ?abolishDate }

  SERVICE wikibase:label { 
    bd:serviceParam wikibase:language "en". 
    ?city rdfs:label ?cityLabel. 
    ?location rdfs:label ?locationLabel .
  }
}
GROUP BY ?city ?cityLabel

修改说明

  • 新增了level字段标识每个行政实体的层级,按从高到低(国家→城市)的顺序赋值0-3
  • 调整GROUP_CONCAT逻辑,新增ORDER BY ?level ASC参数,让拼接顺序从国家层级开始,同时将分隔符替换为>
  • 新增可选过滤规则,可移除已撤销的历史行政实体,解决部分城市结果中出现历史行政区的问题
  • 无需调整原有实体遍历逻辑,避免了使用P150反向属性出现的匹配错误问题

效果示例

原输出:Edmonton < Alberta < Canada
修正后输出:Canada > Alberta > Edmonton

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:54:02