因此,我目前正在一个项目中,我正在使用从Wikidata获得的数据,并且注意到数据库中有很多重复的元素。原因是我收到不同时间点的人口数字。
我已经读到Wikidata对具有多堆值的语句和似乎是最新值的种群属性进行排名-对于大约99.9%的条目而言,这是正确的。我不明白的是为什么它对其他0.1%无效。
一个例子是:Wikidata query
例如元素
也会发生同样的情况我不知道为什么。
我已经尝试过this topic的解决方案,但是并没有改变结果。
有什么想法吗?
根据以下线程中的过滤器选项进行编辑:wikidata query 2
编辑2:Full query
答案 0 :(得分:1)
某些Wikidata属性由PreferentialBot(source code)处理。
简而言之,该漫游器会发布最新的语句preferred,因此它们是truthy。
有时,漫游器不处理属性的语句。例如,该机器人不会处理包含没有相应限定词的语句的项目。
在您的特定情况下:
SELECT DISTINCT ?city ?cityLabel ?population ?date ?rank WHERE {
VALUES (?settlement) {(wd:Q515) (wd:Q15284)}
VALUES (?city) {(wd:Q1658752)}
?city wdt:P31/wdt:P279* ?settlement .
?city p:P1082 ?statement .
?statement ps:P1082 ?population .
?statement wikibase:rank ?rank
OPTIONAL { ?statement pq:P585 ?date }
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
} ORDER by ?date
结果:
+-------------+-----------+------------+----------------------+---------------------+
| city | cityLabel | population | date | rank |
+-------------+-----------+------------+----------------------+---------------------+
| wd:Q1658752 | Kagan | 86745 | | wikibase:NormalRank |
| wd:Q1658752 | Kagan | 17656 | 1939-01-01T00:00:00Z | wikibase:NormalRank |
| wd:Q1658752 | Kagan | 21103 | 1959-01-01T00:00:00Z | wikibase:NormalRank |
| wd:Q1658752 | Kagan | 34117 | 1970-01-01T00:00:00Z | wikibase:NormalRank |
| wd:Q1658752 | Kagan | 41565 | 1979-01-01T00:00:00Z | wikibase:NormalRank |
| wd:Q1658752 | Kagan | 48054 | 1989-01-01T00:00:00Z | wikibase:NormalRank |
+-------------+-----------+------------+----------------------+---------------------+
您希望使用最近的声明还是“永恒的”声明?
这是找到最近人口的方法:
SELECT DISTINCT ?city ?cityLabel ?population WHERE {
VALUES (?settlement) {(wd:Q515) (wd:Q15284)}
VALUES (?city) {(wd:Q1658752)}
?city wdt:P31/wdt:P279* ?settlement .
?city p:P1082 [ ps:P1082 ?population; pq:P585 ?date1 ]
FILTER NOT EXISTS {
?city p:P1082 [ pq:P585 ?date2 ]
FILTER (?date2 > ?date1) }
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
}
这是您找到“永恒”的方式:
SELECT DISTINCT ?city ?cityLabel ?population WHERE {
VALUES (?settlement) {(wd:Q515) (wd:Q15284)}
VALUES (?city) {(wd:Q1658752)}
?city wdt:P31/wdt:P279* ?settlement .
?city p:P1082 ?statement .
?statement ps:P1082 ?population .
FILTER NOT EXISTS {?statement pq:P585 []}
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
}
实际上,具有P1082
属性的条目中几乎有70%(不是0.1%)没有此属性的首选语句。您应该指的是具有P1082
属性的条目,该条目对该属性具有多个真实声明。回想一下:
Truthy语句表示对于给定属性具有最佳非弃用等级的语句。即,如果存在属性
P2
的首选语句,则仅将P2
的首选语句视为真实。否则,所有P2
的正常排名陈述都被认为是真实的。
是的,大约有P1082
陈述的条目中有0.5%具有两个或多个真实的P1082
陈述。