<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
   <!ENTITY pso    "http://pervasive.semanticweb.org/ont/2004/01/">
   <!ENTITY rdf    "http://www.w3.org/1999/02/22-rdf-syntax-ns#">
   <!ENTITY rdfs   "http://www.w3.org/2000/01/rdf-schema#">
   <!ENTITY xsd    "http://www.w3.org/2001/XMLSchema#"> 
   <!ENTITY owl    "http://www.w3.org/2002/07/owl#"> 
   <!ENTITY per    "http://pervasive.semanticweb.org/ont/2004/01/person#">
   ]>
<!--
    This ontology document is licensed under the Creative Commons
    Attribution License. To view a copy of this license, visit 
    http://creativecommons.org/licenses/by/1.0/ or send a letter to
    Creative Commons, 559 Nathan Abbott Way, Stanford, California
    94305, USA. 
-->
<rdf:RDF
   xmlns:rdf  = "&rdf;"
   xmlns:rdfs = "&rdfs;"
   xmlns:owl  = "&owl;"
   xmlns:xsd  = "&xsd;"
   xmlns      = "&per;"
   xml:base   = "http://pervasive.semanticweb.org/ont/2004/01/person">

  <owl:Ontology rdf:about="&pso;person">
    <owl:versionInfo>cvs:$Revision: 1.3 $, $Date: 2004/01/30 22:39:49 $</owl:versionInfo>
    <rdfs:label>PERVASIVE-SO Person Ontology</rdfs:label>
    <rdfs:comment></rdfs:comment>     
  </owl:Ontology>
  
  <owl:Class rdf:ID="Person">
    <rdfs:label>Person</rdfs:label>
    <rdfs:comment>An individual of this class is either a man, a woman or a child</rdfs:comment>
    
    <rdfs:subClassOf>
      <owl:Restriction>
	<owl:onProperty rdf:resource="#lastName"/>
	<owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality>
      </owl:Restriction>
    </rdfs:subClassOf>

    <rdfs:subClassOf>
      <owl:Restriction>
	<owl:onProperty rdf:resource="#gender"/>
	<owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality>
      </owl:Restriction>
    </rdfs:subClassOf>

    <rdfs:subClassOf>
      <owl:Restriction>
	<owl:onProperty rdf:resource="#birthDate"/>
	<owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality>
      </owl:Restriction>
    </rdfs:subClassOf>

  </owl:Class>
   
  <owl:DatatypeProperty rdf:ID="firstName">
    <rdfs:label>firstName</rdfs:label>
    <rdfs:comment>The first name of a person</rdfs:comment>
    <rdfs:domain rdf:resource="#Person"/>
    <rdfs:range rdf:resource="&xsd;string"/>
  </owl:DatatypeProperty>

  <owl:DatatypeProperty rdf:ID="middleName">
    <rdfs:label>middleName</rdfs:label>
    <rdfs:comment>The middle name of a person</rdfs:comment>
    <rdfs:domain rdf:resource="#Person"/>
    <rdfs:range rdf:resource="&xsd;string"/>
  </owl:DatatypeProperty>

  <owl:DatatypeProperty rdf:ID="lastName">
    <rdfs:label>lastName</rdfs:label>
    <rdfs:comment>The last name of a person</rdfs:comment>
    <rdfs:domain rdf:resource="#Person"/>
    <rdfs:range rdf:resource="&xsd;string"/>

    <rdf:type rdf:resource="&owl;FunctionalProperty" />
  </owl:DatatypeProperty>

  <owl:DatatypeProperty rdf:ID="givenName">
    <rdfs:label>givenName</rdfs:label>
    <rdfs:comment>The given name of a person (equivalent to first name)</rdfs:comment>
    <owl:equivalentProperty rdf:resource="#firstName"/>
  </owl:DatatypeProperty>

  <owl:DatatypeProperty rdf:ID="familyName">
    <rdfs:label>familyName</rdfs:label>
    <rdfs:comment>The family name of a person (equivalent to last name)</rdfs:comment>
    <owl:equivalentProperty rdf:resource="#lastName"/>
  </owl:DatatypeProperty>

  <owl:Class rdf:ID="Gender">
    <rdfs:label>Gender</rdfs:label>
    <rdfs:comment>An enumerated class that consists of two individuals, male and female.</rdfs:comment>
    <owl:oneOf rdf:parseType="Collection">
      <Gender rdf:about="#Male"/>
      <Gender rdf:about="#Female"/>
    </owl:oneOf>
  </owl:Class>

  <owl:ObjectProperty rdf:ID="gender">
    <rdfs:label>gender</rdfs:label>
    <rdfs:comment>The gender of a person</rdfs:comment>
    <rdfs:domain rdf:resource="#Person"/>
    <rdfs:range rdf:resource="#Gender"/>

    <rdf:type rdf:resource="&owl;FunctionalProperty" />
  </owl:ObjectProperty>

  <owl:DatatypeProperty rdf:ID="birthDate">
    <rdfs:label>birthDate</rdfs:label>
    <rdfs:comment>The birth date of a person</rdfs:comment>
    <rdfs:domain rdf:resource="#Person"/>
    <rdfs:range rdf:resource="&xsd;date"/>

    <rdf:type rdf:resource="&owl;FunctionalProperty" />
  </owl:DatatypeProperty>
    
  <owl:DatatypeProperty rdf:ID="nickname">
    <rdfs:label>nickname</rdfs:label>
    <rdfs:comment>The nickname or alias name of a person</rdfs:comment>
    <rdfs:domain rdf:resource="#Person"/>
    <rdfs:range rdf:resource="&xsd;string"/>
  </owl:DatatypeProperty>

  <owl:ObjectProperty rdf:ID="homepage">
    <rdfs:label>homepage</rdfs:label>
    <rdfs:comment>The homepage URL of a person</rdfs:comment>
    <rdfs:domain rdf:resource="#Person"/>
    <rdfs:range rdf:resource="#Homepage"/>
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="hasContact">
    <rdfs:label>hasContact</rdfs:label>
    <rdfs:comment>Information for contacting a person. It does not distinguish the specific type of contact information that is being described.</rdfs:comment>
    <rdfs:domain rdf:resource="#Person"/>
    <rdfs:range rdf:resource="#ContactProfile"/>
    
    <rdf:type rdf:resource="&owl;InverseFunctionalProperty"/>
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="hasHomeContact">
    <rdfs:label>hasHomeContact</rdfs:label>
    <rdfs:comment>Information for contacting a person at home. If a person has this property defined, then it implies that this person has a home.</rdfs:comment>    
    <rdfs:subPropertyOf rdf:resource="#hasContact"/>
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="hasWorkContact">
    <rdfs:label>hasHomeContact</rdfs:label>
    <rdfs:comment>Information for contacting a person at work. If a person has this property defined, then it implies that this person has a job.</rdfs:comment>
    <rdfs:subPropertyOf rdf:resource="#hasContact"/>
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="hasSchoolContact">
    <rdfs:label>hasHomeContact</rdfs:label>
    <rdfs:comment>Information for contacting a person at school. If a person has this property defined, then it implies that this person goes to school.</rdfs:comment>
    <rdfs:subPropertyOf rdf:resource="#hasContact"/>
  </owl:ObjectProperty>

  <owl:Class rdf:ID="ContactProfile">
    <rdfs:label>ContactProfile</rdfs:label>
    <rdfs:comment>An individual of this class is a description of some contact information of a person. This may include phone numbers, email addresses, fax numbers, etc.</rdfs:comment>
  </owl:Class>
  
  <owl:DatatypeProperty rdf:ID="address">
    <rdfs:label>Address</rdfs:label>
    <rdfs:comment>The address at which a person can be contacted. By combining the ame and the address information usually forms a snail mailing address for contacting a person.</rdfs:comment>
    <rdfs:domain rdf:resource="#ContactProfile"/>
    <rdfs:range rdf:resource="&xsd;string"/>
  </owl:DatatypeProperty>

  <owl:DatatypeProperty rdf:ID="phone">
    <rdfs:label>phone</rdfs:label>
    <rdfs:comment>The phone number to contact a person.</rdfs:comment>
    <rdfs:domain rdf:resource="#ContactProfile"/>
    <rdfs:range rdf:resource="&xsd;string"/>
  </owl:DatatypeProperty>

  <owl:DatatypeProperty rdf:ID="fax">
    <rdfs:label>fax</rdfs:label>
    <rdfs:comment>The fax number for sending fax messages to a person.</rdfs:comment>
    <rdfs:domain rdf:resource="#ContactProfile"/>
    <rdfs:range rdf:resource="&xsd;string"/>
  </owl:DatatypeProperty>

  <owl:DatatypeProperty rdf:ID="mobile">
    <rdfs:label>mobile</rdfs:label>
    <rdfs:comment>The mobile phone number to contact a person.</rdfs:comment>
    <rdfs:domain rdf:resource="#ContactProfile"/>
    <rdfs:range rdf:resource="&xsd;string"/>
  </owl:DatatypeProperty>

  <owl:DatatypeProperty rdf:ID="sms">
    <rdfs:label>sms</rdfs:label>
    <rdfs:domain rdf:resource="#ContactProfile"/>
    <rdfs:range rdf:resource="&xsd;string"/>
  </owl:DatatypeProperty>

  <owl:ObjectProperty rdf:ID="email">
    <rdfs:label>email</rdfs:label>
    <rdfs:comment>The email address for sending email to a person.</rdfs:comment>
    <rdfs:domain rdf:resource="#ContactProfile"/>
    <rdfs:range rdf:resource="#EmailAddress"/>
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="im">
    <rdfs:label>im</rdfs:label>
    <rdfs:comment>An instant messaging profile of this person</rdfs:comment>
    <rdfs:domain rdf:resource="#ContactProfile"/>
    <rdfs:range rdf:resource="#ChatID"/>
  </owl:ObjectProperty>


  <owl:ObjectProperty rdf:ID="myagent">
    <rdfs:label>im</rdfs:label>
    <rdfs:comment>An instant messaging profile of this person</rdfs:comment>
    <rdfs:domain rdf:resource="#ContactProfile"/>
    <rdfs:range rdf:resource="#JADEAgentID"/>
  </owl:ObjectProperty>

  <owl:Class rdf:ID="Homepage">
    <rdfs:label>Homepage</rdfs:label>
  </owl:Class>

  <owl:Class rdf:ID="EmailAddress">
    <rdfs:label>EmailAddress</rdfs:label>
  </owl:Class>

  <owl:Class rdf:ID="ChatID">
    <rdfs:label>ChatID</rdfs:label>
  </owl:Class>

  <owl:Class rdf:ID="JADEAgentID">
    <rdfs:label>JADEAgentID</rdfs:label>
  </owl:Class>

  <owl:ObjectProperty rdf:ID="providedBy">
    <rdfs:domain rdf:resource="#ChatID"/>
    <rdfs:range rdf:resource="#IMProvider"/>
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="hasRegisteredChatID">
    <owl:inverseOf rdf:resource="#providedBy"/>
  </owl:ObjectProperty>

  <owl:Class rdf:ID="IMProvider">
    <rdfs:subClassOf>
      <owl:Restriction>
	<owl:onProperty rdf:resource="#hasRegisteredChatID"/>
	<owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>

</rdf:RDF>
