sparql - 检索在任意日期之前/之后最后更新的属性
问题描述
我对检索 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,但我不知道如何使用它与任意日期进行比较。
解决方案
遗憾的是,您可能无法使用 SPARQL 做到这一点。SPARQL 知道的唯一事情是:
- a) 使用
schema:dateModified
; - b) 声明中声明(或暗示)更新时间的任何具体日期。
对于 b),理论上您可以使用 P813(检索日期信息)。P5017 是“源”的修订日期,而不是声明,并且可以是过去很长时间。
但是,这种方法依赖于存在的那些陈述。大多数参考不使用这些 - Q24 只有一个使用 P813 的参考。也不能保证从那时起该声明就没有被编辑过——你可能会假设没有,但没有办法确定。它们不会自动应用或更新。
参考文献也可能有 P577(出版日期),可用于推断更新数据 - 如果出版日期为 2020-02-01,则声明可能自 2 月初以来已被编辑,因为不太可能有人会引用参考文献与未来的出版日期。但这有点脆弱并且没有惊人的用处,除非它恰好与您的测试日期匹配。
在实践中,我认为您需要解析页面历史记录才能确定给定声明的最后编辑时间。几乎所有索赔编辑的编辑摘要都非常标准化,因此希望在不调查每个单独修订的情况下这应该是实用的,但这也可能需要大量工作......
推荐阅读
- javascript - JS:TypeError:非法调用 document.querySelectorAll
- html - Css 网格总是方形的、响应式的和最大化的
- identityserver4 - .net Core IdentityServer4 和 mariaDB Lggin 更新数据库时用户“root”失败
- woocommerce - 如何在主题 WooCommerce 中获取优惠券详细信息
- wpf - 如何在 WPF DataGrid 的 RowHeader 的“列标题”上获取单击事件
- android - Flutter 连接性:compileDebugJavaWithJavac 错误
- python - 我的 Python 程序中的列表将无法正常工作
- fortran - 如何释放通过 iso_c_binding 调用的函数中分配的内存,然后通过 f2py 传递给 python?
- javascript - 添加元素的多个实例
- keycloak - keycloak-js 初始化失败,因为祖先违反了内容安全策略指令:“frame-ancestors 'self'