- From: Roger L. Costello <costello@mitre.org>
- Date: Sun, 15 Jun 2003 07:00:45 -0400
- To: www-rdf-interest@w3.org
- CC: robin.berjon@expway.fr, "Costello,Roger L." <costello@mitre.org>
Hi Folks,
The more that I think about this problem, the more convinced I am that
adding something like a conversionFactor attribute is the right way to
go, e.g.,
<owl:DatatypeProperty rdf:ID="length-in">
<owl:equivalentProperty rdf:resource="#length-cm"
owl-x:conversionFactor="length-in/value() =
length-cm/value() / 2.54"/>
<rdfs:range rdf:resourse="&xsd;decimal"/>
</owl:DatatypeProperty>
Let me explain. Consider the meaning of this:
<owl:DatatypeProperty rdf:ID="a">
<owl:equivalentProperty rdf:resource="#b"/>
</owl:DatatypeProperty>
It says that "a and b represent the same type of thing (they are
equivalent), with a conversionFactor of 'equality'".
That is, implicitly, the definition is stating this:
<owl:DatatypeProperty rdf:ID="a">
<owl:equivalentProperty rdf:resource="#b"
owl-x:conversionFactor="a/value() = b/value()"/>
</owl:DatatypeProperty>
"Given an instance of a and an instance of b, they can be considered
equivalent *provided* the value of 'a' equals the value of 'b'."
Thus,
<owl:DatatypeProperty rdf:ID="length-in">
<owl:equivalentProperty rdf:resource="#length-cm"
owl-x:conversionFactor="length-in/value() =
length-cm/value() / 2.54"/>
<rdfs:range rdf:resourse="&xsd;decimal"/>
</owl:DatatypeProperty>
"Given an instance of length-in and an instance of length-cm, they can
be considered equivalent *provided* the value of length-in equals the
value of length-cm / 2.54"
In other words, a "conversionFactor" is implicit in this definition:
<owl:DatatypeProperty rdf:ID="a">
<owl:equivalentProperty rdf:resource="#b"/>
</owl:DatatypeProperty>
I propose that we make the "conversionFactor" explicit, so that more
sophisticated mathematical relationships can be expressed. Also, I
propose that xPath be leveraged to express the relationships.
Comments? /Roger
P.S. I looked at RuleML and feel that it is not appropriate for this
problem. RuleML gives a way to state inferences. In this problem, I am
not trying to state an inference. I am merely trying to assert
equivalence (by a conversion factor).
"Roger L. Costello" wrote:
>
> 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 Sunday, 15 June 2003 07:02:24 UTC