<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF
    xmlns="file:///home/savanc1/frameworkOnt/cluster.owl#"
    xmlns:xsd="http://www.w3.org/2000/10/XMLSchema#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:ch="file:///home/savanc1/frameworkOnt/cluster.owl#"
    xml:base="file:///home/savanc1/frameworkOnt/cluster.owl">


<!-- #################################################################### --> 
<!-- Global Quantifying Classes -->
<!-- #################################################################### --> 

<owl:Class rdf:ID="Amount">
   <owl:oneOf rdf:parseType="Collection">
      <Amount rdf:ID="Amount_Normal"/>
      <Amount rdf:ID="Amount_Abnormal"/>
   </owl:oneOf>
</owl:Class>

<!-- #################################################################### --> 
<!--                       Cluster Level Ontology                         -->
<!-- #################################################################### --> 

<!-- #################################################################### --> 
<!-- Base Classes -->
<!-- #################################################################### --> 

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

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

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

<!-- #################################################################### --> 
<!-- Properties of Cluster -->
<!-- #################################################################### --> 

<owl:ObjectProperty rdf:ID="tracksEnergy">
   <rdfs:domain rdf:resource="#Cluster"/>
   <rdfs:range rdf:resource="#ClusterEnergyState"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="hasCommunicationsState">
   <rdfs:domain rdf:resource="#Cluster"/>
   <rdfs:range rdf:resource="#ClusterCommunicationsState"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="newNodeCount">
   <rdfs:domain rdf:resource="#Cluster"/>
   <rdfs:range rdf:resource="#Amount"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="nodeDeletionRequestCount">
   <rdfs:domain rdf:resource="#Cluster"/>
   <rdfs:range rdf:resource="#Amount"/>
</owl:ObjectProperty>

<!-- #################################################################### --> 
<!-- Cardinality constraints on Cluster properties -->
<!-- #################################################################### --> 

<owl:Class rdf:about="#Cluster">
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#tracksEnergy"/>
         <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasCommunicationsState"/>
         <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#newNodeCount"/>
         <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#nodeDeletionRequestCount"/>
         <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
</owl:Class>

<!-- #################################################################### --> 
<!-- Properties of ClusterEnergyState -->
<!-- #################################################################### --> 

<owl:ObjectProperty rdf:ID="nonFunctionalNodeCount">
   <rdfs:domain rdf:resource="#ClusterEnergyState"/>
   <rdfs:range rdf:resource="#Amount"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="lowEnergyNodeCount">
   <rdfs:domain rdf:resource="#ClusterEnergyState"/>
   <rdfs:range rdf:resource="#Amount"/>
</owl:ObjectProperty>

<!-- #################################################################### --> 
<!-- Cardinality constraints on ClusterEnergyState properties -->
<!-- #################################################################### --> 

<owl:Class rdf:about="#ClusterEnergyState">
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#nonFunctionalNodeCount"/>
         <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#lowEnergyNodeCount"/>
         <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
</owl:Class>

<!-- #################################################################### --> 
<!-- Cluster Energy States -->
<!-- #################################################################### --> 

<owl:Class rdf:ID="ClusterEnergyStateNormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterEnergyState"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#nonFunctionalNodeCount"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#lowEnergyNodeCount"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterHighNonFunctionalNodeCount">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterEnergyState"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#nonFunctionalNodeCount"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterLowEnergyNodeCountHigh">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterEnergyState"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#lowEnergyNodeCount"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterImminentNonFunctional">
   <rdfs:subClassOf rdf:resource="#ClusterEnergyState"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterHighNonFunctionalNodeCount"/>
      <owl:Class rdf:about="#ClusterLowEnergyNodeCountHigh"/>
   </owl:unionOf>
</owl:Class>

<!-- #################################################################### --> 
<!-- Properties of ClusterCommunicationsState -->
<!-- #################################################################### --> 

<owl:ObjectProperty rdf:ID="jammedNodeCount">
   <rdfs:domain rdf:resource="#ClusterCommunicationsState"/>
   <rdfs:range rdf:resource="#Amount"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="starvedNodeCount">
   <rdfs:domain rdf:resource="#ClusterCommunicationsState"/>
   <rdfs:range rdf:resource="#Amount"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="countNodesUnderNodeBasedAttack">
   <rdfs:domain rdf:resource="#ClusterCommunicationsState"/>
   <rdfs:range rdf:resource="#Amount"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="countNodesUnderDistanceAttack">
   <rdfs:domain rdf:resource="#ClusterCommunicationsState"/>
   <rdfs:range rdf:resource="#Amount"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="countNeighborhoodsCompromised">
   <rdfs:domain rdf:resource="#ClusterCommunicationsState"/>
   <rdfs:range rdf:resource="#Amount"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="countNodesUnderDoS">
   <rdfs:domain rdf:resource="#ClusterCommunicationsState"/>
   <rdfs:range rdf:resource="#Amount"/>
</owl:ObjectProperty>

<!-- #################################################################### --> 
<!-- Cardinality of ClusterCommunicationsState -->
<!-- #################################################################### --> 

<owl:Class rdf:about="#ClusterCommunicationsState">
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#jammedNodeCount"/>
         <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#starvedNodeCount"/>
         <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countNodesUnderNodeBasedAttack"/>
         <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countNodesUnderDistanceAttack"/>
         <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countNeighborhoodsCompromised"/>
         <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countNodesUnderDoS"/>
         <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
</owl:Class>

<!-- #################################################################### --> 
<!-- Cluster Communications States -->
<!-- #################################################################### --> 

<owl:Class rdf:ID="ClusterCommunicationsStateNormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterCommunicationsState"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#jammedNodeCount"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#starvedNodeCount"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countNodesUnderNodeBasedAttack"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countNodesUnderDistanceAttack"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countNeighborhoodsCompromised"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countNodesUnderDoS"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterCommunicationsJammed">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterCommunicationsState"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#jammedNodeCount"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterUnderStarvationAttack">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterCommunicationsState"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#starvedNodeCount"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterUnderNodeBasedAttack">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterCommunicationsState"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countNodesUnderNodeBasedAttack"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterUnderDistanceAttack">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterCommunicationsState"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countNodesUnderDistanceAttack"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterCommunicationsCompromised">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterCommunicationsState"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countNeighborhoodsCompromised"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterUnderDoS">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterCommunicationsState"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countNodesUnderDoS"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterCommunicationsUnderTemporaryAttack">
   <rdfs:subClassOf rdf:resource="#ClusterCommunicationsState"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterCommunicationsJammed"/>
      <owl:Class rdf:about="#ClusterUnderStarvationAttack"/>
   </owl:unionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterCommunicationsUnderLongTermAttack">
   <rdfs:subClassOf rdf:resource="#ClusterCommunicationsState"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#ClusterUnderNodeBasedAttack"/>
      <owl:Class rdf:about="#ClusterUnderDistanceAttack"/>
      <owl:Class rdf:about="#ClusterUnderDoS"/>
   </owl:unionOf>
</owl:Class>

<!-- #################################################################### --> 
<!-- Cluster States -->
<!-- #################################################################### --> 

<owl:Class rdf:ID="ClusterStateNormal">
   <rdfs:subClassOf rdf:resource="#Cluster"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
         <owl:onProperty rdf:resource="#tracksEnergy"/>
         <owl:someValuesFrom rdf:resource="#ClusterEnergyStateNormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasCommunicationsState"/>
         <owl:someValuesFrom rdf:resource="#ClusterCommunicationsStateNormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#newNodeCount"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#nodeDeletionRequestCount"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterNonFunctional">
   <rdfs:subClassOf rdf:resource="#Cluster"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
         <owl:onProperty rdf:resource="#tracksEnergy"/>
         <owl:someValuesFrom rdf:resource="#ClusterImminentNonFunctional"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasCommunicationsState"/>
         <owl:someValuesFrom rdf:resource="#ClusterCommunicationsUnderLongTermAttack"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasSensorState"/>
         <owl:someValuesFrom rdf:resource="#ClusterSensorsNonFunctional"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#receivedStatusMsgsCount"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterUnderTemporaryAttack">
   <rdfs:subClassOf rdf:resource="#Cluster"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasCommunicationsState"/>
         <owl:someValuesFrom rdf:resource="#ClusterCommunicationsUnderTemporaryAttack"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterUnderLongTermAttack">
   <rdfs:subClassOf rdf:resource="#Cluster"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasCommunicationsState"/>
         <owl:someValuesFrom rdf:resource="#ClusterCommunicationsUnderLongTermAttack"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#newNodeCount"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#nodeDeletionRequestCount"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ClusterCompromised">
   <rdfs:subClassOf rdf:resource="#Cluster"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasCommunicationsState"/>
         <owl:someValuesFrom rdf:resource="#ClusterCommunicationsCompromised"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

</rdf:RDF>

