sparql - Wikidata SPARQL:如果可用,如何按日期过滤?
问题描述
我想要一份德国所有拨号代码和邮政编码的列表,但有些城镇有旧邮政编码的数据,这个查询返回其中一个,但不是最新的:
SELECT DISTINCT ?item ?itemLabel ?officialName ?dialcode ?zipCode
WHERE {
?item p:P31/ps:P31/wdt:P279* wd:Q262166;
wdt:P17 wd:Q183; # Country = Germany
wdt:P131 wd:Q10489; # County
wdt:P281 ?zipCode; wdt:P473 ?dialcode; .
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
OPTIONAL{?item wdt:P1448 ?officialName .}
}
ORDER BY DESC(?zipCode) ?dialcode
Hautzenberg 镇返回 W-8395 作为邮政编码而不是 94051,因为这是数据库中为数不多的具有邮政编码开始和结束日期的城镇之一。但是大多数邮政编码都没有日期。如果没有给出日期,它也应该提供邮政编码。
这是豪岑贝格的数据:https ://www.wikidata.org/wiki/Q255888
解决方案
事实上,豪岑贝格返回了 4 个代码,其中还有 94051。
如果您只想要 94051,则必须按日期过滤。
启发式地,您可以过滤掉确实有结束时间的声明:
SELECT DISTINCT ?item ?itemLabel ?officialName ?dialcode ?zipCode
WHERE {
?item p:P31/ps:P31/wdt:P279* wd:Q262166;
wdt:P17 wd:Q183; # Country = Germany
wdt:P131 wd:Q10489; # County
p:P281 ?zipCodeStmt;
wdt:P473 ?dialcode; .
?zipCodeStmt ps:P281 ?zipCode;
FILTER NOT EXISTS { ?zipCodeStmt pq:P582 ?endTime . } # Filtering out old postal codes
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
OPTIONAL { ?item wdt:P1448 ?officialName . }
}
ORDER BY DESC(?zipCode) ?dialcode
推荐阅读
- spring - 在实际持久化到数据库之前验证响应式请求的惯用方式
- reactjs - 当嵌套在 react-native-svg 中时,TouchableOpacity 不会触发点击
- excel-formula - Excel加生产时间除以总利润
- javascript - extjs中的颜色转换
- amazon-web-services - 无效的 GraphQL 自省查询结果
- python-3.x - 将逗号分隔的文件加载到数据框中
- java - notification.setOngoing(true) 在 Android 8.1 中不起作用
- .net-core - 从 NetCoreApp2.1 调用 OData 服务时出现 System.NotSupportedException
- javascript - 在带有点指示器的 js silder 中重置计时器
- vb6 - VB6 更新/重新加载我项目中使用的 CTL 用户控件