我正在使用Jena的SPARQL引擎,并尝试编写一个查询,以便在日期范围内进行过滤,因为我需要找到固定日期之后属性的值。
我的日期属性格式如下:
Fri May 23 10:20:13 IST 2014
我应该如何编写一个SPARQL查询来获取那些日期大于当前属性的其他属性?
如果您的数据采用这种格式,那么如果要筛选它的一段范围,就需要向ARQ添加一个自定义扩展函数(这是面向高级用户的),因为您需要解析和解释日期时间字符串。
相反,您应该将数据转换为标准日期时间格式xsd:dateTime
,所有SPARQL实现都必须支持该格式。有关此格式的详细信息,请参见XML模式第2部分:数据类型规范。
对于您的具体示例日期,应按以下方式进行转换:
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
大于给定日期的记录