如何从维基数据属性中仅获取最新的值? [英] How to get only the most recent value from a Wikidata property?

查看:7
本文介绍了如何从维基数据属性中仅获取最新的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我想获得每个国家(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". }
}

Link to Query Console

我知道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上查看每个国家/地区的人口数据时,我看到列出了多个人口点,但查询只返回一个。

推荐答案

您的两个问题都是重复的,但我会尝试将有趣的事实添加到现有答案中。

问题1SPARQL 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)。


问题2Some cities aren't instances of city or big city?重复

您不能使用WDT谓词,因为缺少的语句不是真实的
它们是普通排名语句,但有首选排名语句。

TRUTY语句表示对于给定属性具有最佳非弃用排名的语句。也就是说,如果存在属性P2的首选语句,则只有P2的首选语句将被认为是真实的。否则,所有正常排名的语句都被认为是真的。

P1081始终具有首选语句的原因是此属性由PreferentialBot处理。

这篇关于如何从维基数据属性中仅获取最新的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆