@prefix ns1: <http://data.ashrae.org/standard223#> .
@prefix ns2: <http://qudt.org/schema/qudt/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix watr: <urn:nawi-water-ontology#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

watr:Class a rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Class" ;
    rdfs:comment "This is a modeling construct. All classes defined in the watr ontology are instances of `watr:Class`." ;
    rdfs:subClassOf rdfs:Class ;
    sh:property [ rdfs:comment "A `Class` must be associated with at least one label using the relation `rdfs:label`." ;
            sh:minCount 1 ;
            sh:path rdfs:label ;
            sh:severity sh:Warning ] .

watr:UnitProcess a rdfs:Class ;
    rdfs:label "Unit Process" ;
    rdfs:comment "A unit process is a specific type of water treatment process that can be applied to water." ;
    rdfs:subClassOf ns1:Equipment,
        watr:Class ;
    sh:property [ sh:class watr:Process ;
            sh:message "A `Unit Process` must be associated with at least one water treatment process using the relation `watr:hasProcess`." ;
            sh:minCount 1 ;
            sh:path watr:hasProcess ] .

<urn:nawi-water-ontology> a owl:Ontology ;
    owl:imports <http://data.ashrae.org/standard223/1.0/model/all>,
        <http://qudt.org/3.3.0/vocab/quantitykind>,
        <http://qudt.org/3.3.0/vocab/unit>,
        sh: .

watr:AerationBasin a sh:NodeShape,
        watr:Class ;
    rdfs:label "Aeration Basin" ;
    rdfs:comment "A tank where water is aerated to remove gases and volatile organic compounds" ;
    rdfs:subClassOf watr:Reactor ;
    sh:property [ sh:message "Instances of AerationBasin must have the Aeration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Aeration ] ;
            sh:qualifiedValueShapesDisjoint true ],
        [ sh:in ( watr:Role-Aerobic watr:Role-Anoxic ) ;
            sh:message "Instances of AerationBasin must have the aerobic role." ;
            sh:minCount 1 ;
            sh:path ns1:hasRole ] .

watr:AerobicDigester a sh:NodeShape,
        watr:Class ;
    rdfs:label "Aerobic Digester" ;
    rdfs:comment "A container to promote decomposition of organic waste in aerobic conditions" ;
    rdfs:subClassOf watr:Digester ;
    sh:property [ sh:message "Instances of AerobicDigester must have the AerobicDigestion process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-AerobicDigestion ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:AirReleaseValve a ns1:Class,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Air Release Valve" ;
    rdfs:comment "Valve for vent trapped air pockets" ;
    rdfs:subClassOf ns1:Valve .

watr:AnaerobicDigester a sh:NodeShape,
        watr:Class ;
    rdfs:label "Anaerobic Digester" ;
    rdfs:comment "A container to promote decomposition of organic waste in anaerobic conditions" ;
    rdfs:subClassOf watr:Digester ;
    sh:property [ sh:message "Instances of AnaerobicDigester must have the AnaerobicDigestion process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-AnaerobicDigestion ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Anode a sh:NodeShape,
        watr:Class ;
    rdfs:label "Anode" ;
    rdfs:comment "An electrode where oxidation occurs, often a sacrificial component in electrocoagulation." ;
    rdfs:subClassOf watr:Electrode .

watr:BallValve a ns1:Class,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Ball Valve" ;
    rdfs:comment "A valve which operates using a spherical ball with a hole (also known as a bore) through the middle." ;
    rdfs:subClassOf ns1:Valve .

watr:Battery a sh:NodeShape,
        watr:Class ;
    rdfs:label "Battery" ;
    rdfs:comment "A device that stores energy for later use" ;
    rdfs:subClassOf ns1:Battery .

watr:BeltFilterPress a sh:NodeShape,
        watr:Class ;
    rdfs:label "Belt Filter Press" ;
    rdfs:comment "A dewatering unit that uses a belt system to separate solids from liquids" ;
    rdfs:subClassOf watr:DewateringUnit ;
    sh:property [ sh:hasValue watr:Process-Filtration ;
            sh:maxCount 1 ;
            sh:message "Instances of BeltFilterPress must have the Filtration process." ;
            sh:minCount 1 ;
            sh:path watr:hasProcess ] .

watr:BiologicalAeratedFilter a sh:NodeShape,
        watr:Class ;
    rdfs:label "Biological Aerated Filter (BAF)" ;
    rdfs:comment "A filter that uses biological processes to remove contaminants." ;
    rdfs:subClassOf watr:Filter,
        watr:Reactor ;
    sh:property [ sh:message "Instances of BiologicalAeratedFilter must have the BiologicallyActiveFiltration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-BiologicallyActiveFiltration ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Boiler a sh:NodeShape,
        watr:Class ;
    rdfs:label "Boiler" ;
    rdfs:comment "A device for heating water" ;
    rdfs:subClassOf ns1:Boiler,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of Boiler must have the Incineration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Incineration ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:ButterflyValve a ns1:Class,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Butterfly Valve" ;
    rdfs:comment "A quarter-turn rotary valve used to isolate, start, stop, or regulate the flow of fluids" ;
    rdfs:subClassOf ns1:Valve .

watr:CartridgeFiltrationUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "Cartridge Filtration Unit" ;
    rdfs:comment "A filter system using a cartridge to remove contaminants from fluids" ;
    rdfs:subClassOf watr:Filter .

watr:Cathode a sh:NodeShape,
        watr:Class ;
    rdfs:label "Cathode" ;
    rdfs:comment "An electrode where reduction occurs." ;
    rdfs:subClassOf watr:Electrode .

watr:CentrifugalDewateringUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "Centrifugal Dewatering Unit" ;
    rdfs:comment "A dewatering unit that uses centrifugal force to separate solids from liquids" ;
    rdfs:subClassOf watr:DewateringUnit ;
    sh:property [ sh:hasValue watr:Process-Centrifugation ;
            sh:maxCount 1 ;
            sh:message "Instances of CentrifugalDewateringUnit must have the Centrifugation process." ;
            sh:minCount 1 ;
            sh:path watr:hasProcess ] .

watr:CentrifugalThickener a sh:NodeShape,
        watr:Class ;
    rdfs:label "Centrifugal Thickener" ;
    rdfs:comment "A thickener that uses centrifugal force to separate solids from liquids" ;
    rdfs:subClassOf watr:Thickener ;
    sh:property [ sh:message "Instances of CentrifugalThickener must have the Centrifugation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Centrifugation ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:CheckValve a ns1:Class,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Check Valve" ;
    rdfs:comment "A valve that normally allows fluid (liquid or gas) to flow through it in only one direction" ;
    rdfs:subClassOf ns1:Valve .

watr:ChlorinationUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "Chlorination Unit" ;
    rdfs:comment "A unit that uses chlorine or chlorine compounds for disinfection." ;
    rdfs:subClassOf watr:DisinfectionUnit ;
    sh:property [ sh:message "Instances of ChlorinationUnit must have the Chlorination process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Chlorination ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:CoagulationBasin a sh:NodeShape,
        watr:Class ;
    rdfs:label "Coagulation Basin" ;
    rdfs:comment "A basin where coagulation occurs to destabilize particles in water" ;
    rdfs:subClassOf watr:Reactor ;
    sh:property [ sh:message "Instances of CoagulationBasin must have the Coagulation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Coagulation ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Cogenerator a sh:NodeShape,
        watr:Class ;
    rdfs:label "Cogenerator" ;
    rdfs:comment "An equipment that produces both electricity and heat from the same energy source" ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of Cogenerator must have the Cogeneration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Cogeneration ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Compressor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Compressor" ;
    rdfs:comment "An equipment that increases the pressure of a gas" ;
    rdfs:subClassOf ns1:Compressor .

watr:Condenser a sh:NodeShape,
        watr:Class ;
    rdfs:label "Condenser" ;
    rdfs:comment "A device used to condense a gaseous substance back into a liquid" ;
    rdfs:subClassOf ns1:HeatExchanger,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of Condenser must have the Condensation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Condensation ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Conditioner a sh:NodeShape,
        watr:Class ;
    rdfs:label "Conditioner" ;
    rdfs:comment "An equipment used to prepare raw biogas from a digester by removing impurities" ;
    rdfs:subClassOf ns1:Equipment .

watr:ConductivitySensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Conductivity Sensor" ;
    rdfs:comment "A sensor used to measure the electrical conductivity of a solution" ;
    rdfs:subClassOf ns1:Sensor .

watr:ContinuouslyStirredTankReactor a sh:NodeShape,
        watr:Class ;
    rdfs:label "ContinuouslyStirredTankReactor" ;
    rdfs:comment "A reactor in which contents are well mixed and reactants are added continuously" ;
    rdfs:subClassOf watr:Reactor .

watr:Controller a ns1:Class,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Controller" ;
    rdfs:comment "A piece of equipment for regulation of a system or component in normal operation, which executes one or more `Function`s." ;
    rdfs:subClassOf ns1:Controller .

watr:Crystallizer a sh:NodeShape,
        watr:Class ;
    rdfs:label "Crystallizer" ;
    rdfs:comment "An equipment used to produce solid crystals from a solution" ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of Crystallizer must have the Crystallization process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Crystallization ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:DMERecoverySystem a sh:NodeShape,
        watr:Class ;
    rdfs:label "Dimethyl Ether (DME) Recovery System" ;
    rdfs:comment "A system designed to recover a high percentage of Dimethyl Ether solvent in solvent-driven processes." ;
    rdfs:subClassOf ns1:Equipment .

watr:DissolvedAirFlotationThickener a sh:NodeShape,
        watr:Class ;
    rdfs:label "Dissolved Air Flotation Thickener" ;
    rdfs:comment "A thickener that uses dissolved air to separate solids from liquids" ;
    rdfs:subClassOf watr:Thickener ;
    sh:property [ sh:message "Instances of DissolvedAirFlotationThickener must have the Flotation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Flotation ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:EfficiencySensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Efficiency Sensor" ;
    rdfs:comment "A sensor used to measure the efficiency of a system or equipment" ;
    rdfs:subClassOf ns1:Sensor .

watr:ElectricallyConductingMembrane a sh:NodeShape,
        watr:Class ;
    rdfs:label "Electrically Conducting Membrane" ;
    rdfs:comment "A membrane capable of conducting electricity, used for in-situ cleaning or electro-oxidation processes." ;
    rdfs:subClassOf watr:Filter .

watr:ElectroDialyticCrystallizer a sh:NodeShape,
        watr:Class ;
    rdfs:label "Electro-Dialytic Crystallizer (EDC)" ;
    rdfs:comment "A modular system designed for brine concentration and crystallization, integrating electrodialysis and crystallization." ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of ElectroDialyticCrystallizer must have the Crystallization process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Crystallization ] ;
            sh:qualifiedValueShapesDisjoint true ],
        [ sh:message "Instances of ElectroDialyticCrystallizer must have the Electrodialysis process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Electrodialysis ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:ElectrocoagulationUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "Electrocoagulation Unit" ;
    rdfs:comment "A unit that uses electrocoagulation for contaminant removal." ;
    rdfs:subClassOf ns1:Equipment,
        watr:Reactor ;
    sh:property [ sh:message "Instances of ElectrocoagulationUnit must have the Electrocoagulation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Electrocoagulation ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:ElectrodialysisUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "Electrodialysis" ;
    rdfs:comment "A unit that uses electricity to drive ion movement through a membrane" ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of ElectrodialysisUnit must have the Electrodialysis process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Electrodialysis ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Electrolyzer a sh:NodeShape,
        watr:Class ;
    rdfs:label "Electrolyzer" ;
    rdfs:comment "An equipment that uses electricity to split liquids into constituent elements" ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of Electrolyzer must have the Electrolysis process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Electrolysis ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:ElectromagneticFieldDevice a sh:NodeShape,
        watr:Class ;
    rdfs:label "Electromagnetic Field (EMF) Device" ;
    rdfs:comment "A device that generates an electromagnetic field, used as a pretreatment method for membrane scaling and fouling control." ;
    rdfs:subClassOf ns1:Equipment .

watr:EnumerationKind-DataProcessing a ns1:EnumerationKind-DataQuality,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "DataQuality" ;
    rdfs:comment "This EnumerationKind describes methods of data processing, aggregation, or imputation" ;
    rdfs:subClassOf ns1:EnumerationKind .

watr:EnumerationKind-Runtime a ns1:EnumerationKind,
        ns1:EnumerationKind-Runtime,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Runtime" ;
    rdfs:subClassOf ns1:EnumerationKind .

watr:Evaporator a sh:NodeShape,
        watr:Class ;
    rdfs:label "Evaporator" ;
    rdfs:comment "A device used to turn the liquid form of a substance into its gaseous form" ;
    rdfs:subClassOf ns1:HeatExchanger,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of Evaporator must have the Evaporation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Evaporation ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Flare a sh:NodeShape,
        watr:Class ;
    rdfs:label "Flare" ;
    rdfs:comment "A device used to burn off unwanted gas" ;
    rdfs:subClassOf ns1:Equipment .

watr:FlocculationBasin a sh:NodeShape,
        watr:Class ;
    rdfs:label "Flocculation Basin" ;
    rdfs:comment "A tank where flocculation occurs to aggregate particles in water" ;
    rdfs:subClassOf watr:Reactor ;
    sh:property [ sh:message "Instances of FlocculationBasin must have the Flocculation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Flocculation ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:FlowSensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Flow Sensor" ;
    rdfs:comment "A sensor used to measure the flow rate of liquids or gases" ;
    rdfs:subClassOf ns1:FlowSensor .

watr:FrequencySensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Frequency Sensor" ;
    rdfs:comment "A sensor used to measure the frequency of a signal or mechanical vibration" ;
    rdfs:subClassOf ns1:Sensor .

watr:GlobeValve a ns1:Class,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Globe Valve" ;
    rdfs:comment "A linear-motion valve primarily used for stopping, starting, and regulating (throttling) fluid flow" ;
    rdfs:subClassOf ns1:Valve .

watr:GranularActivatedCarbonAdsorber a sh:NodeShape,
        watr:Class ;
    rdfs:label "Granular Activated Carbon (GAC) Adsorber" ;
    rdfs:comment "A unit that uses granulated activated carbon to adsorb impurities from water." ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of GranulatedActivatedCarbonAdsorber must have the GranularActivatedCarbon process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-GranularActivatedCarbon ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:GravityBeltThickener a sh:NodeShape,
        watr:Class ;
    rdfs:label "Gravity Belt Thickener" ;
    rdfs:comment "A thickener that combines gravity separation with a belt system" ;
    rdfs:subClassOf watr:BeltThickener,
        watr:GravityThickener .

watr:Grinder a sh:NodeShape,
        watr:Class ;
    rdfs:label "Grinder" ;
    rdfs:comment "Machine that shreds solid waste into tiny particles" ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of Grinder must have the Comminution process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Comminution ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:GritChamber a sh:NodeShape,
        watr:Class ;
    rdfs:label "Grit Chamber" ;
    rdfs:comment "A chamber used to remove grit from wastewater" ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of GritChamber must have the Sedimentation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Sedimentation ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:ImhoffTank a sh:NodeShape,
        watr:Class ;
    rdfs:label "Imhoff Tank" ;
    rdfs:comment "A sedimentation tank specifically designed for septic treatment" ;
    rdfs:subClassOf watr:SepticTank .

watr:IonExchangeMembrane a sh:NodeShape,
        watr:Class ;
    rdfs:label "Ion Exchange Membrane" ;
    rdfs:comment "A membrane that selectively allows ions to pass through while blocking other substances" ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of IonExchangeMembrane must have the IonExchange process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-IonExchange ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:LevelSensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Level Sensor" ;
    rdfs:comment "A sensor used to detect the level of liquids or solids in a tank" ;
    rdfs:subClassOf ns1:Sensor .

watr:ManualMeasurementPort a sh:NodeShape,
        watr:Class ;
    rdfs:label "Manual Measurement Port" ;
    rdfs:comment "A location where manual measurements are taken" ;
    rdfs:subClassOf ns1:Sensor .

watr:MembraneAeratedBiofilmReaactor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Membrane Aerated Biofilm Reactor" ;
    rdfs:comment "A reactor that grows biofilm on membranes supplied with air" ;
    rdfs:subClassOf watr:Reactor ;
    sh:property [ sh:message "Instances of MembraneAeratedBiofilmReactor must have the Aeration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Aeration ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:MembraneBioreactor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Membrane Bioreactor" ;
    rdfs:comment "A filter system that combines a membrane process like microfiltration with a biological reactor" ;
    rdfs:subClassOf watr:Filter,
        watr:Reactor,
        watr:SeparationTank ;
    sh:property [ sh:message "Instances of MembraneBioreactor must have either the Microfiltration or Ultrafiltration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:in ( watr:Process-Microfiltration watr:Process-Ultrafiltration ) ] ;
            sh:qualifiedValueShapesDisjoint true ],
        [ sh:hasValue watr:Process-Biofiltration ;
            sh:maxCount 1 ;
            sh:message "Instances of MembraneBioreactor must have the Biofiltration process." ;
            sh:minCount 1 ;
            sh:path watr:hasProcess ] .

watr:MicrofiltrationUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "Microfiltration Unit" ;
    rdfs:comment "A filter system which removes contaminants from a liquid by passing it through a microporous membrane" ;
    rdfs:subClassOf watr:Filter ;
    sh:property [ sh:message "Instances of MicrofiltrationUnit must have the Microfiltration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Microfiltration ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:MixingBasin a sh:NodeShape,
        watr:Class ;
    rdfs:label "Mixing Basin" ;
    rdfs:comment "A tank where mixed liquor is stirred without aeration" ;
    rdfs:subClassOf watr:Reactor ;
    sh:property [ sh:message "Instances of MixingBasin must have the Mixing process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Mixing ] ;
            sh:qualifiedValueShapesDisjoint true ],
        [ sh:in ( watr:Role-Anoxic watr:Role-Anaerobic ) ;
            sh:message "Instances of MixingBasin must have the anoxic or anaerobic role." ;
            sh:minCount 1 ;
            sh:path ns1:hasRole ] .

watr:MolybdenumSulfideBasedMembrane a sh:NodeShape,
        watr:Class ;
    rdfs:label "Molybdenum Sulfide (MoS2)-based Membrane" ;
    rdfs:comment "A specific material demonstrating effectiveness in removing heavy metals and oxyanions with high selectivity." ;
    rdfs:subClassOf watr:Filter .

watr:MovingBedBioreactor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Moving Bed Bioreactor (MBBR)" ;
    rdfs:comment "MBBR process using suspended growth media a tank" ;
    rdfs:subClassOf watr:Filter ;
    sh:property [ sh:hasValue watr:Process-Biofiltration ;
            sh:maxCount 1 ;
            sh:message "Instances of MovingBedBioreactor must have the Biofiltration process." ;
            sh:minCount 1 ;
            sh:path watr:hasProcess ] .

watr:MultifunctionalMembrane a sh:NodeShape,
        watr:Class ;
    rdfs:label "Multifunctional Membrane" ;
    rdfs:comment "A membrane integrating multiple processes (e.g., reduction, adsorption, filtration) for selective removal and recovery of contaminants." ;
    rdfs:subClassOf watr:Filter .

watr:NanofiltrationUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "Nanofiltration Unit" ;
    rdfs:comment "A filter system that uses a membrane to soften water and remove organic contaminants" ;
    rdfs:subClassOf watr:Filter .

watr:OxidationDitch a sh:NodeShape,
        watr:Class ;
    rdfs:label "Oxidation Ditch" ;
    rdfs:comment "Modified activated sludge process that uses a ring-shaped channel to biologically remove pollutants" ;
    rdfs:subClassOf watr:Reactor ;
    sh:property [ sh:message "Instances of OxidationDitch must have the ActivatedSludge process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-ActivatedSludge ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:OxygenDemandSensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "OxygenDemand Sensor" ;
    rdfs:comment "A sensor used to measure Chemical Oxygen Demand (COD) and Biological Oxygen Demand (BOD)" ;
    rdfs:subClassOf ns1:Sensor .

watr:OxygenMeter a sh:NodeShape,
        watr:Class ;
    rdfs:label "Oxygen Meter" ;
    rdfs:comment "A sensor used to measure the concentration of oxygen" ;
    rdfs:subClassOf ns1:ConcentrationSensor .

watr:OzonationUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "Ozonation Unit" ;
    rdfs:comment "A unit that uses ozone for water treatment." ;
    rdfs:subClassOf ns1:Equipment,
        watr:Reactor ;
    sh:property [ sh:message "Instances of OzonationUnit must have the Ozonation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Ozonation ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:PlugFlowReactor a sh:NodeShape,
        watr:Class ;
    rdfs:label "PlugFlowReactor" ;
    rdfs:comment "A type of reactor where the fluid flows in one direction through the tube" ;
    rdfs:subClassOf watr:Reactor ;
    sh:property [ rdfs:comment "A plug flow reactor has at least one inlet fluid connection point" ;
            sh:path ns1:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class ns1:InletConnectionPoint ;
                    sh:property [ sh:class ns1:Mix-Fluid ;
                            sh:path ns1:hasMedium ] ] ],
        [ rdfs:comment "A plug flow reactor has at least one outlet fluid connection point" ;
            sh:path ns1:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class ns1:OutletConnectionPoint ;
                    sh:property [ sh:class ns1:Mix-Fluid ;
                            sh:path ns1:hasMedium ] ] ] .

watr:PlugValve a ns1:Class,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Plug Valve" ;
    rdfs:comment "A valve with cylindrical or conically tapered plugs which can be rotated inside the valve body to control flow through the valve" ;
    rdfs:subClassOf ns1:Valve .

watr:Pond a sh:NodeShape,
        watr:Class ;
    rdfs:label "Pond" ;
    rdfs:comment "A body of still water smaller than a lake, used for treatment or storage." ;
    rdfs:subClassOf ns1:Equipment .

watr:PressureExchanger a sh:NodeShape,
        watr:Class ;
    rdfs:label "PressureExchanger" ;
    rdfs:comment "A device used to transfer pressure energy from one fluid to another" ;
    rdfs:subClassOf ns1:Equipment .

watr:PressureSensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Pressure Sensor" ;
    rdfs:comment "A sensor used to measure pressure" ;
    rdfs:subClassOf ns1:PressureSensor .

watr:Pump a sh:NodeShape,
        watr:Class ;
    rdfs:label "Pump" ;
    rdfs:comment "A device used to move fluids by mechanical action" ;
    rdfs:subClassOf ns1:Pump .

watr:RapidSandFilter a sh:NodeShape,
        watr:Class ;
    rdfs:label "Rapid Sand Filter" ;
    rdfs:comment "A type of media filter that uses sand as the filter medium and operates at high filtration rates." ;
    rdfs:subClassOf watr:MediaFiltrationUnit ;
    sh:property [ sh:message "Instances of RapidSandFilter must have the RapidSandFiltration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-RapidSandFiltration ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Reservoir a sh:NodeShape,
        watr:Class ;
    rdfs:label "Reservoir" ;
    rdfs:comment "A large natural or artificial body of water used for water supply" ;
    rdfs:subClassOf ns1:Equipment .

watr:ReverseOsmosisMembrane a sh:NodeShape,
        watr:Class ;
    rdfs:label "Reverse Osmosis Membrane" ;
    rdfs:comment "A membrane used for reverse osmosis" ;
    rdfs:subClassOf watr:Filter ;
    sh:property [ sh:message "Instances of ReverseOsmosisMembrane must have the ReverseOsmosis process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-ReverseOsmosis ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Role-Feed a ns1:EnumerationKind-Role,
        ns1:Role-Feed,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Feed" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-MakeUp a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Makeup ;
    rdfs:label "MakeUp" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:RotaryDrumThickener a sh:NodeShape,
        watr:Class ;
    rdfs:label "Rotary Drum Thickener" ;
    rdfs:comment "A thickener that uses a rotating drum to separate solids from liquids" ;
    rdfs:subClassOf watr:Thickener ;
    sh:property [ sh:message "Instances of RotaryDrumThickener must have the Filtration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Filtration ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:RotatingBiologicalContactor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Rotating Biological Contactor (RBC)" ;
    rdfs:comment "Fixed-film process using a slowly rotating discs partially submerged in a tank" ;
    rdfs:subClassOf watr:Filter ;
    sh:property [ sh:message "Instances of RotatingBiologicalContactor must have the Biofiltration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Biofiltration ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:RotationSensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Rotation Sensor" ;
    rdfs:comment "A sensor used to measure the rotational speed or position of an object" ;
    rdfs:subClassOf ns1:Sensor .

watr:Screen a sh:NodeShape,
        watr:Class ;
    rdfs:label "Screen" ;
    rdfs:comment "An equipment used for separation" ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of Screen must have the Screening process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Screening ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:SequencingBatchReactor a sh:NodeShape,
        watr:Class ;
    rdfs:label "SequencingBatchReactor" ;
    rdfs:comment "A type of activated sludge process for wastewater treatment" ;
    rdfs:subClassOf watr:Reactor,
        watr:SeparationTank ;
    sh:property [ rdfs:comment "A SBR has at least 1 sludge return point" ;
            sh:path ns1:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class ns1:OutletConnectionPoint ;
                    sh:property [ sh:class watr:Fluid-Sludge ;
                            sh:path ns1:hasMedium ] ] ],
        [ sh:message "Instances of SequencingBatchReactor must have the ActivatedSludge process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-ActivatedSludge ] ;
            sh:qualifiedValueShapesDisjoint true ] ;
    sh:xone ( [ sh:property [ rdfs:comment "A SBR has at least 1 inlet fluid connection point" ;
                        sh:path ns1:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class ns1:InletConnectionPoint ;
                                sh:property [ sh:class ns1:Mix-Fluid ;
                                        sh:path ns1:hasMedium ] ] ],
                    [ rdfs:comment "A SBR has at least 1 outlet fluid connection point" ;
                        sh:path ns1:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class ns1:OutletConnectionPoint ;
                                sh:property [ sh:class ns1:Mix-Fluid ;
                                        sh:path ns1:hasMedium ] ] ] ] [ sh:property [ rdfs:comment "A SBR has at least 1 bidirectional fluid connection point" ;
                        sh:path ns1:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class ns1:BidirectionalConnectionPoint ;
                                sh:property [ sh:class ns1:Mix-Fluid ;
                                        sh:path ns1:hasMedium ] ] ] ] ) .

watr:SluiceGate a ns1:Class,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Sluice Gate" ;
    rdfs:comment "Large gate that slide vertically to control flow in channels, reservoirs, or treatment basins" ;
    rdfs:subClassOf watr:Gate .

watr:SolventExtractionSystem a sh:NodeShape,
        watr:Class ;
    rdfs:label "Solvent Extraction System" ;
    rdfs:comment "A system that uses a solvent to selectively extract water from highly saline brines." ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of SolventExtractionSystem must have the SolventExtraction process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-SolventExtraction ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:SpeedSensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Speed Sensor" ;
    rdfs:comment "A sensor used to measure the speed of an object or fluid" ;
    rdfs:subClassOf ns1:Sensor .

watr:StandardizedFlowCell a sh:NodeShape,
        watr:Class ;
    rdfs:label "Standardized Flow Cell" ;
    rdfs:comment "An experimental apparatus developed for research experiments, for example in Electrocoagulation (EC), in continuous flow mode." ;
    rdfs:subClassOf ns1:Equipment .

watr:StateOfChargeSensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "State of Charge Sensor" ;
    rdfs:comment "A sensor used to measure the remaining charge in a battery or energy storage system" ;
    rdfs:subClassOf ns1:Sensor .

watr:StaticMixer a sh:NodeShape,
        watr:Class ;
    rdfs:label "StaticMixer" ;
    rdfs:comment "A device for mixing liquids without moving components" ;
    rdfs:subClassOf watr:Reactor ;
    sh:property [ sh:message "Instances of StaticMixer must have the Mixing process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Mixing ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:TemperatureSensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Temperature Sensor" ;
    rdfs:comment "A sensor used to measure temperature" ;
    rdfs:subClassOf ns1:TemperatureSensor .

watr:ThreeWayValve a ns1:Class,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Three Way Valve" ;
    rdfs:comment "A valve that features three ports (connections)" ;
    rdfs:subClassOf ns1:Valve .

watr:TotalOrganicCompoundConcentrationSensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "TOC Sensor" ;
    rdfs:comment "A sensor used to measure the total organic compound concentration" ;
    rdfs:subClassOf watr:ConcentrationSensor .

watr:TricklingFilter a sh:NodeShape,
        watr:Class ;
    rdfs:label "Trickling Filter" ;
    rdfs:comment "A filter system that treats wastewater by trickling it over a bed of rocks or plastic" ;
    rdfs:subClassOf watr:Filter ;
    sh:property [ sh:message "Instances of TricklingFilter must have the TricklingFiltration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-TricklingFiltration ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:TurbidityMeter a sh:NodeShape,
        watr:Class ;
    rdfs:label "Turbidity Meter" ;
    rdfs:comment "A sensor used to measure the turbidity (clarity) of a fluid" ;
    rdfs:subClassOf ns1:Sensor .

watr:UVH2O2Reactor a sh:NodeShape,
        watr:Class ;
    rdfs:label "UV/H2O2 Reactor" ;
    rdfs:comment "A specific reactor used in Advanced Oxidation Processes (AOPs) combining UV light with hydrogen peroxide." ;
    rdfs:subClassOf watr:Reactor ;
    sh:property [ sh:message "Instances of UVH2O2Reactor must have the AdvancedOxidation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-AdvancedOxidation ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:UltrafiltrationUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "Ultrafiltration Unit" ;
    rdfs:comment "A filter system that uses a pressure-driven barrier to separate particles and solutes in a fluid" ;
    rdfs:subClassOf watr:Filter ;
    sh:property [ sh:message "Instances of UltrafiltrationUnit must have the Ultrafiltration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Ultrafiltration ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:UltravioletLightUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "Ultravioletlight Unit" ;
    rdfs:comment "A unit using ultraviolet light for disinfection" ;
    rdfs:subClassOf watr:DisinfectionUnit ;
    sh:property [ sh:message "Instances of UltravioletLightUnit must have the UVDisinfection process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-UVDisinfection ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Valve a ns1:Class,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Valve" ;
    rdfs:comment "A device that regulates, directs or controls the flow of a fluid (gases or liquids) by opening, closing, or partially obstructing various passageways." ;
    rdfs:subClassOf ns1:Valve .

watr:VariableFrequencyDrive a ns1:Class,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Variable Frequency Drive" ;
    rdfs:comment "A type of AC motor drive that controls speed and torque by varying the frequency of the input electricity." ;
    rdfs:subClassOf ns1:VariableFrequencyDrive .

watr:VolumeSensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Volume Sensor" ;
    rdfs:comment "A sensor used to measure the volume of a substance" ;
    rdfs:subClassOf ns1:Sensor .

watr:Wetland a sh:NodeShape,
        watr:Class ;
    rdfs:label "Wetland" ;
    rdfs:comment "A marsh or bog-like area that is permanently or seasonally saturated with water, used for pre- or post-treatment." ;
    rdfs:subClassOf ns1:Equipment .

watr:pHSensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "pH Sensor" ;
    rdfs:comment "A sensor used to measure the pH of a solution" ;
    rdfs:subClassOf watr:ConcentrationSensor .

<urn:nawi-water-ontology/enumerationkinds> rdfs:label "NAWI Water EnumerationKinds Ontology" ;
    rdfs:comment "An ontology for enumerationkinds used in the NAWI project" ;
    owl:imports <http://data.ashrae.org/standard223/1.0/model/all> .

<urn:nawi-water-ontology/equip> rdfs:label "NAWI Water Equipment Ontology" ;
    rdfs:comment "An ontology for water equipment used in the NAWI project" ;
    owl:imports <http://data.ashrae.org/standard223/1.0/model/all> .

<urn:nawi-water-ontology/processtypes> rdfs:label "NAWI Water Process Types Ontology" ;
    rdfs:comment "An ontology for types of unit process" .

<urn:nawi-water-ontology/substances> rdfs:label "NAWI Water Substances Ontology" ;
    rdfs:comment "An ontology for water substances used in the NAWI project" ;
    owl:imports <http://data.ashrae.org/standard223/1.0/model/all> .

watr:Accuracy-ExpandedUncertainty a sh:NodeShape,
        watr:Accuracy-ExpandedUncertainty,
        watr:Class ;
    rdfs:label "Expanded Uncertainty" ;
    rdfs:comment "Total uncertainty multiplied by coverage factor" ;
    rdfs:subClassOf watr:DataProcessing-AccuracyMetrics .

watr:Accuracy-PercentRecovery a sh:NodeShape,
        watr:Accuracy-PercentRecovery,
        watr:Class ;
    rdfs:label "Percent Recovery" ;
    rdfs:comment "Ratio of measured to known value (for spike/recovery tests)" ;
    rdfs:subClassOf watr:DataProcessing-AccuracyMetrics .

watr:Accuracy-RSquared a sh:NodeShape,
        watr:Accuracy-RSquared,
        watr:Class ;
    rdfs:label "R-Squared" ;
    rdfs:comment "Coefficient of determination for calibration curves" ;
    rdfs:subClassOf watr:DataProcessing-AccuracyMetrics .

watr:Accuracy-TotalUncertainty a sh:NodeShape,
        watr:Accuracy-TotalUncertainty,
        watr:Class ;
    rdfs:label "Total Uncertainty" ;
    rdfs:comment "Combined standard uncertainty from all sources" ;
    rdfs:subClassOf watr:DataProcessing-AccuracyMetrics .

watr:Aggregate-Count a sh:NodeShape,
        watr:Aggregate-Count,
        watr:Class ;
    rdfs:label "Count" ;
    rdfs:comment "Count of data points" ;
    rdfs:subClassOf watr:DataProcessing-Aggregate .

watr:Aggregate-Max a sh:NodeShape,
        watr:Aggregate-Max,
        watr:Class ;
    rdfs:label "Maximum" ;
    rdfs:comment "Maximum value from data points" ;
    rdfs:subClassOf watr:DataProcessing-Aggregate .

watr:Aggregate-Mean a sh:NodeShape,
        watr:Aggregate-Mean,
        watr:Class ;
    rdfs:label "Mean" ;
    rdfs:comment "Arithmetic mean (average) of data points" ;
    rdfs:subClassOf watr:DataProcessing-Aggregate .

watr:Aggregate-Median a sh:NodeShape,
        watr:Aggregate-Median,
        watr:Class ;
    rdfs:label "Median" ;
    rdfs:comment "Middle value of sorted data points" ;
    rdfs:subClassOf watr:DataProcessing-Aggregate .

watr:Aggregate-Min a sh:NodeShape,
        watr:Aggregate-Min,
        watr:Class ;
    rdfs:label "Minimum" ;
    rdfs:comment "Minimum value from data points" ;
    rdfs:subClassOf watr:DataProcessing-Aggregate .

watr:Aggregate-Mode a sh:NodeShape,
        watr:Aggregate-Mode,
        watr:Class ;
    rdfs:label "Mode" ;
    rdfs:comment "Most frequently occurring value in data points" ;
    rdfs:subClassOf watr:DataProcessing-Aggregate .

watr:Aggregate-Range a sh:NodeShape,
        watr:Aggregate-Range,
        watr:Class ;
    rdfs:label "Range" ;
    rdfs:comment "Difference between maximum and minimum values" ;
    rdfs:subClassOf watr:DataProcessing-Aggregate .

watr:Aggregate-StdDev a sh:NodeShape,
        watr:Aggregate-StdDev,
        watr:Class ;
    rdfs:label "Standard Deviation" ;
    rdfs:comment "Standard deviation of data points" ;
    rdfs:subClassOf watr:DataProcessing-Aggregate .

watr:Aggregate-Sum a sh:NodeShape,
        watr:Aggregate-Sum,
        watr:Class ;
    rdfs:label "Sum" ;
    rdfs:comment "Sum of all data points" ;
    rdfs:subClassOf watr:DataProcessing-Aggregate .

watr:Aggregate-Variance a sh:NodeShape,
        watr:Aggregate-Variance,
        watr:Class ;
    rdfs:label "Variance" ;
    rdfs:comment "Variance of data points" ;
    rdfs:subClassOf watr:DataProcessing-Aggregate .

watr:Aggregation-Count a sh:NodeShape,
        watr:Aggregation-Count,
        watr:Class ;
    rdfs:label "Count" ;
    rdfs:comment "The associated property represents a count over an aggregation scope." ;
    rdfs:subClassOf watr:EnumerationKind-Aggregation .

watr:Aggregation-Max a sh:NodeShape,
        watr:Aggregation-Max,
        watr:Class ;
    rdfs:label "Maximum" ;
    rdfs:comment "The associated property represents the maximum value over an aggregation scope." ;
    rdfs:subClassOf watr:EnumerationKind-Aggregation .

watr:Aggregation-Mean a sh:NodeShape,
        watr:Aggregation-Mean,
        watr:Class ;
    rdfs:label "Mean" ;
    rdfs:comment "The associated property represents the arithmetic mean over an aggregation scope." ;
    rdfs:subClassOf watr:EnumerationKind-Aggregation .

watr:Aggregation-Median a sh:NodeShape,
        watr:Aggregation-Median,
        watr:Class ;
    rdfs:label "Median" ;
    rdfs:comment "The associated property represents the median value over an aggregation scope." ;
    rdfs:subClassOf watr:EnumerationKind-Aggregation .

watr:Aggregation-Min a sh:NodeShape,
        watr:Aggregation-Min,
        watr:Class ;
    rdfs:label "Minimum" ;
    rdfs:comment "The associated property represents the minimum value over an aggregation scope." ;
    rdfs:subClassOf watr:EnumerationKind-Aggregation .

watr:Aggregation-Mode a sh:NodeShape,
        watr:Aggregation-Mode,
        watr:Class ;
    rdfs:label "Mode" ;
    rdfs:comment "The associated property represents the most frequently occurring value over an aggregation scope." ;
    rdfs:subClassOf watr:EnumerationKind-Aggregation .

watr:Aggregation-Percentile a sh:NodeShape,
        watr:Aggregation-Percentile,
        watr:Class ;
    rdfs:label "Percentile" ;
    rdfs:comment "The associated property represents the percentile value over an aggregation scope." ;
    rdfs:subClassOf watr:EnumerationKind-Aggregation .

watr:Aggregation-Range a sh:NodeShape,
        watr:Aggregation-Range,
        watr:Class ;
    rdfs:label "Range" ;
    rdfs:comment "The associated property represents the difference between maximum and minimum over an aggregation scope." ;
    rdfs:subClassOf watr:EnumerationKind-Aggregation .

watr:Aggregation-StandardDeviation a sh:NodeShape,
        watr:Aggregation-StandardDeviation,
        watr:Class ;
    rdfs:label "Standard Deviation" ;
    rdfs:comment "The associated property represents the standard deviation over an aggregation scope." ;
    rdfs:subClassOf watr:EnumerationKind-Aggregation .

watr:Aggregation-Sum a sh:NodeShape,
        watr:Aggregation-Sum,
        watr:Class ;
    rdfs:label "Sum" ;
    rdfs:comment "The associated property represents the sum over an aggregation scope." ;
    rdfs:subClassOf watr:EnumerationKind-Aggregation .

watr:Aggregation-Total a sh:NodeShape,
        watr:Aggregation-Total,
        watr:Class ;
    rdfs:label "Total" ;
    rdfs:comment "The associated property represents the total amount of the characterized quantity or substance." ;
    rdfs:subClassOf watr:EnumerationKind-Aggregation ;
    owl:equivalentClass ns1:Aspect-Total .

watr:Aggregation-Variance a sh:NodeShape,
        watr:Aggregation-Variance,
        watr:Class ;
    rdfs:label "Variance" ;
    rdfs:comment "The associated property represents the variance over an aggregation scope." ;
    rdfs:subClassOf watr:EnumerationKind-Aggregation .

watr:BeltThickener a sh:NodeShape,
        watr:Class ;
    rdfs:label "Belt Thickener" ;
    rdfs:comment "A thickener that uses a belt system to separate solids from liquids" ;
    rdfs:subClassOf watr:Thickener ;
    sh:property [ sh:message "Instances of BeltThickener must have the Filtration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Filtration ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Coagulant-Alum a sh:NodeShape,
        watr:Class,
        watr:Coagulant-Alum ;
    rdfs:label "Alum" ;
    rdfs:comment "Aluminum sulfate (alum), a common coagulant" ;
    rdfs:subClassOf watr:Coagulant .

watr:Coagulant-FerricChloride a sh:NodeShape,
        watr:Class,
        watr:Coagulant-FerricChloride ;
    rdfs:label "Ferric Chloride" ;
    rdfs:comment "Ferric chloride, a coagulant for wastewater treatment" ;
    rdfs:subClassOf watr:Coagulant .

watr:Coagulant-PolyaluminumChloride a sh:NodeShape,
        watr:Class,
        watr:Coagulant-PolyaluminumChloride ;
    rdfs:label "Polyaluminum Chloride" ;
    rdfs:comment "Polyaluminum chloride (PAC), a coagulant" ;
    rdfs:subClassOf watr:Coagulant .

watr:Constituent-Ammonia a sh:NodeShape,
        watr:Class,
        watr:Constituent-Ammonia ;
    rdfs:label "Ammonia" ;
    rdfs:comment "Ammonia present as a dissolved nitrogen-bearing constituent of a treatment medium." ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-Bacteria a sh:NodeShape,
        watr:Class,
        watr:Constituent-Bacteria ;
    rdfs:label "Constituent Bacteria" ;
    rdfs:comment "Bacteria: Microscopic single-celled organisms that can be found in water" ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-Cyanide a sh:NodeShape,
        watr:Class,
        watr:Constituent-Cyanide ;
    rdfs:label "Constituent Cyanide" ;
    rdfs:comment "Cyanide: A highly toxic chemical compound that can be harmful to aquatic life" ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-DissolvedOxygen a sh:NodeShape,
        watr:Class,
        watr:Constituent-DissolvedOxygen ;
    rdfs:label "Dissolved Oxygen" ;
    rdfs:comment "Molecular oxygen dissolved in a treatment medium." ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-InorganicCarbon a sh:NodeShape,
        watr:Class,
        watr:Constituent-InorganicCarbon ;
    rdfs:label "Inorganic Carbon" ;
    rdfs:comment "Inorganic carbon species present as constituents of a treatment medium." ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-Inorganics a sh:NodeShape,
        watr:Class,
        watr:Constituent-Inorganics ;
    rdfs:label "Constituent-Inorganics" ;
    rdfs:comment "Inorganic chemical matter present as a constituent of a treatment medium." ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-Metals a sh:NodeShape,
        watr:Class,
        watr:Constituent-Metals ;
    rdfs:label "Constituent-Metals" ;
    rdfs:comment "Constituent-Metals" ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-Nitrate a sh:NodeShape,
        watr:Class,
        watr:Constituent-Nitrate ;
    rdfs:label "Nitrate" ;
    rdfs:comment "Nitrate present as an oxidized nitrogen-bearing constituent of a treatment medium." ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-Nitrite a sh:NodeShape,
        watr:Class,
        watr:Constituent-Nitrite ;
    rdfs:label "Nitrite" ;
    rdfs:comment "Nitrite present as an intermediate nitrogen-bearing constituent of a treatment medium." ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-NitrogenOxides a sh:NodeShape,
        watr:Class,
        watr:Constituent-NitrogenOxides ;
    rdfs:label "Nitrogen Oxides" ;
    rdfs:comment "Nitrogen oxide species present as constituents of a treatment medium, including gaseous or dissolved forms." ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-OrganicCarbon a sh:NodeShape,
        watr:Class,
        watr:Constituent-OrganicCarbon ;
    rdfs:label "Organic Carbon" ;
    rdfs:comment "Organic carbon present as a constituent of a treatment medium." ;
    rdfs:subClassOf watr:Constituent-Organics .

watr:DataProcessing-Filter a sh:NodeShape,
        watr:Class,
        watr:DataProcessing-Filter ;
    rdfs:label "Filter" ;
    rdfs:comment "Parent class for filtering methods to remove outliers or unwanted data points" ;
    rdfs:subClassOf ns1:EnumerationKind-DataProcessing .

watr:Disinfectant-Chlorine a sh:NodeShape,
        watr:Class,
        watr:Disinfectant-Chlorine ;
    rdfs:label "Chlorine" ;
    rdfs:comment "Chlorine, a common disinfectant" ;
    rdfs:subClassOf watr:Disinfectant .

watr:Disinfectant-Ozone a sh:NodeShape,
        watr:Class,
        watr:Disinfectant-Ozone ;
    rdfs:label "Ozone" ;
    rdfs:comment "Ozone, an advanced disinfectant" ;
    rdfs:subClassOf watr:Disinfectant .

watr:Error-AbsoluteError a sh:NodeShape,
        watr:Class,
        watr:Error-AbsoluteError ;
    rdfs:label "Absolute Error" ;
    rdfs:comment "Absolute difference between measured and true/reference value" ;
    rdfs:subClassOf watr:DataProcessing-ErrorMetrics .

watr:Error-Bias a sh:NodeShape,
        watr:Class,
        watr:Error-Bias ;
    rdfs:label "Bias" ;
    rdfs:comment "Systematic deviation from true value (trueness measure)" ;
    rdfs:subClassOf watr:DataProcessing-ErrorMetrics .

watr:Error-MeanAbsoluteError a sh:NodeShape,
        watr:Class,
        watr:Error-MeanAbsoluteError ;
    rdfs:label "Mean Absolute Error (MAE)" ;
    rdfs:comment "Average of absolute errors across multiple measurements" ;
    rdfs:subClassOf watr:DataProcessing-ErrorMetrics .

watr:Error-MeanAbsolutePercentageError a sh:NodeShape,
        watr:Class,
        watr:Error-MeanAbsolutePercentageError ;
    rdfs:label "Mean Absolute Percentage Error (MAPE)" ;
    rdfs:comment "Average of absolute percentage errors" ;
    rdfs:subClassOf watr:DataProcessing-ErrorMetrics .

watr:Error-MeanSquaredError a sh:NodeShape,
        watr:Class,
        watr:Error-MeanSquaredError ;
    rdfs:label "Mean Squared Error (MSE)" ;
    rdfs:comment "Average of squared errors" ;
    rdfs:subClassOf watr:DataProcessing-ErrorMetrics .

watr:Error-RelativeError a sh:NodeShape,
        watr:Class,
        watr:Error-RelativeError ;
    rdfs:label "Relative Error" ;
    rdfs:comment "Error expressed as a percentage of the true/reference value" ;
    rdfs:subClassOf watr:DataProcessing-ErrorMetrics .

watr:Error-RootMeanSquaredError a sh:NodeShape,
        watr:Class,
        watr:Error-RootMeanSquaredError ;
    rdfs:label "Root Mean Squared Error (RMSE)" ;
    rdfs:comment "Square root of MSE, in same units as measurements" ;
    rdfs:subClassOf watr:DataProcessing-ErrorMetrics .

watr:Flocculant-Polyacrylamide a sh:NodeShape,
        watr:Class,
        watr:Flocculant-Polyacrylamide ;
    rdfs:label "Polyacrylamide" ;
    rdfs:comment "Polyacrylamide, a common flocculant" ;
    rdfs:subClassOf watr:Flocculant-Polymer .

watr:Gate a ns1:Class,
        sh:NodeShape,
        watr:Class ;
    rdfs:label "Gate" ;
    rdfs:comment "Tool to control water flow and isolate sections" ;
    rdfs:subClassOf ns1:Valve .

watr:GravityThickener a sh:NodeShape,
        watr:Class ;
    rdfs:label "Gravity Thickener" ;
    rdfs:comment "A thickener that uses gravity to separate solids from liquids" ;
    rdfs:subClassOf watr:Thickener ;
    sh:property [ sh:message "Instances of GravityThickener must have the Sedimentation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Sedimentation ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:HeavyMetalRemovalAgent-SodiumSulfide a sh:NodeShape,
        watr:Class,
        watr:HeavyMetalRemovalAgent-SodiumSulfide ;
    rdfs:label "Sodium Sulfide" ;
    rdfs:comment "Sodium sulfide, used to precipitate heavy metals" ;
    rdfs:subClassOf watr:HeavyMetalRemovalAgent .

watr:HighPurityOxygen a sh:NodeShape,
        watr:Class,
        watr:HighPurityOxygen ;
    rdfs:label "High Purity Oxygen" ;
    rdfs:comment "Class for high purity oxygen used in wastewater treatment" ;
    rdfs:subClassOf watr:WastewaterTreatmentChemical .

watr:Interpolation-BackwardFill a sh:NodeShape,
        watr:Class,
        watr:Interpolation-BackwardFill ;
    rdfs:label "Backward Fill" ;
    rdfs:comment "Propagate next valid observation backward to fill gaps" ;
    rdfs:subClassOf watr:DataProcessing-Interpolation .

watr:Interpolation-ForwardFill a sh:NodeShape,
        watr:Class,
        watr:Interpolation-ForwardFill ;
    rdfs:label "Forward Fill" ;
    rdfs:comment "Propagate last valid observation forward to fill gaps" ;
    rdfs:subClassOf watr:DataProcessing-Interpolation .

watr:Interpolation-Linear a sh:NodeShape,
        watr:Class,
        watr:Interpolation-Linear ;
    rdfs:label "Linear Interpolation" ;
    rdfs:comment "Linear interpolation between two adjacent data points" ;
    rdfs:subClassOf watr:DataProcessing-Interpolation .

watr:Interpolation-NearestNeighbor a sh:NodeShape,
        watr:Class,
        watr:Interpolation-NearestNeighbor ;
    rdfs:label "Nearest Neighbor" ;
    rdfs:comment "Use the value of the nearest known data point" ;
    rdfs:subClassOf watr:DataProcessing-Interpolation .

watr:Interpolation-Polynomial a sh:NodeShape,
        watr:Class,
        watr:Interpolation-Polynomial ;
    rdfs:label "Polynomial Interpolation" ;
    rdfs:comment "Polynomial interpolation using multiple data points" ;
    rdfs:subClassOf watr:DataProcessing-Interpolation .

watr:Interpolation-Spline a sh:NodeShape,
        watr:Class,
        watr:Interpolation-Spline ;
    rdfs:label "Spline Interpolation" ;
    rdfs:comment "Cubic spline interpolation for smooth curves" ;
    rdfs:subClassOf watr:DataProcessing-Interpolation .

watr:MediaFiltrationUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "MediaFiltration Unit" ;
    rdfs:comment "A filter system that uses a bed of material to filter out contaminants" ;
    rdfs:subClassOf watr:Filter ;
    sh:property [ sh:hasValue watr:Process-MediaFiltration ;
            sh:maxCount 1 ;
            sh:message "Instances of MediaFiltrationUnit must have the MediaFiltration process." ;
            sh:minCount 1 ;
            sh:path watr:hasProcess ] .

watr:Normalization-Decimal a sh:NodeShape,
        watr:Class,
        watr:Normalization-Decimal ;
    rdfs:label "Decimal Scaling" ;
    rdfs:comment "Normalize by moving the decimal point of values" ;
    rdfs:subClassOf watr:DataProcessing-Normalization .

watr:Normalization-MinMax a sh:NodeShape,
        watr:Class,
        watr:Normalization-MinMax ;
    rdfs:label "Min-Max Normalization" ;
    rdfs:comment "Scale data to a fixed range, typically [0, 1]" ;
    rdfs:subClassOf watr:DataProcessing-Normalization .

watr:Normalization-ZScore a sh:NodeShape,
        watr:Class,
        watr:Normalization-ZScore ;
    rdfs:label "Z-Score Normalization" ;
    rdfs:comment "Standardize data to have mean=0 and standard deviation=1" ;
    rdfs:subClassOf watr:DataProcessing-Normalization .

watr:OdorControlAgent-ActivatedCarbon a sh:NodeShape,
        watr:Class,
        watr:OdorControlAgent-ActivatedCarbon ;
    rdfs:label "Activated Carbon" ;
    rdfs:comment "Activated carbon, used to absorb odors" ;
    rdfs:subClassOf watr:OdorControlAgent .

watr:OxidizingAgent-HydrogenPeroxide a sh:NodeShape,
        watr:Class,
        watr:OxidizingAgent-HydrogenPeroxide ;
    rdfs:label "Hydrogen Peroxide" ;
    rdfs:comment "Hydrogen peroxide, an oxidizing agent commonly used in advanced oxidation processes" ;
    rdfs:subClassOf watr:OxidizingAgent .

watr:Precision-CoefficientOfVariation a sh:NodeShape,
        watr:Class,
        watr:Precision-CoefficientOfVariation ;
    rdfs:label "Coefficient of Variation" ;
    rdfs:comment "Ratio of standard deviation to mean (relative precision)" ;
    rdfs:subClassOf watr:DataProcessing-PrecisionMetrics .

watr:Precision-ConfidenceInterval a sh:NodeShape,
        watr:Class,
        watr:Precision-ConfidenceInterval ;
    rdfs:label "Confidence Interval" ;
    rdfs:comment "Range within which true value likely falls with specified confidence level" ;
    rdfs:subClassOf watr:DataProcessing-PrecisionMetrics .

watr:Precision-RepeatabilityStdDev a sh:NodeShape,
        watr:Class,
        watr:Precision-RepeatabilityStdDev ;
    rdfs:label "Repeatability Standard Deviation" ;
    rdfs:comment "Standard deviation under repeatability conditions (same operator, equipment, short time)" ;
    rdfs:subClassOf watr:DataProcessing-PrecisionMetrics .

watr:Precision-ReproducibilityStdDev a sh:NodeShape,
        watr:Class,
        watr:Precision-ReproducibilityStdDev ;
    rdfs:label "Reproducibility Standard Deviation" ;
    rdfs:comment "Standard deviation under reproducibility conditions (different operators, equipment, time)" ;
    rdfs:subClassOf watr:DataProcessing-PrecisionMetrics .

watr:Process-AirScouring a watr:Class,
        watr:Process-AirScouring ;
    rdfs:label "Air Scouring" ;
    rdfs:subClassOf watr:Process-Cleaning ;
    skos:definition "A cleaning process that uses injected air to dislodge accumulated foulants or solids from filter media or membrane surfaces." .

watr:Process-Backwashing a watr:Class,
        watr:Process-Backwashing ;
    rdfs:label "Backwashing" ;
    rdfs:subClassOf watr:Process-Cleaning ;
    skos:definition "A cleaning process in which water, and sometimes air, is driven backward through a filter or membrane system to remove accumulated solids." .

watr:Process-ChemicalPrecipitation a watr:Class,
        watr:Process-ChemicalPrecipitation ;
    rdfs:label "Chemical Precipitation" ;
    rdfs:subClassOf watr:Process-ChemicalProcess ;
    skos:definition "Removal of nutrients or metals using coagulants" .

watr:Process-ClosedCircuitReverseOsmosis a watr:Class,
        watr:Process-ClosedCircuitReverseOsmosis ;
    rdfs:label "Closed Circuit Reverse Osmosis (CCRO)" ;
    rdfs:subClassOf watr:Process-ReverseOsmosis ;
    skos:definition "A specific RO configuration explored for optimization, capable of adapting to unmeasured changes like feed salinity." .

watr:Process-Composting a watr:Class,
        watr:Process-Composting ;
    rdfs:label "Composting" ;
    rdfs:subClassOf watr:Process-BiosolidsDisposal ;
    skos:definition "Biological degradation of organic materials under controlled aerobic conditions." .

watr:Process-Dechlorination a watr:Class,
        watr:Process-Dechlorination ;
    rdfs:label "Dechlorination" ;
    rdfs:subClassOf watr:Process-Disinfection ;
    skos:definition "A post-disinfection process that removes excess chlorine compounds." .

watr:Process-Drying a watr:Class,
        watr:Process-Drying ;
    rdfs:label "Drying" ;
    rdfs:subClassOf watr:Process-Dewatering,
        watr:Process-Evaporation ;
    skos:definition "Drying of biosolids to reduce moisture content." .

watr:Process-ElectroDialyticCrystallization a watr:Class,
        watr:Process-ElectroDialyticCrystallization ;
    rdfs:label "Electro-Dialytic Crystallization (EDC)" ;
    rdfs:subClassOf watr:Process-Crystallization,
        watr:Process-Electrodialysis ;
    skos:definition "A novel integrated process combining electrodialysis and crystallization for energy-efficient Zero-Liquid Discharge (ZLD) by maintaining a saturated brine stream." .

watr:Process-Electrooxidation a watr:Class,
        watr:Process-Electrooxidation ;
    rdfs:label "Electrooxidation (EO)" ;
    rdfs:subClassOf watr:Process-Oxidation,
        watr:Process-PhysicalProcess ;
    skos:definition "An advanced oxidation process often combined with EC to enhance contaminant removal and inactivation, particularly for viruses." .

watr:Process-Elutriation a watr:Class,
        watr:Process-Elutriation ;
    rdfs:label "Elutriation" ;
    rdfs:subClassOf watr:Process-Separation ;
    skos:definition "A process that uses a stream of fluid flowing upward to separate a mixture of particles based on their size, shape, and density." .

watr:Process-FeedReversalReverseOsmosis a watr:Class,
        watr:Process-FeedReversalReverseOsmosis ;
    rdfs:label "Feed Reversal Reverse Osmosis (FRRO)" ;
    rdfs:subClassOf watr:Process-ReverseOsmosis ;
    skos:definition "A dynamic and cyclic design to mitigate scaling and balance salt/foulant load, enabling high recovery." .

watr:Process-FiveStageBardenpho a watr:Class,
        watr:Process-FiveStageBardenpho ;
    rdfs:label "Five-Stage BARDENPHO (BARnard DENitrification and PHOsphorus removal)" ;
    rdfs:subClassOf watr:Process-ActivatedSludge,
        watr:Process-Denitrification,
        watr:Process-Nitrification ;
    skos:definition "A five-stage biological nutrient removal process specifically designed for nitrogen and phosphorus." .

watr:Process-FluidizedBedIncineration a watr:Class,
        watr:Process-FluidizedBedIncineration ;
    rdfs:label "Fluidized Bed Incineration" ;
    rdfs:subClassOf watr:Process-Combustion ;
    skos:definition "A process that combusts a constantly moving bed of biosolids." .

watr:Process-FourStageBardenpho a watr:Class,
        watr:Process-FourStageBardenpho ;
    rdfs:label "Four-Stage BARDENPHO (BARnard DENitrification and PHOsphorus removal)" ;
    rdfs:subClassOf watr:Process-ActivatedSludge,
        watr:Process-Denitrification,
        watr:Process-Nitrification ;
    skos:definition "A four-stage biological nutrient removal process with two anoxic and two aerobic zones." .

watr:Process-HighDensitySludge a watr:Class,
        watr:Process-HighDensitySludge ;
    rdfs:label "High-Density Sludge (HDS) Process" ;
    rdfs:subClassOf watr:Process-ChemicalProcess,
        watr:Process-PhysicalProcess ;
    skos:definition "A method for treating acid mine drainage involving neutralization." .

watr:Process-LandApplication a watr:Class,
        watr:Process-LandApplication ;
    rdfs:label "Land Application" ;
    rdfs:subClassOf watr:Process-BiosolidsDisposal ;
    skos:definition "Beneficial reuse of biosolids by spreading on agricultural land." .

watr:Process-Landfill a watr:Class,
        watr:Process-Landfill ;
    rdfs:label "Biosolids Landfill" ;
    rdfs:subClassOf watr:Process-BiosolidsDisposal ;
    skos:definition "Disposal of biosolids in a landfill." .

watr:Process-MLE a watr:Class,
        watr:Process-MLE ;
    rdfs:label "Modified Ludzack-Ettinger (MLE)" ;
    rdfs:subClassOf watr:Process-AO ;
    skos:definition "Modification of AO a with internal recycle." .

watr:Process-MembraneDistillation a watr:Class,
        watr:Process-MembraneDistillation ;
    rdfs:label "Membrane Distillation (MD)" ;
    rdfs:subClassOf watr:Process-MembraneProcess ;
    skos:definition "A thermal membrane process, often subject to CFD modeling for optimization of heat and mass transfer." .

watr:Process-MultipleHearthIncineration a watr:Class,
        watr:Process-MultipleHearthIncineration ;
    rdfs:label "Multiple Hearth Incineration (MHI)" ;
    rdfs:subClassOf watr:Process-Combustion ;
    skos:definition "A process that combusts biosolids as they move through a series of stacked hearths with controlled air flow." .

watr:Process-Neutralization a watr:Class,
        watr:Process-Neutralization ;
    rdfs:label "Neutralization" ;
    rdfs:subClassOf watr:Process-pHAdjustment ;
    skos:definition "pH adjustment to neutral, typically with a base, used in processes like high-density sludge treatment." .

watr:Process-OsmoticallyAssistedReverseOsmosis a watr:Class,
        watr:Process-OsmoticallyAssistedReverseOsmosis ;
    rdfs:label "Osmotically Assisted Reverse Osmosis (OARO)" ;
    rdfs:subClassOf watr:Process-ReverseOsmosis ;
    skos:definition "A process with validated Computational Fluid Dynamics (CFD) models for cost optimization." .

watr:Process-Purging a watr:Class,
        watr:Process-Purging ;
    rdfs:label "Purging" ;
    rdfs:subClassOf watr:Process-Cleaning ;
    skos:definition "A process that flushes retained liquid, solids, or gas from equipment or piping to restore operating conditions or prepare for another cycle." .

watr:Process-Recirculation a watr:Class,
        watr:Process-Recirculation ;
    rdfs:label "Recirculation" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "A process that returns a portion of a treated or intermediate flow back upstream to maintain hydraulic, solids, or biological performance." .

watr:Process-Reduction a watr:Class,
        watr:Process-Reduction ;
    rdfs:label "Chemical Reduction" ;
    rdfs:subClassOf watr:Process-ChemicalProcess ;
    skos:definition "Mechanism by which contaminants are transformed through the gain of electrons." .

watr:Process-SlowSandFiltration a watr:Class,
        watr:Process-SlowSandFiltration ;
    rdfs:label "Slow Sand Filtration" ;
    rdfs:subClassOf watr:Process-MediaFiltration ;
    skos:definition "A filtration process that uses a bed of sand to remove impurities at low flow rates." .

watr:Process-Softening a watr:Class,
        watr:Process-Softening ;
    rdfs:label "Softening" ;
    rdfs:subClassOf watr:Process-ChemicalAddition ;
    skos:definition "Chemical precipitation of calcium/magnesium" .

watr:Process-Stripping a watr:Class,
        watr:Process-Stripping ;
    rdfs:label "Stripping" ;
    rdfs:subClassOf watr:Process-Separation ;
    skos:definition "Gas stripping for removal of dissolved gases such as ammonia and volatile organic compounds." .

watr:Process-ThermalDisinfection a watr:Class,
        watr:Process-ThermalDisinfection ;
    rdfs:label "Thermal Disinfection" ;
    rdfs:subClassOf watr:Process-Disinfection ;
    skos:definition "Heat-based pathogen inactivation such as pasteurization." .

watr:Process-ThermalHydrolysis a watr:Class,
        watr:Process-ThermalHydrolysis ;
    rdfs:label "Thermal Hydrolysis" ;
    rdfs:subClassOf watr:Process-Hydrolysis ;
    skos:definition "A process that breaks down complex organic matter into soluble compounds using heat and pressure." .

watr:Process-UCT a watr:Class,
        watr:Process-UCT ;
    rdfs:label "University of Cape Town (UCT)" ;
    rdfs:subClassOf watr:Process-A2O ;
    skos:definition "Variant of A2O with modified recycle streams for phosphorus removal." .

watr:ReducingAgent a sh:NodeShape,
        watr:Class,
        watr:ReducingAgent ;
    rdfs:label "Reducing Agent" ;
    rdfs:comment "Class for reducing agents used in water treatment" ;
    rdfs:subClassOf watr:WastewaterTreatmentChemical .

watr:Role-Backwash a ns1:EnumerationKind,
        sh:NodeShape,
        watr:Class,
        watr:Role-Backwash ;
    rdfs:label "Role-Backwash" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Containment a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Containment ;
    rdfs:label "Containment" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Detention a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Detention ;
    rdfs:label "Detention" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Equalization a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Equalization ;
    rdfs:label "Equalization" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Extended a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Extended ;
    rdfs:label "Extended" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-NitrogenRemoval a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-NitrogenRemoval ;
    rdfs:label "Role-NitrogenRemoval" ;
    rdfs:subClassOf ns1:Role-NutrientRemoval .

watr:Role-NutrientRemoval a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-NutrientRemoval ;
    rdfs:label "Role-NutrientRemoval" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Permeate a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Permeate ;
    rdfs:label "Permeate" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-PhosphorusRemoval a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-PhosphorusRemoval ;
    rdfs:label "Role-PhosphorusRemoval" ;
    rdfs:subClassOf ns1:Role-NutrientRemoval .

watr:Role-Posttreatment a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Posttreatment ;
    rdfs:label "Posttreatment" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Pretreatment a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Pretreatment ;
    rdfs:label "Pretreatment" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Primary a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Primary ;
    rdfs:label "Primary" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Retention a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Retention ;
    rdfs:label "Retention" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Secondary a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Secondary ;
    rdfs:label "Secondary" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-SolidsHandling a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-SolidsHandling ;
    rdfs:label "Solids handling (e.g., biosolids disposal)" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Stabilization a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Stabilization ;
    rdfs:label "Stabilization" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Stepfeed a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Stepfeed ;
    rdfs:label "Stepfeed" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Storage a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Storage ;
    rdfs:label "Storage" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Tertiary a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Tertiary ;
    rdfs:label "Tertiary" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:SedimentationTank a sh:NodeShape,
        watr:Class ;
    rdfs:label "Sedimentation Tank" ;
    rdfs:comment "A tank used to remove solids from liquids through sedimentation" ;
    rdfs:subClassOf watr:SeparationTank ;
    sh:property [ sh:message "Instances of SedimentationTank must have the Sedimentation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Sedimentation ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:SepticTank a sh:NodeShape,
        watr:Class ;
    rdfs:label "Septic Tank" ;
    rdfs:comment "A septic tank for on-site wastewater treatment" ;
    rdfs:subClassOf watr:SedimentationTank .

watr:Sludge-MixedLiquor a sh:NodeShape,
        watr:Class,
        watr:Sludge-MixedLiquor ;
    rdfs:label "Sludge-MixedLiquor" ;
    ns1:composedOf [ a ns1:QuantifiableProperty ;
            rdfs:label "Suspended Solids Fraction" ;
            ns1:ofConstituent watr:Constituent-SuspendedSolids ;
            ns2:hasQuantityKind <http://qudt.org/vocab/quantitykind/MassFraction> ;
            ns2:hasUnit <http://qudt.org/vocab/unit/PERCENT> ],
        [ a ns1:QuantifiableProperty ;
            rdfs:label "Water Fraction" ;
            ns1:ofConstituent ns1:Constituent-H2O ;
            ns2:hasQuantityKind <http://qudt.org/vocab/quantitykind/MassFraction> ;
            ns2:hasUnit <http://qudt.org/vocab/unit/PERCENT> ] ;
    rdfs:comment "Mixed liquor is the mixture of wastewater and activated sludge in the aeration basin of a wastewater treatment plant. It contains suspended solids and water." ;
    rdfs:subClassOf watr:Fluid-Sludge .

watr:Synchronization-Downsampling a sh:NodeShape,
        watr:Class,
        watr:Synchronization-Downsampling ;
    rdfs:label "Downsampling" ;
    rdfs:comment "Decrease the sampling frequency of data to a lower rate" ;
    rdfs:subClassOf watr:DataProcessing-Synchronization .

watr:Synchronization-Resampling a sh:NodeShape,
        watr:Class,
        watr:Synchronization-Resampling ;
    rdfs:label "Resampling" ;
    rdfs:comment "Resample data to a different frequency or time interval" ;
    rdfs:subClassOf watr:DataProcessing-Synchronization .

watr:Synchronization-TimeAlignment a sh:NodeShape,
        watr:Class,
        watr:Synchronization-TimeAlignment ;
    rdfs:label "Time Alignment" ;
    rdfs:comment "Align data points from different sources to common timestamps" ;
    rdfs:subClassOf watr:DataProcessing-Synchronization .

watr:Synchronization-Upsampling a sh:NodeShape,
        watr:Class,
        watr:Synchronization-Upsampling ;
    rdfs:label "Upsampling" ;
    rdfs:comment "Increase the sampling frequency of data to a higher rate" ;
    rdfs:subClassOf watr:DataProcessing-Synchronization .

watr:Water-Brackish a sh:NodeShape,
        watr:Class,
        watr:Water-Brackish ;
    rdfs:label "Water-Brackish" ;
    rdfs:comment "Water-Brackish" ;
    rdfs:subClassOf ns1:Fluid-Water .

watr:Water-Brine a sh:NodeShape,
        watr:Class,
        watr:Water-Brine ;
    rdfs:label "Water-Brine" ;
    ns1:composedOf [ a ns1:QuantifiableProperty ;
            ns1:ofConstituent watr:Salt-NaCl ;
            ns2:hasQuantityKind <http://qudt.org/vocab/quantitykind/MassFraction> ;
            ns2:hasUnit <http://qudt.org/vocab/unit/PERCENT> ],
        [ a ns1:QuantifiableProperty ;
            ns1:ofConstituent ns1:Constituent-H2O ;
            ns2:hasQuantityKind <http://qudt.org/vocab/quantitykind/MassFraction> ;
            ns2:hasUnit <http://qudt.org/vocab/unit/PERCENT> ] ;
    rdfs:comment "Water-Brine" ;
    rdfs:subClassOf ns1:Fluid-Water .

watr:Water-Freshwater a sh:NodeShape,
        watr:Class,
        watr:Water-Freshwater ;
    rdfs:label "Water-Freshwater" ;
    rdfs:comment "Water-Freshwater" ;
    rdfs:subClassOf ns1:Fluid-Water .

watr:Water-Seawater a sh:NodeShape,
        watr:Class,
        watr:Water-Seawater ;
    rdfs:label "Water-Seawater" ;
    rdfs:comment "Water-Seawater" ;
    rdfs:subClassOf ns1:Fluid-Water .

watr:hasAccuracy a rdf:Property ;
    rdfs:label "has accuracy" ;
    rdfs:comment "The `hasAccuracy` relation is used to link to a numerical `Property` whose value indicates the maximum expected deviation between the measured value and the true value in engineering units." .

watr:hasAggregation a rdf:Property ;
    rdfs:label "has aggregation" ;
    rdfs:comment "The `hasAggregation` relation associates a property with water-specific aggregation semantics such as total, mean, maximum, or minimum." .

watr:hasBias a rdf:Property ;
    rdfs:label "has bias" ;
    rdfs:comment "The `hasBias` relation is used to link to a numerical `Property` whose value indicates the systematic offset or drift in measurements relative to the true value." .

watr:hasCalibrationCurve a rdf:Property ;
    rdfs:label "has calibration curve" ;
    rdfs:comment "The `hasCalibrationCurve` relation is used to link to a `Property` that describes the mathematical relationship or lookup table between raw sensor output and calibrated engineering units." .

watr:hasDropRate a rdf:Property ;
    rdfs:label "has drop rate" ;
    rdfs:comment "The `hasDropRate` relation is used to link to a `Property` describes the amount of data points lost within a range of time due to latencies or other factors." .

watr:hasNumericRange a rdf:Property ;
    rdfs:label "has numeric range" ;
    rdfs:comment "The `hasNumericRange` relation is used to link to a numerical `Property` whose value indicates the span between the minimum and maximum measurable values in engineering units." .

watr:hasNumericResolution a rdf:Property ;
    rdfs:label "has numeric resolution" ;
    rdfs:comment "The `hasNumericResolution` relation is used to link to a numerical `Property` whose value indicates the smallest distinguishable difference between two measured values in engineering units." .

watr:hasPrecision a rdf:Property ;
    rdfs:label "has precision" ;
    rdfs:comment "The `hasPrecision` relation is used to link to a numerical `Property` whose value indicates the repeatability or reproducibility of measurements under identical conditions." .

watr:hasProcessedData a rdf:Property ;
    rdfs:label "has processed data" ;
    rdfs:comment "The `hasProcessedData` relation is used to link to a `Property` that describes any data processing, filtering, or transformation applied to the raw measurement values." .

watr:hasResponseTime a rdf:Property ;
    rdfs:label "has response time" ;
    rdfs:comment "The `hasResponseTime` relation is used to link to a numerical `Property` whose value indicates the time required for the sensor or measurement system to respond to a step change in the measured variable." .

watr:hasTemporalRange a rdf:Property ;
    rdfs:label "has temporal range" ;
    rdfs:comment "The `hasTemporalRange` relation is used to link to a numerical `Property` whose value indicates the start and end times for which data has been recorded." .

watr:hasTemporalResolution a rdf:Property ;
    rdfs:label "has temporal resolution" ;
    rdfs:comment "The `hasTemporalResolution` relation is used to link to a numerical `Property` whose value indicates the minimum time interval between successive measurements or data points." .

watr:hasVariableRange a rdf:Property ;
    rdfs:label "has variable range" ;
    rdfs:comment "The `hasVariableRange` relation is used to link to a numerical `Property` whose value indicates the expected range of variation for the measured variable under normal operating conditions." .

watr:pHAdjuster-Lime a sh:NodeShape,
        watr:Class,
        watr:pHAdjuster-Lime ;
    rdfs:label "Lime" ;
    rdfs:comment "Calcium hydroxide (lime), used to increase pH" ;
    rdfs:subClassOf watr:pHAdjuster .

watr:pHAdjuster-SulfuricAcid a sh:NodeShape,
        watr:Class,
        watr:pHAdjuster-SulfuricAcid ;
    rdfs:label "Sulfuric Acid" ;
    rdfs:comment "Sulfuric acid, used to decrease pH" ;
    rdfs:subClassOf watr:pHAdjuster .

watr:ConcentrationSensor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Concentration Sensor" ;
    rdfs:comment "A sensor used to measure the concentration of specific substances (e.g., Total Dissolved Solids)" ;
    rdfs:subClassOf ns1:ConcentrationSensor .

watr:Constituent-Organics a sh:NodeShape,
        watr:Class,
        watr:Constituent-Organics ;
    rdfs:label "Constituent-Organics" ;
    rdfs:comment "Organic chemical matter present as a constituent of a treatment medium." ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-Particles a sh:NodeShape,
        watr:Class,
        watr:Constituent-Particles ;
    rdfs:label "Constituent-Particles" ;
    rdfs:comment "Particulate matter present as a constituent of a medium." ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-Salt a sh:NodeShape,
        watr:Class,
        watr:Constituent-Salt ;
    rdfs:label "Constituent-Salt" ;
    rdfs:comment "Constituent-Salt" ;
    rdfs:subClassOf ns1:Medium-Constituent .

watr:Constituent-SuspendedSolids a sh:NodeShape,
        watr:Class,
        watr:Constituent-SuspendedSolids ;
    rdfs:label "Constituent-SuspendedSolids" ;
    rdfs:comment "Solid particulate matter suspended in water rather than dissolved, including organic and inorganic material carried in the fluid." ;
    rdfs:subClassOf watr:Constituent-Solids .

watr:DewateringUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "Dewatering Unit" ;
    rdfs:comment "A unit used to remove water from solid material" ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of DewateringUnit must have the Dewatering process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Dewatering ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Digester a sh:NodeShape,
        watr:Class ;
    rdfs:label "Digester" ;
    rdfs:comment "A container to promote decomposition of organic waste" ;
    rdfs:subClassOf watr:Reactor,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of Digester must have the Digestion process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Digestion ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:DisinfectionUnit a sh:NodeShape,
        watr:Class ;
    rdfs:label "Disinfection Unit" ;
    rdfs:comment "A unit used to eliminate or reduce harmful microorganisms" ;
    rdfs:subClassOf watr:Reactor ;
    sh:property [ sh:message "Instances of DisinfectionUnit must have the Disinfection process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Disinfection ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Electrode a sh:NodeShape,
        watr:Class ;
    rdfs:label "Electrode" ;
    rdfs:comment "A component where electrochemical reactions occur in electrified processes." ;
    rdfs:subClassOf ns1:Equipment .

watr:Flocculant a sh:NodeShape,
        watr:Class,
        watr:Flocculant ;
    rdfs:label "Flocculant" ;
    rdfs:comment "Class for flocculants used in wastewater treatment" ;
    rdfs:subClassOf watr:WastewaterTreatmentChemical .

watr:Flocculant-Polymer a sh:NodeShape,
        watr:Class,
        watr:Flocculant-Polymer ;
    rdfs:label "Polymer Flocculant" ;
    rdfs:comment "Flocculant that is a type of polymer" ;
    rdfs:subClassOf watr:Flocculant .

watr:HeavyMetalRemovalAgent a sh:NodeShape,
        watr:Class,
        watr:HeavyMetalRemovalAgent ;
    rdfs:label "Heavy Metal Removal Agent" ;
    rdfs:comment "Class for chemicals used to remove heavy metals" ;
    rdfs:subClassOf watr:WastewaterTreatmentChemical .

watr:OdorControlAgent a sh:NodeShape,
        watr:Class,
        watr:OdorControlAgent ;
    rdfs:label "Odor Control Agent" ;
    rdfs:comment "Class for chemicals used for odor control" ;
    rdfs:subClassOf watr:WastewaterTreatmentChemical .

watr:OxidizingAgent a sh:NodeShape,
        watr:Class,
        watr:OxidizingAgent ;
    rdfs:label "Oxidizing Agent" ;
    rdfs:comment "Class for oxidizing agents used in water treatment" ;
    rdfs:subClassOf watr:WastewaterTreatmentChemical .

watr:Process-A2O a watr:Class,
        watr:Process-A2O ;
    rdfs:label "Anaerobic-Anoxic-Oxic (A2O)" ;
    rdfs:subClassOf watr:Process-ActivatedSludge,
        watr:Process-Denitrification,
        watr:Process-Nitrification ;
    skos:definition "Anaerobic-anoxic-aerobic process for simultaneous biological nitrogen and phosphorus removal." .

watr:Process-AO a watr:Class,
        watr:Process-AO ;
    rdfs:label "Anoxic-Aerobic" ;
    rdfs:subClassOf watr:Process-ActivatedSludge,
        watr:Process-Denitrification,
        watr:Process-Nitrification ;
    skos:definition "Two-stage process with anoxic zone followed by aerobic zone for biological nitrogen removal." .

watr:Process-Adsorption a watr:Class,
        watr:Process-Adsorption ;
    rdfs:label "Adsorption" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "A process by which substances bind to a surface." .

watr:Process-AdvancedOxidation a watr:Class,
        watr:Process-AdvancedOxidation ;
    rdfs:label "Advanced Oxidation Process (AOP)" ;
    rdfs:subClassOf watr:Process-Oxidation ;
    skos:definition "Processes combining UV light with oxidants (e.g., UV-AOP) to destroy contaminants." .

watr:Process-AerobicDigestion a watr:Class,
        watr:Process-AerobicDigestion ;
    rdfs:label "Aerobic Digestion" ;
    rdfs:subClassOf watr:Process-Digestion ;
    skos:definition "A biological process that breaks down organic matter in the presence of oxygen." .

watr:Process-AnaerobicDigestion a watr:Class,
        watr:Process-AnaerobicDigestion ;
    rdfs:label "Anaerobic Digestion" ;
    rdfs:subClassOf watr:Process-Digestion ;
    skos:definition "A biological process that breaks down organic matter in the absence of oxygen." .

watr:Process-BiologicallyActiveFiltration a watr:Class,
        watr:Process-BiologicallyActiveFiltration ;
    rdfs:label "Biologically Active Filtration (BAF)" ;
    rdfs:subClassOf watr:Process-Biofiltration ;
    skos:definition "A biologically activated filtration column." .

watr:Process-Chlorination a watr:Class,
        watr:Process-Chlorination ;
    rdfs:label "Chlorination" ;
    rdfs:subClassOf watr:Process-Disinfection ;
    skos:definition "A disinfection process that uses chlorine or chlorine compounds." .

watr:Process-Cogeneration a watr:Class,
        watr:Process-Cogeneration ;
    rdfs:label "Cogeneration" ;
    rdfs:subClassOf watr:Process-Combustion ;
    skos:definition "A process that combusts biosolids or biogas to produce electricity and heat simultaneously." .

watr:Process-Comminution a watr:Class,
        watr:Process-Comminution ;
    rdfs:label "Comminution" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "Process of reducing solid materials into smaller particles through mechanical forces such as crushing, grinding, impact, shear, or compression." .

watr:Process-Condensation a watr:Class,
        watr:Process-Condensation ;
    rdfs:label "Condensation" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "A process of turning a vapor into a liquid." .

watr:Process-Electrocoagulation a watr:Class,
        watr:Process-Electrocoagulation ;
    rdfs:label "Electrocoagulation (EC)" ;
    rdfs:subClassOf watr:Process-Coagulation,
        watr:Process-PhysicalProcess ;
    skos:definition "An electrified pretreatment technology using sacrificial anodes to release coagulant precursors for contaminant removal." .

watr:Process-Electrolysis a watr:Class,
        watr:Process-Electrolysis ;
    rdfs:label "Electrolysis" ;
    rdfs:subClassOf watr:Process-ChemicalProcess ;
    skos:definition "A process that uses a direct electric current to drive an otherwise non-spontaneous chemical reaction." .

watr:Process-Flocculation a watr:Class,
        watr:Process-Flocculation ;
    rdfs:label "Flocculation" ;
    rdfs:subClassOf watr:Process-ChemicalProcess,
        watr:Process-Mixing ;
    skos:definition "A unit process that gently mixes water to allow coagulated particles to form larger clumps." .

watr:Process-Flotation a watr:Class,
        watr:Process-Flotation ;
    rdfs:label "Flotation" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "A unit process that uses buoyancy to separate solids from water, often using air bubbles." .

watr:Process-GasTransfer a watr:Class,
        watr:Process-GasTransfer ;
    rdfs:label "Gas Transfer" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "A unit process that transfers gases, such as oxygen or carbon dioxide, into or out of water." .

watr:Process-GranularActivatedCarbon a watr:Class,
        watr:Process-GranularActivatedCarbon ;
    rdfs:label "Granular Activated Carbon (GAC)" ;
    rdfs:subClassOf watr:Process-Adsorption,
        watr:Process-Filtration ;
    skos:definition "A process that uses an activated carbon filter to adsorb impurities from water." .

watr:Process-Hydrolysis a watr:Class,
        watr:Process-Hydrolysis ;
    rdfs:label "Hydrolysis" ;
    rdfs:subClassOf watr:Process-ChemicalProcess ;
    skos:definition "A process reaction in which a water molecule is consumed to split a larger molecule into smaller fragments." .

watr:Process-IonExchange a watr:Class,
        watr:Process-IonExchange ;
    rdfs:label "Ion Exchange" ;
    rdfs:subClassOf watr:Process-ChemicalProcess,
        watr:Process-PhysicalProcess ;
    skos:definition "A process in which ions are exchanged between a solution and an ion-exchange resin or membrane." .

watr:Process-Ozonation a watr:Class,
        watr:Process-Ozonation ;
    rdfs:label "Ozonation" ;
    rdfs:subClassOf watr:Process-Oxidation ;
    skos:definition "A water treatment process that uses ozone as an oxidant." .

watr:Process-RapidSandFiltration a watr:Class,
        watr:Process-RapidSandFiltration ;
    rdfs:label "Rapid Sand Filtration" ;
    rdfs:subClassOf watr:Process-MediaFiltration ;
    skos:definition "A filtration process that uses a bed of sand to remove impurities at high flow rates." .

watr:Process-Screening a watr:Class,
        watr:Process-Screening ;
    rdfs:label "Screening" ;
    rdfs:subClassOf watr:Process-Separation ;
    skos:definition "A unit process that removes large solids from water, such as leaves, branches, and other debris." .

watr:Process-Solidification a watr:Class,
        watr:Process-Solidification ;
    rdfs:label "Solidification" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "A process of turning a liquid into a solid (e.g., freezing)." .

watr:Process-SolventExtraction a watr:Class,
        watr:Process-SolventExtraction ;
    rdfs:label "Solvent-Based Extraction" ;
    rdfs:subClassOf watr:Process-ChemicalProcess ;
    skos:definition "A non-membrane, non-thermal method using a solvent to selectively extract water from highly saline brines." .

watr:Process-Thickening a watr:Class,
        watr:Process-Thickening ;
    rdfs:label "Thickening" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "A process to increase the solids content of a sludge or slurry." .

watr:Process-TricklingFiltration a watr:Class,
        watr:Process-TricklingFiltration ;
    rdfs:label "TricklingFiltration" ;
    rdfs:subClassOf watr:Process-Biofiltration ;
    skos:definition "Trickling filter using any media (e.g., plastic, sand, gravel, etc.)" .

watr:Process-UVDisinfection a watr:Class,
        watr:Process-UVDisinfection ;
    rdfs:label "UV Disinfection" ;
    rdfs:subClassOf watr:Process-Disinfection ;
    skos:definition "A disinfection process that uses ultraviolet light to inactivate microorganisms." .

watr:Process-pHAdjustment a watr:Class,
        watr:Process-pHAdjustment ;
    rdfs:label "pH Adjustment" ;
    rdfs:subClassOf watr:Process-ChemicalAddition ;
    skos:definition "A unit process that adjusts the pH of water to a desired level using chemicals." .

watr:Role-Aerobic a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Aerobic ;
    rdfs:label "Aerobic" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Anaerobic a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Anaerobic ;
    rdfs:label "Anaerobic" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Salt-NaCl a sh:NodeShape,
        watr:Class,
        watr:Salt-NaCl ;
    rdfs:label "Salt-NaCl" ;
    rdfs:comment "Salt-NaCl" ;
    rdfs:subClassOf watr:Constituent-Salt .

watr:Tank a sh:NodeShape,
        watr:Class ;
    rdfs:label "Tank" ;
    rdfs:comment "A tank with at least one inlet and one outlet" ;
    rdfs:subClassOf ns1:Equipment ;
    sh:property [ rdfs:comment "A tank may have a drain connection point" ;
            sh:path ns1:hasConnectionPoint ;
            sh:qualifiedMinCount 0 ;
            sh:qualifiedValueShape [ sh:class ns1:OutletConnectionPoint ;
                    sh:property [ sh:hasValue watr:Role-Drain ;
                            sh:path ns1:hasRole ],
                        [ sh:class ns1:Mix-Fluid ;
                            sh:path ns1:hasMedium ] ] ],
        [ rdfs:comment "A tank may have an overflow connection point" ;
            sh:path ns1:hasConnectionPoint ;
            sh:qualifiedMinCount 0 ;
            sh:qualifiedValueShape [ sh:class ns1:OutletConnectionPoint ;
                    sh:property [ sh:class ns1:Mix-Fluid ;
                            sh:path ns1:hasMedium ],
                        [ sh:hasValue ns1:Role-Overflow ;
                            sh:path ns1:hasRole ] ] ],
        [ rdfs:comment "A tank has an inlet fluid connection point" ;
            sh:path ns1:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class ns1:InletConnectionPoint ;
                    sh:property [ sh:class ns1:Mix-Fluid ;
                            sh:path ns1:hasMedium ] ] ],
        [ rdfs:comment "A tank has an outlet fluid connection point" ;
            sh:path ns1:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class ns1:OutletConnectionPoint ;
                    sh:not [ sh:property [ sh:hasValue watr:Role-Drain ;
                                    sh:minCount 1 ;
                                    sh:path ns1:hasRole ] ] ;
                    sh:property [ sh:class ns1:Mix-Fluid ;
                            sh:path ns1:hasMedium ] ] ] .

watr:hasMeasurementRange a rdf:Property ;
    rdfs:label "has measurement range" ;
    rdfs:comment "The `hasMeasurementRange` relation is used to link to a numerical `Property` whose value indicates the expected range of variation that can physically be measured, e.g. by a sensor." .

watr:Constituent-Solids a sh:NodeShape,
        watr:Class,
        watr:Constituent-Solids ;
    rdfs:label "Constituent-Solids" ;
    rdfs:comment "Solid material present as a constituent of a treatment medium." ;
    rdfs:subClassOf watr:Constituent-Particles .

watr:Disinfectant a sh:NodeShape,
        watr:Class,
        watr:Disinfectant ;
    rdfs:label "Disinfectant" ;
    rdfs:comment "Class for disinfectants used in wastewater treatment" ;
    rdfs:subClassOf watr:WastewaterTreatmentChemical .

watr:Fluid-Sludge a sh:NodeShape,
        watr:Class,
        watr:Fluid-Sludge ;
    rdfs:label "Sludge" ;
    ns1:composedOf [ a ns1:QuantifiableProperty ;
            ns1:ofConstituent watr:Constituent-Solids ;
            ns2:hasQuantityKind <http://qudt.org/vocab/quantitykind/MassFraction> ;
            ns2:hasUnit <http://qudt.org/vocab/unit/PERCENT> ],
        [ a ns1:QuantifiableProperty ;
            ns1:ofConstituent ns1:Constituent-H2O ;
            ns2:hasQuantityKind <http://qudt.org/vocab/quantitykind/MassFraction> ;
            ns2:hasUnit <http://qudt.org/vocab/unit/PERCENT> ] ;
    rdfs:comment "A semi-solid slurry composed of water and solids." ;
    rdfs:subClassOf ns1:Mix-Fluid .

watr:Process-Aeration a watr:Class,
        watr:Process-Aeration ;
    rdfs:label "Aeration" ;
    rdfs:subClassOf watr:Process-GasTransfer ;
    skos:definition "A unit process that aerates (i.e., transfers oxygen into water)." .

watr:Process-Centrifugation a watr:Class,
        watr:Process-Centrifugation ;
    rdfs:label "Centrifugation" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "A process that uses centrifugal force to separate substances of different densities." .

watr:Process-Coagulation a watr:Class,
        watr:Process-Coagulation ;
    rdfs:label "Coagulation" ;
    rdfs:subClassOf watr:Process-ChemicalAddition ;
    skos:definition "A unit process that adds chemicals to water to cause small particles to clump together." .

watr:Process-Dewatering a watr:Class,
        watr:Process-Dewatering ;
    rdfs:label "Dewatering" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "A process to remove or separate water from another material, typically solids." .

watr:Process-Evaporation a watr:Class,
        watr:Process-Evaporation ;
    rdfs:label "Evaporation" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "A process of turning a liquid into a vapor." .

watr:Process-MembraneProcess a watr:Class,
        watr:Process-MembraneProcess ;
    rdfs:label "Membrane Process" ;
    rdfs:subClassOf watr:Process-Filtration ;
    skos:definition "A process that uses a semi-permeable membrane to separate substances." .

watr:Process-Microfiltration a watr:Class,
        watr:Process-Microfiltration ;
    rdfs:label "Microfiltration" ;
    rdfs:subClassOf watr:Process-Filtration ;
    skos:definition "0.1 to 1 micron-scale filtration" .

watr:Process-Ultrafiltration a watr:Class,
        watr:Process-Ultrafiltration ;
    rdfs:label "Ultrafiltration" ;
    rdfs:subClassOf watr:Process-Filtration ;
    skos:definition "0.01 to 0.1 micron-scale filtration" .

watr:Role-Anoxic a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Anoxic ;
    rdfs:label "Anoxic" ;
    rdfs:subClassOf ns1:EnumerationKind-Role .

watr:Role-Drain a ns1:EnumerationKind-Role,
        sh:NodeShape,
        watr:Class,
        watr:Role-Drain ;
    rdfs:label "Role-Drain" ;
    rdfs:subClassOf ns1:Role-Discharge .

watr:SeparationTank a sh:NodeShape,
        watr:Class ;
    rdfs:label "Separation Tank" ;
    rdfs:comment "A tank that has at least two outlets (e.g. overflow and underflow)" ;
    rdfs:subClassOf watr:Tank,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of SeparationTank must have the Separation process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Separation ] ;
            sh:qualifiedValueShapesDisjoint true ],
        [ rdfs:comment "A separation tank has at least two outlet connection points" ;
            sh:path ns1:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class ns1:OutletConnectionPoint ;
                    sh:property [ sh:class ns1:Mix-Fluid ;
                            sh:path ns1:hasMedium ] ] ] .

watr:pHAdjuster a sh:NodeShape,
        watr:Class,
        watr:pHAdjuster ;
    rdfs:label "pH Adjuster" ;
    rdfs:comment "Class for pH adjusters used in wastewater treatment" ;
    rdfs:subClassOf watr:WastewaterTreatmentChemical .

watr:Coagulant a sh:NodeShape,
        watr:Class,
        watr:Coagulant ;
    rdfs:label "Coagulant" ;
    rdfs:comment "Class for coagulants used in wastewater treatment" ;
    rdfs:subClassOf watr:WastewaterTreatmentChemical .

watr:DataProcessing-Normalization a sh:NodeShape,
        watr:Class,
        watr:DataProcessing-Normalization ;
    rdfs:label "Normalization" ;
    rdfs:comment "Parent class for normalization methods to scale data to a standard range" ;
    rdfs:subClassOf ns1:EnumerationKind-DataProcessing .

watr:Process a sh:NodeShape,
        watr:Class ;
    rdfs:label "Water Process" ;
    skos:definition "A process applied to water treatment." ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "A human-readable label for the process type." ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:description "A human-readable definition of the process type." ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path skos:definition ] .

watr:Process-BiosolidsDisposal a watr:Class,
        watr:Process-BiosolidsDisposal ;
    rdfs:label "BiosolidsDisposal" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "Generic process for unspecified disposal of biosolids (e.g., incineration, land application, landfilling, etc.)." .

watr:Process-ChemicalAddition a watr:Class,
        watr:Process-ChemicalAddition ;
    rdfs:label "Chemical Addition" ;
    rdfs:subClassOf watr:Process-ChemicalProcess ;
    skos:definition "Addition of chemicals, such as coagulant, polymer, disinfectant, etc." .

watr:Process-Cleaning a watr:Class,
        watr:Process-Cleaning ;
    rdfs:label "Cleaning" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "A maintenance-oriented process that removes accumulated solids, foulants, or residual materials from water treatment equipment." .

watr:Process-Combustion a watr:Class,
        watr:Process-Combustion ;
    rdfs:label "Combustion" ;
    rdfs:subClassOf watr:Process-ChemicalProcess,
        watr:Process-PhysicalProcess ;
    skos:definition "A process that combusts biosolids or biogas." .

watr:Process-Crystallization a watr:Class,
        watr:Process-Crystallization ;
    rdfs:label "Crystallization" ;
    rdfs:subClassOf watr:Process-Solidification ;
    skos:definition "A process of forming solid crystals from a solution." .

watr:Process-Digestion a watr:Class,
        watr:Process-Digestion ;
    rdfs:label "Digestion" ;
    rdfs:subClassOf watr:Process-BiologicalProcess ;
    skos:definition "A biological process that breaks down organic matter over a long duration in a tank." .

watr:Process-Electrodialysis a watr:Class,
        watr:Process-Electrodialysis ;
    rdfs:label "Electrodialysis" ;
    rdfs:subClassOf watr:Process-ChemicalProcess,
        watr:Process-PhysicalProcess ;
    skos:definition "A process that uses ion-exchange membranes and an electric potential to separate ions from water." .

watr:Process-MediaFiltration a watr:Class,
        watr:Process-MediaFiltration ;
    rdfs:label "Media Filtration" ;
    rdfs:subClassOf watr:Process-Filtration ;
    skos:definition "A filtration process that uses a bed of media (as opposed to a membrane-based process)." .

watr:Process-Mixing a watr:Class,
        watr:Process-Mixing ;
    rdfs:label "Mixing" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "A unit process that mixes water with chemicals or other substances to achieve a desired effect." .

watr:Process-Oxidation a watr:Class,
        watr:Process-Oxidation ;
    rdfs:label "Oxidation" ;
    rdfs:subClassOf watr:Process-ChemicalProcess ;
    skos:definition "A unit process that adds oxidizing agents to water to remove contaminants or improve water quality." .

watr:Process-Sedimentation a watr:Class,
        watr:Process-Sedimentation ;
    rdfs:label "Sedimentation" ;
    rdfs:subClassOf watr:Process-Separation ;
    skos:definition "A unit process that allows solids to settle out of water by gravity." .

watr:DataProcessing-AccuracyMetrics a sh:NodeShape,
        watr:Class,
        watr:DataProcessing-AccuracyMetrics ;
    rdfs:label "Accuracy Metrics" ;
    rdfs:comment "Combined accuracy measures (precision and trueness)" ;
    rdfs:subClassOf ns1:EnumerationKind-DataProcessing .

watr:DataProcessing-PrecisionMetrics a sh:NodeShape,
        watr:Class,
        watr:DataProcessing-PrecisionMetrics ;
    rdfs:label "Precision Metrics" ;
    rdfs:comment "Metrics for precision and repeatability measurements" ;
    rdfs:subClassOf ns1:EnumerationKind-DataProcessing .

watr:DataProcessing-Synchronization a sh:NodeShape,
        watr:Class,
        watr:DataProcessing-Synchronization ;
    rdfs:label "Synchronization" ;
    rdfs:comment "Parent class for synchronization methods to align data from multiple sources to common time intervals" ;
    rdfs:subClassOf ns1:EnumerationKind-DataProcessing .

watr:Process-Denitrification a watr:Class,
        watr:Process-Denitrification ;
    rdfs:label "Denitrification" ;
    rdfs:subClassOf watr:Process-BiologicalProcess ;
    skos:definition "Process by which nitrate is deoxidized to nitrogen gas and nitrogen oxides." .

watr:Process-Nitrification a watr:Class,
        watr:Process-Nitrification ;
    rdfs:label "Nitrification" ;
    rdfs:subClassOf watr:Process-BiologicalProcess ;
    skos:definition "Process by which ammonia is oxidized to nitrite and subsequently nitrate." .

watr:Process-ReverseOsmosis a watr:Class,
        watr:Process-ReverseOsmosis ;
    rdfs:label "Reverse Osmosis (RO)" ;
    rdfs:subClassOf watr:Process-MembraneProcess ;
    skos:definition "A core membrane separation process for desalination and advanced purification." .

watr:Thickener a sh:NodeShape,
        watr:Class ;
    rdfs:label "Thickener" ;
    rdfs:comment "A device used to increase the solids concentration of a slurry" ;
    rdfs:subClassOf ns1:Equipment,
        watr:UnitProcess ;
    sh:property [ sh:hasValue watr:Process-Thickening ;
            sh:maxCount 1 ;
            sh:message "Instances of Thickener must have the Thickening process." ;
            sh:minCount 1 ;
            sh:path watr:hasProcess ] .

watr:Process-Biofiltration a watr:Class,
        watr:Process-Biofiltration ;
    rdfs:label "Biofiltration" ;
    rdfs:subClassOf watr:Process-BiologicalProcess,
        watr:Process-Filtration ;
    skos:definition "A filtration method that uses biological processes to remove contaminants." .

watr:Process-BiologicalProcess a watr:Class,
        watr:Process-BiologicalProcess ;
    rdfs:label "Biological Process" ;
    rdfs:subClassOf watr:Process ;
    skos:definition "A unit process that utilizes biological activity for water treatment." .

watr:Process-Disinfection a watr:Class,
        watr:Process-Disinfection ;
    rdfs:label "Disinfection" ;
    rdfs:subClassOf watr:Process-ChemicalProcess ;
    skos:definition "A unit process that uses chemicals or other methods to kill or inactivate harmful microorganisms in water." .

watr:DataProcessing-Interpolation a sh:NodeShape,
        watr:Class,
        watr:DataProcessing-Interpolation ;
    rdfs:label "Interpolation" ;
    rdfs:comment "Parent class for interpolation methods to estimate values between known data points" ;
    rdfs:subClassOf ns1:EnumerationKind-DataProcessing .

watr:Process-ActivatedSludge a watr:Class,
        watr:Process-ActivatedSludge ;
    rdfs:label "Activated Sludge" ;
    rdfs:subClassOf watr:Process-BiologicalProcess,
        watr:Process-Separation ;
    skos:definition "Aerobic suspended-growth biological treatment" .

watr:DataProcessing-ErrorMetrics a sh:NodeShape,
        watr:Class,
        watr:DataProcessing-ErrorMetrics ;
    rdfs:label "Error Metrics" ;
    rdfs:comment "Parent class for error and uncertainty measurements" ;
    rdfs:subClassOf ns1:EnumerationKind-DataProcessing .

watr:Process-Separation a watr:Class,
        watr:Process-Separation ;
    rdfs:label "Separation" ;
    rdfs:subClassOf watr:Process-PhysicalProcess ;
    skos:definition "The most generic process for separation of any two constituents." .

watr:WastewaterTreatmentChemical a sh:NodeShape,
        watr:Class,
        watr:WastewaterTreatmentChemical ;
    rdfs:label "Wastewater Treatment Chemical" ;
    rdfs:comment "Base class for all chemicals used in wastewater treatment" ;
    rdfs:subClassOf ns1:Medium-Constituent .

ns1:Sensor sh:property [ rdfs:comment "The `hasMeasurementRange` relation is used to link to a numerical `Property` whose value indicates the maximum or minimum that can physically be measured, e.g. by a sensor." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasMeasurementRange ] .

watr:DataProcessing-Aggregate a sh:NodeShape,
        watr:Class,
        watr:DataProcessing-Aggregate ;
    rdfs:label "Aggregate" ;
    rdfs:comment "Parent class for aggregation functions that combine multiple data points" ;
    rdfs:subClassOf ns1:EnumerationKind-DataProcessing .

watr:Process-Filtration a watr:Class,
        watr:Process-Filtration ;
    rdfs:label "Filtration" ;
    rdfs:subClassOf watr:Process-Separation ;
    skos:definition "A unit process that removes smaller particles from water by passing it through a filter." .

watr:EnumerationKind-Aggregation a sh:NodeShape,
        watr:Class,
        watr:EnumerationKind-Aggregation ;
    rdfs:label "Aggregation" ;
    rdfs:comment "EnumerationKind for aggregation semantics carried by a property, such as total, mean, maximum, or minimum." ;
    rdfs:subClassOf ns1:EnumerationKind-Aspect .

watr:Filter a sh:NodeShape,
        watr:Class ;
    rdfs:label "Filter" ;
    rdfs:comment "An equipment used to remove impurities from liquids or gases" ;
    rdfs:subClassOf ns1:Filter,
        watr:UnitProcess ;
    sh:property [ sh:message "Instances of Filter must have the Filtration process." ;
            sh:path watr:hasProcess ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class watr:Process-Filtration ] ;
            sh:qualifiedValueShapesDisjoint true ] .

watr:Process-ChemicalProcess a watr:Class,
        watr:Process-ChemicalProcess ;
    rdfs:label "Chemical Process" ;
    rdfs:subClassOf watr:Process ;
    skos:definition "A unit process that involves the addition of chemicals to water to achieve a desired effect." .

watr:Reactor a sh:NodeShape,
        watr:Class ;
    rdfs:label "Reactor" ;
    rdfs:comment "A tank used for reaction or biological/chemical treatment processes" ;
    rdfs:subClassOf watr:Tank,
        watr:UnitProcess ;
    sh:property [ rdfs:comment "A reactor may have recirculation or return connection points" ;
            sh:path ns1:hasConnectionPoint ;
            sh:qualifiedMinCount 0 ;
            sh:qualifiedValueShape [ sh:class ns1:OutletConnectionPoint ;
                    sh:property [ sh:in ( ns1:Role-Recirculating ns1:Role-Return ) ;
                            sh:path ns1:hasRole ],
                        [ sh:class ns1:Mix-Fluid ;
                            sh:path ns1:hasMedium ] ] ] .

ns1:QuantifiableProperty sh:property [ rdfs:comment "The `hasTemporalResolution` relation is used to link to a numerical `Property` whose value indicates the minimum time interval between successive measurements or data points." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasTemporalResolution ],
        [ rdfs:comment "The `hasNumericResolution` relation is used to link to a numerical `Property` whose value indicates the smallest distinguishable difference between two measured values in engineering units." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasNumericResolution ],
        [ rdfs:comment "The `hasCalibrationCurve` relation is used to link to a `Property` that describes the mathematical relationship or lookup table between raw sensor output and calibrated engineering units." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasCalibrationCurve ],
        [ rdfs:comment "The `hasMeasurementRange` relation is used to link to a numerical `Property` whose value indicates the maximum or minimum that can physically be measured, e.g. by a sensor." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasMeasurementRange ],
        [ rdfs:comment "The `hasNumericRange` relation is used to link to a numerical `Property` whose value indicates the span between the minimum and maximum measured values." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasNumericRange ],
        [ rdfs:comment "The `hasAccuracy` relation is used to link to a numerical `Property` whose value indicates the maximum expected deviation between the measured value and the true value in engineering units." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasAccuracy ],
        [ rdfs:comment "If present, `hasAggregation` associates a quantifiable property with one aggregation semantics such as total, mean, maximum, or minimum." ;
            sh:class watr:EnumerationKind-Aggregation ;
            sh:maxCount 1 ;
            sh:path watr:hasAggregation ],
        [ rdfs:comment "The `hasBias` relation is used to link to a numerical `Property` whose value indicates the systematic offset or drift in measurements relative to the true value." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasBias ],
        [ rdfs:comment "The `hasProcessedData` relation is used to link to a `Property` that describes any data processing, filtering, or transformation applied to the raw measurement values." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasProcessedData ],
        [ rdfs:comment "The `hasTemporalRange` relation is used to link to a numerical `Property` whose value indicates the start and end times for which data has been recorded." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasTemporalRange ],
        [ rdfs:comment "The `hasDropRate` relation is used to link to a `Property` describes the amount of data points lost within a range of time due to latencies or other factors." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasDropRate ],
        [ rdfs:comment "The `hasResponseTime` relation is used to link to a numerical `Property` whose value indicates the time required for the sensor or measurement system to respond to a step change in the measured variable." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasResponseTime ],
        [ rdfs:comment "The `hasPrecision` relation is used to link to a numerical `Property` whose value indicates the repeatability or reproducibility of measurements under identical conditions." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasPrecision ],
        [ rdfs:comment "The `hasVariableRange` relation is used to link to a numerical `Property` whose value indicates the maximum or minimum for the measured variable during normal operation." ;
            sh:class ns1:QuantifiableProperty ;
            sh:path watr:hasVariableRange ] .

watr:Process-PhysicalProcess a watr:Class,
        watr:Process-PhysicalProcess ;
    rdfs:label "Physical Process" ;
    rdfs:subClassOf watr:Process ;
    skos:definition "A unit process that relies on physical forces to separate or treat water." .

watr:hasProcess a rdf:Property ;
    rdfs:label "has process" ;
    rdfs:comment "This property is used to associate a water treatment process with a piece of equipment." .

