【发布时间】:2014-06-05 04:03:14
【问题描述】:
我正在使用 Jena 的 SPARQL 引擎并尝试编写查询来过滤日期范围,因为我需要在固定日期之后查找属性的值。
我的日期属性格式如下:
Fri May 23 10:20:13 IST 2014
如何编写 SPARQL 查询以获取日期大于此日期的其他属性?
【问题讨论】:
我正在使用 Jena 的 SPARQL 引擎并尝试编写查询来过滤日期范围,因为我需要在固定日期之后查找属性的值。
我的日期属性格式如下:
Fri May 23 10:20:13 IST 2014
如何编写 SPARQL 查询以获取日期大于此日期的其他属性?
【问题讨论】:
如果您的数据采用该格式,则您无法在不向 ARQ(面向高级用户)添加自定义 extension function 的情况下对其范围进行过滤,因为您需要解析和解释日期时间字符串。
您应该做的是将数据转换为标准日期时间格式xsd:dateTime,所有 SPARQL 实现都必须支持该格式。有关此格式的详细信息,请参阅XML Schema Part 2: Datatypes 规范。
您的具体示例日期将翻译如下:
2014-05-23T10:20:13+05:30
当你在数据和查询中使用它时,你必须确保将它声明为xsd:dateTime 类型的类型化文字。例如在可读的Turtle RDF 语法中:
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix : <http://example.org> .
:subject :date "2014-05-23T10:20:13+05:30"^^xsd:dateTime .
然后您可以编写一个按日期范围过滤的 SPARQL 查询,如下所示:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX : <http://example.org>
SELECT *
WHERE
{
?s :date ?date .
FILTER (?date > "2014-05-23T10:20:13+05:30"^^xsd:dateTime)
}
这将查找?date 在给定日期之后的所有记录
【讨论】:
PREFIX 声明