检索属性最后更新 before/after 任意日期

Retrieving properties last updated before/after arbitrary date

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

所以我有这个 SPARQL query 可以获取第 24 季度的所有属性。

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

现在,我只想保留那些在 < 之前或之后 > 任意日期(例如 1/1/2017)修改的属性。我知道有一个 "last update" property P5017,但我不知道如何使用它来与任意日期进行比较。

遗憾的是,您可能无法使用 SPARQL 执行此操作。 SPARQL 唯一知道的是:

  • a) 使用 schema:dateModified;
  • 编辑项目的最后日期(这为您提供了其中任何声明的有效 "no later than" 日期)
  • b) 声明中声明(或暗示)更新时间的任何具体日期。

对于 b),理论上您可以使用 P813(检索到日期信息)。 P5017是''source''的修订日期,不是语句,可以是过去的很长

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

参考文献可能还有 P577(出版日期),可用于推断更新数字 - 如果出版日期是 2020 年 2 月 1 日,则声明可能自 2 月初以来就已编辑,因为这不太可能有人会引用带有未来发布日期的参考文献。但这有点脆弱,除非它恰好与您的考试日期非常匹配,否则并不是很有用。

在实践中,我认为您需要解析页面历史记录才能确定上次编辑给定声明的时间。几乎所有索赔编辑的编辑摘要都是相当标准化的,所以这应该是可行的,而无需调查每个单独的修订,但它也可能需要大量工作...