我正在尝试对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
格式存储了该属性。
答案 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 )
}