Hi Andy,
thanks for the quick reply.

Andy Seaborne wrote:
> ARQ has it's own evaluation engine.  Currently, it needs code changes to
> extend it.  It covers most of XSD already.

I had a look into NodeValue.java [1], would it be possible to do something
along these lines?

Index: src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java
===================================================================
--- src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java    (revision 
1214849)
+++ src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java    (working copy)
@@ -1036,6 +1036,14 @@
                 boolean b = ((Boolean)lit.getValue()).booleanValue() ;
                 return new NodeValueBoolean(b, node) ;
             }
+
+
+            Object clazz = lit.getDatatype().getJavaClass();
+            if ( clazz.getClass().isInstance(Double.class) )
+            {
+                double d = ((Number)lit.getValue()).doubleValue() ;
+                return new NodeValueDouble(d, node) ;
+            }

             // If wired into the TypeMapper via 
RomanNumeralDatatype.enableAsFirstClassDatatype
 //            if ( RomanNumeralDatatype.get().isValidLiteral(lit) )


 [1] 
https://svn.apache.org/repos/asf/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java

>
> 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.

Ack, I'll follow this advice.

Thanks,
Paolo

> 
>     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
> 

Reply via email to