按SPARQL中的日期范围过滤

时间:2014-06-05 04:03:15

标签: datetime rdf sparql jena

我正在使用Jena的SPARQL引擎并尝试编写查询来过滤日期范围,因为我需要在固定日期之后找到属性的值。

我的日期属性采用以下格式:

 Fri May 23 10:20:13 IST 2014 

如何编写SPARQL查询以获取日期大于此的其他属性?

1 个答案:

答案 0 :(得分:18)

使用该格式的数据,您无法在其范围内进行过滤,而无需向ARQ(适用于高级用户)添加自定义extension function,因为您需要解析和解释日期时间字符串。

您应该做的是将数据转换为所有SPARQL实现都需要支持的标准日期时间格式xsd:dateTime。有关此格式的详细信息,请参阅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在给定日期之后的所有记录