GraphDB中两个日期之间的天数差异

时间:2018-09-07 12:02:14

标签: sparql graphdb

我需要一些帮助来计算Ontotext GraphDB中使用SPARQL的两个日期之间的差异。我知道SPARQL协议不支持按日期进行算术运算,但是某些SPARQL引擎支持它。

仅以Fuseki为例,我可以做到。

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT ?duration
WHERE {
  BIND (("2011-02-04T14:45:13.815-05:00"^^xsd:dateTime - "2011-02- 
  02T14:45:13.815-05:00"^^xsd:dateTime) AS ?duration)
}

结果是持续时间:"P2DT0H0M0.000S"^^xsd:duration。然后我可以获得2天的差异,或者Virtuoso提供了内置函数bif:datediff

我的问题是,在GraphDB上是否有类似的东西可以解决这个简单的问题,而又不需要很大的解决方法。

谢谢。

1 个答案:

答案 0 :(得分:0)

该问题在8.7.0(9月28日发布)中得到解决:

  

GDB-2887作为GraphDB用户,我需要使用SPARQL支持xsd:dateTime和xsd:duration之间的“ +” /“-”操作

现在,您的查询应该返回"P2DT0H0M0.000S"^^xsd:dateTimeDuration


或者,可以使用基于Virtuoso,Blazegraph,Fuseki等的联合查询到公共端点:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX bif: <bif:>
SELECT ?duration1 ?duration2 ?duration3 ?duration4 { 
    VALUES (?start ?end)
        {("2011-02-02T14:45:14"^^xsd:dateTime "2011-02-04T14:45:13"^^xsd:dateTime)}
    SERVICE <http://dbpedia.org/sparql>           #-- Virtuoso
        { BIND ((?end - ?start)/86400.0 AS ?duration1) }
    SERVICE <http://dbpedia.org/sparql>           #-- Virtuoso
        { BIND (bif:datediff("day", ?start, ?end) AS ?duration2) }
    SERVICE <https://query.wikidata.org/sparql>   #-- Blazegraph
        { BIND ((?end - ?start) AS ?duration3) }
    SERVICE <http://zbw.eu/beta/sparql/stw/query> #-- Fuseki
        { BIND (day(?end - ?start) AS ?duration4) }
}

Try on FactForge!