<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF
    xmlns="file:///home/savanc1/frameworkOnt/SensorNode.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:wsn="file:///home/savanc1/frameworkOnt/SensorNode.owl#"
    xml:base="file:///home/savanc1/frameworkOnt/SensorNode.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>

<owl:Class rdf:ID="Rate">
   <owl:oneOf rdf:parseType="Collection">
      <Rate rdf:ID="Rate_Normal"/>
      <Rate rdf:ID="Rate_Abnormal"/>
   </owl:oneOf>
</owl:Class>

<!-- #################################################################### --> 
<!--                       Node Level Ontology                            -->
<!-- #################################################################### --> 


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

<owl:Class rdf:ID="SensorNode">
</owl:Class>

<owl:Class rdf:ID="Energy">
</owl:Class>

<owl:Class rdf:ID="Neighborhood">
</owl:Class>

<owl:Class rdf:ID="Routing">
</owl:Class>

<owl:Class rdf:ID="MAC">
</owl:Class>

<owl:Class rdf:ID="PHY">
</owl:Class>

<!-- #################################################################### --> 
<!-- SensorNode-specific Quantifying Classes -->
<!-- #################################################################### --> 

<owl:Class rdf:ID="RoutingQuantity">
   <owl:oneOf rdf:parseType="Collection">
      <RoutingQuantity rdf:ID="RoutingClassNormal"/>
      <RoutingQuantity rdf:ID="RoutingClassAbnormalLow"/>
      <RoutingQuantity rdf:ID="RoutingClassAbnormalHigh"/>
   </owl:oneOf>
</owl:Class>

<owl:Class rdf:ID="NeighborhoodQty">
   <owl:oneOf rdf:parseType="Collection">
      <NeighborhoodQty rdf:ID="NbClassNormal"/>
      <NeighborhoodQty rdf:ID="NbClassLow"/>
      <NeighborhoodQty rdf:ID="NbClassHigh"/>
      <NeighborhoodQty rdf:ID="NbClassAbnormalLow"/>
      <NeighborhoodQty rdf:ID="NbClassAbnormalHigh"/>
   </owl:oneOf>
</owl:Class>

<!-- #################################################################### --> 
<!-- SensorNode Properties -->
<!-- #################################################################### --> 

<owl:ObjectProperty rdf:ID="hasEnergyComponent">
   <rdfs:domain rdf:resource="#SensorNode"/>
   <rdfs:range rdf:resource="#Energy"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="hasPHYComponent">
   <rdfs:domain rdf:resource="#SensorNode"/>
   <rdfs:range rdf:resource="#PHY"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="hasMACComponent">
   <rdfs:domain rdf:resource="#SensorNode"/>
   <rdfs:range rdf:resource="#MAC"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="hasRoutingComponent">
   <rdfs:domain rdf:resource="#SensorNode"/>
   <rdfs:range rdf:resource="#Routing"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="hasNeighborhoodComponent">
   <rdfs:domain rdf:resource="#SensorNode"/>
   <rdfs:range rdf:resource="#Neighborhood"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="hasSensorComponent">
   <rdfs:domain rdf:resource="#SensorNode"/>
   <rdfs:range rdf:resource="#Sensor"/>
</owl:ObjectProperty>

<!-- #################################################################### --> 
<!-- Properties of Energy -->
<!-- #################################################################### --> 

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

<owl:ObjectProperty rdf:ID="energyConsumptionRate">
   <rdfs:domain rdf:resource="#Energy"/>
   <rdfs:range rdf:resource="#Rate"/>
</owl:ObjectProperty>

<!-- #################################################################### --> 
<!-- Properties of PHY -->
<!-- #################################################################### --> 

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

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

<owl:ObjectProperty rdf:ID="carrierLossRate">
   <rdfs:domain rdf:resource="#PHY"/>
   <rdfs:range rdf:resource="#Rate"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="formatViolationRate">
   <rdfs:domain rdf:resource="#PHY"/>
   <rdfs:range rdf:resource="#Rate"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="HECFailureRate">
   <rdfs:domain rdf:resource="#PHY"/>
   <rdfs:range rdf:resource="#Rate"/>
</owl:ObjectProperty>

<!-- #################################################################### --> 
<!-- Properties of MAC -->
<!-- #################################################################### --> 

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

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

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

<owl:ObjectProperty rdf:ID="FCSFailureRate">
   <rdfs:domain rdf:resource="#MAC"/>
   <rdfs:range rdf:resource="#Rate"/>
</owl:ObjectProperty>

<!-- #################################################################### --> 
<!-- Properties of Routing -->
<!-- #################################################################### --> 

<owl:ObjectProperty rdf:ID="reachableClusterheadCount">
   <rdfs:domain rdf:resource="#Routing"/>
   <rdfs:range rdf:resource="#RoutingQuantity"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="pathCountToClusterhead">
   <rdfs:domain rdf:resource="#Routing"/>
   <rdfs:range rdf:resource="#RoutingQuantity"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="hopCountToClusterhead">
   <rdfs:domain rdf:resource="#Routing"/>
   <rdfs:range rdf:resource="#RoutingQuantity"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="countMostFavoredRouters">
   <rdfs:domain rdf:resource="#Routing"/>
   <rdfs:range rdf:resource="#RoutingQuantity"/>
</owl:ObjectProperty>

<!-- #################################################################### --> 
<!-- Properties of Neighborhood -->
<!-- #################################################################### --> 

<owl:ObjectProperty rdf:ID="nodeDegree">
   <rdfs:domain rdf:resource="#Neighborhood"/>
   <rdfs:range rdf:resource="#NeighborhoodQty"/>
</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="failedNeighborCount">
   <rdfs:domain rdf:resource="#Neighborhood"/>
   <rdfs:range rdf:resource="#NeighborhoodQty"/>
</owl:ObjectProperty>

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

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

<!-- #################################################################### --> 
<!-- Energy State -->
<!-- #################################################################### --> 

<owl:Class rdf:ID="EnergyStateNormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Energy"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#remainingEnergyCapacity"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#energyConsumptionRate"/>
         <owl:hasValue rdf:resource="#Rate_Normal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="ImminentLowEnergyState">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Energy"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#remainingEnergyCapacity"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#energyConsumptionRate"/>
         <owl:hasValue rdf:resource="#Rate_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="LowEnergyState">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Energy"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#remainingEnergyCapacity"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#energyConsumptionRate"/>
         <owl:hasValue rdf:resource="#Rate_Normal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="DischargedEnergyState">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Energy"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#remainingEnergyCapacity"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#energyConsumptionRate"/>
         <owl:hasValue rdf:resource="#Rate_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<!-- #################################################################### --> 
<!-- PHY State -->
<!-- #################################################################### --> 

<owl:Class rdf:ID="PHYStateNormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#PHY"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#HECFailureRate"/>
         <owl:hasValue rdf:resource="#Rate_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#formatViolationRate"/>
         <owl:hasValue rdf:resource="#Rate_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#carrierLossRate"/>
         <owl:hasValue rdf:resource="#Rate_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#receivedChannelPower"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#receivedNoisePower"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="PHYStateOutOfRange">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#PHY"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#receivedChannelPower"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
    </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="PHYStateJammedByNoise">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#PHY"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#receivedNoisePower"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="PHYStateJammedDueCarrierLoss">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#PHY"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#carrierLossRate"/>
         <owl:hasValue rdf:resource="#Rate_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="PHYStateJammed">
   <rdfs:subClassOf rdf:resource="#PHY"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#PHYStateJammedByNoise"/>
      <owl:Class rdf:about="#PHYStateJammedDueCarrierLoss"/>
   </owl:unionOf>
</owl:Class>

<owl:Class rdf:ID="PHYHECFailuresAbnormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#PHY"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#HECFailureRate"/>
         <owl:hasValue rdf:resource="#Rate_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="PHYFormatViolationsAbnormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#PHY"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#formatViolationRate"/>
         <owl:hasValue rdf:resource="#Rate_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="PHYUnderStarvationAttack">
   <rdfs:subClassOf rdf:resource="#PHY"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#PHYHECFailuresAbnormal"/>
      <owl:Class rdf:about="#PHYFormatViolationsAbnormal"/>
   </owl:unionOf>
</owl:Class>

<owl:Class rdf:ID="PHYUnderDoS">
   <rdfs:subClassOf rdf:resource="#PHY"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#PHYStateJammed"/>
      <owl:Class rdf:about="#PHYUnderStarvationAttack"/>
   </owl:intersectionOf>
</owl:Class>
  
<!-- #################################################################### --> 
<!-- MAC State -->
<!-- #################################################################### --> 

<owl:Class rdf:ID="MACStateNormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MAC"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#failedTransmissionRatio"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#multipleRetryRatio"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#FCSFailureRate"/>
         <owl:hasValue rdf:resource="#Rate_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#collisionRatio"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="MACFCSFailuresAbnormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MAC"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#FCSFailureRate"/>
         <owl:hasValue rdf:resource="#Rate_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="MACNumCollisionsAbnormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MAC"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#collisionRatio"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="MACUnderRxDoS">
   <rdfs:subClassOf rdf:resource="#MAC"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MACFCSFailuresAbnormal"/>
      <owl:Class rdf:about="#MACNumCollisionsAbnormal"/>
   </owl:unionOf>
</owl:Class>

<owl:Class rdf:ID="MACFailedTransmitsAbnormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MAC"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#failedTransmissionRatio"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="MACMultipleRetriesAbnormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MAC"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#multipleRetryRatio"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="MACUnderTxDoS">
   <rdfs:subClassOf rdf:resource="#MAC"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MACFailedTransmitsAbnormal"/>
      <owl:Class rdf:about="#MACMultipleRetriesAbnormal"/>
   </owl:unionOf>
</owl:Class>

<owl:Class rdf:ID="MACUnderRxTxDoS">
   <rdfs:subClassOf rdf:resource="#MAC"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#MACUnderRxDoS"/>
      <owl:Class rdf:about="#MACUnderTxDoS"/>
   </owl:intersectionOf>
</owl:Class>

<!-- #################################################################### --> 
<!-- Routing State -->
<!-- #################################################################### --> 

<owl:Class rdf:ID="RoutingStateNormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Routing"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#reachableClusterheadCount"/>
         <owl:hasValue rdf:resource="#RoutingClassNormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#pathCountToClusterhead"/>
         <owl:hasValue rdf:resource="#RoutingClassNormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hopCountToClusterhead"/>
         <owl:hasValue rdf:resource="#RoutingClassNormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countMostFavoredRouters"/>
         <owl:hasValue rdf:resource="#RoutingClassNormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="LowReachableClusterheadCount">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Routing"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#reachableClusterheadCount"/>
         <owl:hasValue rdf:resource="#RoutingClassAbnormalLow"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="LowPathCountToClusterhead">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Routing"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#pathCountToClusterhead"/>
         <owl:hasValue rdf:resource="#RoutingClassAbnormalLow"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="HighHopCountToClusterhead">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Routing"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hopCountToClusterhead"/>
         <owl:hasValue rdf:resource="#RoutingClassAbnormalHigh"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="LowFavoredRouterCount">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Routing"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countMostFavoredRouters"/>
         <owl:hasValue rdf:resource="#RoutingClassAbnormalLow"/>
      </owl:Restriction>
    </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="RoutingStateDisconnected">
   <rdfs:subClassOf rdf:resource="#Routing"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#LowReachableClusterheadCount"/>
      <owl:Class rdf:about="#LowPathCountToClusterhead"/>
      <owl:Class rdf:about="#HighHopCountToClusterhead"/>
      <owl:Class rdf:about="#LowFavoredRouterCount"/>
   </owl:unionOf>
</owl:Class>

<owl:Class rdf:ID="HighReachableClusterheadCount">
   <owl:intersectionOf rdf:parseType="Collection">
     <owl:Class rdf:about="#Routing"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#reachableClusterheadCount"/>
         <owl:hasValue rdf:resource="#RoutingClassAbnormalHigh"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="HighPathCountToClusterhead">
   <owl:intersectionOf rdf:parseType="Collection">
     <owl:Class rdf:about="#Routing"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#pathCountToClusterhead"/>
         <owl:hasValue rdf:resource="#RoutingClassAbnormalHigh"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="HighFavoredRouterCount">
   <owl:intersectionOf rdf:parseType="Collection">
     <owl:Class rdf:about="#Routing"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#countMostFavoredRouters"/>
         <owl:hasValue rdf:resource="#RoutingClassAbnormalHigh"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="RoutingUnderNodeBasedAttack">
   <rdfs:subClassOf rdf:resource="#Routing"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#HighReachableClusterheadCount"/>
      <owl:Class rdf:about="#HighPathCountToClusterhead"/>
      <owl:Class rdf:about="#HighFavoredRouterCount"/>
   </owl:unionOf>
</owl:Class>

<owl:Class rdf:ID="RoutingUnderDistanceAttack">
   <owl:intersectionOf rdf:parseType="Collection">
     <owl:Class rdf:about="#Routing"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hopCountToClusterhead"/>
         <owl:hasValue rdf:resource="#RoutingClassAbnormalLow"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="RoutingUnderDoS">
   <rdfs:subClassOf rdf:resource="#Routing"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#RoutingUnderNodeBasedAttack"/>
      <owl:Class rdf:about="#RoutingUnderDistanceAttack"/>
   </owl:intersectionOf>
</owl:Class>

<!-- #################################################################### --> 
<!-- Neighborhood State -->
<!-- #################################################################### --> 

<owl:Class rdf:ID="NeighborhoodStateNormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Neighborhood"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#compromisedLinkCount"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#compromisedNeighborCount"/>
         <owl:hasValue rdf:resource="#Amount_Normal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#failedNeighborCount"/>
         <owl:hasValue rdf:resource="#NbClassNormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#nodeDegree"/>
         <owl:hasValue rdf:resource="#NbClassNormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="CompromisedLinkCountAbnormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Neighborhood"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#compromisedLinkCount"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="CompromisedNeighborCountAbnormal">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Neighborhood"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#compromisedNeighborCount"/>
         <owl:hasValue rdf:resource="#Amount_Abnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="NeighborhoodCompromised">
   <rdfs:subClassOf rdf:resource="#Neighborhood"/>
   <owl:unionOf rdf:parseType="Collection">
       <owl:Class rdf:about="#CompromisedLinkCountAbnormal"/>
       <owl:Class rdf:about="#CompromisedNeighborCountAbnormal"/>
   </owl:unionOf>
</owl:Class>

<owl:Class rdf:ID="FailedNeighborCountHigh">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Neighborhood"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#failedNeighborCount"/>
         <owl:hasValue rdf:resource="#NbClassHigh"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>
<owl:Class rdf:ID="FailedNeighborCountAbnormalHigh">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Neighborhood"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#failedNeighborCount"/>
         <owl:hasValue rdf:resource="#NbClassAbnormalHigh"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="LowNodeDegree">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Neighborhood"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#nodeDegree"/>
         <owl:hasValue rdf:resource="#NbClassLow"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="NeighborhoodLowConnects">
   <rdfs:subClassOf rdf:resource="#Neighborhood"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#LowNodeDegree"/>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="AbnormalLowNodeDegree">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Neighborhood"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#nodeDegree"/>
         <owl:hasValue rdf:resource="#NbClassAbnormalLow"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="NeighborhoodDisconnectImminent">
   <rdfs:subClassOf rdf:resource="#Neighborhood"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#FailedNeighborCountHigh"/>
      <owl:Class rdf:about="#LowNodeDegree"/>
   </owl:unionOf>
</owl:Class>

<owl:Class rdf:ID="NeighborhoodDisconnected">
   <rdfs:subClassOf rdf:resource="#Neighborhood"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#FailedNeighborCountAbnormal"/>
      <owl:Class rdf:about="#AbnormalLowNodeDegree"/>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="NeighborhoodImminentNodeBasedAttack">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Neighborhood"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#nodeDegree"/>
         <owl:hasValue rdf:resource="#NbClassHigh"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="NeighborhoodUnderNodeBasedAttack">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#Neighborhood"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#nodeDegree"/>
         <owl:hasValue rdf:resource="#NbClassAbnormalHigh"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="NeighborhoodUnderDoS">
   <rdfs:subClassOf rdf:resource="#Neighborhood"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#NeighborhoodDisconnected"/>
      <owl:Class rdf:about="#NeighborhoodCompromised"/>
   </owl:intersectionOf>
</owl:Class>

<!-- #################################################################### --> 
<!-- SensorNode States -->
<!-- #################################################################### --> 

<owl:Class rdf:ID="SensorNodeStateNormal">
   <rdfs:subClassOf rdf:resource="#SensorNode"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasEnergyComponent"/>
         <owl:someValuesFrom rdf:resource="#EnergyStateNormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasPHYComponent"/>
         <owl:someValuesFrom rdf:resource="#PHYStateNormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasMACComponent"/>
         <owl:someValuesFrom rdf:resource="#MACStateNormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasRoutingComponent"/>
         <owl:someValuesFrom rdf:resource="#RoutingStateNormal"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasNeighborhoodComponent"/>
         <owl:someValuesFrom rdf:resource="#NeighborhoodStateNormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeNonFunctional">
   <owl:intersectionOf rdf:parseType="Collection">
     <owl:Class rdf:about="#SensorNode"/>
     <owl:Restriction>
        <owl:onProperty rdf:resource="#hasEnergyComponent"/>
        <owl:someValuesFrom rdf:resource="#DischargedEnergyState"/>
     </owl:Restriction>
  </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeInLowEnergyState">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SensorNode"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasEnergyComponent"/>
         <owl:someValuesFrom rdf:resource="#LowEnergyState"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodePHYJammed">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SensorNode"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasPHYComponent"/>
         <owl:someValuesFrom rdf:resource="#PHYStateJammed"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeMACJammed">
   <owl:intersectionOf rdf:parseType="Collection"> 
      <owl:Class rdf:about="#SensorNode"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasMACComponent"/>
         <owl:someValuesFrom rdf:resource="#MACFailedTransmitsAbnormal"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeJammed">
   <rdfs:subClassOf rdf:resource="#SensorNode"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SensorNodePHYJammed"/>
      <owl:Class rdf:about="#SensorNodeMACJammed"/>
   </owl:unionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeStarvationImminent">
   <rdfs:subClassOf rdf:resource="#SensorNode"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Restriction>
	 <owl:onProperty rdf:resource="#hasPHYComponent"/>
	 <owl:someValuesFrom rdf:resource="#PHYUnderStarvationAttack"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasMACComponent"/>
         <owl:someValuesFrom rdf:resource="#MACUnderRxDoS"/>
      </owl:Restriction>
   </owl:unionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeUnderStarvationAttackPHY">
   <rdfs:subClassOf rdf:resource="#SensorNode"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasEnergyComponent"/>
         <owl:someValuesFrom rdf:resource="#ImminentLowEnergyState"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasPHYComponent"/>
         <owl:someValuesFrom rdf:resource="#PHYUnderStarvationAttack"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeUnderStarvationAttackMAC">
   <rdfs:subClassOf rdf:resource="#SensorNode"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasEnergyComponent"/>
         <owl:someValuesFrom rdf:resource="#ImminentLowEnergyState"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasMACComponent"/>
         <owl:someValuesFrom rdf:resource="#MACUnderRxDoS"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeOutOfRange">
   <rdfs:subClassOf rdf:resource="#SensorNode"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasPHYComponent"/>
         <owl:someValuesFrom rdf:resource="#PHYStateOutOfRange"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasMACComponent"/>
         <owl:someValuesFrom rdf:resource="#MACUnderTxDoS"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeCommLinkUnderDoS">
   <rdfs:subClassOf rdf:resource="#SensorNode"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasPHYComponent"/>
         <owl:someValuesFrom rdf:resource="#PHYUnderDoS"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasMACComponent"/>
         <owl:someValuesFrom rdf:resource="#MACUnderRxTxDoS"/>
      </owl:Restriction>
   </owl:intersectionOf>
 </owl:Class>

<owl:Class rdf:ID="SensorNodeRouteDisconnected">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SensorNode"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasRoutingComponent"/>
         <owl:someValuesFrom rdf:resource="#RoutingStateDisconnected"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeImminentNodeBasedAttack">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SensorNode"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasNeighborhoodComponent"/>
         <owl:someValuesFrom rdf:resource="#NeighborhoodImminentNodeBasedAttack"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeUnderNodeBasedAttack">
   <rdfs:subClassOf rdf:resource="#SensorNode"/>
   <owl:unionOf rdf:parseType="Collection">
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasRoutingComponent"/>
         <owl:someValuesFrom rdf:resource="#RoutingUnderNodeBasedAttack"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasNeighborhoodComponent"/>
         <owl:someValuesFrom rdf:resource="#NeighborhoodUnderNodeBasedAttack"/>
      </owl:Restriction>
   </owl:unionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeUnderDistanceAttack">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SensorNode"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasRoutingComponent"/>
         <owl:someValuesFrom rdf:resource="#RoutingUnderDistanceAttack"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeLowConnects">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SensorNode"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasNeighborhoodComponent"/>
         <owl:someValuesFrom rdf:resource="#NeighborhoodLowConnects"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeNeighborsDisconnectImminent">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SensorNode"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasNeighborhoodComponent"/>
         <owl:someValuesFrom rdf:resource="#NeighborhoodDisconnectImminent"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeNeighborsDisconnected">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SensorNode"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasNeighborhoodComponent"/>
         <owl:someValuesFrom rdf:resource="#NeighborhoodDisconnected"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeNeighborhoodCompromised">
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SensorNode"/>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasNeighborhoodComponent"/>
         <owl:someValuesFrom rdf:resource="#NeighborhoodCompromised"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeL3Disconnected">
   <rdfs:subClassOf rdf:resource="#SensorNode"/>   
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#SensorNodeJammed"/>
      <owl:Class rdf:about="#SensorNodeRouteDisconnected"/>
      <owl:Class rdf:about="#SensorNodeNeighborsDisconnected"/>
   </owl:intersectionOf>
</owl:Class>

<owl:Class rdf:ID="SensorNodeUnderDoS">
   <rdfs:subClassOf rdf:resource="#SensorNode"/>
   <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasPHYComponent"/>
         <owl:someValuesFrom rdf:resource="#PHYUnderDoS"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasMACComponent"/>
         <owl:someValuesFrom rdf:resource="#MACUnderRxTxDoS"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasRoutingComponent"/>
         <owl:someValuesFrom rdf:resource="#RoutingUnderDoS"/>
      </owl:Restriction>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasNeighborhoodComponent"/>
         <owl:someValuesFrom rdf:resource="#NeighborhoodUnderDoS"/>
      </owl:Restriction>
   </owl:intersectionOf>
</owl:Class>

</rdf:RDF>
