如何从维基数据属性中仅获取最新的值? [英] How to get only the most recent value from a Wikidata property?
本文介绍了如何从维基数据属性中仅获取最新的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我想获得每个国家(Q6256)及其最近记录的人类发展指数(P1081)值的列表。国家的人类发展指数属性包含在不同时间点获取的数据点的列表,但我只关心最新的数据。此查询将不起作用,因为它为每个国家/地区获得多个结果(每个人类发展指数数据点一个):
SELECT
?country
?countryLabel
?hdi_value
?hdi_date
WHERE {
?country wdt:P31 wd:Q6256.
OPTIONAL { ?country p:P1081 ?hdi_statement.
?hdi_statement ps:P1081 ?hdi_value.
?hdi_statement pq:P585 ?hdi_date.
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
我知道GROUP BY/GROUP CONCAT,但是当我只想要一个结果时,它仍然会给我每个结果。GROUP BY/SAMPLE也将不起作用,因为不能保证SAMPLE采用最新的结果。
欢迎提供任何相关示例查询的帮助或链接!
附注。另一件我感到困惑的事情是,为什么此查询中的人口P1082在每个国家/地区只返回一个人口结果
SELECT
?country
?countryLabel
?population
WHERE {
?country wdt:P31 wd:Q6256.
OPTIONAL { ?country wdt:P1082 ?population. }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
While相同的查询(但针对HDI)针对每个国家/地区返回多个结果:
SELECT
?country
?countryLabel
?hdi
WHERE {
?country wdt:P31 wd:Q6256.
OPTIONAL { ?country wdt:P1081 ?hdi. }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
人口和HDI有什么不同,导致行为不同?当我在Wikidata上查看每个国家/地区的人口数据时,我看到列出了多个人口点,但查询只返回一个。
推荐答案
您的两个问题都是重复的,但我会尝试将有趣的事实添加到现有答案中。
问题1与SPARQL query to get only results with the most recent date重复。
此技术成功了:
FILTER NOT EXISTS {
?country p:P1081/pq:P585 ?hdi_date_ .
FILTER (?hdi_date_ > ?hdi_date)
}
但是,您应该将此子句添加到OPTIONAL
的之外,它在OPTIONAL
内不起作用(我不确定这不是bug)。
问题2与Some cities aren't instances of city or big city?重复
您不能使用WDT谓词,因为缺少的语句不是真实的。
它们是普通排名语句,但有首选排名语句。
TRUTY语句表示对于给定属性具有最佳非弃用排名的语句。也就是说,如果存在属性P2的首选语句,则只有P2的首选语句将被认为是真实的。否则,所有正常排名的语句都被认为是真的。
P1081
始终具有首选语句的原因是此属性由PreferentialBot处理。
这篇关于如何从维基数据属性中仅获取最新的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文