Разница в днях между двумя датами в GraphDB - PullRequest
0 голосов
/ 07 сентября 2018

Мне нужна помощь, чтобы вычислить разницу между двумя датами с помощью SPARQL в Ontotext GraphDB. Я знаю, что протокол 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 голосов
/ 10 октября 2018

Это было решено в 8.7.0 (выпущено 28 сентября):

GDB-2887 Как пользователь GraphDB, мне нужна поддержка операций «+» / «-»между xsd: dateTime и xsd: duration с SPARQL

Теперь ваш запрос должен возвращать "P2DT0H0M0.000S"^^xsd:dateTimeDuration.


В качестве альтернативы можно использовать федеративные запросы к публичным конечным точкам на основе Virtuoso., Blazegraph, Fuseki и т. Д.: * 10101

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) }
}
1015 * Попробуйте FactForge!
...