我对检索 WikiData 项目的属性感兴趣,但前提是该属性是在某个日期之前或之后添加或修改的。
所以我有这个 SPARQL query获取 Q24 的所有属性。
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
编辑项目的最后日期(这为您提供了其中任何声明的有效“不迟于”日期); - b) 声明中声明(或暗示)更新时间的任何具体日期。
对于 b),理论上您可以使用 P813(检索到日期信息)。 P5017 是“来源”的修订日期,而不是声明,可以是过去的很长时间。
但是,这种方法依赖于存在的这些语句。大多数引用文献不使用这些 - Q24 只有一个引用文献使用 P813。也不能保证声明从那时起就没有被编辑过——你会假设可能没有,但没有办法确定。它们不会自动应用或更新。
引用文献也可能有 P577(出版日期),可用于推断更新数字 - 如果出版日期为 2020-02-01,则声明可能自 2 月初以来已被编辑,因为不太可能有人会引用带有 future 出版日期的引用文献。但这有点脆弱,除非它恰好与您的考试日期非常匹配,否则并不是很有用。
在实践中,我认为您需要解析页面历史记录才能确定上次编辑给定声明的时间。几乎所有 claim 编辑的编辑摘要都是相当标准化的,因此这应该是可行的,而无需调查每个单独的修订,但这也可能需要大量工作...
关于sparql - 检索在任意日期之前/之后最后更新的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61761025/