Thread Links Date Links
Thread Prev Thread Next Thread Index Date Prev Date Next Date Index

SUO: Re: Enhancing Data Interoperability with Ontologies...




Len,

Thanks for bringing that article to our attention:

 > The members of this list may find this article of interest.
 >
 > http://www.xfront.com/interoperability/CanonicalForms.html

But the author takes too narrow a view of ontologies.
The following statement is false in general.  It is only
true of very limited, clumsy notations, such as OWL:

    Ontologies are not able to state relationships between
    entities that are related via a transformation.

As I have said many times before, logic can express such
transformations very simply, and OWL is merely an inadequate
version of logic.  At the end of this note is an excerpt
from that article, which shows the author's suggestion
for using XSLT to define a transformation from polar
coordinates to Cartesian coordinates.  To see how
ridiculous the XSLT notation is, compare it to the
two formulas expressed in Fortran:

    x = r * cos(theta)

    y = r * sin(theta)

In predicate calculus, KIF, or CGs, you could use a function
called times that takes two inputs and generates one output:

    times(r, cos(theta), x)

    times(r, sin(theta), y)

Any of those notations let you define a function that
takes a pair of inputs (r,theta) and generates a pair
of outputs (x,y).

If you prefer to use controlled English, you could write

    x is r times the cosine of theta.

    y is r times the sine of theta.

Tools such as Mathematica let you perform far more complex
feats of mathematical wizardry to solve all kinds of
problems and translate the answers to an executable form
in Fortran or other programming languages.

In the following example, please note the two comments,
enclosed in <!-- ... -->.  I suggest that you adopt
a notation that processes only the comments and throws
away the rest of the garbage.

John Sowa

_______________________________________________________________

Below is an XSLT 2.0 function that converts a Polar Coordinate
to the canonical Cartesian Coordinate form:

<xsl:include href="Length-Include-File.xsl"/>

<xsl:function name="cs:CoordinateSystem" as="element()">
   <xsl:param name="coordinateSystem" as="item()"/>

   <xsl:choose>
     <xsl:when 
test="local-name($coordinateSystem)='Polar-Coordinate-System'">
                 <Cartesian-Coordinate-System 
xmlns="http://www.xfront.com/owl/ontologies/CoordinateSystem/#";>
                     <xsl:variable name="canonical-r-length" 
select="len:Length($coordinateSystem/cs:r/len:Length)"/>
                     <xsl:variable name="canonical-theta-angle" 
select="cs:Angle($coordinateSystem/cs:theta/cs:Angle)"/>
                     <x>
                         <Length 
xmlns="http://www.xfront.com/owl/ontologies/Length/#";>
                             <value>
                                 <!-- x = r cos theta -->
                                 <xsl:value-of 
select="$canonical-r-length/len:value * 
exslt:cos($canonical-theta-angle/cs:value)"/>
                             </value>
                             <units 
rdf:resource="http://www.xfront.com/owl/ontologies/Length/#Meter"/>
                         </Length>
                     </x>
                     <y>
                         <Length 
xmlns="http://www.xfront.com/owl/ontologies/Length/#";>
                             <value>
                                 <!-- y = r sin theta -->
                                 <xsl:value-of 
select="$canonical-r-length/len:value * 
exslt:sin($canonical-theta-angle/cs:value)"/>
                             </value>
                             <units 
rdf:resource="http://www.xfront.com/owl/ontologies/Length/#Meter"/>
                         </Length>
                     </y>
                 </Cartesian-Coordinate-System>
             </xsl:when>
             ...
         </xsl:choose>
     </xsl:function>