无法过滤荷兰已终止市镇的Wikidata SPARQL查询问题求助
解决荷兰市镇过滤问题的SPARQL修正方案
你的问题出在只过滤了wdt:P582(结束时间),但部分已终止的荷兰市镇用wdt:P576(废除日期)标记撤销状态,所以需要同时排除这两类属性的实体。另外,给结果加上荷兰语名称会更实用,修正后的查询如下:
PREFIX wdt: <http://www.wikidata.org/prop/direct/> PREFIX wd: <http://www.wikidata.org/entity/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?muncipality ?name (MAX(?population) AS ?maxPopulation) WHERE { ?muncipality wdt:P31 wd:Q2039348; wdt:P1082 ?population; rdfs:label ?name. # 筛选荷兰语名称 FILTER(lang(?name) = "nl") # 排除有结束时间或废除日期的已终止市镇 FILTER NOT EXISTS { ?muncipality wdt:P582 ?endTime } FILTER NOT EXISTS { ?muncipality wdt:P576 ?abolitionDate } } GROUP BY ?muncipality ?name ORDER BY DESC(?maxPopulation)
补充说明
如果还有少量漏网的已终止市镇,可以追加过滤条件,排除属于“已废除的荷兰市镇”类别的实体:
FILTER NOT EXISTS { ?muncipality wdt:P31 wd:Q18078745 }
把这行加到WHERE块里即可,不过优先用日期属性过滤更精准,因为这类分类标签可能不是所有已终止市镇都有标记。
内容的提问来源于stack exchange,提问作者David Kraakman
相关产品推荐
相关产品推荐

