SPARQL筛选器xsd:Date失败
我有以下SPARQL查询SPARQL筛选器xsd:Date失败,sparql,ontology,Sparql,Ontology,我有以下SPARQL查询 PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT DISTINCT ?d WHERE { GRAPH <https:/my/triples>{ ?s <http://my/ontology/v1.0#hasTimestamp> ?d . FILTER(?d > "1945-01-01"^^xsd:date) } }
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT DISTINCT ?d
WHERE { GRAPH <https:/my/triples>{
?s <http://my/ontology/v1.0#hasTimestamp> ?d .
FILTER(?d > "1945-01-01"^^xsd:date)
}
}
有什么问题吗?我尝试了评论中的所有建议,但无法使其正常工作 我偶然发现了一篇2011年的帖子(!!),它部分地给了我解决方案。 这篇文章是这样写的,它指出下面的解决方案(又名“严格化”日期)只适用于平等
FILTER(str(?d) >= "2018") .
并将其转换为xsd:dateTime进行比较
在我的例子中,第一个解决方案用于比较(包括相等),而cast失败得很惨。我尝试了评论中的所有建议,但无法使其正常工作 我偶然发现了一篇2011年的帖子(!!),它部分地给了我解决方案。 这篇文章是这样写的,它指出下面的解决方案(又名“严格化”日期)只适用于平等
FILTER(str(?d) >= "2018") .
并将其转换为xsd:dateTime进行比较
在我的例子中,第一个解决方案用于比较(包括相等),而强制转换失败得很惨。在这里看不到
xsd:date
。尝试在查询中将?d
强制转换为xsd:dateTime
,并与“1945-01-01T00:00:00”进行比较^^xsd:dateTime
。你的三重表是什么?@StanislavKralin三重表是议会。我试着用这样的方式设置dateTime:FILTER(xsd:dateTime(?.d)>“1945-01-16T00:00:00Z”^^xsd:dateTime)但是在2.7.13中,您的查询对我来说仍然很好。确实,与其他SPARQL引擎进行比较对我来说也很好,即使使用不同的类型:select*where{VALUES(?d?dt){(“2019-11-28”^^xsd:date“1945-01-01T00:00:00”^^xsd:dateTime)}FILTER(?d>“1945-01-01”^^xsd:date}
在没有过滤器的结果中,它显示:“数据类型”:“xsd:date”
——在JSON语法中,数据类型是一个完整的URI“”,表明数据包含一个URI
(不是前缀名)。在这里看不到xsd:date
。请尝试在查询中将?d
转换为xsd:dateTime
,并与1945-01-01T00:00:00进行比较“^^xsd:dateTime
。你的三重唱是什么?@StanislavKralin三重唱是议会。我试图用这样的方式来播放dateTime:FILTER(xsd:dateTime(?d)>'1945-01-16T00:00:00Z'^^xsd:dateTime)但是在2.7.13中,您的查询对我来说仍然很好。确实,与其他SPARQL引擎进行比较对我来说也很好,即使使用不同的类型:select*where{VALUES(?d?dt){(“2019-11-28”^^xsd:date“1945-01-01T00:00:00”^^xsd:dateTime)}FILTER(?d>“1945-01-01”^^xsd:date}
在没有过滤器的结果中,它显示:“数据类型”:“xsd:date”
——在JSON语法中,数据类型是一个完整的URI“”,表示数据包含一个URI
(不是前缀名)。