RE: Legal Persons

John,
	I'm not sure what the reasoner would do with the <rdf:Alt>, but
the generally-accepted way to do this would be something like:

<owl:ObjectProperty rdf:about="#Parent">
   <rdfs:range>
      <owl:Class>
         <owl:unionOf rdf:parseType="Collection">
            <owl:Class rdf:about="#Human"/>
            <owl:Class rdf:about="#Corporation"/>
         </owl:unionOf>
      </owl:Class>
   </rdfs:range>
</owl:ObjectProperty>

	Regarding the rest of your example, other than the
<owl:ObjectProperty> not belonging just inside of the <owl:Class>, I
think you'll find that a Human with more than one Parent will be
considered inconsistent due to Human "inheriting" the 1-Parent
restriction from LegalPerson.

-Brandon :)

-----Original Message-----
From: public-owl-dev-request@w3.org
[mailto:public-owl-dev-request@w3.org] On Behalf Of John McClure
Sent: Friday, August 24, 2007 3:05 PM
To: Owl Dev
Subject: Legal Persons


A Person in US legal contexts is either a Human or a Corporation; every
Human is
a Person, and every Corporation is a Person.

Is the following construct valid? Will or should reasoners be troubled
by
<rdf:Alt> within a <rdfs:range>, and can or should <rdf:Alt> be used
within an
<owl:Restriction>?

<owl:Class rdf:about="#LegalPerson">
     <owl:ObjectProperty rdf:about='#Parent'>
        <rdfs:range>
	  <rdf:Alt>
	       <li><owl:Class rdf:about="#Human"/></li>
	       <li><owl:Class rdf:about="#Corporation"/></li>
	  </rdf:Alt>
        </rdfs:range>
     </owl:ObjectProperty>
     <owl:subClassOf>
          <owl:Restriction>
             <owl:onProperty rdf:resource="#Parent"/>
             <owl:maxCardinality rdf:value='1'/>
          </owl:Restriction>
     </owl:subClassOf>
</owl:Class>
<owl:Class rdf:about="#Human">
     <owl:subClassOf rdf:resource="#LegalPerson"/>
     <owl:subClassOf>
          <owl:Restriction>
             <owl:onProperty rdf:resource="#Parent"/>
             <owl:allValuesFrom rdf:about="#Human"/>
          </owl:Restriction>
     </owl:subClassOf>
     <owl:subClassOf>
          <owl:Restriction>
             <owl:onProperty rdf:resource="#Parent"/>
             <owl:maxCardinality rdf:value='2'/>
          </owl:Restriction>
     </owl:subClassOf>
</owl:Class>
<owl:Class rdf:about="#Corporation">
     <owl:subClassOf rdf:resource="#LegalPerson"/>
     <owl:subClassOf>
          <owl:Restriction>
             <owl:onProperty rdf:resource="#Parent"/>
             <owl:allValuesFrom rdf:about="#Corporation"/>
          </owl:Restriction>
     </owl:subClassOf>
     <owl:subClassOf>
          <owl:Restriction>
             <owl:onProperty rdf:resource="#Parent"/>
             <owl:maxCardinality rdf:value='1'/>
          </owl:Restriction>
     </owl:subClassOf>
</owl:Class>

I haven't found examples of this sort in the docs. I understand that an
<rdfs:range> is nothing more than
     <!-- alternative specification for rdfs:range-->
     <owl:subClassOf>
          <owl:Restriction>
             <owl:onProperty rdf:resource="#Parent"/>
             <owl:allValuesFrom>
	  <rdf:Alt>
	       <li><owl:Class rdf:about="#Human"/></li>
	       <li><owl:Class rdf:about="#Corporation"/></li>
	  </rdf:Alt>
             </owl:allValuesFrom>
          </owl:Restriction>
       </owl:subClassOf>

Maybe there is a better way to model this? Maybe I should be asking this
in
another forum? Thanks for any comments,
John McClure

Received on Friday, 24 August 2007 19:33:07 UTC