Proposed extensions to OWL?

Hi Folks,

Yesterday I sent out a message asking about technologies to express
mathematical relationships.  Robin Berjon responded with a very
interesting idea.  I would like to get your thoughts on it, and see if
collectively we can come up with something cool.

First I will show you a slightly modified version of Robin's proposal,
then I will show Robin's original proposal.

Robin's Idea Slightly Modified

The idea is to extend OWL and base the solution on xPath.

Suppose that I would like to state that these two properties are
equivalent via a conversion factor:

     length-in, length-cm

i.e., length in inches, and length in centimeters

The conversion factor is: 

    length-in = length-cm / 2.54
    length-cm = length-in * 2.54

With today's OWL here is how you would define these properties:

   <owl:DatatypeProperty rdf:ID="length-in">
      <rdfs:range rdf:resourse="&xsd;decimal"/>
   </owl:DatatypeProperty>

   <owl:DatatypeProperty rdf:ID="length-cm">
      <rdfs:range rdf:resourse="&xsd;decimal"/>
   </owl:DatatypeProperty>

The proposal is to extend OWL to allow you to assert that these two
properties are equivalent by the above conversion factor.  Here's how it
might look:

   <owl:DatatypeProperty rdf:ID="length-in">
      <owl:equivalentProperty rdf:resource="#length-cm"
                        owl-x:conversionFactor="current() * 2.54"/>
      <rdfs:range rdf:resourse="&xsd;decimal"/>
   </owl:DatatypeProperty>

   <owl:DatatypeProperty rdf:ID="length-cm">
      <owl:equivalentProperty rdf:resource="#length-in"
                        owl-x:conversionFactor="current() / 2.54"/>
      <rdfs:range rdf:resourse="&xsd;decimal"/>
   </owl:DatatypeProperty>

where:
   owl-x is an OWL eXtension namespace,
   current() is the xPath function referring to the current node.

Now let me show you Robin's idea:

Robin's idea is also to base the solution on xPath. Here's what Robin
said:

"For instance:

<foo:PropertyEquivalence from='measure:inch'
                          to='measure:cm'
                          convert='$in_1 * 2.54'/>

<foo:PropertyEquivalence from='measure:cm'
                          to='measure:in'
                          convert='$in_1 div 2.54'/>

would allow you to declare that the following are equivalent:

<geo:Distance>
   <measure:inch>2</measure:inch>
</geo:Distance>

<geo:Distance>
   <measure:cm>5.08</measure:cm>
</geo:Distance>

You could allow for multiple inputs to your binding:

<foo:PropertyEquivalence
                  from='size:width/measure:meter
size:length/measure:meter'
                  to='size:surface/measure:squareMeter'
                  convert='$in_1 * $in_2'/>

and perhaps equivalentize, depending on whether it makes sense in that
context:

<flat:Bedroom>
   <size:width><measure:meter>4</measure:meter></size:width>
   <size:length><measure:meter>5</measure:meter></size:length>
</flat:Bedroom>

<flat:Bedroom>
   <size:surface>
     <measure:squareMeter>20</measure:squareMeter>
   </size:surface>
</flat:Bedroom>

so that given the first you could still query for flat:Bedrooms that
are larger than 20sqm.

You may need to throw in stuff from EXSLT Math if you want more than
XPath provides."

....

Okay, those are the two ideas thus far.  What do you think?  Feel free
to add your own ideas.  If this whole approach is bad, feel free to say
so. The intent here is to brainstorm.  If these conversion rules are
better stated using another technology (e.g., RuleML) please say so. 
/Roger

Received on Saturday, 14 June 2003 07:21:44 UTC