<?xml version="1.0"?>
<?xml-stylesheet href="http://www.w3.org/2002/06/rdfs2html.xsl" type="application/xml"?>
<!DOCTYPE owl [
   <!ENTITY rdf    "http://www.w3.org/1999/02/22-rdf-syntax-ns#">
   <!ENTITY rdfs   "http://www.w3.org/2000/01/rdf-schema#">	   
   <!ENTITY plc    "http://daml.umbc.edu/ontologies/cobra/0.3/place#">
   <!ENTITY dev    "http://daml.umbc.edu/ontologies/cobra/0.3/device#">
   <!ENTITY agt    "http://daml.umbc.edu/ontologies/cobra/0.3/agent">
   <!ENTITY xsd    "http://www.w3.org/2001/XMLSchema#">    
   <!ENTITY owl    "http://www.w3.org/2002/07/owl#"> ]>

<rdf:RDF  
   xmlns:dc   =    "http://purl.org/dc/elements/1.1/"
   xmlns:rdf  =    "&rdf;"
   xmlns:rdfs =    "&rdfs;"
   xmlns:owl  =    "&owl;"
   xmlns:xsd  =    "&xsd;" 
   xmlns:plc  =    "&plc;"
   xmlns:dev  =    "&dev;"
   xmlns      =    "&agt;" 
   xml:base   =    "&agt;">

  <owl:Ontology rdf:about="">
    <owl:versionInfo>0.3</owl:versionInfo>
    <owl:imports rdf:resource="&plc;"/>
    <owl:imports rdf:resource="&dev;"/>
    <dc:title>CoBrA Agent Ontology</dc:title>
    <dc:description>
      CoBrA Agent Ontology: this ontology describes concepts for
      modeling people and software agents in an intelligent meeting
      room environment. 

      This is an experimental version of the CoBrA ontology. A
      complete collection of CoBrA ontologies can be found at 
      http://cobra.umbc.edu/ontology/
    </dc:description>    
    <dc:subject>Pervasive Computing; Smart Space; Agents</dc:subject>
    <dc:creator>Harry Chen -- http://umbc.edu/~hchen4/</dc:creator>
    <dc:publisher>UMBC eBiquity Research Group</dc:publisher>
    <dc:date>$Date: 2003/06/22 23:11:11 $</dc:date>
    <dc:format>text/xml</dc:format>
    <dc:language>en</dc:language>
    <dc:identifier>
      http://daml.umbc.edu/ontologies/cobra/0.3/agent
    </dc:identifier>
  </owl:Ontology>
  
  <!--
      Last modified by Harry Chen (mailto:harry.chen@umbc.edu)
      CVS Version: $Revision: 1.4 $, $Date: 2003/06/22 23:11:11 $
  -->

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

    <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Person"/>
      <owl:Class rdf:about="#SoftwareAgent"/>
    </owl:unionOf>    

    <rdfs:subClassOf>
      <owl:Restriction>
	<owl:onProperty rdf:resource="#locatedInAtomicPlace"/>
	<owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>

  <owl:Class rdf:ID="Person">
    <rdfs:label>Person</rdfs:label>
    <rdfs:subClassOf rdf:resource="#Agent"/>
  </owl:Class>

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

    <rdfs:subClassOf rdf:resource="#Agent"/>      

    <owl:disjointWith rdf:resource="#Person"/>
  
    <rdfs:subClassOf>
      <owl:Restriction>
	<owl:onProperty rdf:resource="#hasAgentAddress"/>
	<owl:maxCardinality>1</owl:maxCardinality>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
  
  <owl:DatatypeProperty rdf:ID="hasContactInformation">
    <rdfs:label>hasContactInformation</rdfs:label>
    <rdfs:domain rdf:resource="#Agent"/>
    <rdfs:range rdf:resource="&xsd;string"/>
  </owl:DatatypeProperty>
  
  <owl:DatatypeProperty rdf:ID="hasFullName">
    <rdfs:label>hasFullName</rdfs:label>
    <rdf:type rdf:resource="&owl;FunctionalProperty"/>
    <rdfs:subPropertyOf rdf:resource="#hasContactInformation"/>
    <rdfs:domain rdf:resource="#Person"/>
  </owl:DatatypeProperty>
  
  <owl:DatatypeProperty rdf:ID="hasEmail">
    <rdfs:label>hasEmail</rdfs:label>
    <rdfs:subPropertyOf rdf:resource="#hasContactInformation"/>
    <rdfs:domain rdf:resource="#Person"/>
  </owl:DatatypeProperty>
  
  <owl:DatatypeProperty rdf:ID="hasHomepage">
    <rdfs:label>hasHomepage</rdfs:label>
    <rdfs:subPropertyOf rdf:resource="#hasContactInformation"/>
    <rdfs:domain rdf:resource="#Person"/>
  </owl:DatatypeProperty>  
  
  <owl:DatatypeProperty rdf:ID="hasAgentAddress">
    <rdfs:label>hasAgentAddress</rdfs:label>
    <rdfs:subPropertyOf rdf:resource="#hasContactInformation"/>
    <rdfs:domain rdf:resource="#SoftwareAgent"/>
  </owl:DatatypeProperty>

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

  <owl:ObjectProperty rdf:ID="friendOf">
    <rdfs:label>friendOf</rdfs:label>
    <rdfs:domain rdf:resource="#Person"/>
    <rdfs:range rdf:resource="#Person"/>
  </owl:ObjectProperty>

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

  <owl:ObjectProperty rdf:ID="memberOf">
    <rdfs:label>friendOf</rdfs:label>
    <rdfs:domain rdf:resource="#Person"/>
    <rdfs:range rdf:resource="#Group"/>
  </owl:ObjectProperty>  

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

  <owl:ObjectProperty rdf:ID="fillsRole">
    <rdfs:label>fillsRole</rdfs:label>
    <rdfs:domain rdf:resource="#Agent"/>
    <rdfs:range rdf:resource="#Role"/>
  </owl:ObjectProperty>
  
  <owl:ObjectProperty rdf:ID="isFilledBy">
    <rdfs:label>isFilledBy</rdfs:label>
    <owl:inverseOf rdf:resource="#fillsRole"/>
  </owl:ObjectProperty>
    
  <owl:ObjectProperty rdf:ID="createdBy">
    <rdfs:label>createdBy</rdfs:label>
    <rdfs:domain rdf:resource="#Role"/>
    <rdfs:range rdf:resource="#Event"/>
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="createsRole">
    <rdfs:label>createsRole</rdfs:label>
    <owl:inverseOf rdf:resource="#createdBy"/>
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="defaultAction">
    <rdfs:label>action</rdfs:label>
    <rdfs:domain rdf:resource="#Role"/>
    <rdfs:range rdf:resource="#IntentionalAction"/>
  </owl:ObjectProperty>
  
  <owl:ObjectProperty rdf:ID="isDefaultActionOf">
    <rdfs:label>isDefaultActionOf</rdfs:label>
    <owl:inverseOf rdf:resource="#defaultAction"/>
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="intendsToPerform">
    <rdfs:label>intendsToPerform</rdfs:label>
    <rdfs:domain rdf:resource="#Agent"/>
    <rdfs:range rdf:resource="#IntentionalAction"/>
  </owl:ObjectProperty>
  
  <owl:ObjectProperty rdf:ID="desiresToAchieve">
    <rdfs:label>desireToAchieve</rdfs:label>
    <rdfs:domain rdf:resource="#Agent"/>
    <rdfs:range rdf:resource="#Goal"/>
  </owl:ObjectProperty>

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

  <owl:ObjectProperty rdf:ID="rdfGoalStatement">
    <rdfs:label>rdfGoalStatement</rdfs:label>
    <rdfs:domain rdf:resource="#Goal"/>
    <rdfs:range rdf:resource="&rdf;List"/>
  </owl:ObjectProperty>

  <owl:Class rdf:ID="IntentionalAction">
    <rdfs:label>IntentionalAction</rdfs:label>
    <owl:oneOf rdf:parseType="Collection">
      <owl:Thing rdf:about="#GivePresentation"/>
      <owl:Thing rdf:about="#DistributeHangouts"/>
      <owl:Thing rdf:about="#AttendPresentation"/>
      <owl:Thing rdf:about="#AcquireHandouts"/>
      <owl:Thing rdf:about="#ExchangeContact"/>
    </owl:oneOf>
  </owl:Class>
  
  <IntentionalAction rdf:ID="GivePresentation">
    <rdfs:label>GivePresentation</rdfs:label>
  </IntentionalAction>

  <IntentionalAction rdf:ID="DistributeHangouts">
    <rdfs:label>DistributeHangouts</rdfs:label>
  </IntentionalAction>

  <IntentionalAction rdf:ID="AttendPresentation">
    <rdfs:label>AttendPresentation</rdfs:label>
  </IntentionalAction>

  <IntentionalAction rdf:ID="AcquireHandouts">
    <rdfs:label>AcquireHandouts</rdfs:label>
  </IntentionalAction>

  <IntentionalAction rdf:ID="ExchangeContact">
    <rdfs:label>ExchangeContact</rdfs:label>
  </IntentionalAction>

  <owl:Class rdf:ID="Gender">
    <rdfs:label>Gender</rdfs:label>
    <owl:oneOf rdf:parseType="Collection">
      <Gender rdf:about="#Man"/>
      <Gender rdf:about="#Woman"/>
    </owl:oneOf>
  </owl:Class>
  
  <Gender rdf:ID="Man">
    <rdfs:label>Man</rdfs:label>
  </Gender>

  <Gender rdf:ID="Woman">
    <rdfs:label>Woman</rdfs:label>
  </Gender>
 
  <!-- Relating the place ontology with the agent ontology -->

  <owl:Class rdf:ID="PersonInBuilding">
    <rdfs:label>PersonInBuilding</rdfs:label>
    <rdfs:subClassOf rdf:resource="&plc;ThingInBuilding"/>
    <rdfs:subClassOf rdf:resource="#Person"/>
  </owl:Class> 
  
  <owl:Class rdf:ID="SoftwareAgentInBuilding">
    <rdfs:label>SoftwareAgentInBuilding</rdfs:label>
    <rdfs:subClassOf rdf:resource="&plc;ThingInBuilding"/>    
    <owl:disjointWith rdf:resource="#PersonInBuilding"/>    
    <rdfs:subClassOf rdf:resource="#SoftwareAgent"/>
  </owl:Class>

 <owl:Class rdf:ID="PersonNotInBuilding">
    <rdfs:label>PersonNotInBuilding</rdfs:label>
    <rdfs:subClassOf rdf:resource="&plc;ThingNotInBuilding"/>
    <rdfs:subClassOf rdf:resource="#Person"/>
  </owl:Class> 
  
  <owl:Class rdf:ID="SoftwareAgentNotInBuilding">
    <rdfs:label>SoftwareAgentNotInBuilding</rdfs:label>
    <rdfs:subClassOf rdf:resource="&plc;ThingNotInBuilding"/>    
    <owl:disjointWith rdf:resource="#PersonNotInBuilding"/>    
    <rdfs:subClassOf rdf:resource="#SoftwareAgent"/>
  </owl:Class>

  <owl:Class rdf:ID="PersonInRoom">
    <rdfs:label>PersonInRoom</rdfs:label>
    <rdfs:subClassOf rdf:resource="&plc;ThingInRoom"/>
    <rdfs:subClassOf rdf:resource="#Person"/>
  </owl:Class> 
  
  <owl:Class rdf:ID="SoftwareAgentInRoom">
    <rdfs:label>SoftwareAgentInRoom</rdfs:label>
    <rdfs:subClassOf rdf:resource="&plc;ThingInBuilding"/>    
    <owl:disjointWith rdf:resource="#PersonInBuilding"/>    
    <rdfs:subClassOf rdf:resource="#SoftwareAgent"/>
  </owl:Class>

 <owl:Class rdf:ID="PersonNotInRoom">
    <rdfs:label>PersonNotInRoom</rdfs:label>
    <rdfs:subClassOf rdf:resource="&plc;ThingNotInRoom"/>
    <rdfs:subClassOf rdf:resource="#Person"/>
  </owl:Class> 
  
  <owl:Class rdf:ID="SoftwareAgentNotInRoom">
    <rdfs:label>SoftwareAgentNotInRoom</rdfs:label>
    <rdfs:subClassOf rdf:resource="&plc;ThingNotInRoom"/>    
    <owl:disjointWith rdf:resource="#PersonNotInRoom"/>    
    <rdfs:subClassOf rdf:resource="#SoftwareAgent"/>
  </owl:Class>

  <!-- Relating the device ontology with the agent ontology -->
  
  <owl:DatatypeProperty rdf:ID="agentCompliacy">
    <rdfs:label>agentCompliacy</rdfs:label>
    <rdfs:domain rdf:resource="&dev;Device"/>
    <rdfs:range rdf:resource="&xsd;boolean"/>
  </owl:DatatypeProperty>
  

</rdf:RDF>
