首页 > 解决方案 > 检索在任意日期之前/之后最后更新的属性

问题描述

我对检索 WikiData 项目的属性感兴趣,但前提是在某个日期之前或之后添加或修改了该属性。

所以我有这个获取 Q24 的所有属性的SPARQL 查询。

SELECT ?itemLabel ?propLabel ?statement_property_objLabel
WHERE {

    VALUES (?item) {(wd:Q24)}

    ?item ?property [?statement_property ?statement_property_obj] .
    ?prop wikibase:claim ?property.
    ?prop wikibase:statementProperty ?statement_property.

    # Call label service.
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }

} ORDER BY ?propLabel

现在,我只想保留那些在任意日期之前<或之后修改的属性(例如 2017 年 1 月 1 日)。>我知道有一个“最后更新”属性 P5017,但我不知道如何使用它与任意日期进行比较。

标签: sparqlmediawikiwikipediawikidata

解决方案


遗憾的是,您可能无法使用 SPARQL 做到这一点。SPARQL 知道的唯一事情是:

  • a) 使用schema:dateModified;
  • b) 声明中声明(或暗示)更新时间的任何具体日期。

对于 b),理论上您可以使用 P813(检索日期信息)。P5017 是“源”的修订日期,而不是声明,并且可以是过去很长时间。

但是,这种方法依赖于存在的那些陈述。大多数参考不使用这些 - Q24 只有一个使用 P813 的参考。也不能保证从那时起该声明就没有被编辑过——你可能会假设没有,但没有办法确定。它们不会自动应用或更新。

参考文献也可能有 P577(出版日期),可用于推断更新数据 - 如果出版日期为 2020-02-01,则声明可能自 2 月初以来已被编辑,因为不太可能有人会引用参考文献与未来的出版日期。但这有点脆弱并且没有惊人的用处,除非它恰好与您的测试日期匹配。

在实践中,我认为您需要解析页面历史记录才能确定给定声明的最后编辑时间。几乎所有索赔编辑的编辑摘要都非常标准化,因此希望在不调查每个单独修订的情况下这应该是实用的,但这也可能需要大量工作......


推荐阅读