Rdf 如何在SPARQL中验证datetime对象?(Virtuoso 22007错误DT006)

Rdf 如何在SPARQL中验证datetime对象?(Virtuoso 22007错误DT006),rdf,sparql,freebase,dbpedia,virtuoso,Rdf,Sparql,Freebase,Dbpedia,Virtuoso,我得到以下错误 Virtuoso 22007 Error DT006: Cannot convert -0359 to datetime : Incorrect month field length SPARQL query: define sql:big-data-const 0 #output-format:text/html define sql:signal-void-variables 1 select ?item bif:year(xsd:dateTime( str(?dob)

我得到以下错误

Virtuoso 22007 Error DT006: Cannot convert -0359 to datetime : Incorrect month field length

SPARQL query:
define sql:big-data-const 0 
#output-format:text/html
define sql:signal-void-variables 1 select ?item  bif:year(xsd:dateTime( str(?dob))) as ?m{
?item <h://f.cm/ns/common/topic/notable_types> <h://f.cm/ns/people/person> .
?item <h://f.cm/ns/people/person/date_of_birth> ?dob 
} limit 675
如果我把限制改为674,它就行了

我怀疑某个datetime字段在某个地方出错并打印了?dob,这表明其中一个值是-0359

解决方案是在应用bif函数之前验证该值


但是,我们如何在SPARQL中验证datetime呢?

好吧,我通过谷歌发现了这个问题,因为我也遇到了同样的问题。在别处寻求帮助时,我找到了以下解决方案:

SELECT * {

  ?s ?p ?o

  FILTER ( datatype(?o) = xsd:datetime )
  FILTER ( coalesce(xsd:datetime(str(?o)), '!') != '!')

}
这对我有用


请注意,我在中找到了答案。

这里没有相同的方法。同样,使用:FILTER regexstr?o'^[0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]“FILTER xsd:datetime?o>”+minBirthDate+“^^xsd:datetime”也没有什么好运气。什么是联合。。。在上面的查询中,Coalesce的作用正如其名称所示:它将?o转换为带有感叹号的日期时间的结果连接起来。如果结果只是一个感叹号,那么这意味着datetime为空,因此,?o不是有效的datetime。由于我们过滤的结果不合并为“!”,我们过滤确实是有效日期时间的值。这让你更清楚了吗?@TextGeek。。。有点晚了,但是你的minBirthDate真的有xsd:datetime还是像我的一样只有xsd:date:FILTER数据类型?sdate=xsd:date FILTER合并xsd:datestr?sdate'!'='!'@理查德:对不起,过了这么久我想不起来了;我可能只是从我的代码中复制并粘贴了它,所以它将如图所示…: