我正在使用Jena的SPARQL引擎并尝试编写查询来过滤日期范围,因为我需要在固定日期之后找到属性的值。
我的日期属性采用以下格式:
Fri May 23 10:20:13 IST 2014
如何编写SPARQL查询以获取日期大于此的其他属性?
答案 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
在给定日期之后的所有记录