按SPARQL中的日期范围过滤

coo*_*hny 11 datetime rdf sparql jena

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

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

 Fri May 23 10:20:13 IST 2014 
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*obV 20

使用该格式的数据,如果不向ARQ(适用于高级用户)添加自定义扩展功能,则无法对其进行过滤,因为您需要解析和解释日期时间字符串.

您应该做的是将数据转换为xsd:dateTime所有SPARQL实现都需要支持的标准日期时间格式.有关此格式的详细信息,请参阅XML Schema Part 2:Datatypes规范.

您的具体示例日期将转换如下:

2014-05-23T10:20:13+05:30
Run Code Online (Sandbox Code Playgroud)

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 .
Run Code Online (Sandbox Code Playgroud)

然后,您可以编写一个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)
}
Run Code Online (Sandbox Code Playgroud)

这将查找?date在给定日期之后的所有记录