RE: Proposed response to Hugh WInkler - allDisjoint

Mike Smith wrote:
>I did try to write a description of the test case.  It seemed to be 
>getting too long, so I backed off.  Perhaps it could be explained 
>by example:
>
>--------------------------------------------------
>When n is large, alternate approaches can be used to avoid exponential
>assertion explosion.  One such method is illustrated in the OWL test
>suite.
>
>The illustrated method works as follows.  Given the following:
>
>- The class Reptile is a subclass of things with exactly one
>  family-name.
>
>- The class Amphibian is a subclass of Reptile whose members have
>  family-name 'Amphisbaenidae'.
>
>- The class Crocodilian is a subclass of Reptile whose members have
>  family-name 'Crocodylidae'.
>
>Any member of the class Amphibian cannot also be a member
>of the class Crocodialian since their literal family-names are not
>equal.  By repeating the family-name assertion for each subclass of
>Reptile, where each class uses a distinct literal name, we can ensure
>that all the subclasses of Reptile are disjoint using only order n 
>assertions.
>--------------------------------------------------
>
>Any help appreciated.


I have a few of suggestions.  
1) Add a bit more about "what you want" before describing how to model it.
2) Have at least three disjoint subtypes in the example.
3) Add a note about reusing class names as discriminator values.
Doing this might lead to following slightly modified version of Mike's
text.

--------------------------------------------------
When n is large, alternate approaches can be used to avoid exponential
assertion explosion.  One such method is illustrated in the OWL test
suite.

The illustrated method works as follows.  Given a number of subclasses of 
Reptile such as Amphibian, Crocodilian, and Gecko which are disjoint, one 
can define the following:

- The class Reptile is a subclass of things with exactly one
  family-name.

- The class Amphibian is a subclass of Reptile whose members have
  family-name 'Amphisbaenidae'.

- The class Crocodilian is a subclass of Reptile whose members have
  family-name 'Crocodylidae'.

- The class Gecko is a subclass of Reptile whose members have
  family-name 'Gekkonidae'.

Any member of the class Amphibian cannot also be a member of the class 
Crocodialian or Gecko since their literal family-names are not equal.  By 
repeating the family-name assertion for each subclass of Reptile, where 
each class uses a distinct literal name, we can ensure that all the 
subclasses of Reptile are disjoint using only order n assertions.  

Note that their is no reason why subclass names cannot have simply been
reused as the values for the family-name property, thus this approach is
easily automated.
--------------------------------------------------

Before peeking at the test case, I also produced the following from Mike's 
description and the examples in the Guide.

<owl:Class rdf:ID="Reptile">
  <rdfs:subClassOf>
    <owl:Restriction>
      <owl:onProperty rdf:resource="#family-name"/>
      <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality>
    </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>  

<owl:DatatypeProperty rdf:ID="family-name">
  <rdf:domain rdf:resource="#Reptile"/>
  <rdf:range  rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>

<owl:Class rdf:ID="Amphibian">
  <rdfs:subClassOf rdf:resource="#Reptile"/>	   
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#family-name"/>
	<owl:hasValue rdf:datatype="&xsd;string">Amphisbaenidae</owl:hasValue>
     </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>

<owl:Class rdf:ID="Crocodilian">
  <rdfs:subClassOf rdf:resource="#Reptile"/>	   
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#family-name"/>
	<owl:hasValue rdf:datatype="&xsd;string">Crocodylidae</owl:hasValue>
     </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>

Couldn't find many string literal examples, obviously.

-Evan

Received on Tuesday, 28 October 2003 16:12:43 UTC