如何用SPARQL从博物馆实体提取城市信息?适配曼哈顿特殊场景
博物馆所在城市的SPARQL检索优化方案
核心问题分析
你的原查询仅获取博物馆直接关联的P131行政区域,导致两种不符合预期的结果:
- 曼哈顿这类次级行政区会被直接返回,而非所属的纽约市
- 柏林这类城市的
P131直接指向国家(德国),返回结果不是目标城市
优化方案:基于类型过滤的层级路径查询
通过限定目标实体为城市类型(Q515),并遍历行政区域层级,自动匹配正确的城市节点:
SELECT DISTINCT ?cityName WHERE { # 遍历博物馆所属的行政区域层级(至少1层) ?museum wdt:P131+ ?city. # 限定?city为城市或其子类(Q515是城市的本体ID) ?city wdt:P31/wdt:P279* wd:Q515. # 获取城市的英文标签 ?city rdfs:label ?cityName. FILTER(lang(?cityName) = "en") }
方案说明
wdt:P131+:沿着「位于行政区域」属性向上遍历至少一层,覆盖两种场景:- 博物馆直接位于城市(如柏林):直接匹配到柏林本身
- 博物馆位于次级行政区(如曼哈顿):向上遍历到所属的纽约市
wdt:P31/wdt:P279* wd:Q515:确保返回的实体是城市或城市的子类,自动排除曼哈顿这类非城市的次级行政区,以及德国这类国家实体- 若原查询中
?item wdt:P276 ?museum指代展品位于博物馆,只需调整为:SELECT DISTINCT ?cityName WHERE { ?item wdt:P276 ?museum. ?museum wdt:P131+ ?city. ?city wdt:P31/wdt:P279* wd:Q515. ?city rdfs:label ?cityName. FILTER(lang(?cityName) = "en") }
内容的提问来源于stack exchange,提问作者yxx
相关产品推荐
相关产品推荐

