在SPARQL中按日期范围筛选

16

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

我的日期属性格式如下:

 Fri May 23 10:20:13 IST 2014 

我应该如何编写一个SPARQL查询来获取那些日期大于当前属性的其他属性?

1个回答

25

如果您的数据采用这种格式,那么如果要筛选它的一段范围,就需要向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 大于给定日期的记录


假设我想在类型为字符串的属性上应用范围过滤器,例如将年龄存储为字符串。那么怎么办? - cooljohny
1
注释是为了澄清特定问题,如果您有单独的问题,则应该直接提问。如果您还没有阅读SPARQL规范中的“表达式和测试值”部分,请先阅读。 - RobV
当我编写上述查询时,它会出现错误:未解析的前缀名称:xsd:dateTime,而当我不指定它时,会出现错误:数据类型格式异常:"2014-06-08T14:26:39+0530"^^xsd:dateTime。我该怎么办? - cooljohny
首先,展示您的确切查询字符串,试图通过猜测进行调试通常是无用的。不过,我的猜测是您在查询中没有包含“PREFIX”声明。 - RobV
格式应为:2014-05-23T10:20:13+05:30,而不是2014-05-23T10:20:13+0530。 - cooljohny
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接