2014-06-05 195 views
6

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

我的日期属性是按以下格式:

Fri May 23 10:20:13 IST 2014 

我怎样写一个SPARQL查询来获取比这更高的其他属性的日期?

回答

13

由于您需要解析和解释日期时间字符串,所以使用该格式的数据无法在ARQ的某个范围上过滤,因为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是给定的日期之后

+0

并假设我只想将范围应用于字符串类型为string的属性的过滤器中。然后? – cooljohny

+1

评论是澄清具体问题,如果你有一个单独的问题,那么你应该这样问。如果还没有,请阅读SPARQL规范中的[Expressions and Testing Values](http://www.w3.org/TR/sparql11-query/#expressions) – RobV

+0

当我编写上述查询时,它会给出错误:Unresolved前缀名称:xsd:dateTime,当我不指定它再给出错误:数据类型格式异常:“2014-06-08T14:26:39 + 0530”^^ xsd:dateTime。我该怎么办? – cooljohny