使用Jena的SPARQL查询中xsd:dateTime的数据类型格式异常?

时间:2014-06-11 15:11:57

标签: java xsd rdf sparql jena

我正在尝试对RDF的属性应用范围查询,该属性为xsd:dateTime格式。这是我的问题:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
SELECT ?x WHERE { ?y <DATE:> ?x . 
FILTER(?x>"2014-06-05T10:10:10+0530"^^xsd:dateTime) }

它会发出警告而不会产生任何结果:

WARN [main] (Log.java:78) - Datatype format exception: "2014-06-11T12:44:22+0530"^^xsd:dateTime

我不明白这是什么问题?我只以xsd:dateTime格式存储了该属性。

1 个答案:

答案 0 :(得分:2)

  

我只以xsd:dateTime格式存储了该属性。

简单的答案是,不,您有 将值存储为xsd:dateTime。标准xsd:dateTime说:

  

dateTime的词汇空间由有限长度的序列组成   表格中的字符:'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?

您的dateTime的一部分与之匹配,即2014-06-05T10:10:10。然而,

  

zzzzzz(如果存在)代表时区(如下所述)。

当我们看下面时,我们看到了

  

时区的词汇表示形式为以下形式的字符串:   (('+' | '-') hh ':' mm) | 'Z',其中

     
      
  • hh是一个两位数字(根据需要带前导零)表示小时数,
  •   
  • mm是一个两位数字,表示分钟,
  •   
  • '+'表示非负时长,
  •   
  • '-'表示持续时间非正确。
  •   

您的时区与此不符。我想你可能意味着+05:30。因此应该

"2014-06-05T10:10:10+05:30"^^xsd:dateTime

果然,如果我们使用Jena的命令行工具qparse

$ qparse --query query.rq # the original query, warnigns
14:12:22 WARN  NodeValue            :: Datatype format exception: "2014-06-05T10:10:10+0530"^^xsd:dateTime
14:12:22 WARN  NodeValue            :: Datatype format exception: "2014-06-05T10:10:10+0530"^^xsd:dateTime
14:12:22 WARN  NodeValue            :: Datatype format exception: "2014-06-05T10:10:10+0530"^^xsd:dateTime
PREFIX  xsd:  <http://www.w3.org/2001/XMLSchema#>

SELECT  ?x
WHERE
  { ?y <DATE:> ?x
    FILTER ( ?x > "2014-06-05T10:10:10+0530"^^xsd:dateTime )
  }
$ qparse --query query.rq # the updated query, no warnings
PREFIX  xsd:  <http://www.w3.org/2001/XMLSchema#>

SELECT  ?x
WHERE
  { ?y <DATE:> ?x
    FILTER ( ?x > "2014-06-05T10:10:10+05:30"^^xsd:dateTime )
  }