我对检索一个WikiData项目的属性感兴趣,但只有当属性在某个日期之前或之后被添加或修改时才会被检索。
所以我有这样一个方法 SPARQL查询 获取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
现在,我想只保留那些在之前的 <
或之后 >
任意日期(如112017)。我知道有一个 "最后更新 "属性P5017但我不知道如何用它来比较一个任意的日期。
很遗憾,你可能不能用SPARQL来做这个。SPARQL唯一知道的事情是:
schema:dateModified
;对于b),理论上可以使用P813(检索信息的日期)。P5017是''来源''的修订日期,而不是声明,可以是过去很长一段时间。
然而,这种方法依赖于这些声明的存在。大多数参考文献没有使用这些--Q24只有一个参考文献使用P813。也不能保证该权利要求从那时起就没有被编辑过--你会认为可能没有,但没有办法确定。它们不会被自动应用或更新。
参考文献也可能有P577(出版日期),可以用来推断更新数字--如果出版日期是2020-02-01,那么权利要求很可能从2月初开始编辑,因为不太可能有人会引用一个有未来出版日期的参考文献。但这有点脆弱,并没有惊人的用处,除非它恰好与你的测试日期紧密匹配。
在实践中,我认为你需要解析页面历史,才能确定一个给定的权利要求最后被编辑的时间。几乎所有的权利要求编辑摘要都是相当标准化的,所以这应该是很实用的,不需要调查每一个单独的修订,但这也可能是一个很大的工作... ...