<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
     <!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 talk "http://daml.umbc.edu/ontologies/talk-ont#" >	
     <!ENTITY profile "http://daml.umbc.edu/ontologies/profile-ont#" >
   ]>


<rdf:RDF
  xml:base     	="http://daml.umbc.edu/ontologies/profile-ont"
  xmlns     	="&profile;"
  xmlns:profile ="&profile;"
  xmlns:talk ="&talk;"
  xmlns:owl ="&owl;"
  xmlns:rdf ="&rdf;"
  xmlns:rdfs ="&rdfs;"
>


<owl:Ontology rdf:about="">
  <owl:versionInfo>$Revision: 1.3 $</owl:versionInfo>
</owl:Ontology>


<!-- Some basic classes for scheduling -->

<owl:Class rdf:ID="DayOfWeek">
   <rdfs:label>Day of week</rdfs:label>
   <owl:oneOf rdf:parseType="Collection">
      <owl:Thing rdf:about="#Monday"/>
      <owl:Thing rdf:about="#Tuesday"/>
      <owl:Thing rdf:about="#Wednesday"/>
      <owl:Thing rdf:about="#Thursday"/>
      <owl:Thing rdf:about="#Friday"/>
      <owl:Thing rdf:about="#Saturday"/>
      <owl:Thing rdf:about="#Sunday"/>
   </owl:oneOf>
</owl:Class> 


<owl:Class rdf:ID="BusyDayTime">
   <rdfs:label>Day of week with time</rdfs:label>
   <rdfs:subClassOf rdf:resource="&owl;Thing" />
   <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#day" />
	<owl:minCardinality>1</owl:minCardinality>
     </owl:Restriction>
   </rdfs:subClassOf>
</owl:Class> 

<owl:ObjectProperty rdf:ID="day">
  <rdfs:domain rdf:resource="#BusyDayTime"/>
  <rdfs:range rdf:resource="#DayOfWeek" />
</owl:ObjectProperty >

<owl:DatatypeProperty rdf:ID="startTime">
  <rdfs:domain rdf:resource="#BusyDayTime"/>
  <rdfs:range rdf:resource="&xsd;time" />
</owl:DatatypeProperty>

<owl:DatatypeProperty rdf:ID="endTime">
  <rdfs:domain rdf:resource="#BusyDayTime"/>
  <rdfs:range rdf:resource="&xsd;time" />
</owl:DatatypeProperty >

<!-- end of scheduling -->



<!-- Class for filtering -->

<owl:Class rdf:ID="FilterOn">
   <rdfs:label>Filter talks based on</rdfs:label>
   <owl:oneOf rdf:parseType="Collection">
      <owl:Thing rdf:about="#Location"/>
      <owl:Thing rdf:about="#Schedule"/>
      <owl:Thing rdf:about="#Interests"/>
   </owl:oneOf>
</owl:Class> 

<!-- end of filtering -->



<!-- Class Addresses -->

<owl:Class rdf:ID="Address">
  <rdfs:label>Address</rdfs:label>
  <rdfs:comment>DAML profile Address</rdfs:comment>
  <rdfs:subClassOf rdf:resource="&owl;Thing" />
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#longitude" />
	<owl:maxCardinality>1</owl:maxCardinality>
     </owl:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#latitude" />
	<owl:maxCardinality>1</owl:maxCardinality>
     </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>

<owl:DatatypeProperty rdf:ID="streetAddress">
  <rdfs:domain rdf:resource="#Address"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty rdf:ID="city">
  <rdfs:domain rdf:resource="#Address"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty rdf:ID="state">
  <rdfs:domain rdf:resource="#Address"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty rdf:ID="zip">
  <rdfs:domain rdf:resource="#Address"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty rdf:ID="country">
  <rdfs:domain rdf:resource="#Address"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty rdf:ID="longitude">
  <rdfs:domain rdf:resource="#Address"/>
  <rdfs:range rdf:resource="&xsd;integer" />
</owl:DatatypeProperty >
 
<owl:DatatypeProperty rdf:ID="latitude">
  <rdfs:domain rdf:resource="#Address"/>
  <rdfs:range rdf:resource="&xsd;integer" />
</owl:DatatypeProperty >

<!-- end of Address -->



<!-- Classes for Assertion -->
<owl:Class rdf:ID="Assertion">
  <rdfs:label>Assertion(topic1, topic2)</rdfs:label>
  <rdfs:comment> assert the relation between two topics </rdfs:comment>
  <rdfs:subClassOf rdf:resource="&owl;Thing" />
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#topic1" />
	<owl:cardinality>1</owl:cardinality>
     </owl:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#topic2" />
	<owl:cardinality>1</owl:cardinality>
     </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>

<owl:DatatypeProperty rdf:ID="topic1">
  <rdfs:domain rdf:resource="#Assertion"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty rdf:ID="topic2">
  <rdfs:domain rdf:resource="#Assertion"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >



<owl:Class rdf:ID="RelatedTo">
  <rdfs:label>RelatedTo(topic1, topic2)</rdfs:label>
  <rdfs:comment> Used to assert topics that the user thinks are related, bi-direction relation</rdfs:comment>
  <rdfs:subClassOf rdf:resource="#Assertion" />
</owl:Class>


<owl:Class  rdf:ID="SubsumedBy">
  <rdfs:label>SubsumedBy(topic1, topic2)</rdfs:label>
  <rdfs:comment>Used to assert topics that the user thinks topic1 can be subsumed by topic2, one-way relation</rdfs:comment>
  <rdfs:subClassOf rdf:resource="#Assertion" />
</owl:Class>

<!-- end of Assertion -->




<!-- Class for Interest -->

<owl:Class rdf:ID="Interest">
  <rdfs:label>Interests</rdfs:label>
  <rdfs:subClassOf rdf:resource="&owl;Thing" />
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#topic" />
	<owl:minCardinality>1</owl:minCardinality>
     </owl:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#classification" />
	<owl:minCardinality>1</owl:minCardinality>
     </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>

<owl:DatatypeProperty  rdf:ID="topic">
  <rdfs:domain rdf:resource="#Interest"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty  rdf:ID="classification">
  <rdfs:domain rdf:resource="#Interest"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<!-- end of Interest class -->




<!-- Class Profile -->

<owl:Class rdf:ID="Profile">
  <rdfs:label>Profile</rdfs:label>
  <rdfs:comment>DAML personal profile</rdfs:comment>
  <rdfs:subClassOf rdf:resource="&owl;Thing" />
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#firstName" />
	<owl:minCardinality>1</owl:minCardinality>
     </owl:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#lastName" />
	<owl:minCardinality>1</owl:minCardinality>
     </owl:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#officeAddress" />
	<owl:minCardinality>1</owl:minCardinality>
     </owl:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#webPageURI" />
	<owl:cardinality>1</owl:cardinality>
     </owl:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#location" />
	<owl:cardinality>1</owl:cardinality>
     </owl:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
     <owl:Restriction>
	<owl:onProperty rdf:resource="#filter" />
	<owl:minCardinality>3</owl:minCardinality>
     </owl:Restriction>
  </rdfs:subClassOf>

</owl:Class>

<owl:DatatypeProperty rdf:ID="firstName">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty>

<owl:DatatypeProperty rdf:ID="lastName">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty rdf:ID="gender">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty rdf:ID="organization">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty rdf:ID="email">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty rdf:ID="hasSMSContact">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty  rdf:ID="bioSketch">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:ObjectProperty  rdf:ID="officeAddress">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="#Address" />
</owl:ObjectProperty >

<owl:DatatypeProperty  rdf:ID="title">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty  rdf:ID="phoneNumber">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty  rdf:ID="cellNumber">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty  rdf:ID="faxNumber">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:DatatypeProperty  rdf:ID="pager">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;string" />
</owl:DatatypeProperty >

<owl:ObjectProperty  rdf:ID="interests">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="#Interest" />
</owl:ObjectProperty >

<owl:ObjectProperty  rdf:ID="homeAddress">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="#Address" />
</owl:ObjectProperty >

<owl:DatatypeProperty  rdf:ID="webPageURI">
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="&xsd;anyURI" />
</owl:DatatypeProperty >

<!-- For this version we only use City as the Location -->
<owl:ObjectProperty  rdf:ID="location">
  <rdfs:comment>I will be at this location most of the time</rdfs:comment>
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="#Address" />
</owl:ObjectProperty >

<owl:ObjectProperty  rdf:ID="scheduleVer0.1">
  <rdfs:comment>I will be busy during the following days</rdfs:comment>
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="#DayOfWeek" />
</owl:ObjectProperty >

<owl:ObjectProperty  rdf:ID="scheduleVer1.0">
  <rdfs:comment>I will be busy during the following days at the given times</rdfs:comment>
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="#BusyDayTime" />
</owl:ObjectProperty >

<owl:ObjectProperty  rdf:ID="filter">
  <rdfs:comment>I want the talks filtered by</rdfs:comment>
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="#FilterOn" />
</owl:ObjectProperty >

<owl:ObjectProperty  rdf:ID="assertions">
  <rdfs:comment>I believe the following assertions</rdfs:comment>
  <rdfs:domain rdf:resource="#Profile"/>
  <rdfs:range rdf:resource="#RelatedTo" />
</owl:ObjectProperty >


<!-- end of Class Profile -->

</rdf:RDF>
