<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
  <!ENTITY xsd "http://www.w3.org/2001/XMLSchema">
  <!ENTITY tns "http://www.csc.ncsu.edu/faculty/mpsingh/books/SOC/lst/description/univ.owl#">
]>
<rdf:RDF
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    xml:base="&tns;"
    xmlns:univ="&tns;"
>

<owl:Ontology rdf:ID="">
  <rdfs:comment>An ontology dealing with students, courses, and other
  concepts academic</rdfs:comment>
</owl:Ontology>

<owl:Class rdf:ID="Student"/>
<owl:Class rdf:ID="Course"/>
<owl:Class rdf:ID="Department"/>

<owl:ObjectProperty rdf:ID='takes'>
  <rdfs:domain rdf:resource='#Student'/>
  <rdfs:range rdf:resource='#Course'/>
</owl:ObjectProperty>

<owl:InverseFunctionalProperty rdf:ID='offers'>
  <rdfs:domain rdf:resource='#Department'/>
  <rdfs:range rdf:resource='#Course'/>
</owl:InverseFunctionalProperty>

<owl:ObjectProperty rdf:ID='offeredBy'>
  <owl:inverseOf rdf:resource='#offers'/>
<!-- implies that offeredBy is a FunctionalProperty -->
</owl:ObjectProperty>

<owl:Class rdf:about="#Student">
  <rdfs:subClassOf>
    <owl:Restriction>
      <owl:onProperty rdf:resource='#takes'/>
      <owl:minCardinality rdf:datatype='&xsd;#nonNegativeInteger'>
       1
      </owl:minCardinality>
    </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>

<owl:Class rdf:ID="FullTimeStudent">
  <owl:intersectionOf rdf:parseType='Collection'>
    <owl:Class rdf:about='#Student'/>
    <owl:Restriction>
      <owl:onProperty rdf:resource='#takes'/>
      <owl:minCardinality rdf:datatype='&xsd;#nonNegativeInteger'>
       3
      </owl:minCardinality>
    </owl:Restriction>
    <owl:Restriction>
      <owl:onProperty rdf:resource='#takes'/>
      <owl:maxCardinality rdf:datatype='&xsd;#nonNegativeInteger'>
       5
      </owl:maxCardinality>
    </owl:Restriction>
  </owl:intersectionOf>
</owl:Class>

<univ:Department rdf:ID='CS'/>

<owl:Class rdf:ID="CSCourse">
  <owl:intersectionOf rdf:parseType='Collection'>
    <owl:Class rdf:about='#Course'/>
    <owl:Restriction>
      <owl:onProperty rdf:resource='#offeredBy'/>
      <owl:hasValue rdf:resource='#CS'/>
    </owl:Restriction>
  </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="CSFullTimeStudent">
  <owl:intersectionOf rdf:parseType='Collection'>
    <owl:Class rdf:about='#FullTimeStudent'/>
    <owl:Restriction>
      <owl:onProperty rdf:resource='#takes'/>
      <owl:allValuesFrom rdf:resource='#CSCourse'/>
    </owl:Restriction>
  </owl:intersectionOf>
</owl:Class>


</rdf:RDF>
