ARQ has it's own evaluation engine. Currently, it needs code changes to
extend it. It covers most of XSD already.
notes/typed-literals.html does not describe comparison, only value-equality.
Use SPARQL custom functions.
ORDER BY my:orderingFunction(?temperature)
where my:orderingFunction returns the value as a number in on the, say,
Kelvin scale.
Andy
On 15/12/11 15:37, Paolo Castagna wrote:
Hi,
I tried to create a custom datatype with Jena and use if from a SPARQL query.
For example, I used temperatures in °C or °F. The complete example is here [1].
I found the documentation here quite useful:
- Typed literals how-to
http://incubator.apache.org/jena/documentation/notes/typed-literals.html
and I looked at the RomanNumeralDatatype [2] implementation in ARQ.
I created a TemperatureCelsius and TemperatureFahrenheit which extend
BaseDatatype.
I'd like to be able to automatically compare or sort temperatures from my SPARQL
queries. For example, with a query like this:
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT * WHERE {
?s rdf:value ?temperature .
}
ORDER BY ?temperature
Currently I get:
( ?temperature = "15"^^<http://jena.apache.org/datatypes/temperature/celsius> ) ( ?s
=<x2> ) -> [Root]
( ?temperature = "25"^^<http://jena.apache.org/datatypes/temperature/celsius> ) ( ?s
=<x1> ) -> [Root]
( ?temperature = "25"^^<http://jena.apache.org/datatypes/temperature/fahrenheit> ) ( ?s
=<x3> ) -> [Root]
But, 25 °F = -3.89 °C, therefore 25 °F should be the first on the list.
Is there a way I can automatically apply the necessary conversions and ensure
that
the ORDER BY sorts temperatures correctly?
An alternative is to not use custom datatypes and simply have something like
this:
:x :temperature [
rdf:value "25.0" ;
:unit :Celsius ;
]
A similar question is answered on http://answers.semanticweb.com/ [3], I wanted
to try the custom datatype approach anyway... and probably it's not a good idea.
What do you recommend in order to model unit of measurements and conversions
between those, making sure people can use SPARQL and/or inference to work with
their data?
I found these vocabularies/ontologies:
- http://www.w3.org/2007/ont/unit
- http://qudt.org/vocab/unit#
- ...
Do you have other vocabularies/ontologies to suggest?
Thanks,
Paolo
[1]
https://github.com/castagna/jena-examples/blob/master/src/main/java/org/apache/jena/examples/ExampleDT_01.java
[2]
https://svn.apache.org/repos/asf/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/RomanNumeralDatatype.java
[3] http://answers.semanticweb.com/questions/3572/xsd-or-vocabulary