Certains moteurs SPARQL peuvent prendre directement en charge l'arithmétique des dates. Par exemple, comme mentionné dans this answers.semanticweb.com question and answer, Jena prend en charge l'arithmétique de date, et vous pouvez soustraire une date d'une autre et obtenir un xsd: Duration. D'autres implémentations peuvent supporter une fonction datediff. Par exemple, this Virtuoso example inclut l'utilisation de bif: datediff. Cependant, il s'agit d'extensions et il n'est pas garanti qu'elles soient présentes dans une implémentation SPARQL particulière.
Pour une solution plus portable, mais peut-être moins efficace, vous pouvez utiliser le year pour extraire les pièces d'une année. Cela vous permet de faire, par exemple,
select ?age where {
bind("1799-12-14"^^<http://www.w3.org/2001/XMLSchema#date> as ?death)
bind("1732-02-22"^^<http://www.w3.org/2001/XMLSchema#date> as ?birth)
bind(year(?death)-year(?birth) as ?age)
}
et obtenir des résultats
-------
| age |
=======
| 67 |
-------
Cela a le potentiel d'être hors d'un, selon les mois et les jours des deux dates, mais vous pouvez de la même contourner ce problème en utilisant les fonctions month et day. This thread décrit certaines de ce type d'implémentation.
Avez-vous demandé cette question plus tôt en tant qu'utilisateur anonyme, puis le supprimer? J'aurais pu jurer que j'ai répondu à une question presque identique plus tôt aujourd'hui. –
@JoshuaTaylor J'ai posé une question, mais cela en faisait partie et pas exactement cette question. Les deux questions sont différentes et je ne l'ai pas supprimé. –
Ok, juste curieux, car il y avait une question sur la soustraction de xsd: dates, et le fait qu'ils produisent une durée, et comment obtenir le nombre d'années à la place. C'est pourquoi j'avais le code SPARQL tout prêt à partir. Juste une coïncidence étrange, peut-être. –