6
我正在使用Jena的SPARQL引擎并试图编写查询以过滤日期范围,因为我需要在固定日期后查找属性的值。在SPARQL中按日期范围过滤
我的日期属性是按以下格式:
Fri May 23 10:20:13 IST 2014
我怎样写一个SPARQL查询来获取比这更高的其他属性的日期?
我正在使用Jena的SPARQL引擎并试图编写查询以过滤日期范围,因为我需要在固定日期后查找属性的值。在SPARQL中按日期范围过滤
我的日期属性是按以下格式:
Fri May 23 10:20:13 IST 2014
我怎样写一个SPARQL查询来获取比这更高的其他属性的日期?
由于您需要解析和解释日期时间字符串,所以使用该格式的数据无法在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
是给定的日期之后
并假设我只想将范围应用于字符串类型为string的属性的过滤器中。然后? – cooljohny
评论是澄清具体问题,如果你有一个单独的问题,那么你应该这样问。如果还没有,请阅读SPARQL规范中的[Expressions and Testing Values](http://www.w3.org/TR/sparql11-query/#expressions) – RobV
当我编写上述查询时,它会给出错误:Unresolved前缀名称:xsd:dateTime,当我不指定它再给出错误:数据类型格式异常:“2014-06-08T14:26:39 + 0530”^^ xsd:dateTime。我该怎么办? – cooljohny