@prefix bacnet: <http://data.ashrae.org/bacnet/2020#> .
@prefix g36: <http://data.ashrae.org/standard223/1.0/extensions/g36#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix quantitykind: <http://qudt.org/vocab/quantitykind/> .
@prefix qudt: <http://qudt.org/schema/qudt/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix s223: <http://data.ashrae.org/standard223#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix unit: <http://qudt.org/vocab/unit/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

# deactivate slow shapes
<http://data.ashrae.org/standard223#ClosedWorldQUDTShape> sh:deactivated true .
s223:ClosedWorld223Shape sh:deactivated true .

s223:AbstractClass a s223:Class,
        s223:Concept,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Class"^^xsd:string ;
    rdfs:comment "This is a modeling construct. Instances of abstract classes cannot be created. All abstract classes in this standard have a more specific subclass."^^xsd:string ;
    rdfs:subClassOf s223:Class .

s223:Class a s223:Concept,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Class"^^xsd:string ;
    rdfs:comment "This is a modeling construct. All classes defined in the 223 standard are instances of `s223:Class`."^^xsd:string ;
    rdfs:subClassOf s223:Concept,
        rdfs:Class ;
    sh:property [ rdfs:comment "A `Class` shall be associated with at least one label using the relation `rdfs:label`."^^xsd:string ;
            sh:message "s223: A `Class` shall be associated with at least one label using the relation `rdfs:label`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path rdfs:label ;
            sh:severity sh:Warning ] .

s223:Concept a s223:Class,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Concept"^^xsd:string ;
    rdfs:comment "All classes and relations defined in the 223 standard are subclasses of `s223:Concept`."^^xsd:string ;
    rdfs:subClassOf rdfs:Resource ;
    sh:property [ rdfs:comment "Incompatible Medium. Case2: An entity with a pure medium and an associated `Property` with constituents."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 2: A pure medium and an associated `Property` with constituents."^^xsd:string ;
                    sh:message "s223: {$this} `hasMedium` of {?m1}, but is associated with `Property` {?prop} that has `ofMedium` of {?m2}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m1 ?prop ?m2
WHERE {
$this s223:hasMedium ?m1 .
$this ?p ?prop .
?prop a/rdfs:subClassOf* s223:Property .
?prop s223:ofMedium ?m2 .
?m2 s223:composedOf/s223:ofConstituent ?s2 .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {
  ?m2 s223:composedOf/s223:ofConstituent ?s12 .
  {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} .
}
}
"""^^xsd:string ] ],
        [ rdfs:comment "If the relation `hasProperty` is present, it shall associate the concept with a `Property`."^^xsd:string ;
            sh:class s223:Property ;
            sh:message "s223: If the relation `hasProperty` is present, it shall associate the concept with a `Property`."^^xsd:string ;
            sh:path s223:hasProperty ],
        [ rdfs:comment "Incompatible Medium. Case4: An entity with constituents and an associated `Property` with constituents."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 4: A medium with constituents and an associated `Property` with constituents."^^xsd:string ;
                    sh:message "s223: {$this} `hasMedium` of {?m1}, but is associated with `Property` {?prop} that has `ofMedium` of {?m2}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m1 ?prop ?m2
WHERE {
$this s223:hasMedium ?m1 .
$this ?p ?prop .
?prop a/rdfs:subClassOf* s223:Property .
?prop s223:ofMedium ?m2 .
    ?m1 s223:composedOf/s223:ofConstituent ?s1 .
    ?m2 s223:composedOf/s223:ofConstituent ?s2 .
  FILTER NOT EXISTS {
    ?m1 s223:composedOf/s223:ofConstituent ?s11 .
    ?m2 s223:composedOf/s223:ofConstituent ?s12 .
    FILTER (?s11 = ?s12) .
  }
  FILTER NOT EXISTS {
    ?m1 s223:composedOf/s223:ofConstituent ?s21 .
    ?m2 s223:composedOf/s223:ofConstituent ?s22 .
    {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} .
  }
}
"""^^xsd:string ] ],
        [ rdfs:comment "Incompatible Medium. Case3: An entity with constituents and an associated `Property` with a pure medium."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 3: A medium with constituents and an associated `Property` with a pure medium."^^xsd:string ;
                    sh:message "s223: {$this} `hasMedium` of {?m2}, but is associated with `Property` {?prop} that has `ofMedium` of {?m1}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m1 ?prop ?m2
WHERE {
$this s223:hasMedium ?m2 .
$this ?p ?prop .
?prop a/rdfs:subClassOf* s223:Property .
?prop s223:ofMedium ?m1 .
?m2 s223:composedOf/s223:ofConstituent ?s2 .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {
  ?m2 s223:composedOf/s223:ofConstituent ?s12 .
  {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} .
}
}
"""^^xsd:string ] ],
        [ rdfs:comment "Incompatible Medium. Case1: An entity with a pure medium and an associated `Property` with a different pure medium."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 1: Two pure mediums."^^xsd:string ;
                    sh:message "s223: {$this} `hasMedium` of {?m1}, but is associated with `Property` {?prop} that has `ofMedium` of {?m2}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m1 ?prop ?m2
WHERE {
$this s223:hasMedium ?m1 .
$this ?p ?prop .
?prop a/rdfs:subClassOf* s223:Property .
?prop s223:ofMedium ?m2 .
FILTER (?m1 != ?m2 ) .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {?m2 s223:composedOf ?c2}
FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) .
FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) .
}
"""^^xsd:string ] ] .

s223:Relation a s223:Class,
        s223:Concept,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Relation"^^xsd:string ;
    rdfs:comment "A `Relation` associates the subject and the object in an RDF triple, the *predicate* portion of a *(subject, predicate, object)* triple."^^xsd:string ;
    rdfs:subClassOf s223:Concept,
        rdf:Property ;
    sh:property [ rdfs:comment "A `Relation` shall be associated with at least one label using the relation `rdfs:label`."^^xsd:string ;
            sh:message "s223: A `Relation` shall be associated with at least one label using the relation `rdfs:label`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path rdfs:label ;
            sh:severity sh:Warning ] .

s223:RelationWithInverse a s223:Class,
        s223:Concept,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Inverse relation"^^xsd:string ;
    rdfs:comment """An `RelationWithInverse` is modeling construct used to define symmetric behavior
for certain relations in the standard such as `connectedTo` and `connectedFrom`."""^^xsd:string ;
    rdfs:subClassOf s223:Relation ;
    sh:property [ rdfs:comment "An `RelationWithInverse` shall be associated with exactly one other `RelationWithInverse` using the relation `inverseOf`."^^xsd:string ;
            sh:class s223:RelationWithInverse ;
            sh:maxCount 1 ;
            sh:message "s223: An `RelationWithInverse` shall be associated with exactly one other `RelationWithInverse` using the relation `inverseOf`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:inverseOf ] .

s223:SymmetricRelation a s223:Class,
        s223:Concept,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Symmetric relation"^^xsd:string ;
    rdfs:comment """A modeling construct used to define symmetric behavior
for certain relations in the standard such as `cnx`, `connected`, and `pairedConnectionPoint`."""^^xsd:string ;
    rdfs:subClassOf s223:Relation .

g36:ChilledWaterCoil a s223:Class,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "ChilledWaterCoil"^^xsd:string ;
    rdfs:comment "A cooling coil with a connected chilled water valve."^^xsd:string ;
    rdfs:subClassOf s223:CoolingCoil ;
    sh:property [ rdfs:comment "The ChilledWaterCoil shall be connected to a ChilledWaterValve using the relation connectedTo."^^xsd:string ;
            sh:path s223:connectedTo ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class g36:ChilledWaterValve ] ] .

g36:ChilledWaterValve a s223:Class,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Chilled Water Valve"^^xsd:string ;
    rdfs:comment "A valve that controls the flow of chilled water through a chilled water coil."^^xsd:string ;
    rdfs:subClassOf s223:Valve .

g36:Damper a s223:Class,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Damper"^^xsd:string ;
    rdfs:comment "A damper with an analog or two binary position command properties."^^xsd:string ;
    rdfs:subClassOf s223:Damper .

g36:ElectricHeatingCoil a s223:Class,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Electric Heating Coil"^^xsd:string ;
    rdfs:comment "An electrical heating element with an analog heating command."^^xsd:string ;
    rdfs:subClassOf s223:ElectricResistanceElement ;
    sh:property [ rdfs:comment "An electric heating coil shall have at least one analog heating command property using a relation hasProperty."^^xsd:string ;
            sh:message "g36: An electric heating coil shall have at least one analog heating command property using a relation hasProperty."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasProperty ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:QuantifiableActuatableProperty ;
                    sh:node [ sh:property [ sh:hasValue quantitykind:DimensionlessRatio ;
                                    sh:maxCount 1 ;
                                    sh:minCount 1 ;
                                    sh:path qudt:hasQuantityKind ] ] ] ] .

g36:Fan a s223:Class,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Fan"^^xsd:string ;
    rdfs:comment "A fan with a start/stop command."^^xsd:string ;
    rdfs:subClassOf s223:Fan ;
    sh:property [ rdfs:comment "A Fan shall have at least one Start/Stop command using the relation hasProperty."^^xsd:string ;
            sh:message "g36: A Fan shall have at least one Start/Stop command using the relation hasProperty."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasProperty ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:EnumeratedActuatableProperty ;
                    sh:node [ sh:property [ sh:class s223:Binary-OnOff ;
                                    sh:maxCount 1 ;
                                    sh:minCount 1 ;
                                    sh:path s223:hasEnumerationKind ] ] ] ] .

g36:FanWithVFD a s223:Class,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "FanWithVFD"^^xsd:string ;
    rdfs:comment "A fan controlled by a VFD."^^xsd:string ;
    rdfs:subClassOf g36:Fan ;
    sh:property [ rdfs:comment "A fan with VFD shall have at least one fan speed command using the relation hasProperty."^^xsd:string ;
            sh:message "g36: A fan with VFD shall have at least one fan speed command using the relation hasProperty."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasProperty ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:QuantifiableActuatableProperty ;
                    sh:node [ sh:property [ sh:hasValue quantitykind:DimensionlessRatio ;
                                    sh:maxCount 1 ;
                                    sh:minCount 1 ;
                                    sh:path qudt:hasQuantityKind ] ] ] ] .

g36:HotWaterCoil a s223:Class,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "HotWater/ReheatCoil"^^xsd:string ;
    rdfs:comment "A hot water coil connected to a control valve."^^xsd:string ;
    rdfs:subClassOf s223:HeatingCoil ;
    sh:property [ rdfs:comment "The HotWaterCoil shall be connected to a HotWaterValve using the relation connectedTo."^^xsd:string ;
            sh:message "g36: The HotWaterCoil shall be connected to a HotWaterValve using the relation connectedTo."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:connectedTo ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class g36:HotWaterValve ] ] .

g36:HotWaterValve a s223:Class,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Hot Water Valve"^^xsd:string ;
    rdfs:comment "A valve that controls the flow of hot water through a hot water coil."^^xsd:string ;
    rdfs:subClassOf s223:Valve .

g36:TwoPositionDamper a s223:Class,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Two Position Damper"^^xsd:string ;
    rdfs:comment "A damper that can take two positions: fully open and fully closed."^^xsd:string ;
    rdfs:subClassOf s223:Damper ;
    sh:property [ rdfs:comment "A Two Position Damper shall have at least one open-and-close damper command property using the relation hasProperty."^^xsd:string ;
            sh:message "g36: A Two Position Damper shall have at least one open-and-close damper command property using the relation hasProperty."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasProperty ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:EnumeratedActuatableProperty ;
                    sh:node [ sh:property [ sh:hasValue s223:Binary-Position ;
                                    sh:maxCount 1 ;
                                    sh:minCount 1 ;
                                    sh:path s223:hasAspect ],
                                [ sh:class s223:EnumerationKind-Binary ;
                                    sh:maxCount 1 ;
                                    sh:minCount 1 ;
                                    sh:path s223:hasEnumerationKind ] ] ] ] .

g36:Zone a s223:Class,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Zone"^^xsd:string ;
    rdfs:comment "A thermal zone with the points required for Guideline 36 control sequences. It is a collection of s223:DomainSpace instances."^^xsd:string ;
    rdfs:subClassOf s223:Zone ;
    sh:property [ rdfs:comment "A Zone shall have at least one binary zone occupancy property using the relation hasProperty"^^xsd:string ;
            sh:message "g36: A Zone shall have at least one binary zone occupancy property using the relation hasProperty"^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasProperty ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:EnumeratedObservableProperty ;
                    sh:node [ sh:property [ sh:class s223:EnumerationKind-Occupancy ;
                                    sh:maxCount 1 ;
                                    sh:minCount 1 ;
                                    sh:path s223:hasEnumerationKind ] ] ] ;
            sh:severity sh:Info ],
        [ rdfs:comment "A Zone shall have at least a zone CO2 concentration property using the relation hasProperty, if applicable control is used."^^xsd:string ;
            sh:message "g36: A Zone shall have at least a zone CO2 concentration property using the relation hasProperty, if applicable control is used."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasProperty ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:QuantifiableObservableProperty ;
                    sh:node [ sh:property [ sh:hasValue quantitykind:DimensionlessRatio ;
                                    sh:maxCount 1 ;
                                    sh:minCount 1 ;
                                    sh:path qudt:hasQuantityKind ],
                                [ sh:hasValue s223:Constituent-CO2 ;
                                    sh:maxCount 1 ;
                                    sh:minCount 1 ;
                                    sh:path s223:ofConstituent ] ] ] ;
            sh:severity sh:Info ],
        [ rdfs:comment "A Zone shall have at least one window switch on-off property using the relation hasProperty."^^xsd:string ;
            sh:message "g36: A Zone shall have at least one window switch on-off property using the relation hasProperty."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasProperty ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:EnumeratedObservableProperty ;
                    sh:node [ sh:property [ rdfs:comment "Property shall be measured at a window."^^xsd:string ;
                                    sh:class s223:Window ;
                                    sh:path [ sh:alternativePath ( ( [ sh:inversePath s223:observes ] s223:hasObservationLocation ) [ sh:inversePath s223:hasProperty ] ) ] ],
                                [ sh:class s223:Binary-OnOff ;
                                    sh:maxCount 1 ;
                                    sh:minCount 1 ;
                                    sh:path s223:hasEnumerationKind ] ] ] ;
            sh:severity sh:Info ],
        [ rdfs:comment "A Zone shall have a zone temperature setpoint adjustment property using the relation hasProperty, if applicable."^^xsd:string ;
            sh:message "g36: A Zone shall have a zone temperature setpoint adjustment property using the relation hasProperty, if applicable."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasProperty ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:QuantifiableObservableProperty ;
                    sh:node [ sh:property [ sh:hasValue s223:Dimensioned-Delta ;
                                    sh:maxCount 1 ;
                                    sh:minCount 1 ;
                                    sh:path s223:hasAspect ],
                                [ sh:hasValue quantitykind:Temperature ;
                                    sh:maxCount 1 ;
                                    sh:minCount 1 ;
                                    sh:path qudt:hasQuantityKind ] ] ] ;
            sh:qualifiedValueShapesDisjoint true ;
            sh:severity sh:Info ],
        [ rdfs:comment "A Zone shall have at least one Domain-HVAC using the relation hasDomain. "^^xsd:string ;
            sh:hasValue s223:Domain-HVAC ;
            sh:message "g36: A Zone shall have at least one Domain-HVAC using the relation hasDomain. "^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasDomain ] .

g36:ZoneGroup a s223:Class,
        rdfs:Class,
        sh:NodeShape ;
    rdfs:label "Zone Group"^^xsd:string ;
    rdfs:comment "A ZoneGroup is a grouping of zones that may be scheduled together. Zone groupings must be assigned based on rules in Clause 3.1.3 of Guideline 36."^^xsd:string ;
    rdfs:subClassOf s223:ZoneGroup ;
    sh:property [ rdfs:comment "A ZoneGroup shall have the Domain HVAC using the relation hasDomain."^^xsd:string ;
            sh:hasValue s223:Domain-HVAC ;
            sh:message "g36: A ZoneGroup shall have the Domain HVAC using the relation hasDomain."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasDomain ],
        [ rdfs:comment "A ZoneGroup shall contain at least one Zone using the relation contains."^^xsd:string ;
            sh:class g36:Zone ;
            sh:message "g36: A ZoneGroup shall contain at least one Zone using the relation contains."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:contains ] .

s223:AbstractClassShape a sh:NodeShape ;
    sh:sparql [ a sh:SPARQLConstraint ;
            sh:message "s223: {$this} cannot be declared an instance of only {?c}, which is an abstract class."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
            SELECT $this ?c
            WHERE {
              $this a ?c .
              ?c   a s223:AbstractClass .
              FILTER NOT EXISTS {
                $this a ?nonAbs .
                ?nonAbs rdfs:subClassOf+ ?c .
                FILTER NOT EXISTS { ?nonAbs a s223:AbstractClass }
              }
            }
        """^^xsd:string ] ;
    sh:targetClass s223:AbstractClass ;
    sh:targetSubjectsOf rdf:type .

s223:ActuatablePropertyShape a sh:NodeShape ;
    sh:property [ rdfs:comment "An `ActuatableProperty` normally is referred to by `Equipment` using the relation `actuatedByProperty`."^^xsd:string ;
            sh:class s223:Equipment ;
            sh:message "s223: An `ActuatableProperty` normally is referred to by `Equipment` using the relation `actuatedByProperty`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath s223:actuatedByProperty ] ;
            sh:severity sh:Warning ] ;
    sh:targetClass s223:ActuatableProperty .

s223:Actuator a s223:Class,
        sh:NodeShape ;
    rdfs:label "Actuator"^^xsd:string ;
    rdfs:comment """A piece of `Equipment` that receives control signals and electrically, pneumatically, or hydraulically makes changes in the
physical world, such as the position of a valve or damper."""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "An `Actuator` shall be associated with at least one `ActuatableProperty` using the relation `actuatedByProperty`."^^xsd:string ;
            sh:class s223:ActuatableProperty ;
            sh:message "s223: An `Actuator` shall be associated with at least one `ActuatableProperty` using the relation `actuatedByProperty`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:actuatedByProperty ],
        [ rdfs:comment "If the relation `actuates` is present it shall associate the `Actuator` with a piece of `Equipment`."^^xsd:string ;
            sh:class s223:Equipment ;
            sh:message "s223: If the relation `actuates` is present it shall associate the `Actuator` with a piece of `Equipment`."^^xsd:string ;
            sh:path s223:actuates ] .

s223:AirHandlingUnit a s223:Class,
        sh:NodeShape ;
    rdfs:label "Air handling unit"^^xsd:string ;
    rdfs:comment """A piece of `Equipment` consisting of a fan or fans and other equipment necessary to perform one or more of the following functions:
circulating, filtration, heating, cooling, heat recovery, humidifying, dehumidifying, and mixing of air."""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "An `AirHandlingUnit` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: An `AirHandlingUnit` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "An `AirHandlingUnit` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: An `AirHandlingUnit` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:AirToAirHeatPump a s223:Class,
        sh:NodeShape ;
    rdfs:label "Air to air heat pump"^^xsd:string ;
    rdfs:comment "A `HeatPump` that transfers thermal energy between two bodies of air."^^xsd:string ;
    rdfs:subClassOf s223:HeatPump ;
    sh:property [ rdfs:comment "An `AirToAirHeatPump` shall have at least two inlets using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: An `AirToAirHeatPump` shall have at least two inlets using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 2 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "An `AirToAirHeatPump` shall have at least two outlets using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: An `AirToAirHeatPump` shall have at least two outlets using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 2 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:BACnetExternalReferenceShape a sh:NodeShape ;
    sh:property [ a sh:PropertyShape ;
            rdfs:comment "If the relation `device-name` is present it associates the external reference with a BACnet device having the specific device name."^^xsd:string ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path bacnet:device-name ],
        [ a sh:PropertyShape ;
            rdfs:comment "If the relation `object-identifier` is present it associates the external reference with the BACnet object having the specific object identifier."^^xsd:string ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path bacnet:object-identifier ;
            sh:pattern "^[A-Za-z0-9-]+,[1-9][0-9]*$"^^xsd:string ],
        [ a sh:PropertyShape ;
            rdfs:comment "If the relation `priority-for-writing` is present it provides the priority for writing values to the object."^^xsd:string ;
            sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path bacnet:priority-for-writing ],
        [ a sh:PropertyShape ;
            rdfs:comment "If the relation `property-array-index` is present it provides the index for reading items from a property that is an array."^^xsd:string ;
            sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path bacnet:property-array-index ],
        [ a sh:PropertyShape ;
            rdfs:comment "If the relation `property-identifier` is present it is either a decimal number or exactly equal to the ASHRAE 135-2024 Clause 21 identifier text of BACnetPropertyIdentifier. If it is omitted, it defaults to \"present-value\" except for BACnet File objects, where absence of `property-identifier` refers to the entire content of the file accessed with Stream Access."^^xsd:string ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path bacnet:property-identifier ],
        [ a sh:PropertyShape ;
            rdfs:comment "If the relation `object-name` is present it associates the external reference with the BACnet object having the specific object name."^^xsd:string ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path bacnet:object-name ],
        [ a sh:PropertyShape ;
            rdfs:comment "If the relation `device-identifier` is present it associates the external reference with a BACnet device having the specific device identifier."^^xsd:string ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path bacnet:device-identifier ;
            sh:pattern "^[A-Za-z0-9-]+,[1-9][0-9]*$"^^xsd:string ] ;
    sh:targetClass s223:BACnetExternalReference .

s223:Bathtub a s223:Class,
        sh:NodeShape ;
    rdfs:label "Bathtub"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` for bathing that receives as an input hot or cold water dispensed from one or two `Faucet`s, and is designed to hold a specific volume of water and release the held water through a `Drain`."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Bathtub` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Bathtub` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Bathtub` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Bathtub` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:BatteryCPShape a sh:NodeShape ;
    rdfs:label "Battery CP Shape"^^xsd:string ;
    rdfs:comment "A `Battery` shall have at least one outlet or bidirectional `ConnectionPoint` using the medium Electricity."^^xsd:string ;
    sh:message "s223: A `Battery` shall have at least one outlet or bidirectional `ConnectionPoint` using the medium Electricity."^^xsd:string ;
    sh:or ( [ sh:property [ rdfs:comment "A `Battery` shall have at least one outlet or bidirectional `ConnectionPoint` using the medium Electricity."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                                sh:path s223:hasMedium ] ] ] ] ] [ sh:property [ rdfs:comment "A `Battery` shall have at least one outlet or bidirectional `ConnectionPoint` using the medium Electricity."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                                sh:path s223:hasMedium ] ] ] ] ] ) ;
    sh:severity sh:Warning ;
    sh:targetClass s223:Battery .

s223:Boiler a s223:Class,
        sh:NodeShape ;
    rdfs:label "Boiler"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that uses fuel or electricity to heat water or other fluids and supply steam or hot water for heating, humidification, or other applications."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Boiler` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Boiler` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Boiler` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Boiler` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ChilledBeamShape a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "A `ChilledBeam` must always have the role `Role-Cooling`"^^xsd:string ;
            sh:object s223:Role-Cooling ;
            sh:predicate s223:hasRole ;
            sh:subject sh:this ] ;
    sh:targetClass s223:ChilledBeam .

s223:Chiller a s223:Class,
        sh:NodeShape ;
    rdfs:label "Chiller"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that removes heat from a liquid coolant via a vapor-compression, adsorption refrigeration, or absorption refrigeration cycles."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Chiller` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Chiller` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Chiller` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Chiller` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ClosedWorld223Shape a sh:NodeShape ;
    rdfs:label "Closed World s223 Shape"^^xsd:string ;
    rdfs:comment "Ensure that all instances of an s223 class use only the relations defined for that class. Note that this only applies to s223 relations."^^xsd:string ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment """Ensure that all instances of an s223 class use only the relations defined for that class. Note that only s223
relations are checked by this validation."""^^xsd:string ;
            sh:message "s223: s223 predicate {?p} is not defined for instance {$this}."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
SELECT $this ?p ?o
WHERE {
?p a/rdfs:subClassOf* s223:Relation .
$this ?p ?o .
FILTER NOT EXISTS {$this a sh:NodeShape}
FILTER NOT EXISTS {$this a/rdfs:subClassOf* ?class .
			?class sh:property/sh:path ?p .
}
FILTER NOT EXISTS {$this a/rdfs:subClassOf* ?class .
?class sh:xone/rdf:rest*/rdf:first/sh:property/sh:path ?p .
}
FILTER NOT EXISTS {$this a/rdfs:subClassOf* ?class .
?class sh:or/rdf:rest*/rdf:first/sh:property/sh:path ?p .
}
}
"""^^xsd:string ] ;
    sh:targetClass s223:Concept .

s223:ClosedWorldQUDTShape a sh:NodeShape ;
    rdfs:label "Closed World QUDT Shape"^^xsd:string ;
    rdfs:comment "Ensure that all instances of an s223 class use only the relations defined for that class. Note that this only applies to QUDT relations."^^xsd:string ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment """Ensure that all instances of an s223 class use only the relations defined for that class. Note that only QUDT
relations are checked by this validation."""^^xsd:string ;
            sh:message "s223: QUDT predicate {?p} is not defined for instance {$this}."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
SELECT $this ?p ?o
WHERE {
$this ?p ?o .
FILTER(STRSTARTS (str(?p), "http://qudt.org/schema/qudt"))
FILTER NOT EXISTS {$this a sh:NodeShape}
FILTER NOT EXISTS {$this a/rdfs:subClassOf* ?class .
			?class sh:property/sh:path ?p .
}
FILTER NOT EXISTS {$this a/rdfs:subClassOf* ?class .
?class sh:xone/rdf:rest*/rdf:first/sh:property/sh:path ?p .
}
FILTER NOT EXISTS {$this a/rdfs:subClassOf* ?class .
?class sh:or/rdf:rest*/rdf:first/sh:property/sh:path ?p .
}
}
"""^^xsd:string ] ;
    sh:targetClass s223:Concept .

s223:ClothesWasher a s223:Class,
        sh:NodeShape ;
    rdfs:label "Clothes washer"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that automatically cleans a load of textiles (e.g., clothing, bedding)."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `ClothesWasher` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `ClothesWasher` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `ClothesWasher` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `ClothesWasher` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `ClothesWasher` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `ClothesWasher` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:CoffeeMaker a s223:Class,
        sh:NodeShape ;
    rdfs:label "Coffee maker"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that automatically brews coffee."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `CoffeeMaker` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `CoffeeMaker` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Compressor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Compressor"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that mechanically increases the pressure of a gas."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Compressor` shall have at least one outlet."^^xsd:string ;
            sh:message "s223: A `Compressor` shall have at least one outlet."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ],
        [ rdfs:comment "A `Compressor` shall have at least one inlet."^^xsd:string ;
            sh:message "s223: A `Compressor` shall have at least one inlet."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ] .

s223:ComputerPrinter a s223:Class,
        sh:NodeShape ;
    rdfs:label "Computer printer"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that processes an input electrical or RF signal, typically from a `Computer`, and outputs a durable representation of information, typically text and/or graphics, typically on paper."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `ComputerPrinter` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `ComputerPrinter` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `ComputerPrinter` shall have at least one inlet using the medium `Electricity-Signal` or `EM-RF`."^^xsd:string ;
            sh:message "s223: A `ComputerPrinter` shall have at least one inlet using the medium `Electricity-Signal` or `EM-RF`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:or ( [ sh:class s223:Electricity-Signal ] [ sh:class s223:EM-RF ] ) ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ConcentrationSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Concentration sensor"^^xsd:string ;
    rdfs:comment """A `Sensor` that `observes` a `QuantifiableObservableProperty` that represents a concentration of a miscible constituent in a medium,
in contrast to a `ParticulateSensor` that `observes` a `QuantifiableObservableProperty` that represents an amount of a particulate in a medium
(see {s223:ParticulateSensor}). The 223 standard does not constrain the `Unit` or `QuantityKind` reported by a `ConcentrationSensor`, but possible
`QuantityKind`s include `Concentration` (moles per volume), `Density` (mass per volume), `MoleFraction`, and `VolumeFraction`."""^^xsd:string ;
    rdfs:subClassOf s223:Sensor .

s223:ConceptShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Add an rdfs:label if it is missing."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this rdfs:label ?newLabel .}
WHERE {
FILTER (NOT EXISTS {$this rdfs:label ?something}) .
BIND(REPLACE(STR($this), "^.*/([^/]*)$", "$1") AS ?localNameWithoutHash)
BIND(REPLACE(?localNameWithoutHash, "^.*#(.*)$", "$1") AS ?localName)
BIND(REPLACE(?localName, "-", " ", "i") AS ?newLabel)
}
"""^^xsd:string ;
            sh:name "AddLabelFromLocalName"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:Concept .

s223:ConductorShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `hasElectricalPhase` value from any connected `ConnectionPoint`s."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:hasElectricalPhase ?phase .}
WHERE {
$this s223:cnx/s223:hasElectricalPhase ?phase .
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:Conductor .

s223:ConnectableShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `connected` relation for BiDirectional connections"^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:connected ?d2 .}
WHERE {
$this s223:connectedThrough/^s223:connectedThrough ?d2 .
FILTER ($this != ?d2) .
FILTER NOT EXISTS {$this s223:contains* ?d2} .
FILTER NOT EXISTS {?d2 s223:contains* $this} .
}
"""^^xsd:string ;
            sh:name "InferredEquipmentToDownstreamEquipmentProperty"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `connectedFrom` relations using `connectsThrough` and `connectsFrom`."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:connectedFrom ?equipment .}
WHERE {
$this s223:hasConnectionPoint ?cp .
?cp a s223:InletConnectionPoint .
?cp s223:connectsThrough/s223:connectsFrom ?equipment .
}
"""^^xsd:string ;
            sh:name "InferredEquipmentToUpstreamEquipmentProperty"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `connected` relation using `connectedFrom`"^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:connected ?thing .}
WHERE {
$this s223:connectedFrom ?thing .
}
"""^^xsd:string ;
            sh:name "InferredEquipmentToEquipmentPropertyfromconnectedFrom"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `connectedThrough` relation using `hasConnectionPoint` and `connectsThrough`"^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:connectedThrough ?connection .}
WHERE {
$this s223:hasConnectionPoint/s223:connectsThrough ?connection .
}
"""^^xsd:string ;
            sh:name "InferredEquipmentToConnectionProperty"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `hasConnectionPoint` relation using `cnx`"^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:hasConnectionPoint ?thing .}
WHERE {
$this s223:cnx ?thing .
}
"""^^xsd:string ;
            sh:name "InferredEquipmentToConnectionPointProperty"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `cnx` relationship using `hasConnectionPoint`."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:cnx ?thing .}
WHERE {
$this s223:hasConnectionPoint ?thing .
}
"""^^xsd:string ;
            sh:name "InferredEquipmentToConnectionPointCnxProperty"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `connected` relation using `connectedTo`"^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:connected ?thing .}
WHERE {
$this s223:connectedTo ?thing .
}
"""^^xsd:string ;
            sh:name "InferredEquipmentToEquipmentPropertyfromconnectedTo"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `connected` relation for BiDirectional connections"^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:connected ?d2 .}
WHERE {
$this s223:connectedThrough/^s223:connectedThrough ?d2 .
FILTER ($this != ?d2) .
FILTER NOT EXISTS {$this s223:contains* ?d2} .
FILTER NOT EXISTS {?d2 s223:contains* $this} .
}
"""^^xsd:string ;
            sh:name "InferredEquipmentToDownstreamEquipmentProperty"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `cnx` relation using `isConnectionPointOf`."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:cnx ?thing .}
WHERE {
$this ^s223:isConnectionPointOf ?thing .
}
"""^^xsd:string ;
            sh:name "InferredEquipmentToConnectionPointCnxPropertyFromInverse"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `connectedTo` relation using `connectsThrough` and `connectsTo`."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:connectedTo ?equipment .}
WHERE {
$this s223:hasConnectionPoint ?cp .
?cp a s223:OutletConnectionPoint .
?cp s223:connectsThrough/s223:connectsTo ?equipment .
}
"""^^xsd:string ;
            sh:name "InferredEquipmentToDownstreamEquipmentProperty"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:Connectable .

s223:ConnectionCnxShape a sh:NodeShape ;
    rdfs:label "ConnectionCnxShape"^^xsd:string ;
    rdfs:comment "You need either an `InletConnectionPoint` and an `OutletConnectionPoint`, or at least one `BidirectionalConnectionPoint` and another `ConnectionPoint` of any type."^^xsd:string ;
    sh:message "s223: You need either an `InletConnectionPoint` and an `OutletConnectionPoint`, or at least one `BidirectionalConnectionPoint` and another `ConnectionPoint` of any type."^^xsd:string ;
    sh:or ( [ sh:property [ rdfs:comment "A `Connection` shall have at least two `connectsAt` relations allowing flow in and out of the `Connection`."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:connectsAt ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ;
                        sh:qualifiedValueShapesDisjoint true ;
                        sh:severity sh:Warning ],
                    [ rdfs:comment "A `Connection` shall have at least two `connectsAt` relations allowing flow in and out of the `Connection`."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:connectsAt ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ;
                        sh:qualifiedValueShapesDisjoint true ;
                        sh:severity sh:Warning ] ] [ sh:property [ rdfs:comment "A `Connection` shall have at least two `connectsAt` relations allowing flow in and out of the `Connection`."^^xsd:string ;
                        sh:minCount 2 ;
                        sh:path s223:connectsAt ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ] ;
                        sh:qualifiedValueShapesDisjoint true ;
                        sh:severity sh:Warning ] ] ) ;
    sh:severity sh:Warning ;
    sh:targetClass s223:Connection .

s223:ConnectionPointShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `hasElectricalPhase` value from any connected `Conductor`."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:hasElectricalPhase ?phase .}
WHERE {
$this s223:connectsThrough/s223:hasElectricalPhase ?phase .
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:ConnectionPoint .

s223:ConnectionShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Infer `cnx` relation using the relation `connectsThrough`."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:cnx ?thing .}
WHERE {
$this ^s223:connectsThrough ?thing .
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `connectsAt` relation using the relation `cnx`."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:connectsAt ?thing .}
WHERE {
$this s223:cnx ?thing .
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `connectsFrom` relation using the relation `connectsAt`."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:connectsFrom ?equipment .}
WHERE {
$this s223:connectsAt ?cp .
?cp a s223:OutletConnectionPoint .
?cp s223:isConnectionPointOf ?equipment .
}
"""^^xsd:string ;
            sh:name "InferredConnectionToUpstreamEquipmentProperty"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `connectsTo` relation using the relation `connectsAt`."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:connectsTo ?equipment .}
WHERE {
$this s223:connectsAt ?cp .
?cp a s223:InletConnectionPoint .
?cp s223:isConnectionPointOf ?equipment .
}
"""^^xsd:string ;
            sh:name "InferredConnectionToDownstreamEquipmentProperty"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer `cnx` relation using the relation `connectsAt`."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:cnx ?thing .}
WHERE {
$this s223:connectsAt ?thing .
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:Connection .

s223:Controller a s223:Class,
        sh:NodeShape ;
    rdfs:label "Controller"^^xsd:string ;
    rdfs:comment "A piece of equipment for regulation of a system or component in normal operation, which executes one or more `Function`s."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "If the relation `executes` is present it shall associate the `Controller` with a `Function`."^^xsd:string ;
            sh:class s223:Function ;
            sh:message "s223: If the relation `executes` is present it shall associate the `Controller` with a `Function`."^^xsd:string ;
            sh:path s223:executes ] .

s223:CoolingCoilShape a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "A `CoolingCoil` must always have the role `Role-Cooling`"^^xsd:string ;
            sh:object s223:Role-Cooling ;
            sh:predicate s223:hasRole ;
            sh:subject sh:this ] ;
    sh:targetClass s223:CoolingCoil .

s223:CoolingTower a s223:Class,
        sh:NodeShape ;
    rdfs:label "Cooling tower"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that uses atmospheric air to cool warm water, generally by direct contact via evaporation."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `CoolingTower` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `CoolingTower` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `CoolingTower` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `CoolingTower` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:CopyMachine a s223:Class,
        sh:NodeShape ;
    rdfs:label "Copy machine"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that processes an input of one or more durable representation(s) of information, typically text and/or graphics and typically on paper, and outputs one or more reproductions of the information for each input, typically on paper."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `CopyMachine` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `CopyMachine` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:CorrelatedColorTemperatureSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Correlated color temperature sensor"^^xsd:string ;
    rdfs:comment """A `LightSensor` that `observes` a `QuantifiableObservableProperty` that represents a correlated color temperature (CCT) of a
light source, defined as the absolute temperature of a blackbody whose chromaticity most nearly resembles that of the light source."""^^xsd:string ;
    rdfs:subClassOf s223:LightSensor ;
    sh:property [ rdfs:comment "A `CorrelatedColorTemperatureSensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of `CorrelatedColorTemperature`."^^xsd:string ;
            sh:message "s223: A `CorrelatedColorTemperatureSensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of `CorrelatedColorTemperature`."^^xsd:string ;
            sh:path s223:observes ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Property ;
                    sh:node [ sh:property [ sh:hasValue quantitykind:CorrelatedColorTemperature ;
                                    sh:path qudt:hasQuantityKind ] ] ] ] .

s223:Dishwasher a s223:Class,
        sh:NodeShape ;
    rdfs:label "Dishwasher"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that automatically cleans dishware, cookware, and cutlery."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Dishwasher` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Dishwasher` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Dishwasher` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Dishwasher` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Dishwasher` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `Dishwasher` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:DomainSpaceShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Infer a `hasDomain` relation by checking any enclosing `Zone` to determine the domain."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:hasDomain ?domain .}
WHERE {
$this ^s223:hasDomainSpace/s223:hasDomain ?domain .
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:DomainSpace .

s223:Door a s223:Class,
        sh:NodeShape ;
    rdfs:label "Door"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` consisting of hinged, sliding, or revolving barrier at the entrance to a building or room."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Door` shall have at least two bidirectional connection points using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `Door` shall have at least two bidirectional connection points using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 2 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Drain a s223:Class,
        sh:NodeShape ;
    rdfs:label "Drain"^^xsd:string ;
    rdfs:comment "A `Valve` that allows, regulates, or stops the flow of water from a `Sink`, `Shower`, `Bathtub`, or other plumbing service equipment into a plumbing drainage system that typically carries the mixture to a sewer system or septic tank."^^xsd:string ;
    rdfs:subClassOf s223:Valve ;
    sh:property [ rdfs:comment "A `Drain` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Drain` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Drain` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Drain` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:DualDuctTerminal a s223:Class,
        sh:NodeShape ;
    rdfs:label "Dual duct terminal."^^xsd:string ;
    rdfs:comment "A `TerminalUnit` that mixes two independent sources of primary air."^^xsd:string ;
    rdfs:subClassOf s223:TerminalUnit ;
    sh:property [ rdfs:comment "A `DualDuctTerminal` shall have at least two inlets using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `DualDuctTerminal` shall have at least two inlets using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 2 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Duct a s223:Class,
        sh:NodeShape ;
    rdfs:label "Duct"^^xsd:string ;
    rdfs:comment "A `Connection` that is used to transport air such as supply, return, and exhaust in HVAC (Heating, Ventilation, and Air Conditioning) systems."^^xsd:string ;
    rdfs:subClassOf s223:Connection .

s223:DuvSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Duv sensor"^^xsd:string ;
    rdfs:comment """A `LightSensor` that `observes` a `QuantifiableObservableProperty` that represents a Duv of a light source, defined as the
distance between the chromaticity of the light source and a blackbody radiator of equal correlated color temperature (CCT)."""^^xsd:string ;
    rdfs:subClassOf s223:LightSensor ;
    sh:property [ rdfs:comment "A `DuvSensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of `Duv`."^^xsd:string ;
            sh:message "s223: A `DuvSensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of `Duv`."^^xsd:string ;
            sh:path s223:observes ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Property ;
                    sh:node [ sh:property [ sh:hasValue quantitykind:Duv ;
                                    sh:path qudt:hasQuantityKind ] ] ] ] .

s223:ElectricClothesDryer a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electric clothes dryer"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that automatically removes moisture from a load of textiles (e.g., clothing, bedding), typically after they are washed in a `ClothesWasher`."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `ElectricClothesDryer` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `ElectricClothesDryer` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ElectricCooktop a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electric cooktop"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` with a flat surface containing one or more heat sources designed for cooking with pots and pans."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `ElectricCooktop` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `ElectricCooktop` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ElectricEnergyDCDCConverter a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electric energy DC-DC converter"^^xsd:string ;
    rdfs:comment "An `ElectricEnergyConverter` that transforms direct current (DC) electric power from one voltage to another voltage."^^xsd:string ;
    rdfs:subClassOf s223:ElectricEnergyConverter ;
    sh:property [ rdfs:comment "An `ElectricEnergyDCDCConverter` shall have at least two connection points using the medium `Electricity-DC`."^^xsd:string ;
            sh:message "s223: An `ElectricEnergyDCDCConverter` shall have at least two connection points using the medium `Electricity-DC`."^^xsd:string ;
            sh:minCount 2 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:ConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Electricity-DC ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ElectricEnergyInverter a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electric energy inverter"^^xsd:string ;
    rdfs:comment "An `ElectricEnergyConverter` that tranforms direct current (DC) electric power to alternating current (AC) electric power, or vice versa."^^xsd:string ;
    rdfs:subClassOf s223:ElectricEnergyConverter ;
    sh:property [ rdfs:comment "An `ElectricEnergyInverter` shall have at least one connection point that uses the medium `Electricity-AC`."^^xsd:string ;
            sh:message "s223: An `ElectricEnergyInverter` shall have at least one connection point that uses the medium `Electricity-AC`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:ConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Electricity-AC ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "An `ElectricEnergyInverter` shall have at least one connection point that uses the medium `Electricity-DC`."^^xsd:string ;
            sh:message "s223: An `ElectricEnergyInverter` shall have at least one connection point that uses the medium `Electricity-DC`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:ConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Electricity-DC ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ElectricEnergyTransformer a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electric energy transformer"^^xsd:string ;
    rdfs:comment "An `ElectricEnergyConverter` that transforms alternating current (AC) electric power from one voltage to another voltage."^^xsd:string ;
    rdfs:subClassOf s223:ElectricEnergyConverter ;
    sh:property [ rdfs:comment "An `ElectricEnergyTransformer` shall have at least two connection points using the medium `Electricity-AC`."^^xsd:string ;
            sh:message "s223: An `ElectricEnergyTransformer` shall have at least two connection points using the medium `Electricity-AC`."^^xsd:string ;
            sh:minCount 2 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:ConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Electricity-AC ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ElectricWaterDispenser a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electric water dispenser"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that dispenses water and optionally heats and/or cools the water prior to dispensing."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "An `ElectricWaterDispenser` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: An `ElectricWaterDispenser` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "An `ElectricWaterDispenser` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: An `ElectricWaterDispenser` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ElectricityBreaker a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electricity breaker"^^xsd:string ;
    rdfs:comment "A piece of equipment that automatically opens an electric circuit automatically at a predetermined overcurrent, so as to prevent damage to the circuit, the equipment connected to the circuit, and the building containing the circuit."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "An `ElectricityBreaker` shall have at least one outlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: An `ElectricityBreaker` shall have at least one outlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "An `ElectricityBreaker` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: An `ElectricityBreaker` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ElectricityMeter a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electricity meter"^^xsd:string ;
    rdfs:comment """A piece of `Equipment` that contains at least one `VoltageSensor` and one `ElectricCurrentSensor`, and reports one or more
properties of electricity. Example reported properties include the following `QuantityKind`s: `Voltage`, `ElectricCurrent`, `ActiveEnergy`,
`ActivePower`, `ReactivePower`, `ApparentPower`, `PowerFactor`, and `Frequency` with unit `Hertz`. An `ElectricityMeter` may optionally contain a `Function` that represents the mathematical calculations of the reported properties of electricity."""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment """The observation location of the contained `VoltageSensor`(s) and `ElectricCurrentSensor`(s) shall be a single instance of
  either a `Connection` or a `ConnectionPoint`."""^^xsd:string ;
            sh:message "s223: The observation location of the sensors contained by an `ElectricityMeter` shall be either a `Connection` or a `ConnectionPoint`."^^xsd:string ;
            sh:minCount 1 ;
            sh:or ( [ sh:class s223:Connection ] [ sh:class s223:ConnectionPoint ] ) ;
            sh:path ( s223:contains s223:hasObservationLocation ) ],
        [ rdfs:comment "An `ElectricityMeter` shall contain at least one `ElectricCurrentSensor`."^^xsd:string ;
            sh:message "An `ElectricityMeter` shall contain at least one `ElectricCurrentSensor`."^^xsd:string ;
            sh:path s223:contains ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:ElectricCurrentSensor ] ;
            sh:qualifiedValueShapesDisjoint true ],
        [ rdfs:comment """Placeholder: The medium observed by the sensors contained by an `ElectricityMeter` shall be within the `Constituent-Electricity`
hierarchy."""^^xsd:string ;
            sh:class s223:Constituent-Electricity ;
            sh:message "s223: The medium observed by the sensors contained by an `ElectricityMeter` shall be within the `Constituent-Electricity` hierarchy."^^xsd:string ;
            sh:minCount 1 ;
            sh:path ( s223:contains s223:hasObservationLocation s223:hasMedium ) ],
        [ rdfs:comment "An `ElectricityMeter` shall contain a `VoltageSensor` and `ElectricCurrentSensor` with the same observation location."^^xsd:string ;
            sh:path s223:contains ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "An `ElectricityMeter` shall contain a `VoltageSensor` and `ElectricCurrentSensor` with the same observation location."^^xsd:string ;
                    sh:message "s223: {$this} contains {?sensorA} and {?sensorB} with different observation locations: {?locA} and {?locB}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT DISTINCT $this ?sensorA ?locA ?sensorB ?locB
WHERE {
$this s223:contains ?sensorA .
$this s223:contains ?sensorB .
?sensorA a/rdfs:subClassOf* s223:Sensor .
?sensorB a/rdfs:subClassOf* s223:Sensor .
FILTER (?sensorA != ?sensorB) .
?sensorA s223:hasObservationLocation ?locA .
?sensorB s223:hasObservationLocation ?locB .
FILTER (?locA != ?locB) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "An `ElectricityMeter` shall contain at least two `Sensor`s."^^xsd:string ;
            sh:message "An `ElectricityMeter` shall contain at least two `Sensor`s."^^xsd:string ;
            sh:minCount 2 ;
            sh:path s223:contains ],
        [ rdfs:comment "An `ElectricityMeter` shall contain at least one `VoltageSensor`."^^xsd:string ;
            sh:message "An `ElectricityMeter` shall contain at least one `VoltageSensor`."^^xsd:string ;
            sh:path s223:contains ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:VoltageSensor ] ;
            sh:qualifiedValueShapesDisjoint true ] .

s223:ElectricityOutlet a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electricity outlet"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that contains one or more receptacles for connecting electrical equipment to electrical power, typically via a plug and cord. Not to be confused with an `OutletConnectionPoint` with the medium Constituent-Electricity."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "An `ElectricityOutlet` shall have at least one outlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: An `ElectricityOutlet` shall have at least one outlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "An `ElectricityOutlet` shall have exactly one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: An `ElectricityOutlet` shall have exactly one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Elevator a s223:Class,
        sh:NodeShape ;
    rdfs:label "Elevator"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that vertically transports people or freight between floors or levels of a building via a vertical shaft commonly referred to as a hoistway. The people or freight are typically situated on a platform, or in a container commonly referred to as a car, cab, cabin, cage, or carriage."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Elevator` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `Elevator` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:EquipmentShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "For equipment contained within another piece of equipment use the `mapsTo` relation to infer a Medium from the containing equipment."^^xsd:string ;
            sh:construct """
CONSTRUCT {
    ?childCp s223:hasMedium ?medium .
}
WHERE {
  $this s223:hasConnectionPoint ?cp .
  ?childCp s223:mapsTo ?cp .
  ?cp s223:connectsThrough ?connection .
  ?cp s223:hasMedium ?medium .
  FILTER NOT EXISTS {?childCp s223:hasMedium ?something} .
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "For equipment containing another piece of equipment, use the `mapsTo` relation to infer a Medium from the contained equipment."^^xsd:string ;
            sh:construct """
CONSTRUCT {
    ?parentCp s223:hasMedium ?medium .
}
WHERE {
  $this s223:hasConnectionPoint ?cp .
  ?cp s223:mapsTo ?parentCp .
  ?cp s223:connectsThrough ?connection .
  ?cp s223:hasMedium ?medium .
  FILTER NOT EXISTS {?parentCp s223:hasMedium ?something} .
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:Equipment .

s223:Escalator a s223:Class,
        sh:NodeShape ;
    rdfs:label "Escalator"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that vertically transports people between floors or levels of a building via a moving staircase."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Escalator` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `Escalator` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:EthernetSwitch a s223:Class,
        sh:NodeShape ;
    rdfs:label "Ethernet switch"^^xsd:string ;
    rdfs:comment """A piece of `Equipment` that connects electrical equipment, such as `Computer`s and Wi-Fi access points,
to an Ethernet network so they can communicate with each other and, optionally, to the Internet."""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "An `EthernetSwitch` shall have at least two `BidirectionalConnectionPoint`s using the medium `Signal-Ethernet`."^^xsd:string ;
            sh:message "s223: An `EthernetSwitch` shall have at least two `BidirectionalConnectionPoint`s using the medium `Signal-Ethernet`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Signal-Ethernet ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "An `EthernetSwitch` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: An `EthernetSwitch` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:FanCoilUnit a s223:Class,
        sh:NodeShape ;
    rdfs:label "Fan coil unit"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` consisting of a `Coil` and a `Fan` that regulates the temperature of one or more spaces."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `FanCoilUnit` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `FanCoilUnit` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `FanCoilUnit` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `FanCoilUnit` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `FanCoilUnit` shall have the role `Role-Heating` or `Role-Cooling`."^^xsd:string ;
            sh:message "s223: A `FanCoilUnit` shall have the role `Role-Heating` or `Role-Cooling`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasRole ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:in ( s223:Role-Heating s223:Role-Cooling ) ] ],
        [ rdfs:comment "A `FanCoilUnit` shall be associated with at least 1 `Fan` using the relation `contains`."^^xsd:string ;
            sh:message "s223: A `FanCoilUnit` shall be associated with at least 1 `Fan` using the relation `contains`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:contains ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Fan ] ],
        [ rdfs:comment "A `FanCoilUnit` shall be associated with at least 1 `Coil` using the relation `contains`."^^xsd:string ;
            sh:message "s223: A `FanCoilUnit` shall be associated with at least 1 `Coil` using the relation `contains`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:contains ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Coil ] ] .

s223:FanPoweredTerminal a s223:Class,
        sh:NodeShape ;
    rdfs:label "Fan powered terminal"^^xsd:string ;
    rdfs:comment "A `TerminalUnit` that contains a fan, and optionally has supplemental heating or cooling. Airflow may pass through or be parallel to the fan."^^xsd:string ;
    rdfs:subClassOf s223:TerminalUnit ;
    sh:property [ rdfs:comment "A `FanPoweredTerminal` shall be associated with at least one `Fan` by using the relation `contains`."^^xsd:string ;
            sh:message "s223: A `FanPoweredTerminal` shall be associated with at least one `Fan` by using the relation `contains`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:contains ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Fan ] ] .

s223:Faucet a s223:Class,
        sh:NodeShape ;
    rdfs:label "Faucet"^^xsd:string ;
    rdfs:comment "A `Valve` that allows, regulates, or stops the flow of hot or cold water from a plumbing supply system into a `Sink`, `Shower`, `Bathtub`, or other plumbing service equipment."^^xsd:string ;
    rdfs:subClassOf s223:Valve ;
    sh:property [ rdfs:comment "A `Faucet` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Faucet` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Faucet` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Faucet` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:FiberEthernetOutlet a s223:Class,
        sh:NodeShape ;
    rdfs:label "Fiber ethernet outlet"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that contains one or more receptacles for connecting electrical equipment to a fiber Ethernet communication network, typically via a fiber Ethernet cable."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `FiberEthernetOutlet` shall have exactly one inlet using the medium `Signal-FiberEthernet`."^^xsd:string ;
            sh:message "s223: A `FiberEthernetOutlet` shall have exactly one inlet using the medium `Signal-FiberEthernet`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Signal-FiberEthernet ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `FiberEthernetOutlet` shall have at least one outlet using the medium `Signal-FiberEthernet`."^^xsd:string ;
            sh:message "s223: A `FiberEthernetOutlet` shall have at least one outlet using the medium `Signal-FiberEthernet`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Signal-FiberEthernet ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Filter a s223:Class,
        sh:NodeShape ;
    rdfs:label "Filter"^^xsd:string ;
    rdfs:comment """A piece of `Equipment` that removes contaminants from gases or liquids. See {s223:Substance-Medium} for
more details on validating compatible mediums upstream and downstream of a `Filter`."""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "Incompatible Medium. Case 2: Associated `ConnectionPoint`s, one with a pure medium and one with a medium having constituents.."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 2: A medium with constituents and a pure medium."^^xsd:string ;
                    sh:message "s223: {$this} has an incompatible medium {?m1} with any constituent of {?m2}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m2 ?m1
WHERE {
$this s223:cnx ?cp1, ?cp2 .
?cp1 a/rdfs:subClassOf* s223:ConnectionPoint .
?cp2 a/rdfs:subClassOf* s223:ConnectionPoint .
FILTER (?cp1 != ?cp2) .
?cp1 s223:hasMedium ?m1 .
?cp2 s223:hasMedium ?m2 .
?m2 s223:composedOf/s223:ofConstituent ?s2 .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {
  ?m2 s223:composedOf/s223:ofConstituent ?s12 .
  {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} .
}
}
"""^^xsd:string ] ],
        [ rdfs:comment "Incompatible Medium. Case 1: Associated `ConnectionPoint`s with two pure mediums."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 1: Two pure mediums."^^xsd:string ;
                    sh:message "s223: {$this} with inlet medium {?m2} is incompatible with outlet medium {?m1}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m2 ?m1
WHERE {
$this s223:cnx ?cp1, ?cp2 .
?cp1 a/rdfs:subClassOf* s223:ConnectionPoint .
?cp2 a/rdfs:subClassOf* s223:ConnectionPoint .
FILTER (?cp1 != ?cp2) .
?cp1 s223:hasMedium ?m1 .
?cp2 s223:hasMedium ?m2 .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {?m2 s223:composedOf ?c2}
FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) .
FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `Filter` shall have at least one outlet."^^xsd:string ;
            sh:message "s223: A `Filter` shall have at least one outlet."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ],
        [ rdfs:comment "A `Filter` shall have at least one inlet `ConnectionPoint`."^^xsd:string ;
            sh:message "s223: A `Filter` shall have at least one inlet `ConnectionPoint`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ],
        [ rdfs:comment "Incompatible Medium. Case 3: Associated `ConnectionPoint`s with mediums having constituents."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 3: Two mediums with constituents."^^xsd:string ;
                    sh:message "s223: For `Filter` {$this} there is no compatible substance between medium {?m2} and medium {?m1}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT ?this ?m2 ?m1
WHERE {
  ?this s223:cnx ?cp1, ?cp2 .
  ?cp1 a/rdfs:subClassOf* s223:ConnectionPoint .
  ?cp2 a/rdfs:subClassOf* s223:ConnectionPoint .
  FILTER (?cp1 != ?cp2) .
  ?cp1 s223:hasMedium ?m1 .
  ?cp2 s223:hasMedium ?m2 .
    ?m1 s223:composedOf/s223:ofConstituent ?s1 .
    ?m2 s223:composedOf/s223:ofConstituent ?s2 .
  FILTER NOT EXISTS {
    ?m1 s223:composedOf/s223:ofConstituent ?s11 .
    ?m2 s223:composedOf/s223:ofConstituent ?s12 .
    FILTER (?s11 = ?s12) .
  }
  FILTER NOT EXISTS {
    ?m1 s223:composedOf/s223:ofConstituent ?s21 .
    ?m2 s223:composedOf/s223:ofConstituent ?s22 .
    {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} .
  }
}
"""^^xsd:string ] ] .

s223:FlowSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Flow sensor"^^xsd:string ;
    rdfs:comment "A `Sensor` that `observes` a `QuantifiableObservableProperty` that represents a measure of flow of fluid, typically with a `QuantityKind` of `VolumeFlowRate`."^^xsd:string ;
    rdfs:subClassOf s223:Sensor .

s223:FlushToilet a s223:Class,
        sh:NodeShape ;
    rdfs:label "Flush toilet"^^xsd:string ;
    rdfs:comment """A piece of `Equipment` that collects human waste (i.e., urine and/or feces, and sometimes toilet paper) in a chamber containing water,
and contains an integral manual or automatic actuator that triggers the release of an additional volume of water that flushes everything from the chamber into
a drainage system that typically carries the mixture to a sewer system or septic tank."""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `FlushToilet` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `FlushToilet` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `FlushToilet` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `FlushToilet` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Freezer a s223:Class,
        sh:NodeShape ;
    rdfs:label "Freezer"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that maintains an internal temperature below the freezing point of water."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Freezer` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `Freezer` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:FumeHood a s223:Class,
        sh:NodeShape ;
    rdfs:label "Fume hood"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that is typically mounted over a work area (e.g., a space, table, or shelf) and conducts unwanted gases away from the area."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `FumeHood` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `FumeHood` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `FumeHood` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `FumeHood` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:FunctionPropertyShape a sh:NodeShape ;
    rdfs:label "Function Property Shape"^^xsd:string ;
    rdfs:comment "A `Function` must be associated with at least one `Property` using either the relation `hasInput` or `hasOutput`."^^xsd:string ;
    sh:message "s223: A `Function` must be associated with at least one `Property` using either the relation `hasInput` or `hasOutput`."^^xsd:string ;
    sh:or ( [ sh:property [ rdfs:comment "A `Function` must be associated with at least one `Property` using either the relation `hasInput` or `hasOutput`."^^xsd:string ;
                        sh:class s223:Property ;
                        sh:minCount 1 ;
                        sh:path s223:hasInput ] ] [ sh:property [ rdfs:comment "A `Function` must be associated with at least one `Property` using either the relation `hasInput` or `hasOutput`."^^xsd:string ;
                        sh:class s223:Property ;
                        sh:minCount 1 ;
                        sh:path s223:hasOutput ] ] ) ;
    sh:severity sh:Warning ;
    sh:targetClass s223:Function .

s223:Furnace a s223:Class,
        sh:NodeShape ;
    rdfs:label "Furnace"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that converts fuel or electrical energy into heat. "^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Furnace` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `Furnace` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Furnace` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `Furnace` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:GaugePressureSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Gauge pressure sensor"^^xsd:string ;
    rdfs:comment """A `PressureSensor` that `observes` a `QuantifiableObservableProperty` that represents a measure of pressure relative to atmospheric pressure.
Such sensors are commonly used to monitor compressed gas cylinders, for example, where a gauge reading of zero signifies that the measured pressure
is equal to the atmospheric pressure, not a vacuum."""^^xsd:string ;
    rdfs:subClassOf s223:PressureSensor ;
    sh:property [ rdfs:comment "A `GaugePressureSensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of GaugePressure."^^xsd:string ;
            sh:message "s223: A `GaugePressureSensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of GaugePressure."^^xsd:string ;
            sh:path ( s223:observes qudt:hasQuantityKind ) ;
            sh:value quantitykind:GaugePressure ],
        [ rdfs:comment "A `GaugePressureSensor` shall always `observe` a `QuantifiableObservableProperty` that has a value of true for qudt:isDeltaQuantity."^^xsd:string ;
            sh:maxCount 1 ;
            sh:message "s223: A `GaugePressureSensor` shall always `observe` a `QuantifiableObservableProperty` that has a value of true for qudt:isDeltaQuantity."^^xsd:string ;
            sh:minCount 1 ;
            sh:path ( s223:observes qudt:isDeltaQuantity ) ;
            sh:value true ] .

s223:Generator a s223:Class,
        sh:NodeShape ;
    rdfs:label "Generator"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that converts non-electric energy into electric energy."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Generator` shall be associated with at least one `ConnectionPoint` using the relation `hasConnectionPoint`."^^xsd:string ;
            sh:message "s223: A `Generator` shall be associated with at least one `ConnectionPoint` using the relation `hasConnectionPoint`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ],
        [ rdfs:comment "A `Generator` shall have at least one outlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:class s223:OutletConnectionPoint ;
            sh:message "s223: A `Generator` shall have at least one outlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:minCount 1 ;
            sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                            sh:path s223:hasMedium ] ] ;
            sh:path s223:hasConnectionPoint ] .

s223:GroundToAirHeatPump a s223:Class,
        sh:NodeShape ;
    rdfs:label "Ground to air heat pump"^^xsd:string ;
    rdfs:comment "A `HeatPump` that transfers thermal energy between air and the ground."^^xsd:string ;
    rdfs:subClassOf s223:HeatPump ;
    sh:property [ rdfs:comment "A `GroundToAirHeatPump` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `GroundToAirHeatPump` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `GroundToAirHeatPump` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `GroundToAirHeatPump` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `GroundToAirHeatPump` shall have at least one `BidirectionalConnectionPoint` using `Medium-ThermalContact`."^^xsd:string ;
            sh:class s223:BidirectionalConnectionPoint ;
            sh:message "s223: A `GroundToAirHeatPump` shall have at least one `BidirectionalConnectionPoint` using `Medium-ThermalContact`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Medium-ThermalContact ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:HeatTransferRoleShape a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "Infer the `hasRole` s223:Role-HeatTransfer relation for every instance of the listed targetClass values."^^xsd:string ;
            sh:object s223:Role-HeatTransfer ;
            sh:predicate s223:hasRole ;
            sh:subject sh:this ] ;
    sh:targetClass s223:AirHeatExchanger,
        s223:ChilledBeam,
        s223:Coil,
        s223:ElectricResistanceElement,
        s223:HydronicHeatExchanger,
        s223:RadiantHeater,
        s223:Radiator .

s223:HeatingCoilShape a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "Heating coils must always have the role `Role-Heating`"^^xsd:string ;
            sh:object s223:Role-Heating ;
            sh:predicate s223:hasRole ;
            sh:subject sh:this ] ;
    sh:targetClass s223:HeatingCoil .

s223:Humidifier a s223:Class,
        sh:NodeShape ;
    rdfs:label "Humidifier"^^xsd:string ;
    rdfs:comment "A piece of equipment that adds moisture to a gas (e.g., air)."^^xsd:string ;
    rdfs:subClassOf s223:Equipment .

s223:Humidistat a s223:Class,
        sh:NodeShape ;
    rdfs:label "Humidistat"^^xsd:string ;
    rdfs:comment "A piece of equipment that measures the relative humidity of the air and then uses this information to automatically adjust the amount of moisture in air."^^xsd:string ;
    rdfs:subClassOf s223:Equipment .

s223:HumiditySensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Humidity sensor"^^xsd:string ;
    rdfs:comment "A `Sensor` that `observes` a `QuantifiableObservableProperty` that represents a measure of relative or absolute humidity. "^^xsd:string ;
    rdfs:subClassOf s223:Sensor ;
    sh:property [ rdfs:comment "A `HumiditySensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of either `RelativeHumidity` or `AbsoluteHumidity`."^^xsd:string ;
            sh:class s223:QuantifiableObservableProperty ;
            sh:message "s223: A `HumiditySensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of either `RelativeHumidity` or `AbsoluteHumidity`."^^xsd:string ;
            sh:node [ sh:property [ sh:or ( [ sh:hasValue quantitykind:RelativeHumidity ] [ sh:hasValue quantitykind:AbsoluteHumidity ] ) ;
                            sh:path qudt:hasQuantityKind ] ] ;
            sh:path s223:observes ] .

s223:IceMaker a s223:Class,
        sh:NodeShape ;
    rdfs:label "Ice maker"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that makes ice."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "An `IceMaker` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: An `IceMaker` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "An `IceMaker` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: An `IceMaker` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:IlluminanceSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Illuminance sensor"^^xsd:string ;
    rdfs:comment """A `LightSensor` that `observes` a `QuantifiableObservableProperty` that represents an illuminance, defined as the areal density of the
luminous flux incident at a point on a surface."""^^xsd:string ;
    rdfs:subClassOf s223:LightSensor ;
    sh:property [ rdfs:comment "An `IlluminanceSensor` shall `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of `Illuminance`."^^xsd:string ;
            sh:message "s223: An `IlluminanceSensor` shall `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of `Illuminance`."^^xsd:string ;
            sh:path s223:observes ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Property ;
                    sh:node [ sh:property [ sh:hasValue quantitykind:Illuminance ;
                                    sh:path qudt:hasQuantityKind ] ] ] ] .

s223:JunctionCPShape a sh:NodeShape ;
    rdfs:label "JunctionCPShape"^^xsd:string ;
    rdfs:comment "A `Junction` shall have at least two `ConnectionPoint`s including (a) at least one inlet and one outlet, or (b) at least one bidirectional connection point."^^xsd:string ;
    sh:message "s223: A `Junction` shall have at least two `ConnectionPoint`s including (a) at least one inlet and one outlet, or (b) at least one bidirectional connection point."^^xsd:string ;
    sh:or ( [ sh:property [ rdfs:comment "A `Junction` shall have at least two `ConnectionPoint`s including (a) at least one inlet and one outlet, or (b) at least one bidirectional connection point."^^xsd:string ;
                        sh:minCount 2 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ;
                        sh:qualifiedValueShapesDisjoint true ],
                    [ rdfs:comment "A `Junction` shall have at least two `ConnectionPoint`s including (a) at least one inlet and one outlet, or (b) at least one bidirectional connection point."^^xsd:string ;
                        sh:minCount 2 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ;
                        sh:qualifiedValueShapesDisjoint true ] ] [ sh:property [ rdfs:comment "A `Junction` shall have at least two `ConnectionPoint`s including (a) at least one inlet and one outlet, or (b) at least one bidirectional connection point."^^xsd:string ;
                        sh:minCount 2 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ] ;
                        sh:qualifiedValueShapesDisjoint true ] ] ) ;
    sh:severity sh:Warning ;
    sh:targetClass s223:Junction .

s223:JunctionUsageWarning a sh:NodeShape ;
    rdfs:label "JunctionUsageWarning"^^xsd:string ;
    rdfs:comment "This `Junction` is not used to model significant details of a branching point in a connection, and may not be required."^^xsd:string ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment "This `Junction` is not used to model significant details of a branching point in a connection, and may not be required."^^xsd:string ;
            sh:message "s223: This `Junction` {$this} is not used to model significant details of a branching point in a connection, and may not be required."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
            SELECT $this
            WHERE {
                $this s223:hasConnectionPoint? | s223:connectedThrough? ?junc_cp_conn .

                FILTER NOT EXISTS {
                    # Connection has a relation that is not in the structural or required relationships
                    { ?junc_cp_conn ?p ?o . } UNION {?o ?p ?junc_cp_conn . }
                    FILTER (?p NOT IN (
                        s223:connected, s223:connectedTo, s223:connectedThrough, s223:hasConnectionPoint,
                        s223:connectsAt, s223:isConnectionPointOf, s223:cnx, rdf:type, rdfs:label, rdfs:comment
                    ))
                } .
            }
        """^^xsd:string ;
            sh:severity sh:Warning ] ;
    sh:targetClass s223:Junction .

s223:Luminaire a s223:Class,
        sh:NodeShape ;
    rdfs:label "Luminaire"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` consisting of a light source(s) and ballast(s) or driver(s) (when applicable), together with the parts designed to distribute the light, to position and protect the light source(s), and to connect the light source(s) to the power supply. Also known as a light fixture."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Luminaire` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `Luminaire` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Luminaire` shall have at least one outlet using the medium `EM-Light`."^^xsd:string ;
            sh:message "s223: A `Luminaire` shall have at least one outlet using the medium `EM-Light`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:EM-Light ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:MicrowaveOven a s223:Class,
        sh:NodeShape ;
    rdfs:label "Microwave oven"^^xsd:string ;
    rdfs:comment "An `ElectricOven` that cooks food by exposing it to electromagnetic radiation in the microwave frequency range."^^xsd:string ;
    rdfs:subClassOf s223:ElectricOven ;
    sh:property [ rdfs:comment "A `MicrowaveOven` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `MicrowaveOven` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Monitor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Monitor"^^xsd:string ;
    rdfs:comment "An `ElectronicDisplay` designed primarily for the output of visual information supplied by a `Computer`."^^xsd:string ;
    rdfs:subClassOf s223:ElectronicDisplay .

s223:Motor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Motor"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that converts electrical energy into mechanical energy."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Motor` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `Motor` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:OccupantCountSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Occupant count sensor"^^xsd:string ;
    rdfs:comment """An `OccupancySensor` that `observes` a `QuantifiableObservableProperty` that represents a population, usually of humans, within
  a sensing region."""^^xsd:string ;
    rdfs:subClassOf s223:OccupancySensor ;
    sh:property [ rdfs:comment """An `OccupantCountSensor` shall always observe a `QuantifiableObservableProperty` that has a `QuantityKind` of `Population` and
      a `Unit` of `NUM`."""^^xsd:string ;
            sh:class s223:QuantifiableObservableProperty ;
            sh:message """s223: An `OccupantCountSensor` shall always observe a `QuantifiableObservableProperty` that has a `QuantityKind` of `Population` and
      a `Unit` of `NUM`."""^^xsd:string ;
            sh:minCount 1 ;
            sh:node [ sh:property [ sh:hasValue unit:NUM ;
                            sh:maxCount 1 ;
                            sh:path qudt:hasUnit ],
                        [ sh:hasValue quantitykind:Population ;
                            sh:maxCount 1 ;
                            sh:path qudt:hasQuantityKind ] ] ;
            sh:path s223:observes ] .

s223:OccupantMotionSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Occupant motion sensor"^^xsd:string ;
    rdfs:comment "An `OccupancySensor` that `observes` a `ObservableProperty` that represents motion within a sensing region."^^xsd:string ;
    rdfs:subClassOf s223:OccupancySensor ;
    sh:property [ rdfs:comment "An `OccupantMotionSensor` shall always observe an `EnumeratedObservableProperty` that has an `EnumerationKind` of `Occupancy-Motion`."^^xsd:string ;
            sh:class s223:EnumeratedObservableProperty ;
            sh:message "s223: An `OccupantMotionSensor` shall always observe an `EnumeratedObservableProperty` that has an `EnumerationKind` of `Occupancy-Motion`."^^xsd:string ;
            sh:minCount 1 ;
            sh:node [ sh:property [ sh:class s223:Occupancy-Motion ;
                            sh:maxCount 1 ;
                            sh:path s223:hasEnumerationKind ] ] ;
            sh:path s223:observes ] .

s223:OccupantPresenceSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Occupant presence sensor"^^xsd:string ;
    rdfs:comment "An `OccupancySensor` that `observes` a `ObservableProperty` that represents presence within a sensing region."^^xsd:string ;
    rdfs:subClassOf s223:OccupancySensor ;
    sh:property [ rdfs:comment "An `OccupantPresenceSensor` shall always observe an `EnumeratedObservableProperty` that has an `EnumerationKind` of `Occupancy-Presence`."^^xsd:string ;
            sh:class s223:EnumeratedObservableProperty ;
            sh:message "s223: An `OccupantPresenceSensor` shall always observe an `EnumeratedObservableProperty` that has an `EnumerationKind` of `Occupancy-Presence`."^^xsd:string ;
            sh:minCount 1 ;
            sh:node [ sh:property [ sh:class s223:Occupancy-Presence ;
                            sh:maxCount 1 ;
                            sh:path s223:hasEnumerationKind ] ] ;
            sh:path s223:observes ] .

s223:OutdoorPhysicalSpace a s223:Class,
        sh:NodeShape ;
    rdfs:label "Outdoor physical space"^^xsd:string ;
    rdfs:comment "A `PhysicalSpace` that is outside of the building where, for example, outdoor ambient properties might be measured, within a suitably defined `DomainSpace`."^^xsd:string ;
    rdfs:subClassOf s223:PhysicalSpace .

s223:ParticulateSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Particulate sensor"^^xsd:string ;
    rdfs:comment """A `Sensor` that `observes` a `QuantifiableObservableProperty` that represents an amount of a particulate in a medium, in contrast
to a `ConcentrationSensor` that `observes` a `QuantifiableObservableProperty` that represents a concentration of a miscible constituent in a medium
(see {s223:ConcentrationSensor}). The 223 standard does not constrain the `Unit` or `QuantityKind` reported by a `ParticulateSensor`, but possible
`QuantityKind`s include `Density` (mass per volume), `ParticleNumberDensity` (count per volume), and `DimensionlessRatio` (with units such as `PPM` or
`PPB`). Some particulate sensors may claim to report a raw count of particles, for which a `QuantityKind` of `Count` could be used, but the required
context for such a measurement should be provided in the sensor's documentation to specify if it in fact measures a count per volume (e.g., `ParticleNumberDensity`),
time (e.g., `CountRate` or `ParticleCurrent`), or some
other combination. Explicitly declaring the `QuantityKind` of a sensor's output is preferable to relying on implicit assumptions."""^^xsd:string ;
    rdfs:subClassOf s223:Sensor ;
    sh:property [ rdfs:comment "If the relation `ofSubstance` is present it shall associate the `ParticulateSensor` with a `Substance-Particulate`."^^xsd:string ;
            sh:class s223:Substance-Particulate ;
            sh:message "s223: If the relation `ofSubstance` is present it shall associate the `ParticulateSensor` with a `Substance-Particulate`."^^xsd:string ;
            sh:path s223:ofSubstance ] .

s223:PersonalComputer a s223:Class,
        sh:NodeShape ;
    rdfs:label "Personal computer"^^xsd:string ;
    rdfs:comment "A `Computer` designed primarily used by a single person."^^xsd:string ;
    rdfs:subClassOf s223:Computer ;
    sh:property [ rdfs:comment "A `PersonalComputer` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `PersonalComputer` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:PhotovoltaicModule a s223:Class,
        sh:NodeShape ;
    rdfs:label "Photovoltaic module"^^xsd:string ;
    rdfs:comment "A piece of equipment that converts sunlight into electricity."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `PhotovoltaicModule` shall have at least one inlet using the medium `EM-Light`."^^xsd:string ;
            sh:message "s223: A `PhotovoltaicModule` shall have at least one inlet using the medium `EM-Light`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:EM-Light ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `PhotovoltaicModule` shall have at least one outlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `PhotovoltaicModule` shall have at least one outlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Pipe a s223:Class,
        sh:NodeShape ;
    rdfs:label "Pipe"^^xsd:string ;
    rdfs:comment "A `Connection` that is used primarily to transport liquids and gases such as water, sewage, natural gas, and compressed air."^^xsd:string ;
    rdfs:subClassOf s223:Connection .

s223:PowerOverEthernetSwitch a s223:Class,
        sh:NodeShape ;
    rdfs:label "Power over ethernet switch"^^xsd:string ;
    rdfs:comment """A piece of `Equipment` that connects and is capable of powering electrical equipment, such as computers and Wi-Fi access points,
to an Ethernet network so they can communicate with each other and, optionally, to the Internet."""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `PowerOverEthernetSwitch` shall have at least one `BidirectionalConnectionPoint` using the medium `PowerAndSignal-PoE`."^^xsd:string ;
            sh:message "s223: A `PowerOverEthernetSwitch` shall have at least one `BidirectionalConnectionPoint` using the medium `PowerAndSignal-PoE`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:PowerAndSignal-PoE ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `PowerOverEthernetSwitch` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `PowerOverEthernetSwitch` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Pump a s223:Class,
        sh:NodeShape ;
    rdfs:label "Pump"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that imparts energy to a fluid, drawing a fluid into itself through an inlet port, and forcing the fluid out through an outlet port."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Pump` shall have at least one inlet using the medium `Fluid-Water`, `Fluid-Oil` or `Fluid-Refrigerant`."^^xsd:string ;
            sh:message "s223: A `Pump` shall have at least one inlet using the medium `Fluid-Water`, `Fluid-Oil` or `Fluid-Refrigerant`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ rdfs:comment "A `Pump` shall have at least one inlet using the medium `Fluid-Water`, `Fluid-Oil` or `Fluid-Refrigerant`."^^xsd:string ;
                            sh:message "s223: A `Pump` shall have at least one inlet using the medium `Fluid-Water`, `Fluid-Oil` or `Fluid-Refrigerant`."^^xsd:string ;
                            sh:or ( [ sh:property [ sh:class s223:Fluid-Water ;
                                                sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Refrigerant ;
                                                sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Oil ;
                                                sh:path s223:hasMedium ] ] ) ;
                            sh:severity sh:Warning ] ] ],
        [ rdfs:comment "The non-electrical `ConnectionPoint`s of a `Pump` must have compatible Media."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "The non-electrical `ConnectionPoint`s of a `Pump` must have compatible Media."^^xsd:string ;
                    sh:message "s223: {?cpa} and {?cpb} on the `Pump` {$this} have incompatible Media {$mediuma} and {$mediumb}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?cpa ?cpb ?mediuma ?mediumb
WHERE {
  $this s223:hasConnectionPoint ?cpa .
  $this s223:hasConnectionPoint ?cpb .
  FILTER (?cpa != ?cpb) .
  ?cpa s223:hasMedium ?mediuma .
  FILTER (NOT EXISTS {?mediuma a/rdfs:subClassOf* s223:Constituent-Electricity}) .
  ?cpb s223:hasMedium ?mediumb .
  FILTER (NOT EXISTS {?mediumb a/rdfs:subClassOf* s223:Constituent-Electricity}) .
  FILTER (?mediuma != ?mediumb) .
  FILTER (NOT EXISTS {?mediumb a/rdfs:subClassOf* ?mediuma}) .
  FILTER (NOT EXISTS {?mediuma a/rdfs:subClassOf* ?mediumb}) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `Pump` shall have at least one outlet using the medium `Fluid-Water`, `Fluid-Oil` or `Fluid-Refrigerant`."^^xsd:string ;
            sh:message "s223: A `Pump` shall have at least one outlet using the medium `Fluid-Water`, `Fluid-Oil` or `Fluid-Refrigerant`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ rdfs:comment "A `Pump` shall have at least one outlet using the medium `Fluid-Water`, `Fluid-Oil` or `Fluid-Refrigerant`."^^xsd:string ;
                            sh:message "s223: A `Pump` shall have at least one outlet using the medium `Fluid-Water`, `Fluid-Oil` or `Fluid-Refrigerant`."^^xsd:string ;
                            sh:or ( [ sh:property [ sh:class s223:Fluid-Water ;
                                                sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Refrigerant ;
                                                sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Oil ;
                                                sh:path s223:hasMedium ] ] ) ;
                            sh:severity sh:Warning ] ] ] .

s223:QuantifiablePropertyShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `hasAspect s223:Aspect-Deadband` for properties referred to by `hasDeadband`"^^xsd:string ;
            sh:construct """
CONSTRUCT {?y s223:hasAspect  s223:Aspect-Deadband}
WHERE {
?prop s223:hasDeadband ?y .
FILTER NOT EXISTS {?y s223:hasAspect s223:Aspect-Deadband}
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `hasQuantityKind` relation if it is unambiguous."^^xsd:string ;
            sh:construct """
CONSTRUCT {
$this qudt:hasQuantityKind ?uniqueqk
}
WHERE {
{
SELECT $this (COUNT (DISTINCT (?qk)) AS ?count)
WHERE {
FILTER (NOT EXISTS {$this qudt:hasQuantityKind ?something}) .
$this qudt:hasUnit/qudt:hasQuantityKind ?qk .
}
GROUP BY $this
}
FILTER (?count = 1)
$this qudt:hasUnit/qudt:hasQuantityKind ?uniqueqk .
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `hasAspect s223:Aspect-Threshold` for properties referred to by `hasThreshold`"^^xsd:string ;
            sh:construct """
CONSTRUCT {?y s223:hasAspect  s223:Aspect-Threshold}
WHERE {
?prop s223:hasThreshold ?y .
FILTER NOT EXISTS {?y s223:hasAspect s223:Aspect-Threshold}
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `hasAspect s223:Aspect-Setpoint` for properties referred to by `hasSetpoint`"^^xsd:string ;
            sh:construct """
CONSTRUCT {?y s223:hasAspect  s223:Aspect-Setpoint}
WHERE {
?prop s223:hasSetpoint ?y .
FILTER NOT EXISTS {?y s223:hasAspect s223:Aspect-Setpoint}
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:QuantifiableProperty .

s223:RFOutlet a s223:Class,
        sh:NodeShape ;
    rdfs:label "RF outlet"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that contains one or more receptacles for connecting electrical equipment to a radio frequency (RF) communication network, via, for example, a coaxial cable."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `RFOutlet` shall have exactly one inlet using the medium `RF-Signal`."^^xsd:string ;
            sh:message "s223: A `RFOutlet` shall have exactly one inlet using the medium `RF-Signal`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:RF-Signal ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `RFOutlet` shall have at least one outlet using the medium `RF-Signal`."^^xsd:string ;
            sh:message "s223: A `RFOutlet` shall have at least one outlet using the medium `RF-Signal`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:RF-Signal ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:RadiatorInletShape a sh:NodeShape ;
    rdfs:label "Radiator"^^xsd:string ;
    rdfs:comment "A `Radiator` shall have at least one inlet using the medium Electricity or inlet and outlet of Water."^^xsd:string ;
    sh:message "s223: A `Radiator` shall have at least one inlet using the medium Electricity or inlet and outlet of Water."^^xsd:string ;
    sh:severity sh:Warning ;
    sh:targetClass s223:Radiator ;
    sh:xone ( [ sh:property [ rdfs:comment "A `Radiator` shall have at least one inlet using the medium Electricity or inlet and outlet of Water."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                                sh:path s223:hasMedium ] ] ] ] ] [ sh:property [ rdfs:comment "A `Radiator` shall have at least one outlet using the medium Water."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                                sh:path s223:hasMedium ] ] ] ],
                    [ rdfs:comment "A `Radiator` shall have at least one inlet using the medium Electricity or Water."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                                sh:path s223:hasMedium ] ] ] ] ] ) .

s223:Refrigerator a s223:Class,
        sh:NodeShape ;
    rdfs:label "Refrigerator"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that maintains an internal temperature below the surrounding ambient temperature but above the freezing point of water."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Refrigerator` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `Refrigerator` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:RelationWithInverseShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Declare the inverse triples for relations that have defined inverse relations"^^xsd:string ;
            sh:construct """
CONSTRUCT {
?o ?invP $this .
}
WHERE {
  $this ?p ?o .
  ?p s223:inverseOf ?invP .
}
			"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:Concept .

s223:RequiredCommentsShape1 a sh:NodeShape ;
    sh:severity sh:Info ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment "Every SPARQLConstraint must have an rdfs:comment. "^^xsd:string ;
            sh:message "s223: The SPARQLConstraint for path {?path} for Class {$this} must have an rdfs:comment."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
SELECT $this ?path
WHERE {
$this sh:property ?propshape .
?propshape sh:sparql ?sparqlconstraint .
?propshape sh:path ?path .
FILTER NOT EXISTS {?sparqlconstraint rdfs:comment ?comment} .
}
"""^^xsd:string ] ;
    sh:targetClass s223:Class .

s223:RequiredCommentsShape2 a sh:NodeShape ;
    sh:severity sh:Info ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment "Every SHACL property shape must have an rdfs:comment. "^^xsd:string ;
            sh:message "s223: The property shape with path {?path} for Class {$this} must have an rdfs:comment."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
SELECT $this ?path
WHERE {
$this sh:property ?propshape .
?propshape sh:path ?path .
FILTER NOT EXISTS {?propshape rdfs:comment ?comment} .
}
"""^^xsd:string ] ;
    sh:targetClass s223:Class .

s223:RequiredCommentsShape3 a sh:NodeShape ;
    sh:severity sh:Info ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment "Every SPARQLRule must have an rdfs:comment. "^^xsd:string ;
            sh:message "s223: Every SPARQLRule for Class {$this} must have an rdfs:comment."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
SELECT $this
WHERE {
$this sh:rule ?rule .
?rule a sh:SPARQLRule .
FILTER NOT EXISTS {?rule rdfs:comment ?comment} .
}
"""^^xsd:string ] ;
    sh:targetClass s223:Class .

s223:RequiredCommentsShape4 a sh:NodeShape ;
    sh:severity sh:Info ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment "Every TripleRule must have an rdfs:comment. "^^xsd:string ;
            sh:message "s223: The TripleRule inferring {?pred} for Class {$this} must have an rdfs:comment."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
SELECT $this ?pred
WHERE {
$this sh:rule ?rule .
?rule a sh:TripleRule .
?rule sh:predicate ?pred .
FILTER NOT EXISTS {?rule rdfs:comment ?comment} .
}
"""^^xsd:string ] ;
    sh:targetClass s223:Class .

s223:RequiredCommentsShape5 a sh:NodeShape ;
    sh:severity sh:Info ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment "Every class of the 223 standard must have an rdfs:comment. "^^xsd:string ;
            sh:message "s223: Class {$this} must have an rdfs:comment."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
SELECT $this
WHERE {
FILTER NOT EXISTS {$this rdfs:comment ?comment} .
}
"""^^xsd:string ] ;
    sh:targetClass s223:Class .

s223:RequiredConceptShape a sh:NodeShape ;
    sh:severity sh:Info ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment "Every class of the 223 standard must be a direct or indirect subclass of s223:Concept. "^^xsd:string ;
            sh:message "s223: Class {$this} must be within the rdfs:subClassOf hierarchy under s223:Concept."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
SELECT $this
WHERE {
FILTER NOT EXISTS {$this rdfs:subClassOf* rdf:Property} .
FILTER NOT EXISTS {$this rdfs:subClassOf* s223:Concept} .
}
"""^^xsd:string ] ;
    sh:targetClass s223:Class .

s223:RequiredNodeShape a sh:NodeShape ;
    sh:severity sh:Info ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment "Every class of the 223 standard must also be an instance of sh:NodeShape. "^^xsd:string ;
            sh:message "s223: Class {$this} must be declared as an instance of sh:NodeShape."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
SELECT $this
WHERE {
FILTER NOT EXISTS {$this a sh:NodeShape} .
}
"""^^xsd:string ] ;
    sh:targetClass s223:Class .

s223:SensorObservationLocationShape a sh:NodeShape ;
    rdfs:label "Valve"^^xsd:string ;
    rdfs:comment "A `Sensor` shall be associated with exactly 1 of `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasObservationLocation`."^^xsd:string ;
    sh:message "s223: A `Sensor` shall be associated with exactly 1 of `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasObservationLocation`."^^xsd:string ;
    sh:targetClass s223:Sensor ;
    sh:xone ( [ sh:property [ rdfs:comment "A `Sensor` shall be associated with exactly 1 of `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasObservationLocation`."^^xsd:string ;
                        sh:class s223:Connectable ;
                        sh:maxCount 1 ;
                        sh:minCount 1 ;
                        sh:path s223:hasObservationLocation ] ] [ sh:property [ rdfs:comment "A `Sensor` shall be associated with exactly 1 of `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasObservationLocation`."^^xsd:string ;
                        sh:class s223:Connection ;
                        sh:maxCount 1 ;
                        sh:minCount 1 ;
                        sh:path s223:hasObservationLocation ] ] [ sh:property [ rdfs:comment "A `Sensor` shall be associated with exactly 1 of `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasObservationLocation`."^^xsd:string ;
                        sh:class s223:ConnectionPoint ;
                        sh:maxCount 1 ;
                        sh:minCount 1 ;
                        sh:path s223:hasObservationLocation ] ] ) .

s223:SensorObservesShape a sh:NodeShape ;
    rdfs:label "Valve"^^xsd:string ;
    rdfs:comment "A `Sensor` shall be associated with exactly 1 of `QuantifiableObservableProperty` or `EnumeratedObservableProperty` using the relation `observes`."^^xsd:string ;
    sh:message "s223: A `Sensor` shall be associated with exactly 1 of `QuantifiableObservableProperty` or `EnumeratedObservableProperty` using the relation `observes`."^^xsd:string ;
    sh:targetClass s223:Sensor ;
    sh:xone ( [ sh:property [ rdfs:comment "A `Sensor` shall be associated with exactly 1 of `QuantifiableObservableProperty` or `EnumeratedObservableProperty` using the relation `observes`."^^xsd:string ;
                        sh:class s223:QuantifiableObservableProperty ;
                        sh:maxCount 1 ;
                        sh:minCount 1 ;
                        sh:path s223:observes ] ] [ sh:property [ rdfs:comment "A `Sensor` shall be associated with exactly 1 of `QuantifiableObservableProperty` or `EnumeratedObservableProperty` using the relation `observes`."^^xsd:string ;
                        sh:class s223:EnumeratedObservableProperty ;
                        sh:maxCount 1 ;
                        sh:minCount 1 ;
                        sh:path s223:observes ] ] ) .

s223:SensorReferenceLocationShape a sh:NodeShape ;
    rdfs:label "Valve"^^xsd:string ;
    rdfs:comment "A `Sensor` can be associated with a maximum of one `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasReferenceLocation`."^^xsd:string ;
    sh:message "s223: A `Sensor` can be associated with a maximum of one `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasReferenceLocation`."^^xsd:string ;
    sh:or ( [ sh:property [ rdfs:comment "A `Sensor` can be associated with a maximum of one `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasReferenceLocation`."^^xsd:string ;
                        sh:class s223:Connectable ;
                        sh:path s223:hasReferenceLocation ] ] [ sh:property [ rdfs:comment "A `Sensor` can be associated with a maximum of one `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasReferenceLocation`."^^xsd:string ;
                        sh:class s223:Connection ;
                        sh:path s223:hasReferenceLocation ] ] [ sh:property [ rdfs:comment "A `Sensor` can be associated with a maximum of one `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasReferenceLocation`."^^xsd:string ;
                        sh:class s223:ConnectionPoint ;
                        sh:path s223:hasReferenceLocation ] ] ) ;
    sh:property [ rdfs:comment "A `Sensor` can be associated with a maximum of one `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasReferenceLocation`."^^xsd:string ;
            sh:maxCount 1 ;
            sh:path s223:hasReferenceLocation ] ;
    sh:targetClass s223:Sensor .

s223:SensorShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `hasObservationLocation` relation for a `Sensor` from the `Property` that it is observing, only if that `Property` is associated with a single entity."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:hasObservationLocation ?something .}
WHERE {
{
SELECT ?prop (COUNT (DISTINCT ?measurementLocation) AS ?count) $this
WHERE {
FILTER (NOT EXISTS {$this s223:hasObservationLocation ?anything}) .
$this s223:observes ?prop .
?measurementLocation s223:hasProperty ?prop .
}
GROUP BY ?prop $this
}
FILTER (?count = 1) .
?something s223:hasProperty ?prop .
{?something a/rdfs:subClassOf* s223:Connectable}
UNION
{?something a/rdfs:subClassOf* s223:Connection}
UNION
{?something a/rdfs:subClassOf* s223:ConnectionPoint}
}
"""^^xsd:string ;
            sh:name "InferredMeasurementLocation"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:Sensor .

s223:ServerComputer a s223:Class,
        sh:NodeShape ;
    rdfs:label "Server computer"^^xsd:string ;
    rdfs:comment "A `Computer` that is primarily used by multiple people, or for the execution of tasks not directly coupled to human interaction."^^xsd:string ;
    rdfs:subClassOf s223:Computer ;
    sh:property [ rdfs:comment "A `ServerComputer` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `ServerComputer` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Shower a s223:Class,
        sh:NodeShape ;
    rdfs:label "Shower"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` for showering that receives as an input hot or cold water dispensed from one or two `Faucet`s, and is designed to hold a specific volume of water and release the held water through a `Drain`."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Shower` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Shower` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Shower` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Shower` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:SingleDuctTerminal a s223:Class,
        sh:NodeShape ;
    rdfs:label "Single duct terminal."^^xsd:string ;
    rdfs:comment "A `TerminalUnit` unit that has one ducted air inlet and a damper for regulating the flow of air."^^xsd:string ;
    rdfs:subClassOf s223:TerminalUnit ;
    sh:property [ rdfs:comment "A `SingleDuctTerminal` shall be associated with at least one `Damper` using the relation `contains`."^^xsd:string ;
            sh:message "s223: A `SingleDuctTerminal` shall be associated with at least one `Damper` using the relation `contains`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:contains ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Damper ] ] .

s223:Sink a s223:Class,
        sh:NodeShape ;
    rdfs:label "Sink"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` for manually washing hands, dishes, or other items that receives as an input hot or cold water dispensed from one or two `Faucet`s, and is designed to hold a specific volume of water and release the held water through a `Drain`."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Sink` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Sink` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Sink` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `Sink` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:SolarThermalCollector a s223:Class,
        sh:NodeShape ;
    rdfs:label "Solar thermal collector"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that converts sunlight into thermal energy."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `SolarThermalCollector` shall have at least one inlet using the medium `EM-Light`."^^xsd:string ;
            sh:message "s223: A `SolarThermalCollector` shall have at least one inlet using the medium `EM-Light`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:EM-Light ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `SolarThermalCollector` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `SolarThermalCollector` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:SymmetricRelationShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Declare the inverse triples for symmetric relations"^^xsd:string ;
            sh:construct """
CONSTRUCT {
?o ?p $this .
}
WHERE {
  $this ?p ?o .
  ?p a s223:SymmetricRelation .
}
			"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:Concept .

s223:SystemShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Infer the `hasBoundaryConnectionPoint` relation using `hasOptionalConnectionPoint`."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:hasBoundaryConnectionPoint ?thing .}
WHERE {
$this s223:hasOptionalConnectionPoint ?thing .
}
"""^^xsd:string ;
            sh:name "InferredSystemToBoundaryConnectionPointFromOptional"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:System .

s223:Television a s223:Class,
        sh:NodeShape ;
    rdfs:label "Television"^^xsd:string ;
    rdfs:comment "An `ElectronicDisplay` that is designed primarily for the output of visual information supplied by a media broadcaster, and that typically has an integral tuner that is capable of selecting a single channel for display from the available input channel range."^^xsd:string ;
    rdfs:subClassOf s223:ElectronicDisplay .

s223:TemperatureSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Temperature Sensor"^^xsd:string ;
    rdfs:comment "A `Sensor` that `observes` a `QuantifiableObservableProperty` that represents a measure of temperature."^^xsd:string ;
    rdfs:subClassOf s223:Sensor ;
    sh:property [ rdfs:comment "A `TemperatureSensor` shall always observe a `QuantifiableObservableProperty` that has a `QuantityKind` of `Temperature`."^^xsd:string ;
            sh:message "s223: A `TemperatureSensor` shall always observe a `QuantifiableObservableProperty` that has a `QuantityKind` of `Temperature`."^^xsd:string ;
            sh:path s223:observes ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Property ;
                    sh:node [ sh:property [ sh:hasValue quantitykind:Temperature ;
                                    sh:path qudt:hasQuantityKind ] ] ] ] .

s223:ThermalEnergyStorageUnit a s223:Class,
        sh:NodeShape ;
    rdfs:label "Thermal energy storage unit"^^xsd:string ;
    rdfs:comment "A device that stores thermal energy."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A Thermal Energy Storage Unit shall have at least two connection points."^^xsd:string ;
            sh:class s223:ConnectionPoint ;
            sh:message "s223: A Thermal Energy Storage Unit shall have at least two connection points."^^xsd:string ;
            sh:minCount 2 ;
            sh:path s223:hasConnectionPoint ] .

s223:Thermostat a s223:Class,
        sh:NodeShape ;
    rdfs:label "Thermostat"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that maintains temperature at a fixed or adjustable setpoint."^^xsd:string ;
    rdfs:subClassOf s223:Equipment .

s223:ThreeWayValve a s223:Class,
        sh:NodeShape ;
    rdfs:label "Three way valve"^^xsd:string ;
    rdfs:comment "A `Valve` that can divert a fluid in one of three directions."^^xsd:string ;
    rdfs:subClassOf s223:Valve ;
    sh:property [ rdfs:comment "A `ThreeWayValve` shall have at least three `ConnectionPoint`s using the relation `hasConnectionPoint`."^^xsd:string ;
            sh:message "s223: A `ThreeWayValve` shall have at least three `ConnectionPoint`s using the relation `hasConnectionPoint`."^^xsd:string ;
            sh:minCount 3 ;
            sh:path s223:hasConnectionPoint ] .

s223:Turbine a s223:Class,
        sh:NodeShape ;
    rdfs:label "Turbine"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that converts mechanical energy into electric energy."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Turbine` shall have at least one outlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:class s223:OutletConnectionPoint ;
            sh:message "s223: A `Turbine` shall have at least one outlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:minCount 1 ;
            sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                            sh:path s223:hasMedium ] ] ;
            sh:path s223:hasConnectionPoint ],
        [ rdfs:comment "A `Turbine` shall be associated with at least one `ConnectionPoint` using the relation `hasConnectionPoint`."^^xsd:string ;
            sh:message "s223: A `Turbine` shall be associated with at least one `ConnectionPoint` using the relation `hasConnectionPoint`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ] .

s223:TwoWayValve a s223:Class,
        sh:NodeShape ;
    rdfs:label "Two way valve"^^xsd:string ;
    rdfs:comment "A `Valve` that can divert a fluid in one of two directions."^^xsd:string ;
    rdfs:subClassOf s223:Valve ;
    sh:property [ rdfs:comment "A `TwoWayValve` shall have at least one inlet."^^xsd:string ;
            sh:message "s223: A `TwoWayValve` shall have at least one inlet."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ],
        [ rdfs:comment "A `TwoWayValve` shall have at least one outlet."^^xsd:string ;
            sh:message "s223: A `TwoWayValve` shall have at least one outlet."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ] .

s223:USBOutlet a s223:Class,
        sh:NodeShape ;
    rdfs:label "USB outlet"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that contains one or more receptacles for connecting electrical equipment to a USB communication network, typically via a USB cable."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `USBOutlet` shall have at least one outlet using the medium `Signal-USB`."^^xsd:string ;
            sh:message "s223: A `USBOutlet` shall have at least one outlet using the medium `Signal-USB`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Signal-USB ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `USBOutlet` shall have exactly one inlet using the medium `Signal-USB`."^^xsd:string ;
            sh:message "s223: A `USBOutlet` shall have exactly one inlet using the medium `Signal-USB`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Signal-USB ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ValveCPShape a sh:NodeShape ;
    rdfs:label "Valve"^^xsd:string ;
    rdfs:comment "A `Valve` shall have at least one inlet and one outlet or two bidirectional connection points."^^xsd:string ;
    sh:message "s223: A `Valve` shall have at least one inlet and one outlet or two bidirectional connection points."^^xsd:string ;
    sh:or ( [ sh:property [ rdfs:comment "A `Valve` shall have at least one inlet and one outlet or two bidirectional connection points."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ;
                        sh:qualifiedValueShapesDisjoint true ],
                    [ rdfs:comment "A `Valve` shall have at least one inlet and one outlet or two bidirectional connection points."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ;
                        sh:qualifiedValueShapesDisjoint true ] ] [ sh:property [ rdfs:comment "A `Valve` shall have at least one inlet and one outlet or two bidirectional connection points."^^xsd:string ;
                        sh:minCount 2 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 2 ;
                        sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ] ;
                        sh:qualifiedValueShapesDisjoint true ] ] ) ;
    sh:severity sh:Warning ;
    sh:targetClass s223:Valve .

s223:VariableFrequencyDrive a s223:Class,
        sh:NodeShape ;
    rdfs:label "Variable frequency drive"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that varies its output frequency to vary the rotating speed and torque of a motor, given a fixed input frequency. Used with fans or pumps to vary the flow in the system as a function of a maintained pressure."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `VariableFrequencyDrive` shall have at least one outlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `VariableFrequencyDrive` shall have at least one outlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "If the relation `connectedTo` is present it shall associate the `VariableFrequencyDrive` with a `Equipment`."^^xsd:string ;
            sh:class s223:Equipment ;
            sh:message "s223: If the relation `connectedTo` is present it shall associate the `VariableFrequencyDrive` with a `Equipment`."^^xsd:string ;
            sh:path s223:connectedTo ],
        [ rdfs:comment "A `VariableFrequencyDrive` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `VariableFrequencyDrive` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ;
            sh:severity sh:Warning ] .

s223:WaterOutlet a s223:Class,
        sh:NodeShape ;
    rdfs:label "Water outlet"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that contains one or more pipe fittings for connecting plumbing equipment (e.g., `Faucet`) to a plumbing system."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `WaterOutlet` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `WaterOutlet` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `WaterOutlet` shall have exactly one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `WaterOutlet` shall have exactly one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:WaterToAirHeatPump a s223:Class,
        sh:NodeShape ;
    rdfs:label "Water to air heat pump"^^xsd:string ;
    rdfs:comment "A `HeatPump` that transfers thermal energy between air and a body of water."^^xsd:string ;
    rdfs:subClassOf s223:HeatPump ;
    sh:property [ rdfs:comment "A `WaterToAirHeatPump` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `WaterToAirHeatPump` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `WaterToAirHeatPump` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `WaterToAirHeatPump` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `WaterToAirHeatPump` shall have at least one outlet using the medium `Fluid-Water`"^^xsd:string ;
            sh:message "s223: A `WaterToAirHeatPump` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `WaterToAirHeatPump` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `WaterToAirHeatPump` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:WaterToWaterHeatPump a s223:Class,
        sh:NodeShape ;
    rdfs:label "Water to water heat pump"^^xsd:string ;
    rdfs:comment "A `HeatPump` that transfers thermal energy between two flows of water."^^xsd:string ;
    rdfs:subClassOf s223:HeatPump ;
    sh:property [ rdfs:comment "A `WaterToWaterHeatPump` shall have at least two inlets using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `WaterToWaterHeatPump` shall have at least two inlets using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 2 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `WaterToWaterHeatPump` shall have at least two outlets using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `WaterToWaterHeatPump` shall have at least two outlets using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 2 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:WindowShade a s223:Class,
        sh:NodeShape ;
    rdfs:label "Window shade"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that can be adjusted to allow, regulate, or stop the flow of light through a `Window`. "^^xsd:string ;
    rdfs:subClassOf s223:Equipment .

s223:WiredEthernetOutlet a s223:Class,
        sh:NodeShape ;
    rdfs:label "Wired ethernet outlet"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that contains one or more receptacles for connecting electrical equipment to a wired Ethernet communication network, typically via a wired Ethernet cable."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `WiredEthernetOutlet` shall have exactly one inlet using the medium `Signal-WiredEthernet`."^^xsd:string ;
            sh:message "s223: A `WiredEthernetOutlet` shall have exactly one inlet using the medium `Signal-WiredEthernet`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Signal-WiredEthernet ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `WiredEthernetOutlet` shall have at least one outlet using the medium `Signal-WiredEthernet`."^^xsd:string ;
            sh:message "s223: A `WiredEthernetOutlet` shall have at least one outlet using the medium `Signal-WiredEthernet`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Signal-WiredEthernet ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ZoneGroupShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Infer a `hasDomain` relation by checking any enclosed `Zone`s to determine the domain."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:hasDomain ?domain .}
WHERE {
$this s223:hasZone/s223:hasDomain ?domain .
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:ZoneGroup .

s223:ZoneShape a sh:NodeShape ;
    sh:rule [ a sh:SPARQLRule ;
            rdfs:comment "Infer a `hasDomain` relation by checking any enclosed `DomainSpace`s to determine the domain."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:hasDomain ?domain .}
WHERE {
$this s223:hasDomainSpace/s223:hasDomain ?domain .
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ],
        [ a sh:SPARQLRule ;
            rdfs:comment "Infer a `hasDomain` relation by checking any enclosing `ZoneGroup` to determine the domain."^^xsd:string ;
            sh:construct """
CONSTRUCT {$this s223:hasDomain ?domain .}
WHERE {
$this ^s223:hasZone/s223:hasDomain ?domain .
}
"""^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ] ;
    sh:targetClass s223:Zone .

g36:ChilledWaterCoilAnnotation a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "If an instance of s223:CoolingCoil matches the constraints defined by g36:ChilledWaterCoil, it will be declared as an instance of that class."^^xsd:string ;
            sh:condition g36:ChilledWaterCoil ;
            sh:object g36:ChilledWaterCoil ;
            sh:predicate rdf:type ;
            sh:subject sh:this ] ;
    sh:targetClass s223:CoolingCoil .

g36:ChilledWaterValveAnnotation a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "If an instance of s223:Valve matches the constraints defined by g36:ChilledWaterValve, it will be declared as an instance of that class."^^xsd:string ;
            sh:condition g36:ChilledWaterValve,
                g36:ChilledWaterValveOrShape1 ;
            sh:object g36:ChilledWaterValve ;
            sh:predicate rdf:type ;
            sh:subject sh:this ] ;
    sh:targetClass s223:Valve .

g36:DamperAnnotation a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "If an instance of s223:Damper matches the constraints defined by g36:Damper, it will be declared as an instance of that class."^^xsd:string ;
            sh:condition g36:Damper,
                g36:DamperOrShape1 ;
            sh:object g36:Damper ;
            sh:predicate rdf:type ;
            sh:subject sh:this ] ;
    sh:targetClass s223:Damper .

g36:ElectricHeatingCoilAnnotation a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "If an instance of s223:ElectricResistanceElement matches the constraints defined by g36:ElectricHeatingCoil, it will be declared as an instance of that class."^^xsd:string ;
            sh:condition g36:ElectricHeatingCoil ;
            sh:object g36:ElectricHeatingCoil ;
            sh:predicate rdf:type ;
            sh:subject sh:this ] ;
    sh:targetClass s223:ElectricResistanceElement .

g36:FanAnnotation a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "If an instance of s223:Fan matches the constraints defined by g36:Fan, it will be declared as an instance of that class."^^xsd:string ;
            sh:condition g36:Fan ;
            sh:object g36:Fan ;
            sh:predicate rdf:type ;
            sh:subject sh:this ] ;
    sh:targetClass s223:Fan .

g36:FanWithVFDAnnotation a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "If an instance of s223:Fan matches the constraints defined by g36:FanWithVFD, it will be declared as an instance of that class."^^xsd:string ;
            sh:condition g36:FanWithVFD ;
            sh:object g36:FanWithVFD ;
            sh:predicate rdf:type ;
            sh:subject sh:this ] ;
    sh:targetClass s223:Fan .

g36:HotWaterCoilAnnotation a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "If an instance of s223:HeatingCoil matches the constraints defined by g36:HotWaterCoil, it will be declared as an instance of that class."^^xsd:string ;
            sh:condition g36:HotWaterCoil ;
            sh:object g36:HotWaterCoil ;
            sh:predicate rdf:type ;
            sh:subject sh:this ] ;
    sh:targetClass s223:HeatingCoil .

g36:HotWaterValveAnnotation a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "If an instance of s223:Valve matches the constraints defined by g36:HotWaterValve, it will be declared as an instance of that class."^^xsd:string ;
            sh:condition g36:HotWaterValve,
                g36:HotWaterValveOrShape1 ;
            sh:object g36:HotWaterValve ;
            sh:predicate rdf:type ;
            sh:subject sh:this ] ;
    sh:targetClass s223:Valve .

g36:TwoPositionDamperAnnotation a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "If an instance of s223:Damper matches the constraints defined by g36:TwoPositionDamper, it will be declared as an instance of that class."^^xsd:string ;
            sh:condition g36:TwoPositionDamper ;
            sh:object g36:TwoPositionDamper ;
            sh:predicate rdf:type ;
            sh:subject sh:this ] ;
    sh:targetClass s223:Damper .

g36:ZoneAnnotation a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "If an instance of `Zone` matches the constraints defined by g36:Zone, it will be declared as an instance of that class."^^xsd:string ;
            sh:condition g36:Zone ;
            sh:object g36:Zone ;
            sh:predicate rdf:type ;
            sh:subject sh:this ] ;
    sh:targetClass s223:Zone .

g36:ZoneGroupAnnotation a sh:NodeShape ;
    sh:rule [ a sh:TripleRule ;
            rdfs:comment "If an instance of `ZoneGroup` matches the constraints defined by g36:ZoneGroup, it will be declared as an instance of that class."^^xsd:string ;
            sh:condition g36:ZoneGroup ;
            sh:object g36:ZoneGroup ;
            sh:predicate rdf:type ;
            sh:subject sh:this ] ;
    sh:targetClass s223:ZoneGroup .

<http://data.ashrae.org/standard223/1.0/extensions/settings> rdfs:comment """This file can be used to control which extensions are to be loaded with the 223 ontology by importing the appropriate graph(s). Options include:
For validation of the schema, model, or data - http://data.ashrae.org/standard223/1.0/validation/schema (or model or data).  
For inferred relations - http://data.ashrae.org/standard223/1.0/inference/model-rules (and/or schema-rules, data-rules).
For G36 extensions - http://data.ashrae.org/standard223/1.0/extensions/g36/core (and/or vav-terminal-unit, multiple-zone-vav-air-handling-unit, etc.)."""^^xsd:string .

bacnet:device-identifier a rdf:Property ;
    rdfs:label "Device Identifier"^^xsd:string ;
    rdfs:comment "The Object_Identifier property of the device object within the BACnet device.  See ASHRAE 135-2024 Clause 12.11.1."^^xsd:string .

bacnet:device-name a rdf:Property ;
    rdfs:label "Device Name"^^xsd:string ;
    rdfs:comment "The name of the BACnet device being referenced, more formally the Object_Name property of the device object within the BACnet device.  See ASHRAE 135-2024 Clause 12.11.2."^^xsd:string .

bacnet:object-identifier a rdf:Property ;
    rdfs:label "object-identifier"^^xsd:string ;
    rdfs:comment "The Object_Identifier property of the object being referenced.  For example, for the object identifier of an Analog Value Object, see ASHRAE 135-2024 Clause 12.4.1."^^xsd:string .

bacnet:object-name a rdf:Property ;
    rdfs:label "Object Name"^^xsd:string ;
    rdfs:comment "The Object_Name property of the object being referenced.  For example, for the object name of an Analog Value Object, see ASHRAE 135-2024 Clause 12.4.2."^^xsd:string .

bacnet:priority-for-writing a rdf:Property ;
    rdfs:label "Priority for Writing"^^xsd:string ;
    rdfs:comment """This parameter shall be an integer in the range 1..16, which indicates the priority assigned to the WriteProperty service. If an attempt
is made to write to a commandable property without specifying the bacnet:priority-for-writing, a default priority of 16 (the lowest priority) shall
be assumed. If an attempt is made to write to a property that is not commandable with a specified priority, the priority shall be
ignored.  See ASHRAE 135-2024 Clause 15.9.1.1.5."""^^xsd:string .

bacnet:property-array-index a rdf:Property ;
    rdfs:label "Property Array Index"^^xsd:string ;
    rdfs:comment """If the property identified is of datatype array, this optional property of type Unsigned shall indicate the array index of
the element of the `Property` referenced by the ReadProperty service or the Read Access Specification of the ReadPropertyMultiple service. If the bacnet:property-array-index is omitted, this shall mean that the entire
array shall be referenced.  See ASHRAE 135-2024 Clause 15.5.1.1.3 and Clause 15.7.1.1.1."""^^xsd:string .

bacnet:property-identifier a rdf:Property ;
    rdfs:label "Property Identifier"^^xsd:string ;
    rdfs:comment "The Object_Identifier `Property` of the object being referenced.  For example, for the object identifier of an Analog Value Object, see ASHRAE 135-2024 Clause 12.4.1."^^xsd:string .

s223:12V-12V-Neg a s223:12V-12V-Neg,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Negative 12VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCNegativeVoltage-12.0V,
        s223:DCVoltage-DCZeroVoltage ;
    rdfs:comment "12V-Neg"^^xsd:string ;
    rdfs:subClassOf s223:DC-12V .

s223:12V-12V-Pos a s223:12V-12V-Pos,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Positive 12VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCPositiveVoltage-12.0V,
        s223:DCVoltage-DCZeroVoltage ;
    rdfs:comment "12V-Pos"^^xsd:string ;
    rdfs:subClassOf s223:DC-12V .

s223:12V-6V-Neg-6V-Pos a s223:12V-6V-Neg-6V-Pos,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Negative 6VDC and Positive 6VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCNegativeVoltage-6.0V,
        s223:DCPositiveVoltage-6.0V ;
    rdfs:comment "6V-Neg-6V-Pos"^^xsd:string ;
    rdfs:subClassOf s223:DC-12V .

s223:24V-12V-Neg-12V-Pos a s223:24V-12V-Neg-12V-Pos,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Negative 12VDC and Positive 12VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCNegativeVoltage-12.0V,
        s223:DCPositiveVoltage-12.0V ;
    rdfs:comment "12V-Neg-12V-Pos"^^xsd:string ;
    rdfs:subClassOf s223:DC-24V .

s223:24V-24V-Neg a s223:24V-24V-Neg,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Negative 24VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCNegativeVoltage-24.0V,
        s223:DCVoltage-DCZeroVoltage ;
    rdfs:comment "24V-Neg"^^xsd:string ;
    rdfs:subClassOf s223:DC-24V .

s223:24V-24V-Pos a s223:24V-24V-Pos,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Positive 24VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCPositiveVoltage-24.0V,
        s223:DCVoltage-DCZeroVoltage ;
    rdfs:comment "24V-Pos"^^xsd:string ;
    rdfs:subClassOf s223:DC-24V .

s223:380V-190V-Neg-190V-Pos a s223:380V-190V-Neg-190V-Pos,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Negative 190VDC and Positive 190VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCNegativeVoltage-190.0V,
        s223:DCPositiveVoltage-190.0V ;
    rdfs:comment "190V-Neg-190V-Pos"^^xsd:string ;
    rdfs:subClassOf s223:DC-380V .

s223:380V-380V-Neg a s223:380V-380V-Neg,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Negative 380VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCNegativeVoltage-380.0V,
        s223:DCVoltage-DCZeroVoltage ;
    rdfs:comment "380V-Neg"^^xsd:string ;
    rdfs:subClassOf s223:DC-380V .

s223:380V-380V-Pos a s223:380V-380V-Pos,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Positive 380VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCPositiveVoltage-380.0V,
        s223:DCVoltage-DCZeroVoltage ;
    rdfs:comment "380V-Pos"^^xsd:string ;
    rdfs:subClassOf s223:DC-380V .

s223:48V-24V-Neg-24V-Pos a s223:48V-24V-Neg-24V-Pos,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Negative 24VDC and Positive 24VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCNegativeVoltage-24.0V,
        s223:DCPositiveVoltage-24.0V ;
    rdfs:comment "24V-Neg-24V-Pos"^^xsd:string ;
    rdfs:subClassOf s223:DC-48V .

s223:48V-48V-Neg a s223:48V-48V-Neg,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Negative 48VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCNegativeVoltage-48.0V,
        s223:DCVoltage-DCZeroVoltage ;
    rdfs:comment "48V-Neg"^^xsd:string ;
    rdfs:subClassOf s223:DC-48V .

s223:48V-48V-Pos a s223:48V-48V-Pos,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Positive 48VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCPositiveVoltage-48.0V,
        s223:DCVoltage-DCZeroVoltage ;
    rdfs:comment "48V-Pos"^^xsd:string ;
    rdfs:subClassOf s223:DC-48V .

s223:5V-2.5V-Neg-2.5V-Pos a s223:5V-2.5V-Neg-2.5V-Pos,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Negative 2.5VDC and Positive 2.5VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCNegativeVoltage-2.5V,
        s223:DCPositiveVoltage-2.5V ;
    rdfs:comment "2.5V-Neg-2.5V-Pos"^^xsd:string ;
    rdfs:subClassOf s223:DC-5V .

s223:5V-5V-Neg a s223:5V-5V-Neg,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Negative 5VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCNegativeVoltage-5.0V,
        s223:DCVoltage-DCZeroVoltage ;
    rdfs:comment "5V-Neg"^^xsd:string ;
    rdfs:subClassOf s223:DC-5V .

s223:5V-5V-Pos a s223:5V-5V-Pos,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Positive 5VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCPositiveVoltage-5.0V,
        s223:DCVoltage-DCZeroVoltage ;
    rdfs:comment "5V-Pos"^^xsd:string ;
    rdfs:subClassOf s223:DC-5V .

s223:6V-3V-Neg-3V-Pos a s223:6V-3V-Neg-3V-Pos,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Negative 3VDC and Positive 3VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCNegativeVoltage-3.0V,
        s223:DCPositiveVoltage-3.0V ;
    rdfs:comment "3V-Neg-3V-Pos"^^xsd:string ;
    rdfs:subClassOf s223:DC-6V .

s223:6V-6V-Neg a s223:6V-6V-Neg,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Negative 6VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCNegativeVoltage-6.0V,
        s223:DCVoltage-DCZeroVoltage ;
    rdfs:comment "6V-Neg"^^xsd:string ;
    rdfs:subClassOf s223:DC-6V .

s223:6V-6V-Pos a s223:6V-6V-Pos,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Positive 6VDC electricity"^^xsd:string ;
    s223:hasVoltage s223:DCPositiveVoltage-6.0V,
        s223:DCVoltage-DCZeroVoltage ;
    rdfs:comment "6V-Pos"^^xsd:string ;
    rdfs:subClassOf s223:DC-6V .

s223:AC-10000VLL-1Ph-60Hz a s223:AC-10000VLL-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-10000VLL-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-10000V ;
    rdfs:comment "`AC-10000VLL-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-10000VLL-3Ph-60Hz a s223:AC-10000VLL-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-10000VLL-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-10000V ;
    rdfs:comment "`AC-10000VLL-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-10000VLL-5770VLN-1Ph-60Hz a s223:AC-10000VLL-5770VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-10000VLL-5770VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-10000V,
        s223:LineNeutralVoltage-5770V ;
    rdfs:comment "`AC-10000VLL-5770VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-10000VLL-5770VLN-3Ph-60Hz a s223:AC-10000VLL-5770VLN-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-10000VLL-5770VLN-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-10000V,
        s223:LineNeutralVoltage-5770V ;
    rdfs:comment "`AC-10000VLL-5770VLN-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-110VLN-1Ph-50Hz a s223:AC-110VLN-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-110VLN-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-110V ;
    rdfs:comment "`AC-110VLN-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-120VLN-1Ph-60Hz a s223:AC-120VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-120VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-120V ;
    rdfs:comment "`AC-120VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-127VLN-1Ph-50Hz a s223:AC-127VLN-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-127VLN-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-127V ;
    rdfs:comment "`AC-127VLN-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-139VLN-1Ph-50Hz a s223:AC-139VLN-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-139VLN-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-139V ;
    rdfs:comment "`AC-139VLN-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-1730VLN-1Ph-60Hz a s223:AC-1730VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-1730VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-1730V ;
    rdfs:comment "`AC-1730VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-1900VLN-1Ph-60Hz a s223:AC-1900VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-1900VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-1900V ;
    rdfs:comment "`AC-1900VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-190VLL-110VLN-1Ph-50Hz a s223:AC-190VLL-110VLN-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-190VLL-110VLN-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-190V,
        s223:LineNeutralVoltage-110V ;
    rdfs:comment "`AC-190VLL-110VLN-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-190VLL-110VLN-3Ph-50Hz a s223:AC-190VLL-110VLN-3Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-190VLL-110VLN-3Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-190V,
        s223:LineNeutralVoltage-110V ;
    rdfs:comment "`AC-190VLL-110VLN-3Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-190VLL-1Ph-50Hz a s223:AC-190VLL-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-190VLL-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-190V ;
    rdfs:comment "`AC-190VLL-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-190VLL-3Ph-50Hz a s223:AC-190VLL-3Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-190VLL-3Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-190V ;
    rdfs:comment "`AC-190VLL-3Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-208VLL-120VLN-1Ph-60Hz a s223:AC-208VLL-120VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-208VLL-120VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-208V,
        s223:LineNeutralVoltage-120V ;
    rdfs:comment "`AC-208VLL-120VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-208VLL-120VLN-3Ph-60Hz a s223:AC-208VLL-120VLN-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-208VLL-120VLN-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-208V,
        s223:LineNeutralVoltage-120V ;
    rdfs:comment "`AC-208VLL-120VLN-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-208VLL-1Ph-60Hz a s223:AC-208VLL-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-208VLL-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-208V ;
    rdfs:comment "`AC-208VLL-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-208VLL-3Ph-60Hz a s223:AC-208VLL-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-208VLL-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-208V ;
    rdfs:comment "`AC-208VLL-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-208VLN-1Ph-60Hz a s223:AC-208VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-208VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-208V ;
    rdfs:comment "`AC-208VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-219VLN-1Ph-60Hz a s223:AC-219VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-219VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-219V ;
    rdfs:comment "`AC-219VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-220VLL-127VLN-1Ph-50Hz a s223:AC-220VLL-127VLN-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-220VLL-127VLN-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-220V,
        s223:LineNeutralVoltage-127V ;
    rdfs:comment "`AC-220VLL-127VLN-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-220VLL-127VLN-3Ph-50Hz a s223:AC-220VLL-127VLN-3Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-220VLL-127VLN-3Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-220V,
        s223:LineNeutralVoltage-127V ;
    rdfs:comment "`AC-220VLL-127VLN-3Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-220VLL-1Ph-50Hz a s223:AC-220VLL-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-220VLL-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-220V ;
    rdfs:comment "`AC-220VLL-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-220VLL-3Ph-50Hz a s223:AC-220VLL-3Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-220VLL-3Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-220V ;
    rdfs:comment "`AC-220VLL-3Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-230VLN-1Ph-50Hz a s223:AC-230VLN-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-230VLN-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-230V ;
    rdfs:comment "`AC-230VLN-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-2400VLN-1Ph-60Hz a s223:AC-2400VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-2400VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-2400V ;
    rdfs:comment "`AC-2400VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-240VLL-120VLN-1Ph-60Hz a s223:AC-240VLL-120VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-240VLL-120VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-240V,
        s223:LineNeutralVoltage-120V ;
    rdfs:comment "`AC-240VLL-120VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-240VLL-139VLN-1Ph-50Hz a s223:AC-240VLL-139VLN-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-240VLL-139VLN-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-240V,
        s223:LineNeutralVoltage-139V ;
    rdfs:comment "`AC-240VLL-139VLN-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-240VLL-139VLN-3Ph-50Hz a s223:AC-240VLL-139VLN-3Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-240VLL-139VLN-3Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-240V,
        s223:LineNeutralVoltage-139V ;
    rdfs:comment "`AC-240VLL-139VLN-3Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-240VLL-1Ph-50Hz a s223:AC-240VLL-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-240VLL-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-240V ;
    rdfs:comment "`AC-240VLL-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-240VLL-1Ph-60Hz a s223:AC-240VLL-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-240VLL-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-240V ;
    rdfs:comment "`AC-240VLL-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-240VLL-208VLN-120VLN-1Ph-60Hz a s223:AC-240VLL-208VLN-120VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-240VLL-208VLN-120VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-240V,
        s223:LineNeutralVoltage-120V,
        s223:LineNeutralVoltage-208V ;
    rdfs:comment "`AC-240VLL-208VLN-120VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-240VLL-208VLN-120VLN-3Ph-60Hz a s223:AC-240VLL-208VLN-120VLN-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-240VLL-208VLN-120VLN-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-240V,
        s223:LineNeutralVoltage-120V,
        s223:LineNeutralVoltage-208V ;
    rdfs:comment "`AC-240VLL-208VLN-120VLN-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-240VLL-3Ph-50Hz a s223:AC-240VLL-3Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-240VLL-3Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-240V ;
    rdfs:comment "`AC-240VLL-3Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-240VLL-3Ph-60Hz a s223:AC-240VLL-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-240VLL-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-240V ;
    rdfs:comment "`AC-240VLL-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-240VLN-1Ph-50Hz a s223:AC-240VLN-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-240VLN-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-240V ;
    rdfs:comment "`AC-240VLN-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-24VLN-1Ph-50Hz a s223:AC-24VLN-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-24VLN-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-24V ;
    rdfs:comment "`AC-24VLN-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-24VLN-1Ph-60Hz a s223:AC-24VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-24VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-24V ;
    rdfs:comment "`AC-24VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-277VLN-1Ph-60Hz a s223:AC-277VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-277VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-277V ;
    rdfs:comment "`AC-277VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-3000VLL-1730VLN-1Ph-60Hz a s223:AC-3000VLL-1730VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-3000VLL-1730VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-3000V,
        s223:LineNeutralVoltage-1730V ;
    rdfs:comment "`AC-3000VLL-1730VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-3000VLL-1730VLN-3Ph-60Hz a s223:AC-3000VLL-1730VLN-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-3000VLL-1730VLN-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-3000V,
        s223:LineNeutralVoltage-1730V ;
    rdfs:comment "`AC-3000VLL-1730VLN-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-3000VLL-1Ph-60Hz a s223:AC-3000VLL-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-3000VLL-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-3000V ;
    rdfs:comment "`AC-3000VLL-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-3000VLL-3Ph-60Hz a s223:AC-3000VLL-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-3000VLL-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-3000V ;
    rdfs:comment "`AC-3000VLL-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-3300VLL-1900VLN-1Ph-60Hz a s223:AC-3300VLL-1900VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-3300VLL-1900VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-3300V,
        s223:LineNeutralVoltage-1900V ;
    rdfs:comment "`AC-3300VLL-1900VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-3300VLL-1900VLN-3Ph-60Hz a s223:AC-3300VLL-1900VLN-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-3300VLL-1900VLN-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-3300V,
        s223:LineNeutralVoltage-1900V ;
    rdfs:comment "`AC-3300VLL-1900VLN-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-3300VLL-1Ph-60Hz a s223:AC-3300VLL-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-3300VLL-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-3300V ;
    rdfs:comment "`AC-3300VLL-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-3300VLL-3Ph-60Hz a s223:AC-3300VLL-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-3300VLL-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-3300V ;
    rdfs:comment "`AC-3300VLL-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-3460VLN-1Ph-60Hz a s223:AC-3460VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-3460VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-3460V ;
    rdfs:comment "`AC-3460VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-347VLN-1Ph-60Hz a s223:AC-347VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-347VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-347V ;
    rdfs:comment "`AC-347VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-380VLL-1Ph-60Hz a s223:AC-380VLL-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-380VLL-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-380V ;
    rdfs:comment "`AC-380VLL-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-380VLL-219VLN-1Ph-60Hz a s223:AC-380VLL-219VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-380VLL-219VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-380V,
        s223:LineNeutralVoltage-219V ;
    rdfs:comment "`AC-380VLL-219VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-380VLL-219VLN-3Ph-60Hz a s223:AC-380VLL-219VLN-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-380VLL-219VLN-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-380V,
        s223:LineNeutralVoltage-219V ;
    rdfs:comment "`AC-380VLL-219VLN-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-380VLL-3Ph-60Hz a s223:AC-380VLL-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-380VLL-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-380V ;
    rdfs:comment "`AC-380VLL-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-3810VLN-1Ph-60Hz a s223:AC-3810VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-3810VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-3810V ;
    rdfs:comment "`AC-3810VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-400VLL-1Ph-50Hz a s223:AC-400VLL-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-400VLL-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-400V ;
    rdfs:comment "`AC-400VLL-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-400VLL-230VLN-1Ph-50Hz a s223:AC-400VLL-230VLN-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-400VLL-230VLN-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-400V,
        s223:LineNeutralVoltage-230V ;
    rdfs:comment "`AC-400VLL-230VLN-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-400VLL-230VLN-3Ph-50Hz a s223:AC-400VLL-230VLN-3Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-400VLL-230VLN-3Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-400V,
        s223:LineNeutralVoltage-230V ;
    rdfs:comment "`AC-400VLL-230VLN-3Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-400VLL-3Ph-50Hz a s223:AC-400VLL-3Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-400VLL-3Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-400V ;
    rdfs:comment "`AC-400VLL-3Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-415VLL-1Ph-50Hz a s223:AC-415VLL-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-415VLL-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-415V ;
    rdfs:comment "`AC-415VLL-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-415VLL-240VLN-1Ph-50Hz a s223:AC-415VLL-240VLN-1Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-415VLL-240VLN-1Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-415V,
        s223:LineNeutralVoltage-240V ;
    rdfs:comment "`AC-415VLL-240VLN-1Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-415VLL-240VLN-3Ph-50Hz a s223:AC-415VLL-240VLN-3Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-415VLL-240VLN-3Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-415V,
        s223:LineNeutralVoltage-240V ;
    rdfs:comment "`AC-415VLL-240VLN-3Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-415VLL-3Ph-50Hz a s223:AC-415VLL-3Ph-50Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-415VLL-3Ph-50Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-50Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-415V ;
    rdfs:comment "`AC-415VLL-3Ph-50Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-4160VLL-1Ph-60Hz a s223:AC-4160VLL-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-4160VLL-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-4160V ;
    rdfs:comment "`AC-4160VLL-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-4160VLL-2400VLN-1Ph-60Hz a s223:AC-4160VLL-2400VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-4160VLL-2400VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-4160V,
        s223:LineNeutralVoltage-2400V ;
    rdfs:comment "`AC-4160VLL-2400VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-4160VLL-2400VLN-3Ph-60Hz a s223:AC-4160VLL-2400VLN-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-4160VLL-2400VLN-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-4160V,
        s223:LineNeutralVoltage-2400V ;
    rdfs:comment "`AC-4160VLL-2400VLN-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-4160VLL-3Ph-60Hz a s223:AC-4160VLL-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-4160VLL-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-4160V ;
    rdfs:comment "`AC-4160VLL-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-480VLL-1Ph-60Hz a s223:AC-480VLL-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-480VLL-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-480V ;
    rdfs:comment "`AC-480VLL-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-480VLL-277VLN-1Ph-60Hz a s223:AC-480VLL-277VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-480VLL-277VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-480V,
        s223:LineNeutralVoltage-277V ;
    rdfs:comment "`AC-480VLL-277VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-480VLL-277VLN-3Ph-60Hz a s223:AC-480VLL-277VLN-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-480VLL-277VLN-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-480V,
        s223:LineNeutralVoltage-277V ;
    rdfs:comment "`AC-480VLL-277VLN-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-480VLL-3Ph-60Hz a s223:AC-480VLL-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-480VLL-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-480V ;
    rdfs:comment "`AC-480VLL-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-5770VLN-1Ph-60Hz a s223:AC-5770VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-5770VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineNeutralVoltage-5770V ;
    rdfs:comment "`AC-5770VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-6000VLL-1Ph-60Hz a s223:AC-6000VLL-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-6000VLL-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-6000V ;
    rdfs:comment "`AC-6000VLL-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-6000VLL-3460VLN-1Ph-60Hz a s223:AC-6000VLL-3460VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-6000VLL-3460VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-6000V,
        s223:LineNeutralVoltage-3460V ;
    rdfs:comment "`AC-6000VLL-3460VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-6000VLL-3460VLN-3Ph-60Hz a s223:AC-6000VLL-3460VLN-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-6000VLL-3460VLN-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-6000V,
        s223:LineNeutralVoltage-3460V ;
    rdfs:comment "`AC-6000VLL-3460VLN-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-6000VLL-3Ph-60Hz a s223:AC-6000VLL-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-6000VLL-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-6000V ;
    rdfs:comment "`AC-6000VLL-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-600VLL-1Ph-60Hz a s223:AC-600VLL-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-600VLL-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-600V ;
    rdfs:comment "`AC-600VLL-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-600VLL-347VLN-1Ph-60Hz a s223:AC-600VLL-347VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-600VLL-347VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-600V,
        s223:LineNeutralVoltage-347V ;
    rdfs:comment "`AC-600VLL-347VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-600VLL-347VLN-3Ph-60Hz a s223:AC-600VLL-347VLN-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-600VLL-347VLN-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-600V,
        s223:LineNeutralVoltage-347V ;
    rdfs:comment "`AC-600VLL-347VLN-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-600VLL-3Ph-60Hz a s223:AC-600VLL-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-600VLL-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-600V ;
    rdfs:comment "`AC-600VLL-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-6600VLL-1Ph-60Hz a s223:AC-6600VLL-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-6600VLL-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-6600V ;
    rdfs:comment "`AC-6600VLL-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-6600VLL-3810VLN-1Ph-60Hz a s223:AC-6600VLL-3810VLN-1Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-6600VLL-3810VLN-1Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-SinglePhase ;
    s223:hasVoltage s223:LineLineVoltage-6600V,
        s223:LineNeutralVoltage-3810V ;
    rdfs:comment "`AC-6600VLL-3810VLN-1Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-6600VLL-3810VLN-3Ph-60Hz a s223:AC-6600VLL-3810VLN-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-6600VLL-3810VLN-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-6600V,
        s223:LineNeutralVoltage-3810V ;
    rdfs:comment "`AC-6600VLL-3810VLN-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AC-6600VLL-3Ph-60Hz a s223:AC-6600VLL-3Ph-60Hz,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "AC-6600VLL-3Ph-60Hz"^^xsd:string ;
    s223:hasFrequency s223:Frequency-60Hz ;
    s223:hasNumberOfElectricalPhases s223:NumberOfElectricalPhases-ThreePhase ;
    s223:hasVoltage s223:LineLineVoltage-6600V ;
    rdfs:comment "`AC-6600VLL-3Ph-60Hz`"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-AC .

s223:AirHeatExchanger a s223:Class,
        sh:NodeShape ;
    rdfs:label "Air heat exchanger"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that transfers heat from one air stream to another while keeping the two media separate."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "An `AirHeatExchanger` shall have at least two air outlets, each paired with an inlet."^^xsd:string ;
            sh:message "s223: An `AirHeatExchanger` shall have at least two air outlets, each paired with an inlet."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:InletConnectionPoint ;
                                    sh:minCount 1 ;
                                    sh:path s223:pairedConnectionPoint ],
                                [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "An `AirHeatExchanger` shall have at least two air inlets, each paired with an outlet."^^xsd:string ;
            sh:message "s223: An `AirHeatExchanger` shall have at least two air inlets, each paired with an outlet."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:OutletConnectionPoint ;
                                    sh:minCount 1 ;
                                    sh:path s223:pairedConnectionPoint ],
                                [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "An `AirHeatExchanger` shall have no `BidirectionalConnectionPoint`s."^^xsd:string ;
            sh:message "s223: An `AirHeatExchanger` shall have no `BidirectionalConnectionPoint`s."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMaxCount 0 ;
            sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ;
                    sh:message "s223: An `AirHeatExchanger` shall have no `BidirectionalConnectionPoint`s."^^xsd:string ] ] .

s223:Aspect-Alarm a s223:Aspect-Alarm,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Alarm"^^xsd:string ;
    rdfs:comment "The property value indicates whether an alarm condition is active or provides details about an active alarm."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-CatalogNumber a s223:Aspect-CatalogNumber,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Catalog Number"^^xsd:string ;
    rdfs:comment "The property value is a name or other identifier of the product's manufacturer."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-Deadband a s223:Aspect-Deadband,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Deadband"^^xsd:string ;
    rdfs:comment "The property value is a range around a setpoint where no control action is taken to avoid unnecessary corrections."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-Delta a s223:Aspect-Delta,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Delta"^^xsd:string ;
    rdfs:comment "The property value is a differential value (e.g., pressure difference) instead of an absolute value."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-Fault a s223:Aspect-Fault,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Fault"^^xsd:string ;
    rdfs:comment "The property value is a fault indicator or code that signals a malfunction or issue with the system or equipment."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-HighLimit a s223:Aspect-HighLimit,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "High limit"^^xsd:string ;
    rdfs:comment "The property value is an upper threshold used in a control or alarm detection algorithm."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-LowLimit a s223:Aspect-LowLimit,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Low limit"^^xsd:string ;
    rdfs:comment "The property value is a lower threshold used in a control or alarm detection algorithm."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-Manufacturer a s223:Aspect-Manufacturer,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Manufacturer"^^xsd:string ;
    rdfs:comment "The property value is a name or other identifier of the product’s manufacturer."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-Maximum a s223:Aspect-Maximum,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Maximum"^^xsd:string ;
    rdfs:comment "The property value is a highest specified or observed value. (Examples: upper limit of the specified operating voltage range; maximum measured temperature.)"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-Minimum a s223:Aspect-Minimum,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Minimum"^^xsd:string ;
    rdfs:comment "The property value is a lowest specified or observed value. (Examples: lower limit of the specified operating voltage range; minimum measured temperature.)"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-Model a s223:Aspect-Model,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Model"^^xsd:string ;
    rdfs:comment "The property value is a model identifier of the product."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-Nominal a s223:Aspect-Nominal,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Nominal"^^xsd:string ;
    rdfs:comment "The property value is a value that is expected or desired under normal operating conditions, but may not reflect the actual value at all times. (Example: nominal voltage.)"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-OperatingMode a s223:Aspect-OperatingMode,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Operating mode"^^xsd:string ;
    rdfs:comment "The property value is the current intended mode of operation, such as 'Automatic', 'On', or 'Off'."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-OperatingStatus a s223:Aspect-OperatingStatus,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Operating status"^^xsd:string ;
    rdfs:comment "The property value is the current operational status of the system or equipment, such as 'Running,' 'Stopped,' or 'Maintenance Mode.'"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-Rated a s223:Aspect-Rated,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Rated"^^xsd:string ;
    rdfs:comment "The property value indicates a limit for continuous safe operation set by the manufacturer, but may not reflect the actual value at all times (Example: rated voltage)"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-SerialNumber a s223:Aspect-SerialNumber,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Serial number"^^xsd:string ;
    rdfs:comment "The property value is the serial number assigned by the manufacturer to the system or equipment."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-Setpoint a s223:Aspect-Setpoint,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Setpoint"^^xsd:string ;
    rdfs:comment "The property value is a target value for a control algorithm."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:Aspect-Threshold a s223:Aspect-Threshold,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Threshold"^^xsd:string ;
    rdfs:comment "The property value is a threshold used in a control algorithm."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Aspect .

s223:BACnetExternalReference a s223:Class,
        sh:NodeShape ;
    rdfs:label "BACnetExternalReference"^^xsd:string ;
    rdfs:comment "An `ExternalReference` that contains BACnet protocol parameter values necessary to associate a `Property` with a value."^^xsd:string ;
    rdfs:subClassOf s223:ExternalReference .

s223:Battery a s223:Class,
        sh:NodeShape ;
    rdfs:label "Battery"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that stores a defined amount of chemical energy that can be converted to electrical energy via a chemical process. This process, typically referred to as discharging, produces a specific electrical voltage and current."^^xsd:string ;
    rdfs:subClassOf s223:Equipment .

s223:Conductor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Conductor"^^xsd:string ;
    rdfs:comment "A `Connection` that represents one or more wires used to convey electricity, with the electricity conceptualized as flowing through a `Conductor` like water through a pipe. Each instance of `Conductor` applies to no more than one electrical circuit."^^xsd:string ;
    rdfs:subClassOf s223:Connection ;
    sh:property [ rdfs:comment "Ensure the electrical phase is the same as all connected `ConnectionPoint`s"^^xsd:string ;
            sh:path s223:hasElectricalPhase ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Ensure the electrical phase is the same as all connected `ConnectionPoint`s"^^xsd:string ;
                    sh:message "s223: {$this} has an electrical phase of {?myphase} which is different from {?cpPhase} for `ConnectionPoint` {?cp}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
    SELECT $this ?myphase ?cp ?cpPhase
    WHERE {
        $this s223:hasElectricalPhase ?myphase .
        $this s223:connectsAt ?cp .
        ?cp s223:hasElectricalPhase ?cpPhase .
        FILTER (?myphase != ?cpPhase) .
        }
        """^^xsd:string ] ],
        [ rdfs:comment "If the relation `hasElectricalPhase` is present it shall associate the `Conductor` with a single ElectricalPhaseIdentifier or ElectricalVoltagePhases value."^^xsd:string ;
            sh:maxCount 1 ;
            sh:message "s223: If the relation `hasElectricalPhase` is present it shall associate the `Conductor` with a single ElectricalPhaseIdentifier or ElectricalVoltagePhases value."^^xsd:string ;
            sh:or ( [ sh:class s223:EnumerationKind-ElectricalPhaseIdentifier ] [ sh:class s223:EnumerationKind-ElectricalVoltagePhases ] ) ;
            sh:path s223:hasElectricalPhase ],
        [ rdfs:comment "A `Conductor` shall be associated with exactly one `Constituent-Electricity` using the relation `hasMedium`."^^xsd:string ;
            sh:class s223:Constituent-Electricity ;
            sh:maxCount 1 ;
            sh:message "s223: A `Conductor` shall be associated with exactly one `Constituent-Electricity` using the relation `hasMedium`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasMedium ] .

s223:Constituent-CH4 a s223:Class,
        s223:Constituent-CH4,
        sh:NodeShape ;
    rdfs:label "Methane"^^xsd:string ;
    rdfs:comment "`Constituent-CH4`"^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:Constituent-CO a s223:Class,
        s223:Constituent-CO,
        sh:NodeShape ;
    rdfs:label "Carbon monoxide"^^xsd:string ;
    rdfs:comment "`Constituent-CO`"^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:Constituent-H2S a s223:Class,
        s223:Constituent-H2S,
        sh:NodeShape ;
    rdfs:label "Hydrogen sulfide"^^xsd:string ;
    rdfs:comment "`Constituent-H2S`"^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:Constituent-O3 a s223:Class,
        s223:Constituent-O3,
        sh:NodeShape ;
    rdfs:label "Ozone"^^xsd:string ;
    rdfs:comment "`Constituent-O3`"^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:Constituent-Radon a s223:Class,
        s223:Constituent-Radon,
        sh:NodeShape ;
    rdfs:label "Radon"^^xsd:string ;
    rdfs:comment "`Constituent-Radon`"^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:Constituent-SO2 a s223:Class,
        s223:Constituent-SO2,
        sh:NodeShape ;
    rdfs:label "Sulfur dioxide"^^xsd:string ;
    rdfs:comment "`Constituent-SO2`"^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:Constituent-VolatileOrganicCompounds a s223:Class,
        s223:Constituent-VolatileOrganicCompounds,
        sh:NodeShape ;
    rdfs:label "Volatile organic compounds"^^xsd:string ;
    rdfs:comment "`Constituent-VolatileOrganicCompounds`"^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:Domain-ConveyanceSystems a s223:Class,
        s223:Domain-ConveyanceSystems,
        sh:NodeShape ;
    rdfs:label "Conveyance systems domain"^^xsd:string ;
    rdfs:comment "The domain that represents equipment that moves people or things within a building. Example `Domain-ConveyanceSystems` equipment include `Elevator` and `Escalator`."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Domain .

s223:Domain-Electrical a s223:Class,
        s223:Domain-Electrical,
        sh:NodeShape ;
    rdfs:label "Electrical domain"^^xsd:string ;
    rdfs:comment "The domain that represents equipment that distributes and monitors electrical power within a building. Example `Domain-Electrical` equipment include `ElectricityBreaker`, `ElectricEnergyConverter`, and `ElectricityMeter`."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Domain .

s223:Domain-FireProtection a s223:Class,
        s223:Domain-FireProtection,
        sh:NodeShape ;
    rdfs:label "Fire protection domain"^^xsd:string ;
    rdfs:comment "The domain that represents equipment that detect and mitigate the spread of fire within a building. Example `Domain-FireProtection` equipment include smoke detectors, alarms, and emergency public address systems."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Domain .

s223:Domain-Lighting a s223:Class,
        s223:Domain-Lighting,
        sh:NodeShape ;
    rdfs:label "Lighting domain"^^xsd:string ;
    rdfs:comment "The domain that represents equipment that illuminate and manage the distribution of light within or outside of a building. Example `Domain-Lighting` equipment include `Luminaire`, `LightSensor`, and `WindowShade`."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Domain .

s223:Domain-Networking a s223:Class,
        s223:Domain-Networking,
        sh:NodeShape ;
    rdfs:label "Networking domain"^^xsd:string ;
    rdfs:comment "The domain that represents equipment that distributes and manages the flow of communication signals within a building. Example `Domain-Networking` equipment include `EthernetSwitch` and `PowerOverEthernetSwitch`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Domain .

s223:Domain-Occupancy a s223:Class,
        s223:Domain-Occupancy,
        sh:NodeShape ;
    rdfs:label "Occupancy domain"^^xsd:string ;
    rdfs:comment "The domain that represents equipment that determine whether and how many people are moving or present within a building. Example `Domain-Occupancy` equipment include `OccupantMotionSensor`, `OccupantPresenceSensor` and `OccupantCountSensor`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Domain .

s223:Domain-PhysicalSecurity a s223:Class,
        s223:Domain-PhysicalSecurity,
        sh:NodeShape ;
    rdfs:label "Physical security domain"^^xsd:string ;
    rdfs:comment "The domain that represents equipment that control and monitor physical access to spaces within or outside of a building. Example `Domain-PhysicalSecurity` equipment include cameras, keycard sensors, and biometric scanners."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Domain .

s223:Domain-Plumbing a s223:Class,
        s223:Domain-Plumbing,
        sh:NodeShape ;
    rdfs:label "Plumbing domain"^^xsd:string ;
    rdfs:comment "The domain that represents equipment that distributes, holds, removes and monitors water within or outside of a building. Example `Domain-Plumbing` equipment include `Faucet`, `Sink`, and `FlushToilet`."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Domain .

s223:Domain-Refrigeration a s223:Class,
        s223:Domain-Refrigeration,
        sh:NodeShape ;
    rdfs:label "Refrigeration domain"^^xsd:string ;
    rdfs:comment "The domain that represents equipment that maintain internal temperatures below the surrounding ambient temperature with a building. Example `Domain-Refrigeration` equipment include `Refrigerator` and `Freezer`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Domain .

s223:EM-Microwave a s223:Class,
        s223:EM-Microwave,
        sh:NodeShape ;
    rdfs:label "Microwave"^^xsd:string ;
    rdfs:comment "`EM-Microwave`"^^xsd:string ;
    rdfs:subClassOf s223:Constituent-EM .

s223:ElectricCurrentSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electric Current Sensor"^^xsd:string ;
    rdfs:comment "A `Sensor` that `observes` a `QuantifiableObservableProperty` that represents a measure of electric current."^^xsd:string ;
    rdfs:subClassOf s223:Sensor ;
    sh:property [ rdfs:comment "An `ElectricCurrentSensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of `ElectricCurrent`."^^xsd:string ;
            sh:message "s223: An `ElectricCurrentSensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of `ElectricCurrent`."^^xsd:string ;
            sh:path ( s223:observes qudt:hasQuantityKind ) ;
            sh:value quantitykind:ElectricCurrent ] .

s223:ElectricOven a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electric oven"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` with an enclosed chamber designed for baking, roasting, and other cooking methods that rely on circulating heat."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `ElectricOven` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `ElectricOven` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ElectricalPhaseIdentifier-A a s223:Class,
        s223:ElectricalPhaseIdentifier-A,
        sh:NodeShape ;
    rdfs:label "Electrical Phase Identifier A"^^xsd:string ;
    rdfs:comment "The value of the associated `Property` identifies the electrical phase A of the `Connection`."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalPhaseIdentifier .

s223:ElectricalPhaseIdentifier-AB a s223:Class,
        s223:ElectricalPhaseIdentifier-AB,
        sh:NodeShape ;
    rdfs:label "Electrical Phase Identifier AB"^^xsd:string ;
    rdfs:comment "The value of the associated `Property` identifies the electrical phase AB of the `Connection`."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalPhaseIdentifier .

s223:ElectricalPhaseIdentifier-ABC a s223:Class,
        s223:ElectricalPhaseIdentifier-ABC,
        sh:NodeShape ;
    rdfs:label "Electrical Phase Identifier ABC"^^xsd:string ;
    rdfs:comment "The value of the associated `Property` identifies the electrical phase ABC of the `Connection`."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalPhaseIdentifier .

s223:ElectricalPhaseIdentifier-B a s223:Class,
        s223:ElectricalPhaseIdentifier-B,
        sh:NodeShape ;
    rdfs:label "Electrical Phase Identifier B"^^xsd:string ;
    rdfs:comment "The value of the associated `Property` identifies the electrical phase B of the `Connection`."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalPhaseIdentifier .

s223:ElectricalPhaseIdentifier-BC a s223:Class,
        s223:ElectricalPhaseIdentifier-BC,
        sh:NodeShape ;
    rdfs:label "Electrical Phase Identifier BC"^^xsd:string ;
    rdfs:comment "The value of the associated `Property` identifies the electrical phase BC of the `Connection`."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalPhaseIdentifier .

s223:ElectricalPhaseIdentifier-C a s223:Class,
        s223:ElectricalPhaseIdentifier-C,
        sh:NodeShape ;
    rdfs:label "Electrical Phase Identifier C"^^xsd:string ;
    rdfs:comment "The value of the associated `Property` identifies the electrical phase C of the `Connection`."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalPhaseIdentifier .

s223:ElectricalPhaseIdentifier-CA a s223:Class,
        s223:ElectricalPhaseIdentifier-CA,
        sh:NodeShape ;
    rdfs:label "Electrical Phase Identifier CA"^^xsd:string ;
    rdfs:comment "The value of the associated `Property` identifies the electrical phase CA of the `Connection`."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalPhaseIdentifier .

s223:ElectricalVoltagePhases-ABLineLineVoltage a s223:Class,
        s223:ElectricalVoltagePhases-ABLineLineVoltage,
        sh:NodeShape ;
    rdfs:label "ElectricalVoltagePhases-ABLineLineVoltage"^^xsd:string ;
    rdfs:comment "Identifies the Line-to-line voltage is between phases A and B"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalVoltagePhases .

s223:ElectricalVoltagePhases-ANLineNeutralVoltage a s223:Class,
        s223:ElectricalVoltagePhases-ANLineNeutralVoltage,
        sh:NodeShape ;
    rdfs:label "ElectricalVoltagePhases-ANLineNeutralVoltage"^^xsd:string ;
    rdfs:comment "Identifies the Line-to-neutral voltage is between phases A and N"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalVoltagePhases .

s223:ElectricalVoltagePhases-BCLineLineVoltage a s223:Class,
        s223:ElectricalVoltagePhases-BCLineLineVoltage,
        sh:NodeShape ;
    rdfs:label "ElectricalVoltagePhases-BCLineLineVoltage"^^xsd:string ;
    rdfs:comment "Identifies the Line-to-line voltage is between phases B and C"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalVoltagePhases .

s223:ElectricalVoltagePhases-BNLineNeutralVoltage a s223:Class,
        s223:ElectricalVoltagePhases-BNLineNeutralVoltage,
        sh:NodeShape ;
    rdfs:label "ElectricalVoltagePhases-BNLineNeutralVoltage"^^xsd:string ;
    rdfs:comment "Identifies the Line-to-neutral voltage is between phases B and N"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalVoltagePhases .

s223:ElectricalVoltagePhases-CALineLineVoltage a s223:Class,
        s223:ElectricalVoltagePhases-CALineLineVoltage,
        sh:NodeShape ;
    rdfs:label "ElectricalVoltagePhases-CALineLineVoltage"^^xsd:string ;
    rdfs:comment "Identifies the Line-to-line voltage is between phases C and A"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalVoltagePhases .

s223:ElectricalVoltagePhases-CNLineNeutralVoltage a s223:Class,
        s223:ElectricalVoltagePhases-CNLineNeutralVoltage,
        sh:NodeShape ;
    rdfs:label "ElectricalVoltagePhases-CNLineNeutralVoltage"^^xsd:string ;
    rdfs:comment "Identifies the Line-to-neutral voltage is between phases C and N"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ElectricalVoltagePhases .

s223:Electricity-Earth a s223:Class,
        s223:Electricity-Earth,
        sh:NodeShape ;
    rdfs:label "Electricity-Earth"^^xsd:string ;
    rdfs:comment "`Electricity-Earth`"^^xsd:string ;
    rdfs:subClassOf s223:Constituent-Electricity .

s223:Electricity-Neutral a s223:Class,
        s223:Electricity-Neutral,
        sh:NodeShape ;
    rdfs:label "Electricity-Neutral"^^xsd:string ;
    rdfs:comment "`Electricity-Neutral`"^^xsd:string ;
    rdfs:subClassOf s223:Constituent-Electricity .

s223:FiberEthernet-OM1 a s223:Class,
        s223:FiberEthernet-OM1,
        sh:NodeShape ;
    rdfs:label "Fiber Ethernet OM1"^^xsd:string ;
    rdfs:comment "FiberEthernet-OM1"^^xsd:string ;
    rdfs:subClassOf s223:Signal-FiberEthernet .

s223:FiberEthernet-OM2 a s223:Class,
        s223:FiberEthernet-OM2,
        sh:NodeShape ;
    rdfs:label "Fiber Ethernet OM2"^^xsd:string ;
    rdfs:comment "FiberEthernet-OM2"^^xsd:string ;
    rdfs:subClassOf s223:Signal-FiberEthernet .

s223:FiberEthernet-OM3 a s223:Class,
        s223:FiberEthernet-OM3,
        sh:NodeShape ;
    rdfs:label "Fiber Ethernet OM3"^^xsd:string ;
    rdfs:comment "FiberEthernet-OM3"^^xsd:string ;
    rdfs:subClassOf s223:Signal-FiberEthernet .

s223:FiberEthernet-OM4 a s223:Class,
        s223:FiberEthernet-OM4,
        sh:NodeShape ;
    rdfs:label "Fibe Ethernet OM4"^^xsd:string ;
    rdfs:comment "FiberEthernet-OM4"^^xsd:string ;
    rdfs:subClassOf s223:Signal-FiberEthernet .

s223:FiberEthernet-OM5 a s223:Class,
        s223:FiberEthernet-OM5,
        sh:NodeShape ;
    rdfs:label "Fiber Ethernet OM5"^^xsd:string ;
    rdfs:comment "FiberEthernet-OM5"^^xsd:string ;
    rdfs:subClassOf s223:Signal-FiberEthernet .

s223:FiberEthernet-OS1 a s223:Class,
        s223:FiberEthernet-OS1,
        sh:NodeShape ;
    rdfs:label "Fiber Ethernet OS1"^^xsd:string ;
    rdfs:comment "FiberEthernet-OS1"^^xsd:string ;
    rdfs:subClassOf s223:Signal-FiberEthernet .

s223:FiberEthernet-OS2 a s223:Class,
        s223:FiberEthernet-OS2,
        sh:NodeShape ;
    rdfs:label "Fiber Ethernet OS2"^^xsd:string ;
    rdfs:comment "FiberEthernet-OS2"^^xsd:string ;
    rdfs:subClassOf s223:Signal-FiberEthernet .

s223:Gas-SuperHeated a s223:Class,
        s223:Gas-SuperHeated,
        sh:NodeShape ;
    rdfs:label "Superheated gas"^^xsd:string ;
    rdfs:comment "Gas-SuperHeated"^^xsd:string ;
    rdfs:subClassOf s223:ThermodynamicPhase-Gas .

s223:GlycolSolution-15Percent a s223:Class,
        s223:GlycolSolution-15Percent,
        sh:NodeShape ;
    rdfs:label "15 percent glycol solution"^^xsd:string ;
    s223:composedOf [ a s223:QuantifiableProperty ;
            rdfs:label "Glycol concentration"^^xsd:string ;
            s223:hasValue 15.0 ;
            s223:ofConstituent s223:Constituent-Glycol ;
            qudt:hasQuantityKind quantitykind:VolumeFraction ;
            qudt:hasUnit unit:PERCENT ],
        [ a s223:QuantifiableProperty ;
            rdfs:label "Water concentration"^^xsd:string ;
            s223:hasValue 85.0 ;
            s223:ofConstituent s223:Constituent-H2O ;
            qudt:hasQuantityKind quantitykind:VolumeFraction ;
            qudt:hasUnit unit:PERCENT ] ;
    s223:hasFreezingPoint [ a s223:QuantifiableProperty ;
            rdfs:label "Freezing point"^^xsd:string ;
            qudt:hasQuantityKind quantitykind:Temperature ] ;
    rdfs:comment "`GlycolSolution-15Percent`"^^xsd:string ;
    rdfs:subClassOf s223:Water-GlycolSolution .

s223:GlycolSolution-30Percent a s223:Class,
        s223:GlycolSolution-30Percent,
        sh:NodeShape ;
    rdfs:label "30 percent glycol solution"^^xsd:string ;
    s223:composedOf [ a s223:QuantifiableProperty ;
            rdfs:label "Water concentration"^^xsd:string ;
            s223:hasValue 70.0 ;
            s223:ofConstituent s223:Constituent-H2O ;
            qudt:hasQuantityKind quantitykind:VolumeFraction ;
            qudt:hasUnit unit:PERCENT ],
        [ a s223:QuantifiableProperty ;
            rdfs:label "Glycol concentration"^^xsd:string ;
            s223:hasValue 30.0 ;
            s223:ofConstituent s223:Constituent-Glycol ;
            qudt:hasQuantityKind quantitykind:VolumeFraction ;
            qudt:hasUnit unit:PERCENT ] ;
    s223:hasFreezingPoint [ a s223:QuantifiableProperty ;
            rdfs:label "Freezing point"^^xsd:string ;
            qudt:hasQuantityKind quantitykind:Temperature ] ;
    rdfs:comment "`GlycolSolution-30Percent`"^^xsd:string ;
    rdfs:subClassOf s223:Water-GlycolSolution .

s223:HydronicHeatExchanger a s223:Class,
        sh:NodeShape ;
    rdfs:label "Hydronic heat exchanger"^^xsd:string ;
    rdfs:comment "A piece of equipment that transfers heat from one liquid stream to another while keeping the two media separate."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `HydronicHeatExchanger` shall have at least two liquid inlets, each paired with an outlet."^^xsd:string ;
            sh:message "s223: A `HydronicHeatExchanger` shall have at least two liquid inlets, each paired with an outlet."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Mix-Fluid ;
                                    sh:path s223:hasMedium ],
                                [ sh:class s223:OutletConnectionPoint ;
                                    sh:minCount 1 ;
                                    sh:path s223:pairedConnectionPoint ] ] ] ],
        [ rdfs:comment "A `HydronicHeatExchanger` shall have at least two liquid outlets, each paired with an inlet."^^xsd:string ;
            sh:message "s223: A `HydronicHeatExchanger` shall have at least two liquid outlets, each paired with an inlet."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:InletConnectionPoint ;
                                    sh:minCount 1 ;
                                    sh:path s223:pairedConnectionPoint ],
                                [ sh:class s223:Mix-Fluid ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `HydronicHeatExchanger` shall have no `BidirectionalConnectionPoint`s."^^xsd:string ;
            sh:message "s223: A `HydronicHeatExchanger` shall have no `BidirectionalConnectionPoint`s."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMaxCount 0 ;
            sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ;
                    sh:message "s223: A `HydronicHeatExchanger` shall have no `BidirectionalConnectionPoint`s."^^xsd:string ] ],
        [ rdfs:comment "A `HydronicHeatExchanger` shall have no `ConnectionPoint`s using the medium `Fluid-Air`."^^xsd:string ;
            sh:class s223:ConnectionPoint ;
            sh:message "s223: A `HydronicHeatExchanger` shall have no `ConnectionPoint`s using the medium `Fluid-Air`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMaxCount 0 ;
            sh:qualifiedValueShape [ sh:property [ sh:class s223:Fluid-Air ;
                            sh:path s223:hasMedium ] ] ] .

s223:Light-Ultraviolet a s223:Class,
        s223:Light-Ultraviolet,
        sh:NodeShape ;
    rdfs:label "Ultraviolet light"^^xsd:string ;
    rdfs:comment "`Light-Ultraviolet`"^^xsd:string ;
    rdfs:subClassOf s223:EM-Light .

s223:Light-Visible a s223:Class,
        s223:Light-Visible,
        sh:NodeShape ;
    rdfs:label "Visible light"^^xsd:string ;
    rdfs:comment "`Light-Visible`"^^xsd:string ;
    rdfs:subClassOf s223:EM-Light .

s223:Liquid-SubCooled a s223:Class,
        s223:Liquid-SubCooled,
        sh:NodeShape ;
    rdfs:label "Subcooled liquid"^^xsd:string ;
    rdfs:comment "Liquid-SubCooled"^^xsd:string ;
    rdfs:subClassOf s223:ThermodynamicPhase-Liquid .

s223:Logical-False a s223:Class,
        s223:Logical-False,
        sh:NodeShape ;
    rdfs:label "Logical false"^^xsd:string ;
    rdfs:comment "Logical-False"^^xsd:string ;
    rdfs:subClassOf s223:Binary-Logical .

s223:Logical-True a s223:Class,
        s223:Logical-True,
        sh:NodeShape ;
    rdfs:label "Logical true"^^xsd:string ;
    rdfs:comment "Logical-True"^^xsd:string ;
    rdfs:subClassOf s223:Binary-Logical .

s223:Modulated-0-10V a s223:Class,
        s223:Modulated-0-10V,
        sh:NodeShape ;
    rdfs:label "Modulated 0-10V"^^xsd:string ;
    rdfs:comment "Modulated-0-10V"^^xsd:string ;
    rdfs:subClassOf s223:Signal-Modulated .

s223:Modulated-4-20mA a s223:Class,
        s223:Modulated-4-20mA,
        sh:NodeShape ;
    rdfs:label "Modulated 4-20mA"^^xsd:string ;
    rdfs:comment "Modulated-4-20mA"^^xsd:string ;
    rdfs:subClassOf s223:Signal-Modulated .

s223:Motion-False a s223:Class,
        s223:Motion-False,
        sh:NodeShape ;
    rdfs:label "Motion-False"^^xsd:string ;
    rdfs:comment "`Motion-False`"^^xsd:string ;
    rdfs:subClassOf s223:Occupancy-Motion .

s223:Motion-True a s223:Class,
        s223:Motion-True,
        sh:NodeShape ;
    rdfs:label "Motion-True"^^xsd:string ;
    rdfs:comment "`Motion-True`"^^xsd:string ;
    rdfs:subClassOf s223:Occupancy-Motion .

s223:NOX-NO a s223:Class,
        s223:NOX-NO,
        sh:NodeShape ;
    rdfs:label "Nitric oxide (NO)"^^xsd:string ;
    rdfs:comment "`NOX-NO`"^^xsd:string ;
    rdfs:subClassOf s223:Constituent-NOX .

s223:NOX-NO2 a s223:Class,
        s223:NOX-NO2,
        sh:NodeShape ;
    rdfs:label "Nitrogen dioxide (NO2)"^^xsd:string ;
    rdfs:comment "`NOX-NO2`"^^xsd:string ;
    rdfs:subClassOf s223:Constituent-NOX .

s223:Occupancy-Occupied a s223:Class,
        s223:Occupancy-Occupied,
        sh:NodeShape ;
    rdfs:label "Occupied"^^xsd:string ;
    rdfs:comment "Occupancy-Occupied"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Occupancy .

s223:Occupancy-Unoccupied a s223:Class,
        s223:Occupancy-Unoccupied,
        sh:NodeShape ;
    rdfs:label "Unoccupied"^^xsd:string ;
    rdfs:comment "Occupancy-Unoccupied"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Occupancy .

s223:OnOff-Off a s223:Class,
        s223:OnOff-Off,
        sh:NodeShape ;
    rdfs:label "Off"^^xsd:string ;
    rdfs:comment "OnOff-Off"^^xsd:string ;
    rdfs:subClassOf s223:Binary-OnOff .

s223:OnOff-On a s223:Class,
        s223:OnOff-On,
        sh:NodeShape ;
    rdfs:label "On"^^xsd:string ;
    rdfs:comment "OnOff-On"^^xsd:string ;
    rdfs:subClassOf s223:Binary-OnOff .

s223:Particulate-PM1.0 a s223:Class,
        s223:Particulate-PM1.0,
        sh:NodeShape ;
    rdfs:label "PM1.0"^^xsd:string ;
    rdfs:comment "Particulate-PM1.0"^^xsd:string ;
    rdfs:subClassOf s223:Substance-Particulate .

s223:Particulate-PM10.0 a s223:Class,
        s223:Particulate-PM10.0,
        sh:NodeShape ;
    rdfs:label "PM10.0"^^xsd:string ;
    rdfs:comment "Particulate-PM10.0"^^xsd:string ;
    rdfs:subClassOf s223:Substance-Particulate .

s223:Particulate-PM2.5 a s223:Class,
        s223:Particulate-PM2.5,
        sh:NodeShape ;
    rdfs:label "PM2.5"^^xsd:string ;
    rdfs:comment "Particulate-PM2.5"^^xsd:string ;
    rdfs:subClassOf s223:Substance-Particulate .

s223:PoE-802.3af-1 a s223:Class,
        s223:PoE-802.3af-1,
        sh:NodeShape ;
    rdfs:label "PoE-802.3af-1"^^xsd:string ;
    s223:hasVoltage s223:DCPositiveVoltage-PoE ;
    rdfs:comment "PoE-802.3af-1"^^xsd:string ;
    rdfs:subClassOf s223:DC-PoE .

s223:PoE-802.3at-2 a s223:Class,
        s223:PoE-802.3at-2,
        sh:NodeShape ;
    rdfs:label "PoE-802.3at-2"^^xsd:string ;
    s223:hasVoltage s223:DCPositiveVoltage-PoE ;
    rdfs:comment "PoE-802.3at-2"^^xsd:string ;
    rdfs:subClassOf s223:DC-PoE .

s223:PoE-802.3bt-3 a s223:Class,
        s223:PoE-802.3bt-3,
        sh:NodeShape ;
    rdfs:label "PoE-802.3bt-3"^^xsd:string ;
    s223:hasVoltage s223:DCPositiveVoltage-PoE ;
    rdfs:comment "PoE-802.3bt-3"^^xsd:string ;
    rdfs:subClassOf s223:DC-PoE .

s223:PoE-802.3bt-4 a s223:Class,
        s223:PoE-802.3bt-4,
        sh:NodeShape ;
    rdfs:label "PoE-802.3bt-4"^^xsd:string ;
    s223:hasVoltage s223:DCPositiveVoltage-PoE ;
    rdfs:comment "PoE-802.3bt-4"^^xsd:string ;
    rdfs:subClassOf s223:DC-PoE .

s223:Position-Closed a s223:Class,
        s223:Position-Closed,
        sh:NodeShape ;
    rdfs:label "Closed"^^xsd:string ;
    rdfs:comment "Position-Closed"^^xsd:string ;
    rdfs:subClassOf s223:Binary-Position .

s223:Position-Open a s223:Class,
        s223:Position-Open,
        sh:NodeShape ;
    rdfs:label "Open"^^xsd:string ;
    rdfs:comment "Position-Open"^^xsd:string ;
    rdfs:subClassOf s223:Binary-Position .

s223:Presence-False a s223:Class,
        s223:Presence-False,
        sh:NodeShape ;
    rdfs:label "Presence not detected"^^xsd:string ;
    rdfs:comment "`Presence-False`"^^xsd:string ;
    rdfs:subClassOf s223:Occupancy-Presence .

s223:Presence-True a s223:Class,
        s223:Presence-True,
        sh:NodeShape ;
    rdfs:label "Presence detected"^^xsd:string ;
    rdfs:comment "`Presence-True`"^^xsd:string ;
    rdfs:subClassOf s223:Occupancy-Presence .

s223:PressureSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Pressure sensor"^^xsd:string ;
    rdfs:comment "A `Sensor` that `observes` a `QuantifiableObservableProperty` that represents a measure of pressure."^^xsd:string ;
    rdfs:subClassOf s223:Sensor ;
    sh:property [ rdfs:comment "A `PressureSensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of Pressure."^^xsd:string ;
            sh:message "s223: A `PressureSensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of Pressure."^^xsd:string ;
            sh:path ( s223:observes qudt:hasQuantityKind ) ;
            sh:value quantitykind:Pressure ] .

s223:RadiantHeater a s223:Class,
        sh:NodeShape ;
    rdfs:label "Radiant heater"^^xsd:string ;
    rdfs:comment """
A piece of `Equipment` with heating or cooling surface that delivers 50% or more of its heat transfer by radiation.
A `RadiantHeater` shall:

- Have the role `Role-Heating`.

- Have at least one outlet connection point using the medium `Light-Infrared`.

- Conform to exactly one of the following patterns:
  - **Pattern 1:**
    - Exactly one inlet connection point using the medium `Constituent-Electricity` or `Fluid-NaturalGas`.
  - **Pattern 2:**
    - Exactly one inlet connection point using the medium `Fluid-Water`.
    - Exactly one outlet connection point using the medium Fluid-Water.
"""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `RadiantHeater` shall have at least one outlet connection point using the medium `Light-Infrared`."^^xsd:string ;
            sh:message "s223: A `RadiantHeater` shall have at least one outlet connection point using the medium `Light-Infrared`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Light-Infrared ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A radiant heater shall have the role `Role-Heating`."^^xsd:string ;
            sh:message "s223: A radiant heater shall have the role `Role-Heating`."^^xsd:string ;
            sh:path s223:hasRole ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Role-Heating ] ] ;
    sh:xone ( [ sh:property [ rdfs:comment "Pattern 1: A radiant heater shall have at least one inlet using the medium `Constituent-Electricity` or `Fluid-NaturalGas`."^^xsd:string ;
                        sh:message "s223: Pattern 1: A radiant heater shall have at least one inlet using the medium `Constituent-Electricity` or `Fluid-NaturalGas`."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                                sh:node [ sh:property [ sh:or ( [ sh:class s223:Constituent-Electricity ] [ sh:class s223:Fluid-NaturalGas ] ) ;
                                                sh:path s223:hasMedium ] ] ] ] ] [ sh:property [ rdfs:comment "Pattern 2: A radiant heater shall have an inlet using the medium `Fluid-Water`."^^xsd:string ;
                        sh:message "s223: Pattern 2: A radiant heater shall have an inlet using the medium `Fluid-Water`."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                                sh:path s223:hasMedium ] ] ] ],
                    [ rdfs:comment "Pattern 2: A radiant heater shall have an outlet using the medium `Fluid-Water`."^^xsd:string ;
                        sh:message "s223: Pattern 2: A radiant heater shall have an outlet using the medium `Fluid-Water`."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                                sh:path s223:hasMedium ] ] ] ] ] ) .

s223:Refrigerant-R-123 a s223:Class,
        s223:Refrigerant-R-123,
        sh:NodeShape ;
    rdfs:label "Refrigerant R-123"^^xsd:string ;
    rdfs:comment "`Refrigerant-R-123`"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Refrigerant .

s223:Refrigerant-R-134A a s223:Class,
        s223:Refrigerant-R-134A,
        sh:NodeShape ;
    rdfs:label "Refrigerant R-134A"^^xsd:string ;
    rdfs:comment "`Refrigerant-R-134A`"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Refrigerant .

s223:Refrigerant-R-22 a s223:Class,
        s223:Refrigerant-R-22,
        sh:NodeShape ;
    rdfs:label "Refrigerant R-22"^^xsd:string ;
    rdfs:comment "`Refrigerant-R-22`"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Refrigerant .

s223:Refrigerant-R-290 a s223:Class,
        s223:Refrigerant-R-290,
        sh:NodeShape ;
    rdfs:label "Refrigerant R-290"^^xsd:string ;
    rdfs:comment "`Refrigerant-R-290`"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Refrigerant .

s223:Refrigerant-R-404A a s223:Class,
        s223:Refrigerant-R-404A,
        sh:NodeShape ;
    rdfs:label "Refrigerant R-404A"^^xsd:string ;
    rdfs:comment "`Refrigerant-R-404A`"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Refrigerant .

s223:Refrigerant-R-407C a s223:Class,
        s223:Refrigerant-R-407C,
        sh:NodeShape ;
    rdfs:label "Refrigerant R-407C"^^xsd:string ;
    rdfs:comment "`Refrigerant-R-407C`"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Refrigerant .

s223:Refrigerant-R-410A a s223:Class,
        s223:Refrigerant-R-410A,
        sh:NodeShape ;
    rdfs:label "Refrigerant R-410A"^^xsd:string ;
    rdfs:comment "`Refrigerant-R-410A`"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Refrigerant .

s223:Refrigerant-R-600A a s223:Class,
        s223:Refrigerant-R-600A,
        sh:NodeShape ;
    rdfs:label "Refrigerant R-600A"^^xsd:string ;
    rdfs:comment "`Refrigerant-R-600A`"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Refrigerant .

s223:Refrigerant-R-717 a s223:Class,
        s223:Refrigerant-R-717,
        sh:NodeShape ;
    rdfs:label "Refrigerant R-717"^^xsd:string ;
    rdfs:comment "`Refrigerant-R-717`"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Refrigerant .

s223:Refrigerant-R-744 a s223:Class,
        s223:Refrigerant-R-744,
        sh:NodeShape ;
    rdfs:label "Refrigerant R-744"^^xsd:string ;
    rdfs:comment "`Refrigerant-R-744`"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Refrigerant .

s223:Role-Condenser a s223:Class,
        s223:Role-Condenser,
        sh:NodeShape ;
    rdfs:label "Condenser role"^^xsd:string ;
    rdfs:comment "`Role-Condenser`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Dehumidifying a s223:Class,
        s223:Role-Dehumidifying,
        sh:NodeShape ;
    rdfs:label "Dehumidifying role"^^xsd:string ;
    rdfs:comment "`Role-Dehumidifying`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Discharge a s223:Class,
        s223:Role-Discharge,
        sh:NodeShape ;
    rdfs:label "Discharge role"^^xsd:string ;
    rdfs:comment "`Role-Discharge`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Economizer a s223:Class,
        s223:Role-Economizer,
        sh:NodeShape ;
    rdfs:label "Economizer role"^^xsd:string ;
    rdfs:comment "`Role-Economizer`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Evaporator a s223:Class,
        s223:Role-Evaporator,
        sh:NodeShape ;
    rdfs:label "Evaporator role"^^xsd:string ;
    rdfs:comment "`Role-Evaporator`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Exhaust a s223:Class,
        s223:Role-Exhaust,
        sh:NodeShape ;
    rdfs:label "Exhaust role"^^xsd:string ;
    rdfs:comment "`Role-Exhaust`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Expansion a s223:Class,
        s223:Role-Expansion,
        sh:NodeShape ;
    rdfs:label "Expansion role"^^xsd:string ;
    rdfs:comment "`Role-Expansion`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Generator a s223:Class,
        s223:Role-Generator,
        sh:NodeShape ;
    rdfs:label "Generator role"^^xsd:string ;
    rdfs:comment "`Role-Generator`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-HeatRecovery a s223:Class,
        s223:Role-HeatRecovery,
        sh:NodeShape ;
    rdfs:label "Heat recovery role"^^xsd:string ;
    rdfs:comment "Role-HeatRecovery"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Load a s223:Class,
        s223:Role-Load,
        sh:NodeShape ;
    rdfs:label "Load role"^^xsd:string ;
    rdfs:comment "`Role-Load`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-OutdoorAirIntake a s223:Class,
        s223:Role-OutdoorAirIntake,
        sh:NodeShape ;
    rdfs:label "Outdoor air intake role"^^xsd:string ;
    rdfs:comment "`Role-OutdoorAirIntake`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role ;
    sh:property [ rdfs:comment "`Role-OutdoorAirIntake` should only be associated with a `Connectable` directly connecting to Outdoor Air."^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:severity sh:Warning ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Ensure that `Role-OutdoorAirIntake` is associated with a `Connectable` directly connecting to Outdoor Air."^^xsd:string ;
                    sh:message "s223: {?this} is associated with {$entity}, which does not directly connect to outdoor air."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?entity
WHERE {
?entity (s223:hasRole | (s223:hasProperty/s223:hasAspect)) $this .
?outdoorSpace a/rdfs:subClassOf* s223:OutdoorPhysicalSpace .
?outdoorSpace s223:encloses ?outdoorAir  .
?outdoorAir s223:hasDomain s223:Domain-HVAC .
FILTER NOT EXISTS {?entity s223:connectedFrom ?outdoorAir} .
}
"""^^xsd:string ] ] .

s223:Role-Primary a s223:Class,
        s223:Role-Primary,
        sh:NodeShape ;
    rdfs:label "Primary role"^^xsd:string ;
    rdfs:comment "`Role-Primary`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Recirculating a s223:Class,
        s223:Role-Recirculating,
        sh:NodeShape ;
    rdfs:label "Recirculating role"^^xsd:string ;
    rdfs:comment "`Role-Recirculating`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Relief a s223:Class,
        s223:Role-Relief,
        sh:NodeShape ;
    rdfs:label "Relief role"^^xsd:string ;
    rdfs:comment "`Role-Relief`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Return a s223:Class,
        s223:Role-Return,
        sh:NodeShape ;
    rdfs:label "Return role"^^xsd:string ;
    rdfs:comment "`Role-Return`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Secondary a s223:Class,
        s223:Role-Secondary,
        sh:NodeShape ;
    rdfs:label "Secondary role"^^xsd:string ;
    rdfs:comment "`Role-Secondary`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Supply a s223:Class,
        s223:Role-Supply,
        sh:NodeShape ;
    rdfs:label "Supply role"^^xsd:string ;
    rdfs:comment "`Role-Supply`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Role-Ventilating a s223:Class,
        s223:Role-Ventilating,
        sh:NodeShape ;
    rdfs:label "Ventilating role"^^xsd:string ;
    rdfs:comment "`Role-Ventilating`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:Signal-EIA485 a s223:Class,
        s223:Signal-EIA485,
        sh:NodeShape ;
    rdfs:label "EIA485"^^xsd:string ;
    rdfs:comment "Signal EIA485"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-Signal .

s223:Signal-IEC14908 a s223:Class,
        s223:Signal-IEC14908,
        sh:NodeShape ;
    rdfs:label "IEC14908"^^xsd:string ;
    rdfs:comment "Signal IEC14908"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-Signal .

s223:Substance-Soot a s223:Class,
        s223:Substance-Soot,
        sh:NodeShape ;
    rdfs:label "Soot"^^xsd:string ;
    rdfs:comment "Carbon particles resulting from the incomplete combustion of hydrocarbons. Soot is considered a hazardous substance with carcinogenic properties."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Substance .

s223:ThermodynamicPhase-Solid a s223:Class,
        s223:ThermodynamicPhase-Solid,
        sh:NodeShape ;
    rdfs:label "Solid phase"^^xsd:string ;
    rdfs:comment "`ThermodynamicPhase-Solid`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ThermodynamicPhase .

s223:ThermodynamicPhase-Vapor a s223:Class,
        s223:ThermodynamicPhase-Vapor,
        sh:NodeShape ;
    rdfs:label "Vapor phase"^^xsd:string ;
    rdfs:comment "`ThermodynamicPhase-Vapor`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ThermodynamicPhase .

s223:VoltageSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Voltage Sensor"^^xsd:string ;
    rdfs:comment "A `Sensor` that `observes` a `QuantifiableObservableProperty` that represents a measure of voltage."^^xsd:string ;
    rdfs:subClassOf s223:Sensor ;
    sh:property [ rdfs:comment "A `VoltageSensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of Voltage."^^xsd:string ;
            sh:message "s223: A `VoltageSensor` shall always `observe` a `QuantifiableObservableProperty` that has a `QuantityKind` of Voltage."^^xsd:string ;
            sh:path ( s223:observes qudt:hasQuantityKind ) ;
            sh:value quantitykind:Voltage ] .

s223:Water-ChilledWater a s223:Class,
        s223:Water-ChilledWater,
        sh:NodeShape ;
    rdfs:label "Chilled water"^^xsd:string ;
    s223:composedOf [ a s223:QuantifiableProperty ;
            rdfs:label "Water concentration"^^xsd:string ;
            s223:ofConstituent s223:Constituent-H2O ;
            qudt:hasQuantityKind quantitykind:VolumeFraction ;
            qudt:hasUnit unit:PERCENT ] ;
    rdfs:comment "Water-Chilled water"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Water .

s223:Water-HotWater a s223:Class,
        s223:Water-HotWater,
        sh:NodeShape ;
    rdfs:label "Hot water"^^xsd:string ;
    s223:composedOf [ a s223:QuantifiableProperty ;
            rdfs:label "Water concentration"^^xsd:string ;
            s223:ofConstituent s223:Constituent-H2O ;
            qudt:hasQuantityKind quantitykind:VolumeFraction ;
            qudt:hasUnit unit:PERCENT ] ;
    rdfs:comment "Water-Hot water"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Water .

s223:Water-Steam a s223:Class,
        s223:Water-Steam,
        sh:NodeShape ;
    rdfs:label "Steam"^^xsd:string ;
    s223:composedOf [ a s223:QuantifiableProperty ;
            rdfs:label "Water concentration"^^xsd:string ;
            s223:ofConstituent s223:Constituent-H2O ;
            qudt:hasQuantityKind quantitykind:VolumeFraction ;
            qudt:hasUnit unit:PERCENT ] ;
    rdfs:comment "Water-Steam"^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Water .

s223:Weekday-Friday a s223:Class,
        s223:Weekday-Friday,
        sh:NodeShape ;
    rdfs:label "Friday"^^xsd:string ;
    rdfs:comment "Weekday-Friday"^^xsd:string ;
    rdfs:subClassOf s223:DayOfWeek-Weekday .

s223:Weekday-Monday a s223:Class,
        s223:Weekday-Monday,
        sh:NodeShape ;
    rdfs:label "Monday"^^xsd:string ;
    rdfs:comment "Weekday-Monday"^^xsd:string ;
    rdfs:subClassOf s223:DayOfWeek-Weekday .

s223:Weekday-Thursday a s223:Class,
        s223:Weekday-Thursday,
        sh:NodeShape ;
    rdfs:label "Thursday"^^xsd:string ;
    rdfs:comment "Weekday-Thursday"^^xsd:string ;
    rdfs:subClassOf s223:DayOfWeek-Weekday .

s223:Weekday-Tuesday a s223:Class,
        s223:Weekday-Tuesday,
        sh:NodeShape ;
    rdfs:label "Tuesday"^^xsd:string ;
    rdfs:comment "Weekday-Tuesday"^^xsd:string ;
    rdfs:subClassOf s223:DayOfWeek-Weekday .

s223:Weekday-Wednesday a s223:Class,
        s223:Weekday-Wednesday,
        sh:NodeShape ;
    rdfs:label "Wednesday"^^xsd:string ;
    rdfs:comment "Weekday-Wednesday"^^xsd:string ;
    rdfs:subClassOf s223:DayOfWeek-Weekday .

s223:Weekend-Saturday a s223:Class,
        s223:Weekend-Saturday,
        sh:NodeShape ;
    rdfs:label "Saturday"^^xsd:string ;
    rdfs:comment "Weekend-Saturday"^^xsd:string ;
    rdfs:subClassOf s223:DayOfWeek-Weekend .

s223:Weekend-Sunday a s223:Class,
        s223:Weekend-Sunday,
        sh:NodeShape ;
    rdfs:label "Sunday"^^xsd:string ;
    rdfs:comment "Weekend-Sunday"^^xsd:string ;
    rdfs:subClassOf s223:DayOfWeek-Weekend .

s223:Window a s223:Class,
        sh:NodeShape ;
    rdfs:label "Window"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that provides a pathway for `EM-Light` or `Fluid-Air` (or both) to flow from a room to another room or the building exterior through a vertical or nearly vertical area of the room envelope."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Window` shall have at least one outlet using the medium `EM-Light` or `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `Window` shall have at least one outlet using the medium `EM-Light` or `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:or ( [ sh:property [ sh:class s223:EM-Light ;
                                                sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Air ;
                                                sh:path s223:hasMedium ] ] ) ;
                            sh:severity sh:Warning ] ] ],
        [ rdfs:comment "A `Window` shall have at least one inlet using the medium `EM-Light` or `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `Window` shall have at least one inlet using the medium `EM-Light` or `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:or ( [ sh:property [ sh:class s223:EM-Light ;
                                                sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Air ;
                                                sh:path s223:hasMedium ] ] ) ;
                            sh:severity sh:Warning ] ] ] .

s223:WiredEthernet-Cat1 a s223:Class,
        s223:WiredEthernet-Cat1,
        sh:NodeShape ;
    rdfs:label "Wired Ethernet Cat1"^^xsd:string ;
    rdfs:comment "WiredEthernet-Cat1"^^xsd:string ;
    rdfs:subClassOf s223:Signal-WiredEthernet .

s223:WiredEthernet-Cat2 a s223:Class,
        s223:WiredEthernet-Cat2,
        sh:NodeShape ;
    rdfs:label "Wired Ethernet Cat2"^^xsd:string ;
    rdfs:comment "WiredEthernet-Cat2"^^xsd:string ;
    rdfs:subClassOf s223:Signal-WiredEthernet .

s223:WiredEthernet-Cat3 a s223:Class,
        s223:WiredEthernet-Cat3,
        sh:NodeShape ;
    rdfs:label "Wired Ethernet Cat3"^^xsd:string ;
    rdfs:comment "WiredEthernet-Cat3"^^xsd:string ;
    rdfs:subClassOf s223:Signal-WiredEthernet .

s223:WiredEthernet-Cat4 a s223:Class,
        s223:WiredEthernet-Cat4,
        sh:NodeShape ;
    rdfs:label "Wired Ethernet Cat4"^^xsd:string ;
    rdfs:comment "WiredEthernet-Cat4"^^xsd:string ;
    rdfs:subClassOf s223:Signal-WiredEthernet .

s223:WiredEthernet-Cat5 a s223:Class,
        s223:WiredEthernet-Cat5,
        sh:NodeShape ;
    rdfs:label "Wired Ethernet Cat5"^^xsd:string ;
    rdfs:comment "WiredEthernet-Cat5"^^xsd:string ;
    rdfs:subClassOf s223:Signal-WiredEthernet .

s223:WiredEthernet-Cat5e a s223:Class,
        s223:WiredEthernet-Cat5e,
        sh:NodeShape ;
    rdfs:label "Wired Ethernet Cat5e"^^xsd:string ;
    rdfs:comment "WiredEthernet-Cat5e"^^xsd:string ;
    rdfs:subClassOf s223:Signal-WiredEthernet .

s223:WiredEthernet-Cat6 a s223:Class,
        s223:WiredEthernet-Cat6,
        sh:NodeShape ;
    rdfs:label "Wired Ethernet Cat6"^^xsd:string ;
    rdfs:comment "WiredEthernet-Cat6"^^xsd:string ;
    rdfs:subClassOf s223:Signal-WiredEthernet .

s223:WiredEthernet-Cat6a a s223:Class,
        s223:WiredEthernet-Cat6a,
        sh:NodeShape ;
    rdfs:label "Wired Ethernet Cat6a"^^xsd:string ;
    rdfs:comment "WiredEthernet-Cat6a"^^xsd:string ;
    rdfs:subClassOf s223:Signal-WiredEthernet .

s223:WiredEthernet-Cat7 a s223:Class,
        s223:WiredEthernet-Cat7,
        sh:NodeShape ;
    rdfs:label "Wired Ethernet Cat7"^^xsd:string ;
    rdfs:comment "WiredEthernet-Cat7"^^xsd:string ;
    rdfs:subClassOf s223:Signal-WiredEthernet .

s223:WiredEthernet-Cat7a a s223:Class,
        s223:WiredEthernet-Cat7a,
        sh:NodeShape ;
    rdfs:label "Wired Ethernet Cat7a"^^xsd:string ;
    rdfs:comment "WiredEthernet-Cat7a"^^xsd:string ;
    rdfs:subClassOf s223:Signal-WiredEthernet .

s223:WiredEthernet-Cat8 a s223:Class,
        s223:WiredEthernet-Cat8,
        sh:NodeShape ;
    rdfs:label "Wired Ethernet Cat8"^^xsd:string ;
    rdfs:comment "WiredEthernet-Cat8"^^xsd:string ;
    rdfs:subClassOf s223:Signal-WiredEthernet .

s223:actuates a s223:Relation,
        rdf:Property ;
    rdfs:label "actuates"^^xsd:string ;
    rdfs:comment "A `Relation` that associates an `Actuator` with the `Equipment` that it actuates."^^xsd:string .

s223:connected a s223:SymmetricRelation,
        rdf:Property ;
    rdfs:label "connected"^^xsd:string ;
    rdfs:comment "The relation `connected` indicates that two connectable things are `connected` without regard to the direction of flow."^^xsd:string .

s223:connectedThrough a s223:Relation,
        rdf:Property ;
    rdfs:label "connected through"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Connectable` thing with a `Connection`, without regard to the direction of flow. It is used to discover what connection links two connectable things."^^xsd:string .

s223:connectsFrom a s223:Relation,
        rdf:Property ;
    rdfs:label "connects from"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Connectable` thing with a `Connection`, with an implied direction of flow. B `connectsFrom` A indicates a flow from A to B."^^xsd:string .

s223:connectsTo a s223:Relation,
        rdf:Property ;
    rdfs:label "connects to"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Connection` with a `Connectable` thing, with an implied direction of flow. A `connectsTo` B indicates a flow from A to B."^^xsd:string .

s223:hasAlarmStatus a s223:Relation,
        rdf:Property ;
    rdfs:label "hasAlarmStatus"^^xsd:string ;
    rdfs:comment "A `Relation` that associates an `EnumerableProperty` that describes an Alarm or Status with a `QuantifiableProperty`."^^xsd:string .

s223:hasBoundaryConnectionPoint a s223:Relation,
        rdf:Property ;
    rdfs:label "has Boundary Connection Point"^^xsd:string ;
    rdfs:comment "The `hasBoundaryConnectionPoint` relation means the `ConnectionPoint` represents the boundary of a `System` (see {s223:System}) defined by the modeler, such as a model fragment provided by the vendor of a collection of equipment intended for integration with another model. The presence of this relation is used to indicate that such a \"dangling connection point\" should not generate a validation error in a non-integrated context but should generate an error in an integrated context."^^xsd:string .

s223:hasDeadband a s223:Relation,
        rdf:Property ;
    rdfs:label "has deadband"^^xsd:string ;
    rdfs:comment "This relation binds a control setpoint to the `QuantifiableProperty` indicating the range of values within which a sensed variable can vary without indicating a condition has changed."^^xsd:string .

s223:hasDomainSpace a s223:Relation,
        rdf:Property ;
    rdfs:label "has domain space"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Zone` with its component `DomainSpace`s."^^xsd:string .

s223:hasExternalReference a s223:Relation,
        rdf:Property ;
    rdfs:label "has external reference"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Property` with an external telemetry source."^^xsd:string .

s223:hasFreezingPoint a s223:Relation,
        rdf:Property ;
    rdfs:label "has freezing point"^^xsd:string ;
    rdfs:comment "The relation `hasFreezingPoint` is used to associate a freezing point with a glycol solution, but could be used with other Mediums as appropriate. "^^xsd:string .

s223:hasFrequency a s223:Relation,
        rdf:Property ;
    rdfs:label "has frequency"^^xsd:string ;
    rdfs:comment "A `Relation` that associates an AC electricity `Substance-Medium` with its electrical frequency."^^xsd:string .

s223:hasMeasurementResolution a s223:Relation,
        rdf:Property ;
    rdfs:label "has measurement resolution"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Sensor` with the `QuantifiableProperty` whose value indicates the smallest recognizable change in engineering units that the `Sensor` is able to measure. "^^xsd:string .

s223:hasMember a s223:Relation,
        rdf:Property ;
    rdfs:label "has member"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `System` with its component `Equipment` and/or `System`s."^^xsd:string .

s223:hasNumberOfElectricalPhases a s223:Relation,
        rdf:Property ;
    rdfs:label "has number of electrical phases"^^xsd:string ;
    rdfs:comment "A `Relation` that associates an AC electricity `Substance-Medium` with its number of electrical phases. "^^xsd:string .

s223:hasOptionalConnectionPoint a s223:Relation,
        rdf:Property ;
    rdfs:label "has Optional Connection Point"^^xsd:string ;
    rdfs:comment "The `hasOptionalConnectionPoint` relation means that the `ConnectionPoint` is optional and is not required to be connected. The presence of this relation is used to indicate that such a \"dangling connection point\" should not generate a validation error in an integrated or non-integrated context."^^xsd:string .

s223:hasPhysicalLocation a s223:Relation,
        rdf:Property ;
    rdfs:label "has Physical Location"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a piece of `Equipment` with its physical location (i.e., in a `PhysicalSpace`). The physical location of a piece of `Equipment` is not necessarily the same as the location affected by the operation of the `Equipment`. For example, an air handler may physically be located on the roof, but its effect is to provide conditioned air to a `Zone` or `DomainSpace` within the building. By following the path of connections, it can be determined what other equipment or spaces are possibly impacted by the `Equipment`."^^xsd:string .

s223:hasThermodynamicPhase a s223:Relation,
        rdf:Property ;
    rdfs:label "has thermodynamic phase"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a Medium with its thermodynamic phases."^^xsd:string .

s223:hasThreshold a s223:Relation,
        rdf:Property ;
    rdfs:label "has threshold"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a threshold with the `QuantifiableProperty` indicating a specific value at which an action may be taken, distinguished from an offset or a range."^^xsd:string .

s223:hasZone a s223:Relation,
        rdf:Property ;
    rdfs:label "has zone"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `ZoneGroup` with its component `Zone`s."^^xsd:string .

s223:inverseOf a s223:Relation,
        rdf:Property ;
    rdfs:label "inverse of"^^xsd:string ;
    rdfs:comment "A `Relation` that associates `Relation`s that are inverses of one another, such as `connectedTo` and `connectedFrom`."^^xsd:string .

s223:ofMedium a s223:Relation,
        rdf:Property ;
    rdfs:label "of medium"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Property` with the specific Medium it describes. A `Property` corresponding to the temperature of a medium would be associated with this medium using the relation `ofMedium`."^^xsd:string .

g36:ChilledWaterValveOrShape1 a sh:NodeShape ;
    rdfs:label "Chilled Water Valve Or Shape 1"^^xsd:string ;
    rdfs:comment "A ChilledWaterValve shall have at least one analog valve command property or at least two binary valve command properties using the relation hasProperty."^^xsd:string ;
    sh:message "g36: A ChilledWaterValve shall have at least one analog valve command property or at least two binary valve command properties using the relation hasProperty."^^xsd:string ;
    sh:or ( [ sh:property [ rdfs:comment "A ChilledWaterValve shall have at least one analog valve command property or at least two binary valve command properties using the relation hasProperty."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasProperty ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:QuantifiableActuatableProperty ;
                                sh:node [ sh:property [ sh:hasValue s223:Binary-Position ;
                                                sh:maxCount 1 ;
                                                sh:minCount 1 ;
                                                sh:path s223:hasAspect ],
                                            [ sh:hasValue quantitykind:DimensionlessRatio ;
                                                sh:maxCount 1 ;
                                                sh:minCount 1 ;
                                                sh:path qudt:hasQuantityKind ] ] ] ] ] [ sh:property [ rdfs:comment "A ChilledWaterValve shall have at least one analog valve command property or at least two binary valve command properties using the relation hasProperty."^^xsd:string ;
                        sh:minCount 2 ;
                        sh:path s223:hasProperty ;
                        sh:qualifiedMinCount 2 ;
                        sh:qualifiedValueShape [ sh:class s223:EnumeratedActuatableProperty ;
                                sh:node [ sh:property [ sh:hasValue s223:Binary-Position ;
                                                sh:maxCount 1 ;
                                                sh:minCount 1 ;
                                                sh:path s223:hasAspect ],
                                            [ sh:hasValue s223:EnumerationKind-Binary ;
                                                sh:maxCount 1 ;
                                                sh:minCount 1 ;
                                                sh:path s223:hasEnumerationKind ] ] ] ] ] ) ;
    sh:targetClass g36:ChilledWaterValve .

g36:DamperOrShape1 a sh:NodeShape ;
    rdfs:label "Damper Or Shape 1"^^xsd:string ;
    rdfs:comment "A damper shall have at least one analog damper command property or at least two binary damper command properties using the relation hasProperty."^^xsd:string ;
    sh:message "g36: A damper shall have at least one analog damper command property or at least two binary damper command properties using the relation hasProperty."^^xsd:string ;
    sh:or ( [ sh:property [ rdfs:comment "A damper shall have at least one analog damper command property or at least two binary damper command properties using the relation hasProperty."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasProperty ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:QuantifiableActuatableProperty ;
                                sh:node [ sh:property [ sh:hasValue s223:Binary-Position ;
                                                sh:maxCount 1 ;
                                                sh:minCount 1 ;
                                                sh:path s223:hasAspect ],
                                            [ sh:hasValue quantitykind:DimensionlessRatio ;
                                                sh:maxCount 1 ;
                                                sh:minCount 1 ;
                                                sh:path qudt:hasQuantityKind ] ] ] ] ] [ sh:property [ rdfs:comment "A damper shall have at least one analog damper command property or at least two binary damper command properties using the relation hasProperty."^^xsd:string ;
                        sh:minCount 2 ;
                        sh:path s223:hasProperty ;
                        sh:qualifiedMinCount 2 ;
                        sh:qualifiedValueShape [ sh:class s223:EnumeratedActuatableProperty ;
                                sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Binary ;
                                                sh:maxCount 1 ;
                                                sh:minCount 1 ;
                                                sh:path s223:hasEnumerationKind ],
                                            [ sh:hasValue s223:Binary-Position ;
                                                sh:maxCount 1 ;
                                                sh:minCount 1 ;
                                                sh:path s223:hasAspect ] ] ] ] ] ) ;
    sh:targetClass g36:Damper .

g36:HotWaterValveOrShape1 a sh:NodeShape ;
    rdfs:label "Hot Water Valve Or Shape 1"^^xsd:string ;
    rdfs:comment "A HotWaterValve shall have at least one analog valve command property or at least two binary valve command properties using the relation hasProperty."^^xsd:string ;
    sh:message "g36: A HotWaterValve shall have at least one analog valve command property or at least two binary valve command properties using the relation hasProperty."^^xsd:string ;
    sh:or ( [ sh:property [ rdfs:comment "A HotWaterValve shall have at least one analog valve command property or at least two binary valve command properties using the relation hasProperty."^^xsd:string ;
                        sh:minCount 1 ;
                        sh:path s223:hasProperty ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:QuantifiableActuatableProperty ;
                                sh:node [ sh:property [ sh:hasValue quantitykind:DimensionlessRatio ;
                                                sh:maxCount 1 ;
                                                sh:minCount 1 ;
                                                sh:path qudt:hasQuantityKind ],
                                            [ sh:hasValue s223:Binary-Position ;
                                                sh:maxCount 1 ;
                                                sh:minCount 1 ;
                                                sh:path s223:hasAspect ] ] ] ] ] [ sh:property [ rdfs:comment "A HotWaterValve shall have at least one analog valve command property or at least two binary valve command properties using the relation hasProperty."^^xsd:string ;
                        sh:minCount 2 ;
                        sh:path s223:hasProperty ;
                        sh:qualifiedMinCount 2 ;
                        sh:qualifiedValueShape [ sh:class s223:EnumeratedActuatableProperty ;
                                sh:node [ sh:property [ sh:hasValue s223:Binary-Position ;
                                                sh:maxCount 1 ;
                                                sh:minCount 1 ;
                                                sh:path s223:hasAspect ],
                                            [ sh:hasValue s223:EnumerationKind-Binary ;
                                                sh:maxCount 1 ;
                                                sh:minCount 1 ;
                                                sh:path s223:hasEnumerationKind ] ] ] ] ] ) ;
    sh:targetClass g36:HotWaterValve .

s223:ChilledBeam a s223:Class,
        sh:NodeShape ;
    rdfs:label "Chilled beam"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` with a colder surface temperature where air passes through, and air movement is induced in the room to achieve cooling. Cooling medium is generally water."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `ChilledBeam` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `ChilledBeam` shall have at least one inlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `ChilledBeam` shall be associated with the `Role-Cooling` using the relation `hasRole`"^^xsd:string ;
            sh:message "s223: A `ChilledBeam` shall be associated with the `Role-Cooling` using the relation `hasRole`"^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasRole ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Role-Cooling ] ],
        [ rdfs:comment "A `ChilledBeam` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:message "s223: A `ChilledBeam` shall have at least one outlet using the medium `Fluid-Water`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Water ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `ChilledBeam` shall have at least one bidirectional connection point using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `ChilledBeam` shall have at least one bidirectional connection point using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Computer a s223:Class,
        sh:NodeShape ;
    rdfs:label "Computer"^^xsd:string ;
    rdfs:comment """A piece of `Equipment` that can be programmed to automatically carry out sequences of arithmetic or logical operations (computation).
Modern digital electronic computers can perform generic sets of operations known as programs. These programs enable computers to perform a
wide range of tasks."""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Computer` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `Computer` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Constituent-CO2 a s223:Class,
        s223:Constituent-CO2,
        sh:NodeShape ;
    rdfs:label "Carbon dioxide"^^xsd:string ;
    rdfs:comment "`Constituent-CO2`"^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:DCNegativeVoltage-190.0V a s223:Class,
        s223:DCNegativeVoltage-190.0V,
        sh:NodeShape ;
    rdfs:label "DCNegativeVoltage-190.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-190V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCNegativeVoltage-190.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCNegativeVoltage .

s223:DCNegativeVoltage-2.5V a s223:Class,
        s223:DCNegativeVoltage-2.5V,
        sh:NodeShape ;
    rdfs:label "DCNegativeVoltage-2.5V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-2V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCNegativeVoltage-2.5V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCNegativeVoltage .

s223:DCNegativeVoltage-3.0V a s223:Class,
        s223:DCNegativeVoltage-3.0V,
        sh:NodeShape ;
    rdfs:label "DCNegativeVoltage-3.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-3V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCNegativeVoltage-3.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCNegativeVoltage .

s223:DCNegativeVoltage-380.0V a s223:Class,
        s223:DCNegativeVoltage-380.0V,
        sh:NodeShape ;
    rdfs:label "DCNegativeVoltage-380.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-380V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCNegativeVoltage-380.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCNegativeVoltage .

s223:DCNegativeVoltage-48.0V a s223:Class,
        s223:DCNegativeVoltage-48.0V,
        sh:NodeShape ;
    rdfs:label "DCNegativeVoltage-48.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-48V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCNegativeVoltage-48.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCNegativeVoltage .

s223:DCNegativeVoltage-5.0V a s223:Class,
        s223:DCNegativeVoltage-5.0V,
        sh:NodeShape ;
    rdfs:label "DCNegativeVoltage-5.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-5V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCNegativeVoltage-5.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCNegativeVoltage .

s223:DCPositiveVoltage-190.0V a s223:Class,
        s223:DCPositiveVoltage-190.0V,
        sh:NodeShape ;
    rdfs:label "DCPositiveVoltage-190.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-190V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCPositiveVoltage-190.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCPositiveVoltage .

s223:DCPositiveVoltage-2.5V a s223:Class,
        s223:DCPositiveVoltage-2.5V,
        sh:NodeShape ;
    rdfs:label "DCPositiveVoltage-2.5V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-2V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCPositiveVoltage-2.5V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCPositiveVoltage .

s223:DCPositiveVoltage-3.0V a s223:Class,
        s223:DCPositiveVoltage-3.0V,
        sh:NodeShape ;
    rdfs:label "DCPositiveVoltage-3.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-3V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCPositiveVoltage-3.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCPositiveVoltage .

s223:DCPositiveVoltage-380.0V a s223:Class,
        s223:DCPositiveVoltage-380.0V,
        sh:NodeShape ;
    rdfs:label "DCPositiveVoltage-380.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-380V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCPositiveVoltage-380.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCPositiveVoltage .

s223:DCPositiveVoltage-48.0V a s223:Class,
        s223:DCPositiveVoltage-48.0V,
        sh:NodeShape ;
    rdfs:label "DCPositiveVoltage-48.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-48V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCPositiveVoltage-48.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCPositiveVoltage .

s223:DCPositiveVoltage-5.0V a s223:Class,
        s223:DCPositiveVoltage-5.0V,
        sh:NodeShape ;
    rdfs:label "DCPositiveVoltage-5.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-5V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCPositiveVoltage-5.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCPositiveVoltage .

s223:EM-RF a s223:Class,
        s223:EM-RF,
        sh:NodeShape ;
    rdfs:label "RF"^^xsd:string ;
    rdfs:comment """
This class and its enumerated subclasses represent the use electromagnetic energy in the radio frequency range for multiple purposes, including communication signals.

: EM-RF Enumerations

| Enumeration |
|:-----------|
| `RF-Signal` |
"""^^xsd:string ;
    rdfs:subClassOf s223:Constituent-EM .

s223:ElectronicDisplay a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electronic display"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that receives an input electrical signal and outputs information, typically text and/or graphics, in a visual form."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `ElectronicDisplay` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `ElectronicDisplay` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ;
            sh:qualifiedValueShapesDisjoint true ],
        [ rdfs:comment "A `ElectronicDisplay` shall have at least one inlet using the medium `Electricity-Signal`."^^xsd:string ;
            sh:message "s223: A `ElectronicDisplay` shall have at least one inlet using the medium `Electricity-Signal`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Electricity-Signal ;
                                    sh:path s223:hasMedium ] ] ] ;
            sh:qualifiedValueShapesDisjoint true ] .

s223:ExternalReference a s223:AbstractClass,
        sh:NodeShape ;
    rdfs:label "ExternalReference"^^xsd:string ;
    rdfs:comment "`ExternalReference` is an abstract class that represents a thing that contains API or protocol parameter values necessary to associate a `Property` with a value."^^xsd:string ;
    rdfs:subClassOf s223:Concept .

s223:Fluid-NaturalGas a s223:Class,
        s223:Fluid-NaturalGas,
        sh:NodeShape ;
    rdfs:label "Natural gas"^^xsd:string ;
    rdfs:comment "Fluid-NaturalGas."^^xsd:string ;
    rdfs:subClassOf s223:Mix-Fluid .

s223:Infrared-Signal a s223:Class,
        s223:Infrared-Signal,
        sh:NodeShape ;
    rdfs:label "Infrared signal"^^xsd:string ;
    rdfs:comment """ This class and its enumerated subclasses represent common infrared communication protocols.

: Infrared-Signal Enumerations

| Enumeration |
|:-----------|
| `Signal-FiberEthernet` (see {s223:Signal-FiberEthernet})|
"""^^xsd:string ;
    rdfs:subClassOf s223:Light-Infrared .

s223:Mix-PowerAndSignal a s223:Class,
        s223:Mix-PowerAndSignal,
        sh:NodeShape ;
    rdfs:label "Power and signal mixture"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent substances that are used to convey the combination of electrical power and electrical communication signals.

: Mix-PowerAndSignal Enumerations

| Enumeration |
|:-----------|
| `PowerAndSignal-PoE` |"""^^xsd:string ;
    rdfs:subClassOf s223:Medium-Mix .

s223:PowerAndSignal-PoE a s223:Class,
        s223:PowerAndSignal-PoE,
        sh:NodeShape ;
    rdfs:label "Power over Ethernet"^^xsd:string ;
    s223:composedOf [ a s223:Property ;
            rdfs:label "Unspecified"^^xsd:string ;
            s223:ofConstituent s223:Signal-WiredEthernet ],
        [ a s223:Property ;
            rdfs:label "Unspecified"^^xsd:string ;
            s223:ofConstituent s223:DC-PoE ] ;
    rdfs:comment "PowerAndSignal-PoE."^^xsd:string ;
    rdfs:subClassOf s223:Mix-PowerAndSignal ;
    sh:property [ rdfs:comment "One of the constituents of `PowerAndSignal-PoE` shall be `DC-PoE` or one of its subclasses."^^xsd:string ;
            sh:path s223:composedOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Property ;
                    sh:node [ sh:property [ rdfs:comment "One of the constituents of `PowerAndSignal-PoE` shall be `DC-PoE` or one of its subclasses."^^xsd:string ;
                                    sh:class s223:DC-PoE ;
                                    sh:path s223:ofConstituent ] ] ] ],
        [ rdfs:comment "One of the constituents of `PowerAndSignal-PoE` shall be `Signal-WiredEthernet` or one of its subclasses."^^xsd:string ;
            sh:path s223:composedOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Property ;
                    sh:node [ sh:property [ rdfs:comment "One of the constituents of `PowerAndSignal-PoE` shall be `Signal-WiredEthernet` or one of its subclasses."^^xsd:string ;
                                    sh:class s223:Signal-WiredEthernet ;
                                    sh:path s223:ofConstituent ] ] ] ],
        [ rdfs:comment "There shall be at least two Properties that characterize the constituents of Power over Ethernet."^^xsd:string ;
            sh:class s223:Property ;
            sh:minCount 2 ;
            sh:path s223:composedOf ] .

s223:Radiator a s223:Class,
        sh:NodeShape ;
    rdfs:label "Radiator"^^xsd:string ;
    rdfs:comment """A piece of `Equipment` that provides primarily convective heating to a room using electricity, steam, or water
(e.g., electric baseboard heaters, heated floors, or traditional radiators)."""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "Radiators shall have the role `Role-Heating`."^^xsd:string ;
            sh:message "s223: Radiators shall have the role `Role-Heating`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasRole ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Role-Heating ] ],
        [ rdfs:comment "A `Radiator` shall have at least one bidirectional connection point using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `Radiator` shall have at least one bidirectional connection point using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Role-HeatTransfer a s223:Class,
        s223:Role-HeatTransfer,
        sh:NodeShape ;
    rdfs:label "Heat transfer role"^^xsd:string ;
    rdfs:comment "Role-HeatTransfer"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:System a s223:Class,
        sh:NodeShape ;
    rdfs:label "System"^^xsd:string ;
    rdfs:comment "A logical grouping of one or more `Equipment` or other `System`s for some functional purpose."^^xsd:string ;
    rdfs:subClassOf s223:Concept ;
    sh:property [ rdfs:comment "If the relation `hasRole` is present, it shall associate the `System` with an `EnumerationKind-Role`."^^xsd:string ;
            sh:class s223:EnumerationKind-Role ;
            sh:message "s223: If the relation `hasRole` is present, it shall associate the `System` with an `EnumerationKind-Role`."^^xsd:string ;
            sh:path s223:hasRole ],
        [ a sh:PropertyShape ;
            rdfs:comment "A `System` shall be associated with at least one instance of `Equipment` or `System` using the relation `hasMember`."^^xsd:string ;
            sh:message "s223: A `System` shall be associated with at least one instance of `Equipment` or `System` using the relation `hasMember`."^^xsd:string ;
            sh:minCount 1 ;
            sh:or ( [ sh:class s223:Equipment ] [ sh:class s223:System ] ) ;
            sh:path s223:hasMember ;
            sh:severity sh:Warning ],
        [ rdfs:comment "A `System` may be defined with a number of connection points that are the \"boundary\" of the equipment. The `hasBoundaryConnectionPoint` relation is used to reference those connection points of its equipment that must be connected, but in the context of validating the model with the system by itself, the \"dangling connection point\" should not generate a validation error."^^xsd:string ;
            sh:class s223:ConnectionPoint ;
            sh:message "s223: A `System` may be defined with a number of connection points that are the \"boundary\" of the equipment. The `hasBoundaryConnectionPoint` relation is used to reference those connection points of its equipment that must be connected, but in the context of validating the model with the system by itself, the \"dangling connection point\" should not generate a validation error."^^xsd:string ;
            sh:path s223:hasBoundaryConnectionPoint ],
        [ rdfs:comment "A `System` may be defined with a number of connection points that are the \"boundary\" of the equipment. The `hasOptionalConnectionPoint` relation is used to reference those connection points of its equipment that may not be connected, the \"dangling connection point\" should not generate a validation error."^^xsd:string ;
            sh:class s223:ConnectionPoint ;
            sh:message "s223: A `System` may be defined with a number of connection points that are the \"boundary\" of the equipment. The `hasOptionalConnectionPoint` relation is used to reference those connection points of its equipment that may not be connected, the \"dangling connection point\" should not generate a validation error."^^xsd:string ;
            sh:path s223:hasOptionalConnectionPoint ] ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment "Ensure that the boundary `ConnectionPoint`s of a `System` belong to only members of that `System`"^^xsd:string ;
            sh:message "s223: `System` {$this} `hasBoundaryConnectionPoint` {?cp}, belonging to {?con} that is not a member of {?this}."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
SELECT $this ?cp ?con
WHERE {
$this s223:hasBoundaryConnectionPoint ?cp .
?cp s223:isConnectionPointOf ?con .
FILTER NOT EXISTS {$this s223:hasMember+ ?con}
}
"""^^xsd:string ] .

s223:ThermodynamicPhase-Gas a s223:Class,
        s223:ThermodynamicPhase-Gas,
        sh:NodeShape ;
    rdfs:label "Gas phase"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent gas in various thermodynamic states.

: ThermodynamicPhase-Gas Enumerations

| Enumeration |
|:-----------|
| `Gas-SuperHeated` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ThermodynamicPhase .

s223:ThermodynamicPhase-Liquid a s223:Class,
        s223:ThermodynamicPhase-Liquid,
        sh:NodeShape ;
    rdfs:label "Liquid phase"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent liquid in various thermodynamic states.

: ThermodynamicPhase-Liquid Enumerations

| Enumeration |
|:-----------|
| `Liquid-SubCooled` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-ThermodynamicPhase .

s223:Voltage-0V a s223:Class,
        s223:Voltage-0V,
        sh:NodeShape ;
    rdfs:label "0V"^^xsd:string ;
    s223:hasValue 0.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-0V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-10000V a s223:Class,
        s223:Voltage-10000V,
        sh:NodeShape ;
    rdfs:label "10000V"^^xsd:string ;
    s223:hasValue 10000.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-10000V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-110V a s223:Class,
        s223:Voltage-110V,
        sh:NodeShape ;
    rdfs:label "110V"^^xsd:string ;
    s223:hasValue 110.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-110V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-120V a s223:Class,
        s223:Voltage-120V,
        sh:NodeShape ;
    rdfs:label "120V"^^xsd:string ;
    s223:hasValue 120.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-120V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-127V a s223:Class,
        s223:Voltage-127V,
        sh:NodeShape ;
    rdfs:label "127V"^^xsd:string ;
    s223:hasValue 127.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-127V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-139V a s223:Class,
        s223:Voltage-139V,
        sh:NodeShape ;
    rdfs:label "139V"^^xsd:string ;
    s223:hasValue 139.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-139V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-1730V a s223:Class,
        s223:Voltage-1730V,
        sh:NodeShape ;
    rdfs:label "1730V"^^xsd:string ;
    s223:hasValue 1730.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-1730V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-1900V a s223:Class,
        s223:Voltage-1900V,
        sh:NodeShape ;
    rdfs:label "1900V"^^xsd:string ;
    s223:hasValue 1900.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-1900V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-219V a s223:Class,
        s223:Voltage-219V,
        sh:NodeShape ;
    rdfs:label "219V"^^xsd:string ;
    s223:hasValue 219.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-219V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-220V a s223:Class,
        s223:Voltage-220V,
        sh:NodeShape ;
    rdfs:label "220V"^^xsd:string ;
    s223:hasValue 220.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-220V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-230V a s223:Class,
        s223:Voltage-230V,
        sh:NodeShape ;
    rdfs:label "230V"^^xsd:string ;
    s223:hasValue 230.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-230V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-2400V a s223:Class,
        s223:Voltage-2400V,
        sh:NodeShape ;
    rdfs:label "2400V"^^xsd:string ;
    s223:hasValue 2400.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-2400V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-277V a s223:Class,
        s223:Voltage-277V,
        sh:NodeShape ;
    rdfs:label "277V"^^xsd:string ;
    s223:hasValue 277.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-277V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-3000V a s223:Class,
        s223:Voltage-3000V,
        sh:NodeShape ;
    rdfs:label "3000V"^^xsd:string ;
    s223:hasValue 3000.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-3000V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-3300V a s223:Class,
        s223:Voltage-3300V,
        sh:NodeShape ;
    rdfs:label "3300V"^^xsd:string ;
    s223:hasValue 3300.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-3300V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-3460V a s223:Class,
        s223:Voltage-3460V,
        sh:NodeShape ;
    rdfs:label "3460V"^^xsd:string ;
    s223:hasValue 3460.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-3460V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-347V a s223:Class,
        s223:Voltage-347V,
        sh:NodeShape ;
    rdfs:label "347V"^^xsd:string ;
    s223:hasValue 347.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-347V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-3810V a s223:Class,
        s223:Voltage-3810V,
        sh:NodeShape ;
    rdfs:label "3810V"^^xsd:string ;
    s223:hasValue 3810.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-3810V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-400V a s223:Class,
        s223:Voltage-400V,
        sh:NodeShape ;
    rdfs:label "400V"^^xsd:string ;
    s223:hasValue 400.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-400V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-415V a s223:Class,
        s223:Voltage-415V,
        sh:NodeShape ;
    rdfs:label "415V"^^xsd:string ;
    s223:hasValue 415.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-415V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-4160V a s223:Class,
        s223:Voltage-4160V,
        sh:NodeShape ;
    rdfs:label "4160V"^^xsd:string ;
    s223:hasValue 4160.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-4160V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-480V a s223:Class,
        s223:Voltage-480V,
        sh:NodeShape ;
    rdfs:label "480V"^^xsd:string ;
    s223:hasValue 480.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-480V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-5770V a s223:Class,
        s223:Voltage-5770V,
        sh:NodeShape ;
    rdfs:label "5770V"^^xsd:string ;
    s223:hasValue 5770.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-5770V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-6000V a s223:Class,
        s223:Voltage-6000V,
        sh:NodeShape ;
    rdfs:label "6000V"^^xsd:string ;
    s223:hasValue 6000.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-6000V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-600V a s223:Class,
        s223:Voltage-600V,
        sh:NodeShape ;
    rdfs:label "600V"^^xsd:string ;
    s223:hasValue 600.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-600V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-6600V a s223:Class,
        s223:Voltage-6600V,
        sh:NodeShape ;
    rdfs:label "6600V"^^xsd:string ;
    s223:hasValue 6600.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-6600V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-PoE a s223:Class,
        s223:Voltage-PoE,
        sh:NodeShape ;
    rdfs:label "PoE Voltage"^^xsd:string ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "This class represents the standardized 44-57VDC range that is produced by PoE Power Sourcing Equipment"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:encloses a s223:Relation,
        rdf:Property ;
    rdfs:label "encloses"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `PhysicalSpace` with one or more `DomainSpace`s. "^^xsd:string .

s223:executes a s223:Relation,
        rdf:Property ;
    rdfs:label "executes"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Controller` (see {s223:Controller}) with the `Function`s (see {s223:Function}) that it executes. "^^xsd:string .

s223:hasInput a s223:Relation,
        rdf:Property ;
    rdfs:label "has input"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Function` (see {s223:Function}) with a `Property` (see {s223:Property}) that is used as input to the `Function`."^^xsd:string .

s223:hasSetpoint a s223:Relation,
        rdf:Property ;
    rdfs:label "has setpoint"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a control setpoint with the `QuantifiableProperty` indicating the desired value which the control process is trying to maintain."^^xsd:string .

s223:isConnectionPointOf a s223:RelationWithInverse,
        rdf:Property ;
    rdfs:label "is connection point of"^^xsd:string ;
    s223:inverseOf s223:hasConnectionPoint ;
    rdfs:comment "One of two `Relation`s that associates a `ConnectionPoint` with a `Connectable` thing. It is the inverse of the relation `hasConnectionPoint` (see {s223:hasConnectionPoint})."^^xsd:string .

s223:Binary-Logical a s223:Binary-Logical,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Logical enumerations"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent the possible values of a logical `Property` i.e., True or False.

: Binary-Logical Enumerations

| Enumeration |
|:-----------|
| `Logical-True` |
| `Logical-False` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Binary .

s223:Constituent-NOX a s223:Class,
        s223:Constituent-NOX,
        sh:NodeShape ;
    rdfs:label "Nitrogen oxide"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent common Nitrogen Oxides (NOx).

: Constituent-NOX Enumerations

| Enumeration |
|:-----------|
| `NOX-NO` |
| `NOX-NO2` |"""^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:CoolingCoil a s223:Class,
        sh:NodeShape ;
    rdfs:label "Cooling coil"^^xsd:string ;
    rdfs:comment "A `Coil` that is specifically used to cool air. "^^xsd:string ;
    rdfs:subClassOf s223:Coil ;
    sh:property [ rdfs:comment "A cooling coil shall be related to the role '`Role-Cooling`' using the relation '`hasRole`'."^^xsd:string ;
            sh:hasValue s223:Role-Cooling ;
            sh:message "s223: A cooling coil shall be related to the role '`Role-Cooling`' using the relation '`hasRole`'."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasRole ] .

s223:DCNegativeVoltage-12.0V a s223:Class,
        s223:DCNegativeVoltage-12.0V,
        sh:NodeShape ;
    rdfs:label "DCNegativeVoltage-12.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-12V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCNegativeVoltage-12.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCNegativeVoltage .

s223:DCNegativeVoltage-24.0V a s223:Class,
        s223:DCNegativeVoltage-24.0V,
        sh:NodeShape ;
    rdfs:label "DCNegativeVoltage-24.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-24V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCNegativeVoltage-24.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCNegativeVoltage .

s223:DCNegativeVoltage-6.0V a s223:Class,
        s223:DCNegativeVoltage-6.0V,
        sh:NodeShape ;
    rdfs:label "DCNegativeVoltage-6.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-6V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCNegativeVoltage-6.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCNegativeVoltage .

s223:DCPositiveVoltage-12.0V a s223:Class,
        s223:DCPositiveVoltage-12.0V,
        sh:NodeShape ;
    rdfs:label "DCPositiveVoltage-12.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-12V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCPositiveVoltage-12.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCPositiveVoltage .

s223:DCPositiveVoltage-24.0V a s223:Class,
        s223:DCPositiveVoltage-24.0V,
        sh:NodeShape ;
    rdfs:label "DCPositiveVoltage-24.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-24V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCPositiveVoltage-24.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCPositiveVoltage .

s223:DCPositiveVoltage-6.0V a s223:Class,
        s223:DCPositiveVoltage-6.0V,
        sh:NodeShape ;
    rdfs:label "DCPositiveVoltage-6.0V"^^xsd:string ;
    s223:hasVoltage s223:Voltage-6V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCPositiveVoltage-6.0V"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCPositiveVoltage .

s223:DayOfWeek-Weekend a s223:Class,
        s223:DayOfWeek-Weekend,
        sh:NodeShape ;
    rdfs:label "Weekend"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent weekend days, according to the Gregorian calendar i.e., Saturday and Sunday.

: DayOfWeek-Weekend Enumerations

| Enumeration |
|:-----------|
| `Weekend-Saturday` |
| `Weekend-Sunday` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-DayOfWeek .

s223:Domain-HVAC a s223:Class,
        s223:Domain-HVAC,
        sh:NodeShape ;
    rdfs:label "HVAC domain"^^xsd:string ;
    rdfs:comment "The domain that represents equipment that condition and ventilate spaces within a building. Example `Domain-HVAC` equipment include `Fan`, `Pump`, and `AirHandlingUnit`."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Domain .

s223:DomainSpace a s223:Class,
        sh:NodeShape ;
    rdfs:label "Domain Space"^^xsd:string ;
    rdfs:comment "A portion of a `PhysicalSpace` that is affected by a building service associated with a domain. `DomainSpace`s may represent an entire `PhysicalSpace` or any portion of a `PhysicalSpace` (see {s223:PhysicalSpace}). Multiple `DomainSpace`s of the same domain may overlap, and `DomainSpace`s of different domains may also overlap, but `DomainSpace`s can not overlap multiple `PhysicalSpace`s. `DomainSpace`s may be grouped into `Zone`s using the relation `hasDomainSpace` (see {s223:hasDomainSpace})."^^xsd:string ;
    rdfs:subClassOf s223:Connectable ;
    sh:property [ rdfs:comment "A `DomainSpace` shall be associated with exactly one `EnumerationKind-Domain` using the relation `hasDomain`."^^xsd:string ;
            sh:class s223:EnumerationKind-Domain ;
            sh:maxCount 1 ;
            sh:message "s223: A `DomainSpace` shall be associated with exactly one `EnumerationKind-Domain` using the relation `hasDomain`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasDomain ],
        [ rdfs:comment "A `DomainSpace` must be enclosed by a `PhysicalSpace`."^^xsd:string ;
            sh:message "s223: A `DomainSpace` must be enclosed by a `PhysicalSpace`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath s223:encloses ] ;
            sh:severity sh:Info ] .

s223:ElectricEnergyConverter a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electric energy converter"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that converts one form of electric power to another form of electric power."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `ElectricEnergyConverter` shall have at least two connection points using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: A `ElectricEnergyConverter` shall have at least two connection points using the the medium `Constituent-Electricity`."^^xsd:string ;
            sh:minCount 2 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 2 ;
            sh:qualifiedValueShape [ sh:class s223:ConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:ElectricResistanceElement a s223:Class,
        sh:NodeShape ;
    rdfs:label "Electric resistance element"^^xsd:string ;
    rdfs:comment """A piece of `Equipment` that provides electrical resistance heating, for example an electric heating coil within a Fan Coil Unit.
It shall have one electricity `InletConnectionPoint`, and fit one of the following two patterns:

- Pattern 1: An `ElectricResistanceElement` shall have exactly one Bidirectional `ConnectionPoint` using the medium `Mix-Fluid`.
- Pattern 2: An `ElectricResistanceElement` shall have one inlet and one outlet using the medium `Mix-Fluid`."""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:message "s223: An `ElectricResistanceElement` shall have one electricity `InletConnectionPoint`, plus fit one of the following two patterns: Pattern 1: An `ElectricResistanceElement` shall have exactly one Bidirectional `ConnectionPoint` using the medium `Mix-Fluid`. Pattern 2: An `ElectricResistanceElement` shall have one inlet and one outlet using the medium `Mix-Fluid`."^^xsd:string ;
    sh:property [ rdfs:comment "An `ElectricResistanceElement` shall have the role `Role-Heating`."^^xsd:string ;
            sh:message "s223: An `ElectricResistanceElement` shall have the role `Role-Heating`."^^xsd:string ;
            sh:path s223:hasRole ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Role-Heating ] ],
        [ rdfs:comment "An `ElectricResistanceElement` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:message "s223: An `ElectricResistanceElement` shall have at least one inlet using the medium `Constituent-Electricity`."^^xsd:string ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Constituent-Electricity ;
                                    sh:path s223:hasMedium ] ] ] ] ;
    sh:xone ( [ sh:property [ rdfs:comment "Pattern 1: An `ElectricResistanceElement` shall have exactly one Bidirectional `ConnectionPoint` using the medium `Mix-Fluid`."^^xsd:string ;
                        sh:message "s223: Pattern 1: An `ElectricResistanceElement` requires exactly one `BidirectionalConnectionPoint` using the medium `Mix-Fluid`."^^xsd:string ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMaxCount 1 ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Mix-Fluid ;
                                                sh:path s223:hasMedium ] ] ] ;
                        sh:qualifiedValueShapesDisjoint true ] ] [ sh:property [ rdfs:comment "Pattern 2: An `ElectricResistanceElement` shall have one outlet using the medium `Mix-Fluid`."^^xsd:string ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMaxCount 1 ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Mix-Fluid ;
                                                sh:path s223:hasMedium ] ] ] ;
                        sh:qualifiedValueShapesDisjoint true ],
                    [ rdfs:comment "Pattern 2: An `ElectricResistanceElement` shall have one inlet using the medium `Mix-Fluid`."^^xsd:string ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMaxCount 1 ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Mix-Fluid ;
                                                sh:path s223:hasMedium ] ] ] ;
                        sh:qualifiedValueShapesDisjoint true ] ] ) .

s223:EnumerableProperty a s223:Class,
        sh:NodeShape ;
    rdfs:label "Enumerable Property"^^xsd:string ;
    rdfs:comment "An `EnumerableProperty` is a `Property` with an enumerated (fixed) set of possible values."^^xsd:string ;
    rdfs:subClassOf s223:Property ;
    sh:property [ rdfs:comment "Checks for valid enumeration value consistent with the stated `EnumerationKind`."^^xsd:string ;
            sh:path s223:hasValue ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Checks for valid enumeration value consistent with the stated `EnumerationKind`."^^xsd:string ;
                    sh:message "s223: {$this} has an enumeration value of {?value} which is not a valid {?kind}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?value ?kind
WHERE {
$this s223:hasValue ?value .
$this s223:hasEnumerationKind ?kind .
FILTER (NOT EXISTS {?value a/rdfs:subClassOf* ?kind}) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "An `EnumerableProperty` shall be associated with exactly one `EnumerationKind` using the relation `hasEnumerationKind`."^^xsd:string ;
            sh:class s223:EnumerationKind ;
            sh:maxCount 1 ;
            sh:message "s223: An `EnumerableProperty` shall be associated with exactly one `EnumerationKind` using the relation `hasEnumerationKind`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasEnumerationKind ] .

s223:EnumerationKind-DayOfWeek a s223:Class,
        s223:EnumerationKind-DayOfWeek,
        sh:NodeShape ;
    rdfs:label "Day of week"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent the days of the week, according to the Gregorian calendar i.e., Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, and Sunday. The Weekend and Weekday EnumerationKinds define subsets of this `EnumerationKind` for Mon-Fri and Sat, Sun, respectively.

: EnumerationKind-DayOfWeek Enumerations

| Enumeration |
|:-----------|
| `DayOfWeek-Weekday` |
| `DayOfWeek-Weekend` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind .

s223:Fluid-Oil a s223:Class,
        s223:Fluid-Oil,
        sh:NodeShape ;
    rdfs:label "Oil"^^xsd:string ;
    rdfs:comment "Fluid-Oil."^^xsd:string ;
    rdfs:subClassOf s223:Mix-Fluid .

s223:HeatingCoil a s223:Class,
        sh:NodeShape ;
    rdfs:label "Heating coil"^^xsd:string ;
    rdfs:comment "A `Coil` that is specifically used to heat air. "^^xsd:string ;
    rdfs:subClassOf s223:Coil ;
    sh:property [ rdfs:comment "A heating coil shall be related to the role '`Role-Heating`' using the relation '`hasRole`'."^^xsd:string ;
            sh:hasValue s223:Role-Heating ;
            sh:message "s223: A heating coil shall be related to the role '`Role-Heating`' using the relation '`hasRole`'."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasRole ] .

s223:Junction a s223:Class,
        sh:NodeShape ;
    rdfs:label "Junction"^^xsd:string ;
    rdfs:comment """A `Junction` is a modeling construct used when a branching point within a `Connection` (see {s223:Connection}) is of significance,
such as specifying the observation location of a `Sensor`, or when a modeler wants to expose a branch point within a containing piece of `Equipment`.
When a `Junction` is used, what might have been modeled as a single, branched `Connection`
is separated into three or more separate connections, all tied together with the `Junction` and its associated connection points.

`Junction` is a subClassOf `Connectable`, which gives it the ability to have connection points, but unlike Equipment (and like Connection)
it is not allowed to change the Medium that passes through it. This is why `Junction` is a sibling class to `Equipment` and not a subclass.
This constraint to maintain compatible mediums among a `Junction` and all of its associated `ConnectionPoint`s gives rise to multiple
validation test cases, where the specified medium might be a pure medium, or a mixture with constituents. See {s223:Substance-Medium} for
more details."""^^xsd:string ;
    rdfs:subClassOf s223:Connectable ;
    sh:property [ rdfs:comment "Incompatible Medium. Case5: Two `ConnectionPoint`s with pure mediums."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 5: Two `ConnectionPoint`s with pure mediums."^^xsd:string ;
                    sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?cp1 ?m1 ?cp2 ?m2
WHERE {
$this s223:cnx ?cp1 .
?cp1 a/rdfs:subClassOf* s223:ConnectionPoint .
?cp1 s223:hasMedium ?m1 .
$this s223:cnx ?cp2 .
?cp2 a/rdfs:subClassOf* s223:ConnectionPoint .
FILTER (?cp1 != ?cp2 ) .
?cp2 s223:hasMedium ?m2 .
FILTER (?m1 != ?m2 ) .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {?m2 s223:composedOf ?c2}
FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) .
FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "Incompatible Medium. Case1: A `Junction` with a pure medium and an associated `ConnectionPoint` with a pure medium."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 1: Two pure mediums."^^xsd:string ;
                    sh:message "s223: `Junction` {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m2 ?cp ?m1
WHERE {
$this s223:cnx ?cp .
?cp a/rdfs:subClassOf* s223:ConnectionPoint .
?cp s223:hasMedium ?m1 .
$this s223:hasMedium ?m2 .
FILTER (?m1 != ?m2 ) .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {?m2 s223:composedOf ?c2}
FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) .
FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "Incompatible Medium. Case 6: Two `ConnectionPoint`s, one with a medium with constituents and one a pure medium."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 6: Two `ConnectionPoint`s with a medium with constituents and a pure medium."^^xsd:string ;
                    sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?cp1 ?m1 ?cp2 ?m2
WHERE {
$this s223:cnx ?cp1 .
?cp1 a/rdfs:subClassOf* s223:ConnectionPoint .
?cp1 s223:hasMedium ?m1 .
$this s223:cnx ?cp2 .
?cp2 a/rdfs:subClassOf* s223:ConnectionPoint .
?cp2 s223:hasMedium ?m2 .
?m2 s223:composedOf/s223:ofConstituent ?s2 .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {
  ?m2 s223:composedOf/s223:ofConstituent ?s12 .
  {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} .
}
}
"""^^xsd:string ] ],
        [ rdfs:comment "Incompatible Medium. Case4: `Junction` with constituents and an associated `ConnectionPoint` with constituents."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 4: `Junction` with constituents and an associated `ConnectionPoint` with constituents."^^xsd:string ;
                    sh:message "s223: `Junction` {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m2 ?cp ?m1
WHERE {
$this s223:cnx ?cp .
?cp a/rdfs:subClassOf* s223:ConnectionPoint .
?cp s223:hasMedium ?m1 .
$this s223:hasMedium ?m2 .
    ?m1 s223:composedOf/s223:ofConstituent ?s1 .
    ?m2 s223:composedOf/s223:ofConstituent ?s2 .
  FILTER NOT EXISTS {
    ?m1 s223:composedOf/s223:ofConstituent ?s11 .
    ?m2 s223:composedOf/s223:ofConstituent ?s12 .
    FILTER (?s11 = ?s12) .
  }
  FILTER NOT EXISTS {
    ?m1 s223:composedOf/s223:ofConstituent ?s21 .
    ?m2 s223:composedOf/s223:ofConstituent ?s22 .
    {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} .
  }
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `Junction` shall be associated with exactly one `Substance-Medium` using the relation `hasMedium`."^^xsd:string ;
            sh:class s223:Substance-Medium ;
            sh:maxCount 1 ;
            sh:message "s223: A `Junction` shall be associated with exactly one `Substance-Medium` using the relation `hasMedium`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasMedium ],
        [ rdfs:comment "Incompatible Medium. Case 2: A `Junction` with constituents and an associated `ConnectionPoint` with a pure medium."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 2: A `Junction` with constituents and an associated `ConnectionPoint` with a pure medium."^^xsd:string ;
                    sh:message "s223: `Junction` {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m2 ?cp ?m1
WHERE {
$this s223:cnx ?cp .
?cp a/rdfs:subClassOf* s223:ConnectionPoint .
?cp s223:hasMedium ?m1 .
$this s223:hasMedium ?m2 .
?m2 s223:composedOf/s223:ofConstituent ?s2 .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {
  ?m2 s223:composedOf/s223:ofConstituent ?s12 .
  {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} .
}
}
"""^^xsd:string ] ],
        [ rdfs:comment "Incompatible Medium. Case 7: Two `ConnectionPoint`s with mediums with constituents."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 7: Two `ConnectionPoint`s with mediums with constituents."^^xsd:string ;
                    sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?cp1 ?m1 ?cp2 ?m2
WHERE {
$this s223:cnx ?cp1 .
?cp1 a/rdfs:subClassOf* s223:ConnectionPoint .
?cp1 s223:hasMedium ?m1 .
$this s223:cnx ?cp2 .
?cp2 a/rdfs:subClassOf* s223:ConnectionPoint .
?cp2 s223:hasMedium ?m2 .
    ?m1 s223:composedOf/s223:ofConstituent ?s1 .
    ?m2 s223:composedOf/s223:ofConstituent ?s2 .
  FILTER NOT EXISTS {
    ?m1 s223:composedOf/s223:ofConstituent ?s11 .
    ?m2 s223:composedOf/s223:ofConstituent ?s12 .
    FILTER (?s11 = ?s12) .
  }
  FILTER NOT EXISTS {
    ?m1 s223:composedOf/s223:ofConstituent ?s21 .
    ?m2 s223:composedOf/s223:ofConstituent ?s22 .
    {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} .
  }
}
"""^^xsd:string ] ],
        [ rdfs:comment "Incompatible Medium. Case 3: `Junction` with a pure medium and an associated `ConnectionPoint` with constituents"^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 3: `Junction` with a pure medium and an associated `ConnectionPoint` with constituents."^^xsd:string ;
                    sh:message "s223: `Junction` {$this} with Medium {?m1} is incompatible with {?cp} with Medium {?m2}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m2 ?cp ?m1
WHERE {
$this s223:cnx ?cp .
?cp a/rdfs:subClassOf* s223:ConnectionPoint .
?cp s223:hasMedium ?m2 .
$this s223:hasMedium ?m1 .
?m2 s223:composedOf/s223:ofConstituent ?s2 .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {
  ?m2 s223:composedOf/s223:ofConstituent ?s12 .
  {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} .
}
}
"""^^xsd:string ] ] .

s223:Light-Infrared a s223:Class,
        s223:Light-Infrared,
        sh:NodeShape ;
    rdfs:label "Infrared light"^^xsd:string ;
    rdfs:comment """ This class and its enumerated subclasses represent the use of electromagnetic energy in the infrared frequency range for multiple purposes, including communication signals.

  : Light-Infrared Enumerations

  | Enumeration |
  |:-----------|
  | `Infrared-Signal` (see {s223:Infrared-Signal}) |"""^^xsd:string ;
    rdfs:subClassOf s223:EM-Light .

s223:LightSensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Light sensor"^^xsd:string ;
    rdfs:comment "A `Sensor` that `observes` a `QuantifiableObservableProperty` that represents an attribute of light, as specified by the `QuantityKind` of the `Property` being observed, as described below."^^xsd:string ;
    rdfs:subClassOf s223:Sensor .

s223:LineNeutralVoltage-24V a s223:Class,
        s223:LineNeutralVoltage-24V,
        sh:NodeShape ;
    rdfs:label "24V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-24V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "24V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:Medium-Mix a s223:Class,
        s223:Medium-Mix,
        sh:NodeShape ;
    rdfs:label "Mixed medium"^^xsd:string ;
    rdfs:comment """
This class and its subclasses represent substances that are composed of constituents. The components of a `Medium-Mix` can be modeled using the relations `composedOf` and `ofConstituent`. See Figure 10-8a and Figure 10-8b.

Figure 10-8a shows `GlycolSolution-30Percent`, itself a subclass of
`Water-GlycolSolution`, `Fluid-Water`, and `Mix-Fluid`, with a _Water Concentration_
property referencing 70% `Constituent-H2O` by the relation `ofConstituent` and
a _Glycol Concentration_ property referencing 30% `Constituent-Glycol` also
by the relation `ofConstituent`.

Figure 10-8b shows `PowerAndSignal-PoE`, itself a subclass of `Mix-PowerAndSignal`,
composed of a _Power_ `Property` referencing `Electricity-DC` and a _Communications_
`Property` referencing `Signal-WiredEthernet`.

: Medium-Mix Enumerations

| Enumeration |
|:-----------|
| `Mix-Fluid` (see {s223:Mix-Fluid}) |
| `Mix-PowerAndSignal` (see {s223:Mix-PowerAndSignal}) |

![ ](figures/Figure_10-8_Substance.svg)
"""^^xsd:string ;
    rdfs:subClassOf s223:Substance-Medium .

s223:ObservableProperty a s223:Class,
        sh:NodeShape ;
    rdfs:label "Observable Property"^^xsd:string ;
    rdfs:comment """The term "observable" implies that reading the `ObservableProperty` value will return the result of a physical observation, usually by a `Sensor`.
In contrast, the term "actuatable" (see {s223:ActuatableProperty}) implies that writing to the `ActuatableProperty` value will directly trigger a physical actuation."""^^xsd:string ;
    rdfs:subClassOf s223:Property ;
    sh:property [ rdfs:comment "An `ObservableProperty` is usually referred to by a `Sensor` using the relation `observes`."^^xsd:string ;
            sh:class s223:Sensor ;
            sh:message "s223: An `ObservableProperty` is usually referred to by a `Sensor` using the relation `observes`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath s223:observes ] ;
            sh:severity sh:Warning ] .

s223:OccupancySensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Occupancy sensor"^^xsd:string ;
    rdfs:comment "A `Sensor` that `observes` an `ObservableProperty` that represents an attribute of occupancy in a space."^^xsd:string ;
    rdfs:subClassOf s223:Sensor .

s223:PhysicalSpace a s223:Class,
        sh:NodeShape ;
    rdfs:label "Physical Space"^^xsd:string ;
    rdfs:comment "An architectural concept representing a room, a part of a room, a collection of rooms, or any other physical region in a building. PhysicalSpaces may be grouped to define larger `PhysicalSpace`s using the relation `contains` (see {s223:contains})."^^xsd:string ;
    rdfs:subClassOf s223:Concept ;
    sh:property [ rdfs:comment "If the relation `encloses` is present it shall associate the `PhysicalSpace` with a `DomainSpace`."^^xsd:string ;
            sh:class s223:DomainSpace ;
            sh:message "s223: If the relation `encloses` is present it shall associate the `PhysicalSpace` with a `DomainSpace`."^^xsd:string ;
            sh:path s223:encloses ],
        [ rdfs:comment "If the relation `contains` is present it shall associate the `PhysicalSpace` with a `PhysicalSpace`."^^xsd:string ;
            sh:class s223:PhysicalSpace ;
            sh:message "s223: If the relation `contains` is present it shall associate the `PhysicalSpace` with a `PhysicalSpace`."^^xsd:string ;
            sh:path s223:contains ] .

s223:Signal-Modulated a s223:Class,
        s223:Signal-Modulated,
        sh:NodeShape ;
    rdfs:label "Modulated signal"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent common analog communication protocols.

: Signal-Modulated Enumerations

| Enumeration |
|:-----------|
| `Modulated-0-10V` |
| `Modulated-4-20mA` |"""^^xsd:string ;
    rdfs:subClassOf s223:Electricity-Signal .

s223:Signal-USB a s223:Class,
        s223:Signal-USB,
        sh:NodeShape ;
    rdfs:label "USB"^^xsd:string ;
    rdfs:comment "Signal USB"^^xsd:string ;
    rdfs:subClassOf s223:Electricity-Signal .

s223:TerminalUnit a s223:Class,
        sh:NodeShape ;
    rdfs:label "Terminal unit"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that modulates the volume of air delivered to a space."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `TerminalUnit` shall have at least one inlet `ConnectionPoint` using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `TerminalUnit` shall have at least one inlet `ConnectionPoint` using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `TerminalUnit` shall have at least one outlet `ConnectionPoint` using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `TerminalUnit` shall have at least one outlet `ConnectionPoint` using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:Voltage-208V a s223:Class,
        s223:Voltage-208V,
        sh:NodeShape ;
    rdfs:label "208V"^^xsd:string ;
    s223:hasValue 208.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-208V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-240V a s223:Class,
        s223:Voltage-240V,
        sh:NodeShape ;
    rdfs:label "240V"^^xsd:string ;
    s223:hasValue 240.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-240V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-2V a s223:Class,
        s223:Voltage-2V,
        sh:NodeShape ;
    rdfs:label "2V"^^xsd:string ;
    s223:hasValue 2.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-2V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-3V a s223:Class,
        s223:Voltage-3V,
        sh:NodeShape ;
    rdfs:label "3V"^^xsd:string ;
    s223:hasValue 3.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-3V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Water-GlycolSolution a s223:Class,
        s223:Water-GlycolSolution,
        sh:NodeShape ;
    rdfs:label "Water-Glycol solution"^^xsd:string ;
    s223:composedOf [ a s223:QuantifiableProperty ;
            rdfs:label "Unspecified"^^xsd:string ;
            s223:ofConstituent s223:Constituent-H2O ;
            qudt:hasQuantityKind quantitykind:VolumeFraction ;
            qudt:hasUnit unit:PERCENT ],
        [ a s223:QuantifiableProperty ;
            rdfs:label "Unspecified"^^xsd:string ;
            s223:ofConstituent s223:Constituent-Glycol ;
            qudt:hasQuantityKind quantitykind:VolumeFraction ;
            qudt:hasUnit unit:PERCENT ] ;
    s223:hasFreezingPoint [ a s223:QuantifiableProperty ;
            rdfs:label "Freezing point"^^xsd:string ;
            qudt:hasQuantityKind quantitykind:Temperature ] ;
    rdfs:comment """This class and its enumerated subclasses represent common concentrations of water-glycol solution.

: Water-GlycolSolution Enumerations

| Enumeration |
|:-----------|
| `GlycolSolution-15Percent` |
| `GlycolSolution-30Percent` |"""^^xsd:string ;
    rdfs:subClassOf s223:Fluid-Water ;
    sh:property [ rdfs:comment "One of the constituents of a `Water-GlycolSolution` shall be `Constituent-H2O`."^^xsd:string ;
            sh:path s223:composedOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:QuantifiableProperty ;
                    sh:node [ sh:property [ rdfs:comment "The `QuantityKind` of the constituent shall be `VolumeFraction`."^^xsd:string ;
                                    sh:hasValue quantitykind:VolumeFraction ;
                                    sh:path qudt:hasQuantityKind ],
                                [ rdfs:comment "One of the constituents of a `Water-GlycolSolution` shall be `Constituent-H2O`."^^xsd:string ;
                                    sh:hasValue s223:Constituent-H2O ;
                                    sh:path s223:ofConstituent ] ] ] ],
        [ rdfs:comment "If the relation `hasFreezingPoint` is used, the object shall be a `QuantifiableProperty` with a `QuantityKind` of `Temperature`."^^xsd:string ;
            sh:class s223:QuantifiableProperty ;
            sh:message "s223: If the relation `hasFreezingPoint` is used, the object shall be a `QuantifiableProperty` with a `QuantityKind` of `Temperature`."^^xsd:string ;
            sh:node [ sh:property [ sh:hasValue quantitykind:Temperature ;
                            sh:path qudt:hasQuantityKind ] ] ;
            sh:path s223:hasFreezingPoint ],
        [ rdfs:comment "There shall be at least two QuantifiableProperties that characterize the constituents of a `Water-GlycolSolution`."^^xsd:string ;
            sh:class s223:QuantifiableProperty ;
            sh:minCount 2 ;
            sh:path s223:composedOf ],
        [ rdfs:comment "One of the constituents of a `Water-GlycolSolution` shall be `Constituent-Glycol`."^^xsd:string ;
            sh:path s223:composedOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:QuantifiableProperty ;
                    sh:node [ sh:property [ rdfs:comment "One of the constituents of a `Water-GlycolSolution` shall be `Constituent-Glycol`."^^xsd:string ;
                                    sh:hasValue s223:Constituent-Glycol ;
                                    sh:path s223:ofConstituent ],
                                [ rdfs:comment "The `QuantityKind` of the constituent shall be `VolumeFraction`."^^xsd:string ;
                                    sh:hasValue quantitykind:VolumeFraction ;
                                    sh:path qudt:hasQuantityKind ] ] ] ] .

s223:ZoneGroup a s223:Class,
        sh:NodeShape ;
    rdfs:label "Zone group"^^xsd:string ;
    rdfs:comment """A logical grouping of one or more `Zone`s (e.g., to define a supervisory building control strategy that overrides one or 
  more system controls)."""^^xsd:string ;
    rdfs:subClassOf s223:Concept ;
    sh:property [ rdfs:comment "A `ZoneGroup` shall be associated with at least one `Zone` using the relation `hasZone`."^^xsd:string ;
            sh:class s223:Zone ;
            sh:message "s223: A `ZoneGroup` shall be associated with at least one `Zone` using the relation `hasZone`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasZone ],
        [ rdfs:comment "A `ZoneGroup` shall be associated with exactly one `EnumerationKind-Domain` using the relation `hasDomain`."^^xsd:string ;
            sh:class s223:EnumerationKind-Domain ;
            sh:maxCount 1 ;
            sh:message "s223: A `ZoneGroup` shall be associated with exactly one `EnumerationKind-Domain` using the relation `hasDomain`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasDomain ] .

s223:actuatedByProperty a s223:Relation,
        rdf:Property ;
    rdfs:label "commanded by Property"^^xsd:string ;
    rdfs:comment """A `Relation` that associates a piece of `Equipment` with the `ActuatableProperty` that it responds to. If the `Equipment`
is an `Actuator` (a subclass of `Equipment`), `actuatedByProperty` is a required relation. An `Actuator` may also identify another piece of
`Equipment` being actuated. (see {s223:actuates})."""^^xsd:string .

s223:connectedFrom a s223:RelationWithInverse,
        rdf:Property ;
    rdfs:label "connected from"^^xsd:string ;
    s223:inverseOf s223:connectedTo ;
    rdfs:comment "The relation `connectedFrom` indicates that connectable things are `connected` with a specific direction of flow. B is `connectedFrom` A, means that the direction of flow is from A to B.  The inverse direction is indicated by `connectedTo` (see {s223:connectedTo})."^^xsd:string .

s223:connectsThrough a s223:RelationWithInverse,
        rdf:Property ;
    rdfs:label "connects through"^^xsd:string ;
    s223:inverseOf s223:connectsAt ;
    rdfs:comment "A `Relation` that associates a `ConnectionPoint` with a `Connection`, without regard to the direction of flow."^^xsd:string .

s223:hasElectricalPhase a s223:Relation,
        rdf:Property ;
    rdfs:label "has electrical phase"^^xsd:string ;
    rdfs:comment "A `Relation` that associates an AC electricity `Substance-Medium` with its  electrical phase identifier."^^xsd:string .

s223:hasInternalReference a s223:Relation,
        rdf:Property ;
    rdfs:label "has internal reference"^^xsd:string ;
    rdfs:comment """A `Relation` that associates a `Property` with another equivalent `Property`. For example, a `Property` that represents a `Zone`
temperature could have at most one `hasInternalReference` relation to another `Property` that is a temperature measurement from one room in the zone (see Figure 11-2).

![Zone Internal Reference.](figures/Figure_11-2_Zone_Internal_Reference.svg)

Another use of `hasInternalReference` is to make a `Property` of a piece of equipment
visible as a `Property` of a piece of containing equipment (see {pub:equipment-containment}).
This is illustrated in Figure 11-3.

![Equipment Containment.](figures/Figure_11-3_Equipment_Contains_3.svg)

Note that the hasInternalReference relation is transitive."""^^xsd:string .

s223:hasOutput a s223:Relation,
        rdf:Property ;
    rdfs:label "has output"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Function` (see {s223:Function}) with a `Property` (see {s223:Property}) that is calculated by the `Function`."^^xsd:string .

s223:ofSubstance a s223:Relation,
        rdf:Property ;
    rdfs:label "of substance"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Property` being observed by a `Sensor` with the `EnumerationKind-Substance` it characterizes within a specific `Substance-Medium`. For example, to denote the concentration of a `Substance` in a `Medium`, `ofSubstance` is used. Typically, there is also an `ofMedium` relation between the observed `Property` and the `Medium`, (see Figures 10-9 and 10-10). For example, to represent the concentration of CO2 in air, we use `ofSubstance` to relate to CO2 and `ofMedium` to relate to air. The term `ofSubstance` is broad enough to include situations where a sensor is used to detect constituents that should not be present in a medium, such as ammonia in air. Therefore, `ofSubstance` is used to indicate the substance of interest, while `ofConstituent` would indicate a constituent that is normally present in the composition of the mix."^^xsd:string .

s223:Coil a s223:Class,
        sh:NodeShape ;
    rdfs:label "Coil"^^xsd:string ;
    rdfs:comment """A piece of `Equipment` consisting of a pipe or tube that is formed into a helical or serpentine shape, may or may not be finned, and is used in cooling or heating equipment.

A `Coil` shall conform to exactly one of the following patterns:

- **Pattern 1:**
  - The `Coil` has exactly two inlet connection points using the medium `Mix-Fluid`, with exactly one being `Fluid-Air`.
  - The `Coil` has exactly two outlet connection points using the medium `Mix-Fluid`, with exactly one being `Fluid-Air`.

- **Pattern 2:**
  - The Coil has exactly one inlet connection point using the medium `Mix-Fluid`.
  - The Coil has exactly one outlet connection point using the medium `Mix-Fluid`.
  - The Coil has one or two bidirectional connection points using the medium `Mix-Fluid` or `Medium-ThermalContact`.

- **Pattern 3:**
  - The Coil has exactly three bidirectional connection points using the medium `Mix-Fluid` or `Medium-ThermalContact`."""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:message "s223: A `Coil` shall fit one of the following patterns of `ConnectionPoint`s: 1: Two inlets and two outlets using the medium `Mix-Fluid`. 2: One inlet and one outlet using the medium `Mix-Fluid`, and one or two bidirectionals using the medium `Mix-Fluid` or `Medium-ThermalContact`. 3: Three bidirectionals using the medium `Mix-Fluid` or `Medium-ThermalContact`."^^xsd:string ;
    sh:xone ( [ sh:property [ rdfs:comment "Pattern 1: A `Coil` shall have two outlets using the medium `Mix-Fluid`."^^xsd:string ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMaxCount 2 ;
                        sh:qualifiedMinCount 2 ;
                        sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Mix-Fluid ;
                                                sh:path s223:hasMedium ] ] ] ],
                    [ rdfs:comment "Pattern 1: For one of the two outlets the Fluid is Air."^^xsd:string ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMaxCount 1 ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                                sh:path s223:hasMedium ] ] ] ],
                    [ rdfs:comment "Pattern 1: For one of the two inlets the Fluid is Air."^^xsd:string ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMaxCount 1 ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                                sh:path s223:hasMedium ] ] ] ],
                    [ rdfs:comment "Pattern 1: A `Coil` shall have two inlets using the medium `Mix-Fluid`."^^xsd:string ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMaxCount 2 ;
                        sh:qualifiedMinCount 2 ;
                        sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Mix-Fluid ;
                                                sh:path s223:hasMedium ] ] ] ] ] [ sh:property [ rdfs:comment "Pattern 2: A `Coil` shall have one inlet using the medium `Mix-Fluid`."^^xsd:string ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMaxCount 1 ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Mix-Fluid ;
                                                sh:path s223:hasMedium ] ] ] ],
                    [ rdfs:comment "Pattern 2: A `Coil` shall have one or two bidirectionals using the medium `Mix-Fluid` or `Medium-ThermalContact`."^^xsd:string ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMaxCount 2 ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ;
                                sh:node [ sh:property [ sh:or ( [ sh:class s223:Mix-Fluid ] [ sh:class s223:Medium-ThermalContact ] ) ;
                                                sh:path s223:hasMedium ] ] ] ;
                        sh:qualifiedValueShapesDisjoint true ],
                    [ rdfs:comment "Pattern 2: A `Coil` shall have one outlet using the medium `Mix-Fluid`."^^xsd:string ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMaxCount 1 ;
                        sh:qualifiedMinCount 1 ;
                        sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                                sh:node [ sh:property [ sh:class s223:Mix-Fluid ;
                                                sh:path s223:hasMedium ] ] ] ] ] [ sh:property [ rdfs:comment "Pattern 3: A `Coil` shall have three bidirectionals using the medium `Mix-Fluid` or `Medium-ThermalContact`."^^xsd:string ;
                        sh:path s223:hasConnectionPoint ;
                        sh:qualifiedMaxCount 3 ;
                        sh:qualifiedMinCount 3 ;
                        sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ;
                                sh:node [ sh:property [ sh:or ( [ sh:class s223:Mix-Fluid ] [ sh:class s223:Medium-ThermalContact ] ) ;
                                                sh:path s223:hasMedium ] ] ] ;
                        sh:qualifiedValueShapesDisjoint true ] ] ) .

s223:Constituent-EM a s223:Class,
        s223:Constituent-EM,
        sh:NodeShape ;
    rdfs:label "Electromagnetic energy"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent electromagnetic energy at commonly defined frequency ranges.

: Constituent-EM Enumerations

| Enumeration |
|:-----------|
| `EM-Light` (see {s223:EM-Light})|
| `EM-Microwave` |
| `EM-RF` (see {s223:EM-RF})|"""^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:DC-12V a s223:Class,
        s223:DC-12V,
        sh:NodeShape ;
    rdfs:label "DC-12V electricity"^^xsd:string ;
    s223:hasVoltage s223:Voltage-12V ;
    rdfs:comment """This class and its enumerated subclasses represent all polarities of 12 volt DC electricity.

: DC-12V Enumerations

| Enumeration |
|:-----------|
| `12V-12V-Neg` |
| `12V-12V-Pos` |
| `12V-6V-Neg-6V-Pos` |"""^^xsd:string ;
    rdfs:subClassOf s223:Electricity-DC .

s223:DC-24V a s223:Class,
        s223:DC-24V,
        sh:NodeShape ;
    rdfs:label "DC-24V electricity"^^xsd:string ;
    s223:hasVoltage s223:Voltage-24V ;
    rdfs:comment """This class and its enumerated subclasses represent all polarities of 24 volt DC electricity.

: DC-24V Enumerations

| Enumeration |
|:-----------|
| `24V-12V-Neg-12V-Pos` |
| `24V-24V-Neg` |
| `24V-24V-Pos` |"""^^xsd:string ;
    rdfs:subClassOf s223:Electricity-DC .

s223:DC-380V a s223:Class,
        s223:DC-380V,
        sh:NodeShape ;
    rdfs:label "DC-380V electricity"^^xsd:string ;
    s223:hasVoltage s223:Voltage-380V ;
    rdfs:comment """This class and its enumerated subclasses represent all polarities of 380 volt DC electricity.

: DC-380V Enumerations

| Enumeration |
|:-----------|
| `380V-190V-Neg-190V-Pos` |
| `380V-380V-Neg` |
| `380V-380V-Pos` |"""^^xsd:string ;
    rdfs:subClassOf s223:Electricity-DC .

s223:DC-48V a s223:Class,
        s223:DC-48V,
        sh:NodeShape ;
    rdfs:label "DC-48V electricity"^^xsd:string ;
    s223:hasVoltage s223:Voltage-48V ;
    rdfs:comment """This class and its enumerated subclasses represent all polarities of 48 volt DC electricity.

: DC-48V Enumerations

| Enumeration |
|:-----------|
| `48V-24V-Neg-24V-Pos` |
| `48V-48V-Neg` |
| `48V-48V-Pos` |"""^^xsd:string ;
    rdfs:subClassOf s223:Electricity-DC .

s223:DC-5V a s223:Class,
        s223:DC-5V,
        sh:NodeShape ;
    rdfs:label "DC-5V electricity"^^xsd:string ;
    s223:hasVoltage s223:Voltage-5V ;
    rdfs:comment """This class and its enumerated subclasses represent all polarities of 5 volt DC electricity.

: DC-5V Enumerations

| Enumeration |
|:-----------|
| `5V-2.5V-Neg-2.5V-Pos` |
| `5V-5V-Neg` |
| `5V-5V-Pos` |"""^^xsd:string ;
    rdfs:subClassOf s223:Electricity-DC .

s223:DC-6V a s223:Class,
        s223:DC-6V,
        sh:NodeShape ;
    rdfs:label "DC-6V electricity"^^xsd:string ;
    s223:hasVoltage s223:Voltage-6V ;
    rdfs:comment """This class and its enumerated subclasses represent all polarities of 6 volt DC electricity.

: DC-6V Enumerations

| Enumeration |
|:-----------|
| `6V-3V-Neg-3V-Pos` |
| `6V-6V-Neg` |
| `6V-6V-Pos` |"""^^xsd:string ;
    rdfs:subClassOf s223:Electricity-DC .

s223:Function a s223:Class,
        sh:NodeShape ;
    rdfs:label "Function"^^xsd:string ;
    rdfs:comment "A `Function` is used to model transfer and/or transformation of information (i.e., `Property`). It has relations to input Properties and output Properties. The actual algorithms that perform the transformations are described in CDL and are out of scope of the 223 standard."^^xsd:string ;
    rdfs:subClassOf s223:Concept ;
    sh:property [ rdfs:comment "If the relation `hasInput` is present it shall associate a `Function` with a `Property`."^^xsd:string ;
            sh:class s223:Property ;
            sh:message "s223: If the relation `hasInput` is present it shall associate a `Function` with a `Property`."^^xsd:string ;
            sh:path s223:hasInput ],
        [ rdfs:comment "If the relation `hasOutput` is present it shall associate a `Function` with a `Property`."^^xsd:string ;
            sh:class s223:Property ;
            sh:message "s223: If the relation `hasOutput` is present it shall associate a `Function` with a `Property`."^^xsd:string ;
            sh:path s223:hasOutput ] .

s223:HeatPump a s223:Class,
        sh:NodeShape ;
    rdfs:label "Heat pump"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that heats or cools spaces by transferring thermal energy from one thermal environment to another using a reversible refrigeration cycle."^^xsd:string ;
    rdfs:subClassOf s223:Equipment .

s223:LineNeutralVoltage-110V a s223:Class,
        s223:LineNeutralVoltage-110V,
        sh:NodeShape ;
    rdfs:label "110V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-110V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "110V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-127V a s223:Class,
        s223:LineNeutralVoltage-127V,
        sh:NodeShape ;
    rdfs:label "127V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-127V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "127V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-139V a s223:Class,
        s223:LineNeutralVoltage-139V,
        sh:NodeShape ;
    rdfs:label "139V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-139V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "139V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-1730V a s223:Class,
        s223:LineNeutralVoltage-1730V,
        sh:NodeShape ;
    rdfs:label "1730V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-1730V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "1730V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-1900V a s223:Class,
        s223:LineNeutralVoltage-1900V,
        sh:NodeShape ;
    rdfs:label "1900V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-1900V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "1900V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-208V a s223:Class,
        s223:LineNeutralVoltage-208V,
        sh:NodeShape ;
    rdfs:label "208V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-208V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "208V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-219V a s223:Class,
        s223:LineNeutralVoltage-219V,
        sh:NodeShape ;
    rdfs:label "219V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-219V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "219V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-230V a s223:Class,
        s223:LineNeutralVoltage-230V,
        sh:NodeShape ;
    rdfs:label "230V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-230V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "230V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-2400V a s223:Class,
        s223:LineNeutralVoltage-2400V,
        sh:NodeShape ;
    rdfs:label "2400V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-2400V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "2400V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-240V a s223:Class,
        s223:LineNeutralVoltage-240V,
        sh:NodeShape ;
    rdfs:label "240V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-240V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "240V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-277V a s223:Class,
        s223:LineNeutralVoltage-277V,
        sh:NodeShape ;
    rdfs:label "277V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-277V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "277V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-3460V a s223:Class,
        s223:LineNeutralVoltage-3460V,
        sh:NodeShape ;
    rdfs:label "3460V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-3460V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "3460V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-347V a s223:Class,
        s223:LineNeutralVoltage-347V,
        sh:NodeShape ;
    rdfs:label "347V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-347V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "347V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-3810V a s223:Class,
        s223:LineNeutralVoltage-3810V,
        sh:NodeShape ;
    rdfs:label "3810V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-3810V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "3810V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:LineNeutralVoltage-5770V a s223:Class,
        s223:LineNeutralVoltage-5770V,
        sh:NodeShape ;
    rdfs:label "5770V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-5770V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "5770V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:Medium-ThermalContact a s223:Class,
        s223:Medium-ThermalContact,
        sh:NodeShape ;
    rdfs:label "Thermal contact"^^xsd:string ;
    rdfs:comment """This class represents the transfer of thermodynamic energy at `ConnectionPoint`s or through `Connection`s
that does not involve electricity or moving a fluid such as air or water."""^^xsd:string ;
    rdfs:subClassOf s223:Substance-Medium .

s223:Occupancy-Motion a s223:Class,
        s223:Occupancy-Motion,
        sh:NodeShape ;
    rdfs:label "Occupancy motion"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent the detection of motion in a space.

: Occupancy-Motion Enumerations

| Enumeration |
|:-----------|
| `Motion-False` |
| `Motion-True` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Occupancy .

s223:Occupancy-Presence a s223:Class,
        s223:Occupancy-Presence,
        sh:NodeShape ;
    rdfs:label "Occupancy presence"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent the detection of physical presence in a space.

: Occupancy-Presence Enumerations

| Enumeration |
|:-----------|
| `Presence-False` |
| `Presence-True` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Occupancy .

s223:Voltage-12V a s223:Class,
        s223:Voltage-12V,
        sh:NodeShape ;
    rdfs:label "12V"^^xsd:string ;
    s223:hasValue 12.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-12V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-190V a s223:Class,
        s223:Voltage-190V,
        sh:NodeShape ;
    rdfs:label "190V"^^xsd:string ;
    s223:hasValue 190.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-190V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-48V a s223:Class,
        s223:Voltage-48V,
        sh:NodeShape ;
    rdfs:label "48V"^^xsd:string ;
    s223:hasValue 48.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-48V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-5V a s223:Class,
        s223:Voltage-5V,
        sh:NodeShape ;
    rdfs:label "5V"^^xsd:string ;
    s223:hasValue 5.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-5V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-6V a s223:Class,
        s223:Voltage-6V,
        sh:NodeShape ;
    rdfs:label "6V"^^xsd:string ;
    s223:hasValue 6.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-6V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-DCVoltage a s223:Class,
        s223:Voltage-DCVoltage,
        sh:NodeShape ;
    rdfs:label "Voltage-DCVoltage"^^xsd:string ;
    s223:hasVoltage s223:Numerical-Voltage ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment """This class and its enumerated subclasses represent all possible DC voltage polarities (i.e., positive, negative, and zero) for DC electricity service.

: Voltage-DCVoltage Enumerations

| Enumeration |
|:-----------|
| `DCVoltage-DCNegativeVoltage` (see {s223:DCVoltage-DCNegativeVoltage}) |
| `DCVoltage-DCPositiveVoltage` (see {s223:DCVoltage-DCPositiveVoltage}) |
| `DCVoltage-DCZeroVoltage` |"""^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage ;
    sh:property [ rdfs:comment "A DC-Voltage shall have a `Numerical-Voltage`"^^xsd:string ;
            sh:class s223:Numerical-Voltage ;
            sh:minCount 1 ;
            sh:path s223:hasVoltage ] .

s223:Zone a s223:Class,
        sh:NodeShape ;
    rdfs:label "Zone"^^xsd:string ;
    rdfs:comment "A logical grouping of one or more `DomainSpace`s for some building service or control-related purpose. `Zone`s may be grouped into `ZoneGroup`s (see {s223:ZoneGroup}). `Zone`s can have properties that are inputs or outputs to a `Function` (see {s223:Function}), which can be executed by `Controller`s (see {s223:Controller}) or other `Equipment`."^^xsd:string ;
    rdfs:subClassOf s223:Concept ;
    sh:property [ rdfs:comment "A `Zone` shall be associated with at least one `DomainSpace` using the relation `hasDomainSpace`."^^xsd:string ;
            sh:class s223:DomainSpace ;
            sh:message "s223: A `Zone` shall be associated with at least one `DomainSpace` using the relation `hasDomainSpace`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasDomainSpace ],
        [ rdfs:comment "The associated domain of a `Zone` and the Domain of the `DomainSpace`s it `contains` must be the same."^^xsd:string ;
            sh:path s223:hasDomain ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "The associated `EnumerationKind-Domain` of a `Zone` and the `EnumerationKind-Domain` of the `DomainSpace`s it contains must be the same."^^xsd:string ;
                    sh:message "s223: `Zone` {$this} has a Domain of {?domain}, but it contains a `DomainSpace` {?ds} which has a Domain of {?dsdomain}. These should be the same."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT DISTINCT $this ?domain ?ds ?dsdomain
WHERE {
$this a s223:Zone .
$this s223:hasDomain ?domain .
$this s223:contains ?ds .
?ds s223:hasDomain ?dsdomain .
FILTER (?domain != ?dsdomain)
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `Zone` shall be associated with exactly one `EnumerationKind-Domain` using the relation `hasDomain`."^^xsd:string ;
            sh:class s223:EnumerationKind-Domain ;
            sh:maxCount 1 ;
            sh:message "s223: A `Zone` shall be associated with exactly one `EnumerationKind-Domain` using the relation `hasDomain`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasDomain ] .

s223:ActuatableProperty a s223:Class,
        sh:NodeShape ;
    rdfs:label "Actuatable Property"^^xsd:string ;
    rdfs:comment """The term "actuatable" implies that writing to the `ActuatableProperty` value will directly trigger a physical actuation by either an `Actuator` or `Equipment`.
In contrast, the term "observable" (see {s223:ObservableProperty}) implies that reading the `ObservableProperty` value will return the result of a physical observation."""^^xsd:string ;
    rdfs:subClassOf s223:Property .

s223:Binary-OnOff a s223:Binary-OnOff,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "On and Off enumerations"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent basic operational states i.e., On and Off.

: Binary-OnOff Enumerations

| Enumeration |
|:-----------|
| `OnOff-Off` |
| `OnOff-On` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Binary .

s223:Constituent-Glycol a s223:Class,
        s223:Constituent-Glycol,
        sh:NodeShape ;
    rdfs:label "Glycol"^^xsd:string ;
    rdfs:comment "`Constituent-Glycol`"^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:Damper a s223:Class,
        sh:NodeShape ;
    rdfs:label "Damper"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` inserted into an air distribution system permitting modification of the air resistance of the system and consequently changing the airflow rate or shutting off the airflow."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Damper` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `Damper` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Damper` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `Damper` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:EnumeratedActuatableProperty a s223:Class,
        sh:NodeShape ;
    rdfs:label "Enumerated actuatable property"^^xsd:string ;
    rdfs:comment "An `EnumeratedActuatableProperty` is a `Property` with an enumerated (fixed) set of possible values that can be changed (actuated)."^^xsd:string ;
    rdfs:subClassOf s223:ActuatableProperty,
        s223:EnumerableProperty .

s223:EnumeratedObservableProperty a s223:Class,
        sh:NodeShape ;
    rdfs:label "Enumerated observable property"^^xsd:string ;
    rdfs:comment "An `EnumeratedObservableProperty` is a `Property` with an enumerated (fixed) set of possible values that cannot be changed (can only be observed)."^^xsd:string ;
    rdfs:subClassOf s223:EnumerableProperty,
        s223:ObservableProperty .

s223:EnumerationKind-Substance a s223:Class,
        s223:EnumerationKind-Substance,
        sh:NodeShape ;
    rdfs:label "Substance"^^xsd:string ;
    rdfs:comment """
This class and its enumerated subclasses represent things that are produced, conveyed, sensed, controlled, or consumed.  Its enumerated subclasses differentate between mediums, particulates, and soot.

: EnumberationKind-Substance Enumerations

| Enumeration |
|:-----------|
| `Substance-Medium` (see {s223:Substance-Medium}) |
| `Substance-Particulate` (see {s223:Substance-Particulate}) |
| `Substance-Soot` (see {s223:Substance-Soot}) |
"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind ;
    sh:property [ rdfs:comment "If a substance has a constituent, that constituent may not itself have constituents."^^xsd:string ;
            sh:path s223:composedOf ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "If a substance has a constituent, that constituent may not itself have constituents."^^xsd:string ;
                    sh:message "s223: This substance {$this} has a constituent {?constituent} that itself composed ofs {?nextConstituent}. Create new substance with only atomic constituents."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?constituent ?nextConstituent
WHERE {
$this s223:composedOf ?constituent .
?constituent s223:ofConstituent/s223:composedOf ?nextConstituent .
}
"""^^xsd:string ] ],
        [ rdfs:comment """If the relation `composedOf` is present, it shall associate an `EnumerationKind-Substance` with one or more Properties that
identify and characterize its constituents. The `Property` identifies the constituent using the relation `ofConstituent`. If appropriate, a
`QuantifiableProperty` may be used to also specify the amount of the constituent using the relations `qudt:hasQuantityKind`, `qudt:hasUnit`, and `qudt:hasValue`.
For example, see {s223:Water-GlycolSolution}."""^^xsd:string ;
            sh:class s223:Property ;
            sh:path s223:composedOf ] .

s223:Fan a s223:Class,
        sh:NodeShape ;
    rdfs:label "Fan"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that causes a gas (e.g., air) to flow."^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "A `Fan` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `Fan` shall have at least one inlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ],
        [ rdfs:comment "A `Fan` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:message "s223: A `Fan` shall have at least one outlet using the medium `Fluid-Air`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasConnectionPoint ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ;
                    sh:node [ sh:property [ sh:class s223:Fluid-Air ;
                                    sh:path s223:hasMedium ] ] ] ] .

s223:LineLineVoltage-10000V a s223:Class,
        s223:LineLineVoltage-10000V,
        sh:NodeShape ;
    rdfs:label "10000V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-10000V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "10000V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-190V a s223:Class,
        s223:LineLineVoltage-190V,
        sh:NodeShape ;
    rdfs:label "190V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-190V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "190V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-208V a s223:Class,
        s223:LineLineVoltage-208V,
        sh:NodeShape ;
    rdfs:label "208V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-208V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "208V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-220V a s223:Class,
        s223:LineLineVoltage-220V,
        sh:NodeShape ;
    rdfs:label "220V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-220V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "220V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-3000V a s223:Class,
        s223:LineLineVoltage-3000V,
        sh:NodeShape ;
    rdfs:label "3000V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-3000V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "3000V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-3300V a s223:Class,
        s223:LineLineVoltage-3300V,
        sh:NodeShape ;
    rdfs:label "3300V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-3300V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "3300V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-380V a s223:Class,
        s223:LineLineVoltage-380V,
        sh:NodeShape ;
    rdfs:label "380V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-380V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "380V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-400V a s223:Class,
        s223:LineLineVoltage-400V,
        sh:NodeShape ;
    rdfs:label "400V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-400V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "400V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-415V a s223:Class,
        s223:LineLineVoltage-415V,
        sh:NodeShape ;
    rdfs:label "415V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-415V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "415V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-4160V a s223:Class,
        s223:LineLineVoltage-4160V,
        sh:NodeShape ;
    rdfs:label "4160V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-4160V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "4160V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-480V a s223:Class,
        s223:LineLineVoltage-480V,
        sh:NodeShape ;
    rdfs:label "480V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-480V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "480V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-6000V a s223:Class,
        s223:LineLineVoltage-6000V,
        sh:NodeShape ;
    rdfs:label "6000V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-6000V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "6000V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-600V a s223:Class,
        s223:LineLineVoltage-600V,
        sh:NodeShape ;
    rdfs:label "600V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-600V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "600V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:LineLineVoltage-6600V a s223:Class,
        s223:LineLineVoltage-6600V,
        sh:NodeShape ;
    rdfs:label "6600V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-6600V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "6600V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:Numerical-Frequency a s223:Class,
        s223:Numerical-Frequency,
        sh:NodeShape ;
    rdfs:label " AC electricity frequency"^^xsd:string ;
    qudt:hasQuantityKind quantitykind:Frequency ;
    qudt:hasUnit unit:HZ ;
    rdfs:comment """This class and its enumerated subclasses represent common frequencies for AC electricity service.

: Numerical-Frequency Enumerations

| Enumeration |
|:-----------|
| `Frequency-50Hz` |
| `Frequency-60Hz` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Numerical ;
    sh:property [ rdfs:comment "A `Numerical-Frequency` shall have a `Unit` of `Hertz`"^^xsd:string ;
            sh:hasValue unit:HZ ;
            sh:path qudt:hasUnit ],
        [ rdfs:comment "A `Numerical-Frequency` shall have a `QuantityKind` of `Frequency`"^^xsd:string ;
            sh:hasValue quantitykind:Frequency ;
            sh:path qudt:hasQuantityKind ] .

s223:Numerical-NumberOfElectricalPhases a s223:Class,
        s223:Numerical-NumberOfElectricalPhases,
        sh:NodeShape ;
    rdfs:label "Number of Electrical Phases"^^xsd:string ;
    qudt:hasQuantityKind quantitykind:Dimensionless ;
    qudt:hasUnit unit:NUM ;
    rdfs:comment """This class and its enumerated subclasses represent all possible service phases for AC electricity service i.e., one or single-phase, and three-phase. The `s223:hasNumberOfElectricalPhases` relation points to one of the values of this enumeration.

: Numerical-NumberOfElectricalPhases Enumerations

| Enumeration |
|:-----------|
| `NumberOfElectricalPhases-SinglePhase` |
| `NumberOfElectricalPhases-ThreePhase` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Numerical .

s223:QuantifiableActuatableProperty a s223:Class,
        sh:NodeShape ;
    rdfs:label "Quantifiable Actuatable Property"^^xsd:string ;
    rdfs:comment "This class is for instances of `QuantifiableProperty` for which numerical values are specified to be modifiable by a user or a machine outside of the model, like a setpoint."^^xsd:string ;
    rdfs:subClassOf s223:ActuatableProperty,
        s223:QuantifiableProperty .

s223:QuantifiableObservableProperty a s223:Class,
        sh:NodeShape ;
    rdfs:label "Quantifiable Observable Property"^^xsd:string ;
    rdfs:comment "This class is for instances of `QuantifiableProperty` for which numerical values are observed, like a temperature reading or a voltage measure."^^xsd:string ;
    rdfs:subClassOf s223:ObservableProperty,
        s223:QuantifiableProperty ;
    sh:property [ rdfs:comment "A `QuantifiableObservableProperty` can be associated with zero or more `QuantifiableProperty`(s) indicating the desired value(s) which the control process is trying to maintain using the relation `hasSetpoint`."^^xsd:string ;
            sh:class s223:QuantifiableProperty ;
            sh:message "s223: A `QuantifiableObservableProperty` can be associated with zero or more `QuantifiableProperty`(s) indicating the desired value(s) which the control process is trying to maintain using the relation `hasSetpoint`."^^xsd:string ;
            sh:path s223:hasSetpoint ] .

s223:Substance-Particulate a s223:Class,
        s223:Substance-Particulate,
        sh:NodeShape ;
    rdfs:label "Particulate"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent common size thresholds of interest for particulate matter that is suspended in a
medium in a way that maintains the physical and chemical properties of the medium.

![Particulate Concentration](figures/Figure_x-y_Particulate_Concentration.svg)

Figure 10-9 shows an instance of a `Connection` with `hasMedium` referencing
`Fluid-Air` that has a `Property` _Particulate Concentration_ of particles with a
diameter of 2.5 micrometres (0.0025 mm) or smaller in units of micrograms per
cubic meter.

![Carbon Monoxide Concentration](figures/Figure_x-y_Medium_Concentration.svg)

Figure 10-10 shows an instance of a `Property` _CO Concentration_ with `ofSubstance`
referencing carbon monoxide `Constituent-CO` and `ofMedium` referencing `Fluid-Air`
measured in parts-per-million.  This figure also shows that the value of this
`Property` can be obtained by using the BACnet protocol via the external reference
to get the `present-value` of `analog-value,67` in the device with an instance
number `12345`.

: Substance-Particulate Enumerations

| Enumeration |
|:-----------|
| `Particulate-PM1.0` |
| `Particulate-PM10.0` |
| `Particulate-PM2.5` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Substance .

s223:Voltage-24V a s223:Class,
        s223:Voltage-24V,
        sh:NodeShape ;
    rdfs:label "24V"^^xsd:string ;
    s223:hasValue 24.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-24V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:Voltage-380V a s223:Class,
        s223:Voltage-380V,
        sh:NodeShape ;
    rdfs:label "380V"^^xsd:string ;
    s223:hasValue 380.0 ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "Voltage-380V"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Voltage .

s223:connectsAt a s223:RelationWithInverse,
        rdf:Property ;
    rdfs:label "connects at"^^xsd:string ;
    s223:inverseOf s223:connectsThrough ;
    rdfs:comment "A `Relation` that associates a `Connection` with a specific `ConnectionPoint`."^^xsd:string .

s223:hasReferenceLocation a s223:Relation,
        rdf:Property ;
    rdfs:label "has reference location"^^xsd:string ;
    rdfs:comment "A `Relation` that associates  a differential sensor with the topological location of the baseline (reference) `Property` (see {s223:observes})."^^xsd:string .

s223:hasValue a s223:Relation,
        rdf:Property ;
    rdfs:label "hasValue"^^xsd:string ;
    rdfs:comment "A `Relation` that associates something with a fixed value, as opposed to a computed, measured, or externally derived value."^^xsd:string .

s223:hasVoltage a s223:Relation,
        rdf:Property ;
    rdfs:label "hasVoltage"^^xsd:string ;
    rdfs:comment "A `Relation` that associates an electricity `Substance-Medium` with an electrical voltage. "^^xsd:string .

s223:DCPositiveVoltage-PoE a s223:Class,
        s223:DCPositiveVoltage-PoE,
        sh:NodeShape ;
    rdfs:label "DCPositiveVoltage-PoE"^^xsd:string ;
    s223:hasVoltage s223:Voltage-PoE ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCPositiveVoltage-PoE"^^xsd:string ;
    rdfs:subClassOf s223:DCVoltage-DCPositiveVoltage .

s223:DayOfWeek-Weekday a s223:Class,
        s223:DayOfWeek-Weekday,
        sh:NodeShape ;
    rdfs:label "Weekday"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent weekdays, according to the Gregorian calendar i.e., Monday, Tuesday, Wednesday, Thursday, and Friday.

: DayOfWeek-Weekday Enumerations

| Enumeration |
|:-----------|
| `Weekday-Friday` |
| `Weekday-Monday` |
| `Weekday-Thursday` |
| `Weekday-Tuesday` |
| `Weekday-Wednesday` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-DayOfWeek .

s223:EnumerationKind-Numerical a s223:Class,
        s223:EnumerationKind-Numerical,
        sh:NodeShape ;
    rdfs:label "EnumerationKind Numerical"^^xsd:string ;
    qudt:hasQuantityKind quantitykind:Unknown ;
    qudt:hasUnit unit:UNKNOWN ;
    rdfs:comment """
Numerical enumeration kinds are used to support the definitions of the
Electricity medium. The enumerations instances in these classes have names that
are recognizable by humans but are just a string for a computer application. To
avoid the need to parse strings, each of these enumeration kinds have
properties associated with the enumeration that represent electrical
phase, voltage, and frequency. The purpose of these properties is to enable a
machine to query them and obtain the same information that a person would
associate with the string.
"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind ;
    sh:property [ rdfs:comment "An `EnumerationKind-Numerical` can be associated with a decimal value using the relation `hasValue`."^^xsd:string ;
            sh:datatype xsd:decimal ;
            sh:path s223:hasValue ],
        [ rdfs:comment "An `EnumerationKind-Numerical` shall be associated with at least one QuantityKind using the relation `hasQuantityKind`."^^xsd:string ;
            sh:class qudt:QuantityKind ;
            sh:minCount 1 ;
            sh:path qudt:hasQuantityKind ],
        [ rdfs:comment "An `EnumerationKind-Numerical` shall be associated with at least one Unit using the relation `hasUnit`."^^xsd:string ;
            sh:class qudt:Unit ;
            sh:minCount 1 ;
            sh:path qudt:hasUnit ;
            sh:severity sh:Info ] .

s223:EnumerationKind-Occupancy a s223:Class,
        s223:EnumerationKind-Occupancy,
        sh:NodeShape ;
    rdfs:label "Occupancy"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent the occupancy status of a space within a building, i.e., the state of being used or occupied by a human being. Some occupancy enumerations have subclasses for more specific use.

: EnumerationKind-Occupancy Enumerations

| Enumeration |
|:-----------|
| `Occupancy-Occupied` |
| `Occupancy-Unoccupied` |
"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind .

s223:EnumerationKind-ThermodynamicPhase a s223:Class,
        s223:EnumerationKind-ThermodynamicPhase,
        sh:NodeShape ;
    rdfs:label "Thermodynamic phase"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent thermodynamic phases, also referred to as states of matter.

: EnumerationKind-Thermodynamic-Phase Enumerations

| Enumeration |
|:-----------|
| `ThermodynamicPhase-Gas` (see {s223:ThermodynamicPhase-Gas}) |
| `ThermodynamicPhase-Liquid` (see {s223:ThermodynamicPhase-Liquid}) |
| `ThermodynamicPhase-Solid` |
| `ThermodynamicPhase-Vapor` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind .

s223:Role-Cooling a s223:Class,
        s223:Role-Cooling,
        sh:NodeShape ;
    rdfs:label "Cooling role"^^xsd:string ;
    rdfs:comment "`Role-Cooling`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:cnx a s223:SymmetricRelation,
        rdf:Property ;
    rdfs:label "cnx"^^xsd:string ;
    rdfs:comment "A `Relation` that associates adjacent entities in a connection path, comprised of Equipment-ConnectionPoint-Connection-ConnectionPoint-Equipment sequences."^^xsd:string .

s223:connectedTo a s223:RelationWithInverse,
        rdf:Property ;
    rdfs:label "connected to"^^xsd:string ;
    s223:inverseOf s223:connectedFrom ;
    rdfs:comment "The relation `connectedTo` indicates that connectable things are `connected` with a specific direction of flow. A is `connectedTo` B, means a direction of flow from A to B.  The inverse direction is indicated by `connectedFrom` (see {s223:connectedFrom})."^^xsd:string .

s223:hasDomain a s223:Relation,
        rdf:Property ;
    rdfs:label "has domain"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Zone` or `DomainSpace` with an `EnumerationKind-Domain` (e.g., `Domain-HVAC`, `Domain-Lighting`)."^^xsd:string .

s223:ofConstituent a s223:Relation,
        rdf:Property ;
    rdfs:label "of constituent"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Property` that characterizes a `Medium-Mix` with one of the constituents of that mix. (e.g., `Fluid-Water` `composedOf` `Property` `ofConstituent` `Constituent-H2O`."^^xsd:string .

s223:DC-PoE a s223:Class,
        s223:DC-PoE,
        sh:NodeShape ;
    rdfs:label "DC-PoE electricity"^^xsd:string ;
    s223:hasVoltage s223:DCPositiveVoltage-PoE ;
    rdfs:comment """This class and its enumerated subclasses represent standardized types of PoE DC electricity.

: DC-PoE Enumerations

| Enumeration |
|:-----------|
| `PoE-802.3af-1` |
| `PoE-802.3at-2` |
| `PoE-802.3bt-3` |
| `PoE-802.3bt-4` |"""^^xsd:string ;
    rdfs:subClassOf s223:Electricity-DC .

s223:LineNeutralVoltage-120V a s223:Class,
        s223:LineNeutralVoltage-120V,
        sh:NodeShape ;
    rdfs:label "120V Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-120V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "120V Line-Neutral Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineNeutralVoltage .

s223:Role-Heating a s223:Class,
        s223:Role-Heating,
        sh:NodeShape ;
    rdfs:label "Heating role"^^xsd:string ;
    rdfs:comment "`Role-Heating`"^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Role .

s223:hasObservationLocation a s223:Relation,
        rdf:Property ;
    rdfs:label "has observation location"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Sensor` with the topological location where it is observing a `Property` (see {s223:observes}). The observation location shall be a `Connectable` (see {s223:Connectable}), `Connection` (see {s223:Connection}), or `ConnectionPoint` (see {s223:ConnectionPoint})."^^xsd:string .

s223:pairedConnectionPoint a s223:SymmetricRelation ;
    rdfs:label "paired connection point"^^xsd:string ;
    rdfs:comment "A `Relation` that associates two `ConnectionPoint`s where an `InletConnectionPoint` shares the same `Substance-Medium` with an `OutletConnectionPoint`."^^xsd:string .

s223:Electricity-Signal a s223:Class,
        s223:Electricity-Signal,
        sh:NodeShape ;
    rdfs:label "Electrical signal"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent the use of electricity for creating communication signals, and common communication protocols.

: Electricity-Signal Enumerations

| Enumeration |
|:-----------|
| `Signal-EIA485` |
| `Signal-WiredEthernet` (see {s223:Signal-WiredEthernet})|
| `Signal-IEC14908` |
| `Signal-Modulated` (see {s223:Signal-Modulated}) |
| `Signal-USB` |"""^^xsd:string ;
    rdfs:subClassOf s223:Constituent-Electricity .

s223:EnumerationKind-Binary a s223:Class,
        s223:EnumerationKind-Binary,
        sh:NodeShape ;
    rdfs:label "Binary value"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent common binary values.

: EnumerationKind-Binary Enumerations

| Enumeration |
|:-----------|
| `Binary-Logical` |
| `Binary-OnOff` |
| `Binary-Position` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind .

s223:Substance-Medium a s223:Class,
        s223:Substance-Medium,
        sh:NodeShape ;
    rdfs:label "Medium"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent substances that facilitate the conveyance of matter, energy, or information.  It is used to qualify `Connection`s and `ConnectionPoint`s with the relation `hasMedium` (see {s223:hasMedium}).

`Substance-Medium` is also the root of the medium hierarchy that is used to ensure compatibility of different medium designations. For example,
`Fluid-Water` and `Water-ChilledWater` are alternative but compatible ways of identifying what is flowing in a pipe, using different degrees of
specificity. `Water-ChilledWater` and `Water-HotWater` are not compatible. Compatibility is determined by testing if one medium is a subclass of the
other. This gets a bit more complicated in the case of mixtures, where at least one of the constituents of a mixture must be compatible with at least one of
the constituents of the other medium.

Testing for medium compatibility is done in the context of entities that have a `hasMedium` relation, such as

* `Connection` and its associated `ConnectionPoint`s. See {s223:Connection}.

* `Junction` and its associated `ConnectionPoint`s See {s223:Junction}.

* `Filter` and its associated `ConnectionPoint`s. See {s223:Filter}.

* Any `Concept` that has a `hasMedium` relation, compared with an associated `Property` with an `ofMedium` relation. See {s223:Concept}.

These tests are listed in the constraint tables for the respective classes listed above, identified as Case 1, Case 2, etc.

: Substance-Medium Enumerations

| Enumeration |
|:-----------|
| `Medium-Constituent` (see {s223:Medium-Constituent}) |
| `Medium-Mix` (see {s223:Medium-Mix}) |
| `Medium-ThermalContact` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Substance .

s223:composedOf a s223:Relation,
        rdf:Property ;
    rdfs:label "composed of"^^xsd:string ;
    rdfs:comment "The relation `composedOf` is used to indicate what substances constitute a material. Allowable values are instances of `Property` that in turn identify constituents defined in `Medium-Constituent` (see {s223:Medium-Constituent}) via the relation `ofConstituent`."^^xsd:string .

s223:Constituent-H2O a s223:Class,
        s223:Constituent-H2O,
        sh:NodeShape ;
    rdfs:label "H2O i.e., pure water"^^xsd:string ;
    rdfs:comment "`Constituent-H2O`"^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:EM-Light a s223:Class,
        s223:EM-Light,
        sh:NodeShape ;
    rdfs:label "Light"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent light at commonly defined frequency or wavelength ranges.

: EM-Light Enumerations

| Enumeration |
|:-----------|
| `Light-Infrared` (see {s223:Light-Infrared}) |
| `Light-Ultraviolet` |
| `Light-Visible` |"""^^xsd:string ;
    rdfs:subClassOf s223:Constituent-EM .

s223:EnumerationKind-ElectricalVoltagePhases a s223:Class,
        s223:EnumerationKind-ElectricalVoltagePhases,
        sh:NodeShape ;
    rdfs:label "Electrical voltage phase pairs"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent all possible phase pairs for AC electricity service voltages.

: EnumerationKind-ElectricalVoltagePhases Enumerations

| Enumeration |
|:-----------|
| `ElectricalVoltagePhases-ABLineLineVoltage` |
| `ElectricalVoltagePhases-ANLineNeutralVoltage` |
| `ElectricalVoltagePhases-BCLineLineVoltage` |
| `ElectricalVoltagePhases-BNLineNeutralVoltage` |
| `ElectricalVoltagePhases-CALineLineVoltage` |
| `ElectricalVoltagePhases-CNLineNeutralVoltage` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind .

s223:Valve a s223:Class,
        sh:NodeShape ;
    rdfs:label "Valve"^^xsd:string ;
    rdfs:comment "A piece of `Equipment` that can be adjusted to allow, regulate, or stop the flow of fluid in a pipe or a duct."^^xsd:string ;
    rdfs:subClassOf s223:Equipment .

s223:hasAspect a s223:Relation,
        rdf:Property ;
    rdfs:label "has aspect"^^xsd:string ;
    rdfs:comment "`hasAspect` is used to establish the context of a `Property`. The value must be an instance of `EnumerationKind`. For example, if a `Property` has a Temperature value of 45.3, the `hasAspect` relation is used to state what that represents, such as a Temperature limit during working hours, etc. A `Property` can have any number of `hasAspect` relations as needed to establish the context."^^xsd:string .

s223:Binary-Position a s223:Binary-Position,
        s223:Class,
        sh:NodeShape ;
    rdfs:label "Binary position enumerations"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent basic positional states i.e., Closed and Open.

: Binary-Position Enumerations

| Enumeration |
|:-----------|
| `Position-Closed` |
| `Position-Open` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Binary .

s223:DCVoltage-DCNegativeVoltage a s223:Class,
        s223:DCVoltage-DCNegativeVoltage,
        sh:NodeShape ;
    rdfs:label "DCVoltage-DCNegativeVoltage"^^xsd:string ;
    s223:hasVoltage s223:Numerical-Voltage ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment """This class and its enumerated subclasses represent common negative voltages for DC electricity service.

: DCVoltage-DCNegativeVoltage Enumerations

| Enumeration |
|:-----------|
| `DCNegativeVoltage-12.0V` |
| `DCNegativeVoltage-190.0V` |
| `DCNegativeVoltage-2.5V` |
| `DCNegativeVoltage-24.0V` |
| `DCNegativeVoltage-3.0V` |
| `DCNegativeVoltage-380.0V` |
| `DCNegativeVoltage-48.0V` |
| `DCNegativeVoltage-5.0V` |
| `DCNegativeVoltage-6.0V` |"""^^xsd:string ;
    rdfs:subClassOf s223:Voltage-DCVoltage .

s223:Electricity-DC a s223:Class,
        s223:Electricity-DC,
        sh:NodeShape ;
    rdfs:label "DC electricity"^^xsd:string ;
    s223:hasVoltage s223:Numerical-Voltage ;
    rdfs:comment """This class and its enumerated subclasses represent common DC electricity services.

: Electricity-DC Enumerations

| Enumeration |
|:-----------|
| `DC-12V` |
| `DC-24V` |
| `DC-380V` |
| `DC-48V` |
| `DC-5V` |
| `DC-6V` |
| `DC-PoE` |"""^^xsd:string ;
    rdfs:subClassOf s223:Constituent-Electricity ;
    sh:property [ rdfs:comment "A DC electricity medium shall have one or two reference voltages."^^xsd:string ;
            sh:class s223:Numerical-Voltage ;
            sh:maxCount 2 ;
            sh:minCount 1 ;
            sh:path s223:hasVoltage ] .

s223:EnumerationKind-ElectricalPhaseIdentifier a s223:Class,
        s223:EnumerationKind-ElectricalPhaseIdentifier,
        sh:NodeShape ;
    rdfs:label "Electrical phase identifier"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent all possible electrical phases for AC electricity service.

: EnumerationKind-ElectricalPhaseIdentifier Enumerations

| Enumeration |
|:-----------|
| `ElectricalPhaseIdentifier-A` |
| `ElectricalPhaseIdentifier-AB` |
| `ElectricalPhaseIdentifier-ABC` |
| `ElectricalPhaseIdentifier-B` |
| `ElectricalPhaseIdentifier-BC` |
| `ElectricalPhaseIdentifier-C` |
| `ElectricalPhaseIdentifier-CA` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind .

s223:LineLineVoltage-240V a s223:Class,
        s223:LineLineVoltage-240V,
        sh:NodeShape ;
    rdfs:label "240V Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-240V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "240V Line-Line Voltage"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-LineLineVoltage .

s223:Signal-FiberEthernet a s223:Class,
        s223:Signal-FiberEthernet,
        sh:NodeShape ;
    rdfs:label "Fiber Ethernet"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent common fiber Ethernet communication protocols.

: Signal-FiberEthernet Enumerations

| Enumeration |
|:-----------|
| `FiberEthernet-OM1` |
| `FiberEthernet-OM2` |
| `FiberEthernet-OM3` |
| `FiberEthernet-OM4` |
| `FiberEthernet-OM5` |
| `FiberEthernet-OS1` |
| `FiberEthernet-OS2` |"""^^xsd:string,
        "`Signal-FiberEthernet`"^^xsd:string ;
    rdfs:subClassOf s223:Infrared-Signal .

s223:hasEnumerationKind a s223:Relation,
        rdf:Property ;
    rdfs:label "has enumeration kind"^^xsd:string ;
    rdfs:comment "A `Relation` that associates an `EnumerableProperty` with a class of enumeration values. This is used to, for example, identify what kind of substance is transported along a `Connection` or which day of the week a setpoint is active."^^xsd:string .

s223:mapsTo a s223:Relation,
        rdf:Property ;
    rdfs:label "mapsTo"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `ConnectionPoint` of a `Connectable` with a corresponding `ConnectionPoint` of the one containing it (see {pub:equipment-containment}). The associated `ConnectionPoint`s shall have a compatible medium (see {s223:Substance-Medium})."^^xsd:string .

s223:Connection a s223:Class,
        sh:NodeShape ;
    rdfs:label "Connection"^^xsd:string ;
    rdfs:comment """A `Connection` is the modeling construct used to represent the thing (e.g., pipe, duct, conductor, or free space) that is used to convey
some Medium (e.g., water, air, electricity, light, wi-fi) between two connectable things. All connections have two or more connection points bound
to either `Equipment` (see {s223:Equipment}), `DomainSpace` (see {s223:DomainSpace}), or `Junction` (see {s223:Junction}). See Figure 6-2. If the direction
of flow is constrained, that constraint is indicated by using one or more `InletConnectionPoint`s (see {s223:InletConnectionPoint}) to represent the
inflow points and `OutletConnectionPoint`s (see {s223:OutletConnectionPoint}) to represent the outflow points.

A `Connection` may contain branches or intersections. These may be modeled using `Junction`s if it is necessary to identify a specific intersection.
(see {s223:Junction}).

The constraint to maintain compatible mediums among a `Connection` and all of its associated `ConnectionPoint`s gives rise to multiple
validation test cases, where the specified medium might be a pure medium, or a mixture with constituents. See {s223:Substance-Medium} for
more details.

![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg)"""^^xsd:string ;
    rdfs:subClassOf s223:Concept ;
    sh:property [ rdfs:comment "Incompatible Medium. Case 7: Two `ConnectionPoint`s with mediums with constituents."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 7: Two `ConnectionPoint`s with mediums with constituents."^^xsd:string ;
                    sh:message "s223: {?cp1} with medium {?m2} is incompatible with {?cp2} with medium {?m1}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?cp1 ?m1 ?cp2 ?m2
WHERE {
$this s223:cnx ?cp1 .
?cp1 a/rdfs:subClassOf* s223:ConnectionPoint .
?cp1 s223:hasMedium ?m2 .
$this s223:cnx ?cp2 .
?cp2 a/rdfs:subClassOf* s223:ConnectionPoint .
FILTER (?cp1 != ?cp2 ) .
?cp2 s223:hasMedium ?m1 .
    ?m1 s223:composedOf/s223:ofConstituent ?s1 .
    ?m2 s223:composedOf/s223:ofConstituent ?s2 .
  FILTER NOT EXISTS {
    ?m1 s223:composedOf/s223:ofConstituent ?s11 .
    ?m2 s223:composedOf/s223:ofConstituent ?s12 .
    FILTER (?s11 = ?s12) .
  }
  FILTER NOT EXISTS {
    ?m1 s223:composedOf/s223:ofConstituent ?s21 .
    ?m2 s223:composedOf/s223:ofConstituent ?s22 .
    {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} .
  }
}
"""^^xsd:string ] ],
        [ rdfs:comment "If the relation `connectsFrom` is present it shall associate the `Connection` with a `Connectable`."^^xsd:string ;
            sh:class s223:Connectable ;
            sh:message "s223: If the relation `connectsFrom` is present it shall associate the `Connection` with a `Connectable`."^^xsd:string ;
            sh:name "ConnectionToUpstreamConnectableShape"^^xsd:string ;
            sh:path s223:connectsFrom ],
        [ rdfs:comment "A `Connection` must only have a `cnx` relation with a `ConnectionPoint`"^^xsd:string ;
            sh:path s223:cnx ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "A `Connection` must only have a `cnx` relation with a `ConnectionPoint`"^^xsd:string ;
                    sh:message "s223: {$this} cannot have a s223:cnx relation to {?something}, because {?something} is not a `ConnectionPoint`."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """SELECT $this ?something
WHERE {
$this s223:cnx ?something .
FILTER NOT EXISTS {?something a/rdfs:subClassOf* s223:ConnectionPoint} .
}"""^^xsd:string ] ],
        [ rdfs:comment "A `Connection` shall be associated with exactly one `Substance-Medium` using the relation `hasMedium`."^^xsd:string ;
            sh:class s223:Substance-Medium ;
            sh:maxCount 1 ;
            sh:message "s223: A `Connection` shall be associated with exactly one `Substance-Medium` using the relation `hasMedium`."^^xsd:string ;
            sh:minCount 1 ;
            sh:name "Connection medium"^^xsd:string ;
            sh:path s223:hasMedium ],
        [ rdfs:comment "Incompatible Medium. Case 3: `Connection` with a pure medium and an associated `ConnectionPoint` with constituents."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 3: `Connection` with a pure medium and an associated `ConnectionPoint` with constituents."^^xsd:string ;
                    sh:message "s223: `Connection` {$this} with medium {?m2} is incompatible with {?cp} with medium {?m1}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m2 ?cp ?m1
WHERE {
$this s223:cnx ?cp .
?cp a/rdfs:subClassOf* s223:ConnectionPoint .
?cp s223:hasMedium ?m2 .
$this s223:hasMedium ?m1 .
?m2 s223:composedOf/s223:ofConstituent ?s2 .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {
  ?m2 s223:composedOf/s223:ofConstituent ?s12 .
  {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} .
}
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `Connection` shall have two or more `connectsAt` relations to connection points"^^xsd:string ;
            sh:class s223:ConnectionPoint ;
            sh:message "s223: A `Connection` shall have two or more `connectsAt` relations to connection points"^^xsd:string ;
            sh:minCount 2 ;
            sh:path s223:connectsAt ;
            sh:severity sh:Warning ],
        [ rdfs:comment "If the relation `connectsTo` is present it shall associate the `Connection` with a `Connectable`."^^xsd:string ;
            sh:class s223:Connectable ;
            sh:message "s223: If the relation `connectsTo` is present it shall associate the `Connection` with a `Connectable`."^^xsd:string ;
            sh:name "ConnectionToDownstreamConnectableShape"^^xsd:string ;
            sh:path s223:connectsTo ],
        [ rdfs:comment "Incompatible Medium. Case 6: Two `ConnectionPoint`s, one with a medium with constituents and one with a pure medium."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 6: A medium with constituents and a pure medium."^^xsd:string ;
                    sh:message "s223: {?cp1} with medium {?m1} is incompatible with {?cp2} with medium {?m2}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?cp1 ?m1 ?cp2 ?m2
WHERE {
$this s223:cnx ?cp1 .
?cp1 a/rdfs:subClassOf* s223:ConnectionPoint .
?cp1 s223:hasMedium ?m1 .
$this s223:cnx ?cp2 .
?cp2 a/rdfs:subClassOf* s223:ConnectionPoint .
FILTER (?cp1 != ?cp2 ) .
?cp2 s223:hasMedium ?m2 .
?m2 s223:composedOf/s223:ofConstituent ?s2 .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {
  ?m2 s223:composedOf/s223:ofConstituent ?s12 .
  {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} .
}
}
"""^^xsd:string ] ],
        [ rdfs:comment "Incompatible Medium. Case 2: A `Connection` with constituents and an associated `ConnectionPoint` with a pure medium."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 2: A `Connection` with constituents and an associated `ConnectionPoint` with a pure medium."^^xsd:string ;
                    sh:message "s223: `Connection` {$this} with medium {?m2} is incompatible with {?cp} with medium {?m1}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m2 ?cp ?m1
WHERE {
$this s223:cnx ?cp .
?cp a/rdfs:subClassOf* s223:ConnectionPoint .
?cp s223:hasMedium ?m1 .
$this s223:hasMedium ?m2 .
?m2 s223:composedOf/s223:ofConstituent ?s2 .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {
  ?m2 s223:composedOf/s223:ofConstituent ?s12 .
  {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} .
}
}
"""^^xsd:string ] ],
        [ rdfs:comment "Incompatible Medium. Case 5: Two `ConnectionPoint`s with pure mediums."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 5: Two `ConnectionPoint`s with pure mediums."^^xsd:string ;
                    sh:message "s223: {?cp1} with medium {?m1} is incompatible with {?cp2} with medium {?m2}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?cp1 ?m1 ?cp2 ?m2
WHERE {
$this s223:cnx ?cp1 .
?cp1 a/rdfs:subClassOf* s223:ConnectionPoint .
?cp1 s223:hasMedium ?m1 .
$this s223:cnx ?cp2 .
?cp2 a/rdfs:subClassOf* s223:ConnectionPoint .
?cp2 s223:hasMedium ?m2 .
FILTER (?m1 != ?m2 ) .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {?m2 s223:composedOf ?c2}
FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) .
FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "If the relation `hasRole` is present it shall associate the `Connection` with an `EnumerationKind-Role`."^^xsd:string ;
            sh:class s223:EnumerationKind-Role ;
            sh:message "s223: If the relation `hasRole` is present it shall associate the `Connection` with an `EnumerationKind-Role`."^^xsd:string ;
            sh:path s223:hasRole ],
        [ rdfs:comment "A `Connection` shall have two or more `cnx` relations to connection points"^^xsd:string ;
            sh:class s223:ConnectionPoint ;
            sh:message "s223: A `Connection` shall have two or more `cnx` relations to connection points"^^xsd:string ;
            sh:path s223:cnx ],
        [ rdfs:comment "If the relation `hasThermodynamicPhase` is present it shall associate the `Connection` with at most one `EnumerationKind-ThermodynamicPhase`."^^xsd:string ;
            sh:class s223:EnumerationKind-ThermodynamicPhase ;
            sh:maxCount 1 ;
            sh:message "s223: If the relation `hasThermodynamicPhase` is present it shall associate the `Connection` with at most one `EnumerationKind-ThermodynamicPhase`."^^xsd:string ;
            sh:path s223:hasThermodynamicPhase ],
        [ rdfs:comment "Incompatible Medium. Case 1: A `Connection` with a pure medium and an associated `ConnectionPoint` with a pure medium."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 1: Two pure mediums."^^xsd:string ;
                    sh:message "s223: `Connection` {$this} with medium {?m2} is incompatible with {?cp} with medium {?m1}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m2 ?cp ?m1
WHERE {
$this s223:cnx ?cp .
?cp a/rdfs:subClassOf* s223:ConnectionPoint .
?cp s223:hasMedium ?m1 .
$this s223:hasMedium ?m2 .
FILTER (?m1 != ?m2 ) .
FILTER NOT EXISTS {?m1 s223:composedOf ?c1} .
FILTER NOT EXISTS {?m2 s223:composedOf ?c2}
FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) .
FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "Incompatible Medium. Case 4: A `Connection` with constituents and an associated `ConnectionPoint` with constituents."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Incompatible Medium. Case 4: A `Connection` with constituents and an associated `ConnectionPoint` with constituents."^^xsd:string ;
                    sh:message "s223: `Connection` {$this} with medium {?m2} is incompatible with {?cp} with medium {?m1}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?m2 ?cp ?m1
WHERE {
$this s223:cnx ?cp .
?cp a/rdfs:subClassOf* s223:ConnectionPoint .
?cp s223:hasMedium ?m2 .
$this s223:hasMedium ?m1 .
    ?m1 s223:composedOf/s223:ofConstituent ?s1 .
    ?m2 s223:composedOf/s223:ofConstituent ?s2 .
  FILTER NOT EXISTS {
    ?m1 s223:composedOf/s223:ofConstituent ?s11 .
    ?m2 s223:composedOf/s223:ofConstituent ?s12 .
    FILTER (?s11 = ?s12) .
  }
  FILTER NOT EXISTS {
    ?m1 s223:composedOf/s223:ofConstituent ?s21 .
    ?m2 s223:composedOf/s223:ofConstituent ?s22 .
    {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} .
  }
}
"""^^xsd:string ] ] .

s223:DCVoltage-DCPositiveVoltage a s223:Class,
        s223:DCVoltage-DCPositiveVoltage,
        sh:NodeShape ;
    rdfs:label "DCVoltage-DCPositiveVoltage"^^xsd:string ;
    s223:hasVoltage s223:Numerical-Voltage ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment """This class and its enumerated subclasses represent common positive voltages for DC electricity service.

: DCVoltage-DCPositiveVoltage Enumerations

| Enumeration |
|:-----------|
| `DCPositiveVoltage-12.0V` |
| `DCPositiveVoltage-190.0V` |
| `DCPositiveVoltage-2.5V` |
| `DCPositiveVoltage-24.0V` |
| `DCPositiveVoltage-3.0V` |
| `DCPositiveVoltage-380.0V` |
| `DCPositiveVoltage-48.0V` |
| `DCPositiveVoltage-5.0V` |
| `DCPositiveVoltage-6.0V` |
| `DCPositiveVoltage-PoE` |"""^^xsd:string ;
    rdfs:subClassOf s223:Voltage-DCVoltage .

qudt:hasUnit rdfs:comment "A reference to the unit of measure of a `QuantifiableProperty` of interest."^^xsd:string .

s223:Connectable a s223:AbstractClass,
        sh:NodeShape ;
    rdfs:label "Connectable"^^xsd:string ;
    rdfs:comment "`Connectable` is an abstract class representing a thing such as, `Equipment` (see {s223:Equipment}), `DomainSpace` (see {s223:DomainSpace}), or `Junction` (see {s223:Junction}) that can be `connected` via connection points and connections."^^xsd:string ;
    rdfs:subClassOf s223:Concept ;
    sh:property [ rdfs:comment "If the relation `connectedThrough` is present it shall associate the `Connectable` with a `Connection`."^^xsd:string ;
            sh:class s223:Connection ;
            sh:message "s223: If the relation `connectedThrough` is present it shall associate the `Connectable` with a `Connection`."^^xsd:string ;
            sh:name "EquipmentToConnectionShape"^^xsd:string ;
            sh:path s223:connectedThrough ],
        [ rdfs:comment "If the relation `hasConnectionPoint` is present it shall associate the `Connectable` with a `ConnectionPoint`."^^xsd:string ;
            sh:class s223:ConnectionPoint ;
            sh:message "s223: If the relation `hasConnectionPoint` is present it shall associate the `Connectable` with a `ConnectionPoint`."^^xsd:string ;
            sh:name "EquipmentToConnectionPointShape"^^xsd:string ;
            sh:path s223:hasConnectionPoint ],
        [ rdfs:comment "If the relation `connected` is present it shall associate the `Connectable` with a `Connectable`."^^xsd:string ;
            sh:class s223:Connectable ;
            sh:message "s223: If the relation `connected` is present it shall associate the `Connectable` with a `Connectable`."^^xsd:string ;
            sh:name "SymmetricConnectableToConnectableShape"^^xsd:string ;
            sh:path s223:connected ],
        [ rdfs:comment "If a `Connectable` has `connected` or `connectedTo` (i.e. high-level connection specification), it must also have the supporting `cnx` relations (low-level connection specification)."^^xsd:string ;
            sh:path s223:cnx ;
            sh:severity sh:Warning ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "If a `Connectable` has the relation`connected` or `connectedTo` (i.e. high-level connection specification), it must also have the supporting `cnx` relations (low-level connection specification)."^^xsd:string ;
                    sh:message "s223: {$this} is s223:connected (high-level) to {?otherC} but not connected at the cnx-level."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?otherC
WHERE {
$this s223:connected ?otherC .
FILTER NOT EXISTS {$this s223:cnx+ ?otherC}
}
"""^^xsd:string ] ],
        [ rdfs:comment "If the relation `cnx` is present it shall associate the `Connectable` with a `ConnectionPoint`."^^xsd:string ;
            sh:class s223:ConnectionPoint ;
            sh:message "s223: If the relation `cnx` is present it shall associate the `Connectable` with a `ConnectionPoint`."^^xsd:string ;
            sh:path s223:cnx ],
        [ rdfs:comment "If the relation `connectedTo` is present it shall associate the `Connectable` with a `Connectable`."^^xsd:string ;
            sh:class s223:Connectable ;
            sh:message "s223: If the relation `connectedTo` is present it shall associate the `Connectable` with a `Connectable`."^^xsd:string ;
            sh:name "ConnectableToConnectableShape"^^xsd:string ;
            sh:path s223:connectedTo ],
        [ rdfs:comment "If the relation `connectedFrom` is present it shall associate the `Connectable` with a `Connectable`."^^xsd:string ;
            sh:class s223:Connectable ;
            sh:message "s223: If the relation `connectedFrom` is present it shall associate the `Connectable` with a `Connectable`."^^xsd:string ;
            sh:path s223:connectedFrom ] .

s223:DCVoltage-DCZeroVoltage a s223:Class,
        s223:DCVoltage-DCZeroVoltage,
        sh:NodeShape ;
    rdfs:label "DCVoltage-DCZeroVoltage"^^xsd:string ;
    s223:hasVoltage s223:Voltage-0V ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment "DCVoltage-DCZero voltage"^^xsd:string ;
    rdfs:subClassOf s223:Voltage-DCVoltage .

s223:Fluid-Refrigerant a s223:Class,
        s223:Fluid-Refrigerant,
        sh:NodeShape ;
    rdfs:label "Refrigerant"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent commonly used refrigerants.

: Fluid-Refrigerant Enumerations

| Enumeration |
|:-----------|
| `Refrigerant-R-123` |
| `Refrigerant-R-134A` |
| `Refrigerant-R-22` |
| `Refrigerant-R-290` |
| `Refrigerant-R-404A` |
| `Refrigerant-R-407C` |
| `Refrigerant-R-410A` |
| `Refrigerant-R-600A` |
| `Refrigerant-R-717` |
| `Refrigerant-R-744` |
"""^^xsd:string ;
    rdfs:subClassOf s223:Mix-Fluid .

s223:EnumerationKind a s223:Class,
        s223:EnumerationKind,
        sh:NodeShape ;
    rdfs:label "Enumeration kind"^^xsd:string ;
    rdfs:comment """  This is the encapsulating class for all EnumerationKinds.
EnumerationKinds define the (closed) set of permissible values for a given purpose.
For example, the DayOfWeek `EnumerationKind` enumerates the days of the week and allows no other values.

EnumerationKinds are arranged in a class hierarchy tree, with the root class named `EnumerationKind`. Each subclass is named
starting with its immediate superclass, followed by a hyphen and a name that is unique among the sibling classes.
Each class is also an instance of itself. This unusual modeling pattern was used to achieve:

- The ability to set an EnumerationKind value that is more general, or not yet fully specified
at the time of modeling, such as s223:Electricity-AC without having to state exactly what voltage or frequency it is.

- The ability to use the sh:class SHACL predicate at any level in the EnumerationKind hierarchy
to constrain a value in the s223 specification, even if it is a more general one such as s223:Electricity-AC in the above example.

Certain validation constraints exist in the standard that evaluate compatibility of EnumerationKinds.
Two values are deemed compatible if they are the same, if one is a direct ancestor (or descendant) of the other,
or if they are mixtures sharing at least one constituent."""^^xsd:string ;
    rdfs:subClassOf s223:Concept .

s223:EnumerationKind-Domain a s223:Class,
        s223:EnumerationKind-Domain,
        sh:NodeShape ;
    rdfs:label "Domain"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent building systems and services e.g., HVAC, Lighting, and Plumbing.

: EnumerationKind-Domain Enumerations

| Enumeration |
|:-----------|
| `Domain-ConveyanceSystems` |
| `Domain-Electrical` |
| `Domain-FireProtection` |
| `Domain-HVAC` |
| `Domain-Lighting` |
| `Domain-Networking` |
| `Domain-Occupancy` |
| `Domain-PhysicalSecurity` |
| `Domain-Plumbing` |
| `Domain-Refrigeration` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind .

s223:Medium-Constituent a s223:Class,
        s223:Medium-Constituent,
        sh:NodeShape ;
    rdfs:label "Constituent"^^xsd:string ;
    rdfs:comment """
This class and its enumerated subclasses represent substances that may be combined to form a `Medium-Mix`. Constituents are distinguished from `Medium-Mix` and its subclasses in that constituents cannot use the `composedOf` relation to reference a concentration of other constituents.

: Medium-Constituent Enumerations

| Enumeration |
|:-----------|
| `Constituent-CO2` |
| `Constituent-CO` |
| `Constituent-Electricity` (see {s223:Constituent-Electricity}) |
| `Constituent-EM` (see {s223:Constituent-EM}) |
| `Constituent-Glycol` |
| `Constituent-H2O` |
| `Constituent-H2S` |
| `Constituent-CH4` |
| `Constituent-NOX` (see {s223:Constituent-NOX}) |
| `Constituent-O3` |
| `Constituent-Radon` |
| `Constituent-SO2` |
| `Constituent-VolatileOrganicCompounds` |
"""^^xsd:string ;
    rdfs:subClassOf s223:Substance-Medium .

s223:contains a s223:Relation,
        rdf:Property ;
    rdfs:label "contains"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a piece of `Equipment` with its component pieces of `Equipment`, or a `PhysicalSpace` (see {s223:PhysicalSpace}) with its component `PhysicalSpace`s."^^xsd:string .

s223:Sensor a s223:Class,
        sh:NodeShape ;
    rdfs:label "Sensor"^^xsd:string ;
    rdfs:comment """
A `Sensor` `observes` an `ObservableProperty` (see {s223:ObservableProperty})
which may be quantifiable (see {s223:QuantifiableObservableProperty}), such as a
temperature, flow, or concentration, or enumerable (see {s223:EnumeratedObservableProperty}),
such as an occupancy state.

If a `Sensor` observes a `QuantifiableObservableProperty` relative to an assumed
or common reference point, it can be modeled with only an observation location.
For example:

```turtle
@prefix : <http://example.com/> .

:example1 a s223:TemperatureSensor ;
    s223:hasObservationLocation :location1 ;
    qudt:hasQuantityKind quantitykind:Temperature .
```

If a `Sensor` observes a `QuantifiableObservableProperty` relative to a unique
or specified reference point, it can be modeled with an observation location and
a reference location, and indicating the difference between two values by setting `isDeltaQuantity` to `true`. For example:

```turtle
@prefix : <http://example.com/> .

:example2 a s223:TemperatureSensor ;
    s223:hasObservationLocation :location1 ;
    s223:hasReferenceLocation :location2 ;
    qudt:hasQuantityKind quantitykind:Temperature ;
    qudt:isDeltaQuantity true .
```
"""^^xsd:string ;
    rdfs:subClassOf s223:Equipment ;
    sh:property [ rdfs:comment "s223: If the observed `Property` has isDeltaQuantity true, the `Sensor` shall have a `hasReferenceLocation` relation."^^xsd:string ;
            sh:path s223:observes ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "s223: If the observed `Property` has isDeltaQuantity true, the `Sensor` shall have a `hasReferenceLocation` relation."^^xsd:string ;
                    sh:message "s223: `Sensor` {$this} has `Property` {?x} with isDeltaQuantity true, but the `Sensor` lacks a reference location."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
          SELECT $this ?x
          WHERE {
$this s223:observes/qudt:isDeltaQuantity true .
$this s223:observes ?x .
?x a/rdfs:subClassOf* s223:QuantifiableProperty .
FILTER NOT EXISTS {$this s223:hasReferenceLocation ?y}
}
"""^^xsd:string ] ],
        [ rdfs:comment "s223: If the `hasReferenceLocation` relation exists, the observed `Property` shall have isDeltaQuantity true."^^xsd:string ;
            sh:path s223:observes ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "s223: If the `hasReferenceLocation` relation exists, the observed `Property` shall have isDeltaQuantity true."^^xsd:string ;
                    sh:message "s223: `Sensor` {$this} has a reference location, but its `Property` lacks isDeltaQuantity true."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
          SELECT $this
          WHERE {
$this s223:hasReferenceLocation ?y .
$this s223:observes ?x .
?x a/rdfs:subClassOf* s223:QuantifiableProperty .
FILTER NOT EXISTS {$this s223:observes/qudt:isDeltaQuantity true}
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `Sensor` shall be associated with exactly one `ObservableProperty` using the relation `observes`."^^xsd:string ;
            sh:class s223:ObservableProperty ;
            sh:maxCount 1 ;
            sh:message "s223: A `Sensor` shall be associated with exactly one `ObservableProperty` using the relation `observes`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:observes ],
        [ rdfs:comment "If a `Sensor` measures a differential property, it shall be associated with exactly 1 of `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasReferenceLocation`."^^xsd:string ;
            sh:maxCount 1 ;
            sh:message "s223: If a `Sensor` measures a differential property, it shall be associated with exactly 1 of `Connectable`, `Connection`, or `ConnectionPoint` using the relation `hasReferenceLocation`."^^xsd:string ;
            sh:path s223:hasReferenceLocation ],
        [ rdfs:comment "A `Sensor` shall be associated with exactly one location using the relation `hasObservationLocation`."^^xsd:string ;
            sh:maxCount 1 ;
            sh:message "s223: A `Sensor` shall be associated with exactly one location using the relation `hasObservationLocation`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path s223:hasObservationLocation ],
        [ rdfs:comment "If the relation `hasMeasurementResolution` is present it shall associate a `Sensor` with a `QuantifiableProperty`."^^xsd:string ;
            sh:class s223:QuantifiableProperty ;
            sh:message "s223: If the relation `hasMeasurementResolution` is present it shall associate a `Sensor` with a `QuantifiableProperty`."^^xsd:string ;
            sh:path s223:hasMeasurementResolution ] .

s223:hasRole a s223:Relation,
        rdf:Property ;
    rdfs:label "hasRole"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a role with of a piece of `Equipment`, a `Connection`, `ConnectionPoint`, or `System` within a building (e.g., a heating coil might be associated with `Role-Heating`). Possible values are defined in `EnumerationKind-Role` (see {s223:EnumerationKind-Role})."^^xsd:string .

s223:Signal-WiredEthernet a s223:Class,
        s223:Signal-WiredEthernet,
        sh:NodeShape ;
    rdfs:label "Wired Ethernet"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent common wired Ethernet protocols.

: Signal-WiredEthernet Enumerations

| Enumeration |
|:-----------|
| `WiredEthernet-Cat1` |
| `WiredEthernet-Cat2` |
| `WiredEthernet-Cat3` |
| `WiredEthernet-Cat4` |
| `WiredEthernet-Cat5` |
| `WiredEthernet-Cat5e` |
| `WiredEthernet-Cat6` |
| `WiredEthernet-Cat6a` |
| `WiredEthernet-Cat7` |
| `WiredEthernet-Cat7a` |
| `WiredEthernet-Cat8` |"""^^xsd:string ;
    rdfs:subClassOf s223:Electricity-Signal .

s223:hasProperty a s223:Relation,
        rdf:Property ;
    rdfs:label "has Property"^^xsd:string ;
    rdfs:comment "A `Relation` that associates a `Concept` with a `Property`."^^xsd:string .

s223:Mix-Fluid a s223:Class,
        s223:Mix-Fluid,
        sh:NodeShape ;
    rdfs:label "Fluid mixture"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent substances that are commonly used to convey liquids or gases.

: Mix-Fluid Enumerations

| Enumeration |
|:-----------|
| `Fluid-Air` |
| `Fluid-NaturalGas` |
| `Fluid-Oil`  |
| `Fluid-Refrigerant` (see {s223:Fluid-Refrigerant}) |
| `Fluid-Water` (see {s223:Fluid-Water}) |"""^^xsd:string ;
    rdfs:subClassOf s223:Medium-Mix .

s223:Numerical-LineLineVoltage a s223:Class,
        s223:Numerical-LineLineVoltage,
        sh:NodeShape ;
    rdfs:label "Line-Line Voltage"^^xsd:string ;
    s223:hasVoltage s223:Numerical-Voltage ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment """This class and its enumerated instances represent common line-line voltages for AC electricity service.

: Numerical-LineLineVoltage Enumerations

| Enumeration |
|:-----------|
| `LineLineVoltage-10000V` |
| `LineLineVoltage-190V` |
| `LineLineVoltage-208V` |
| `LineLineVoltage-220V` |
| `LineLineVoltage-240V` |
| `LineLineVoltage-3000V` |
| `LineLineVoltage-3300V` |
| `LineLineVoltage-380V` |
| `LineLineVoltage-400V` |
| `LineLineVoltage-415V` |
| `LineLineVoltage-4160V` |
| `LineLineVoltage-480V` |
| `LineLineVoltage-6000V` |
| `LineLineVoltage-600V` |
| `LineLineVoltage-6600V` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Numerical ;
    sh:property [ rdfs:comment "A Numerical-LineLineVoltage shall have a `Numerical-Voltage`"^^xsd:string ;
            sh:class s223:Numerical-Voltage ;
            sh:minCount 1 ;
            sh:path s223:hasVoltage ] .

s223:BidirectionalConnectionPoint a s223:Class,
        sh:NodeShape ;
    rdfs:label "Bidirectional Connection Point"^^xsd:string ;
    rdfs:comment "A `BidirectionalConnectionPoint` is a `ConnectionPoint` for which a medium (`Substance-Medium`) is expected to flow either into or out of the associated `Connectable`."^^xsd:string ;
    rdfs:subClassOf s223:ConnectionPoint ;
    sh:property [ rdfs:comment "If the relation `mapsTo` is present it shall associate the `BidirectionalConnectionPoint` with a `BidirectionalConnectionPoint`."^^xsd:string ;
            sh:class s223:BidirectionalConnectionPoint ;
            sh:message "s223: If the relation `mapsTo` is present it shall associate the `BidirectionalConnectionPoint` with a `BidirectionalConnectionPoint`."^^xsd:string ;
            sh:path s223:mapsTo ],
        [ rdfs:comment "If the relation `pairedConnectionPoint` is present it shall associate the `BidirectionalConnectionPoint` with a `ConnectionPoint`."^^xsd:string ;
            sh:class s223:ConnectionPoint ;
            sh:message "s223: If the relation `pairedConnectionPoint` is present it shall associate the `BidirectionalConnectionPoint` with a `ConnectionPoint`."^^xsd:string ;
            sh:path s223:pairedConnectionPoint ] .

s223:EnumerationKind-Aspect a s223:Class,
        s223:EnumerationKind-Aspect,
        sh:NodeShape ;
    rdfs:label "Aspect"^^xsd:string ;
    rdfs:comment "Aspect enumerations provide context to the meaning of a `Property` that would otherwise not be apparent."^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind .

s223:Numerical-LineNeutralVoltage a s223:Class,
        s223:Numerical-LineNeutralVoltage,
        sh:NodeShape ;
    rdfs:label "Line-Neutral Voltage"^^xsd:string ;
    s223:hasVoltage s223:Numerical-Voltage ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment """This class and its enumerated subclasses represent common line-neutral voltages for AC electricity service.

: Numerical-LineNeutralVoltage Enumerations

| Enumeration |
|:-----------|
| `LineNeutralVoltage-110V` |
| `LineNeutralVoltage-120V` |
| `LineNeutralVoltage-127V` |
| `LineNeutralVoltage-139V` |
| `LineNeutralVoltage-1730V` |
| `LineNeutralVoltage-1900V` |
| `LineNeutralVoltage-208V` |
| `LineNeutralVoltage-219V` |
| `LineNeutralVoltage-230V` |
| `LineNeutralVoltage-2400V` |
| `LineNeutralVoltage-240V` |
| `LineNeutralVoltage-24V` |
| `LineNeutralVoltage-277V` |
| `LineNeutralVoltage-3460V` |
| `LineNeutralVoltage-347V` |
| `LineNeutralVoltage-3810V` |
| `LineNeutralVoltage-5770V` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Numerical ;
    sh:property [ rdfs:comment "A Numerical-LineNeutralVoltage shall have a `Numerical-Voltage`"^^xsd:string ;
            sh:class s223:Numerical-Voltage ;
            sh:minCount 1 ;
            sh:path s223:hasVoltage ] .

s223:Property a s223:Class,
        sh:NodeShape ;
    rdfs:label "Property"^^xsd:string ;
    rdfs:comment """An attribute, quality, or characteristic of a feature of interest.

The `Property` class is the parent of all variations of a `Property`, which are:
`ActuatableProperty` - subclass of `Property` that can be modified by user or machine outside of the model (typically command);
`ObservableProperty` - subclass of `Property` that are observed (typically measures);
`EnumerableProperty` - subclass of `Property` defined by `EnumerationKind`;
`QuantifiableProperty` - subclass of `Property` defined by numerical values.

And their subclass combinations :
`QuantifiableActuatableProperty`,
`QuantifiableObservableProperty`,
`EnumeratedObservableProperty`,
`EnumeratedActuatableProperty`.

A `QuantifiableProperty` (or subClass thereof) shall always be associated with a `Unit` and a `QuantityKind`, either explicitly from the `Property`,
or through the associated Value. If the `Unit` is defined, the SHACL reasoner (if invoked) will figure out and assert a `QuantityKind` if it is
unambiguous.

Enumerable properties shall be associated with an `EnumerationKind`. Different flavors of properties are shown in Figure 11-1.

![Different flavors of Properties](figures/Figure_11-1_Flavors_of_Properties.svg)

A `Property` instance that is not an instance of one of the subclasses is unconstrained with respect to its value."""^^xsd:string ;
    rdfs:subClassOf s223:Concept ;
    sh:property [ rdfs:comment "A `Property` can be associated with at most one `Function` using the inverse relation `hasOutput`."^^xsd:string ;
            sh:class s223:Function ;
            sh:maxCount 1 ;
            sh:message "s223: A `Property` can be associated with at most one `Function` using the inverse relation `hasOutput`."^^xsd:string ;
            sh:path [ sh:inversePath s223:hasOutput ] ],
        [ rdfs:comment "A `Property` must not be observed (set) by more than one entity."^^xsd:string ;
            sh:maxCount 1 ;
            sh:message "s223: A `Property` must not be observed (set) by more than one entity."^^xsd:string ;
            sh:path [ sh:inversePath s223:observes ] ],
        [ rdfs:comment "A `Property` must not have both a `hasInternalReference` and a `hasValue` relation."^^xsd:string ;
            sh:path s223:hasInternalReference ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "A `Property` must not have both a `hasInternalReference` and a `hasValue` relation."^^xsd:string ;
                    sh:message "s223: {$this} cannot have both a `hasInternalReference` and a `hasValue` relation."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this
WHERE {
$this s223:hasInternalReference ?int .
$this s223:hasValue ?val .
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `Property` can be associated with at most one `Substance-Medium` using the relation `ofMedium`."^^xsd:string ;
            sh:class s223:Substance-Medium ;
            sh:maxCount 1 ;
            sh:message "s223: A `Property` can be associated with at most one `Substance-Medium` using the relation `ofMedium`."^^xsd:string ;
            sh:path s223:ofMedium ],
        [ rdfs:comment "A `Property` must not have both a `hasExternalReference` and a `hasValue` relation."^^xsd:string ;
            sh:path s223:hasValue ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "A `Property` must not have both a `hasExternalReference` and a `hasValue` relation."^^xsd:string ;
                    sh:message "s223: {$this} cannot have both a `hasExternalReference` and a `hasValue` relation."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this
WHERE {
$this s223:hasExternalReference ?ext .
$this s223:hasValue ?val .
}
"""^^xsd:string ] ],
        [ rdfs:comment "If the relation `hasExternalReference` is present it shall associate the `Property` with an `ExternalReference`."^^xsd:string ;
            sh:class s223:ExternalReference ;
            sh:message "s223: If the relation `hasExternalReference` is present it shall associate the `Property` with an `ExternalReference`."^^xsd:string ;
            sh:path s223:hasExternalReference ],
        [ rdfs:comment "A `Property` must not have both a `hasInternalReference` and a `hasExternalReference` relation."^^xsd:string ;
            sh:path s223:hasInternalReference ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "A `Property` must not have both a `hasInternalReference` and a `hasExternalReference` relation."^^xsd:string ;
                    sh:message "s223: {$this} cannot have both a `hasInternalReference` and a `hasExternalReference` relation."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this
WHERE {
$this s223:hasInternalReference ?int .
$this s223:hasExternalReference ?ext .
}
"""^^xsd:string ] ],
        [ rdfs:comment "If the relation `hasInternalReference` is present it shall associate the `Property` with at most one other `Property`."^^xsd:string ;
            sh:class s223:Property ;
            sh:maxCount 1 ;
            sh:message "s223: If the relation `hasInternalReference` is present it shall associate the `Property` with at most one other `Property`."^^xsd:string ;
            sh:path s223:hasInternalReference ],
        [ rdfs:comment ""^^xsd:string ;
            sh:path s223:ofConstituent ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "If an incoming relation `composedOf` exists, then the `Property` must have a declared substance using the relation `ofConstituent`."^^xsd:string ;
                    sh:message "s223: `Property` {$this} is referred to by {?something} with s223:composedOf, but the `Property` has no value for s223:ofConstituent."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?something
WHERE {
?something s223:composedOf $this .
FILTER NOT EXISTS {$this s223:ofConstituent ?someSubstance} .
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `Property` can use at most one relation `hasValue` if it is required to provide a static value in the model. It is not meant for real-time value (see {s223:hasExternalReference})."^^xsd:string ;
            sh:maxCount 1 ;
            sh:message "s223: A `Property` can use at most one relation `hasValue` if it is required to provide a static value in the model. It is not meant for real-time value (see {s223:hasExternalReference})."^^xsd:string ;
            sh:path s223:hasValue ],
        [ rdfs:comment "A `Property` can be associated with at most one `EnumerationKind-Substance` using the relation `ofSubstance`."^^xsd:string ;
            sh:class s223:EnumerationKind-Substance ;
            sh:maxCount 1 ;
            sh:message "s223: A `Property` can be associated with at most one `EnumerationKind-Substance` using the relation `ofSubstance`."^^xsd:string ;
            sh:path s223:ofSubstance ],
        [ rdfs:comment "If the relation `hasAspect` is present, it shall associate the `Property` with an `EnumerationKind`."^^xsd:string ;
            sh:class s223:EnumerationKind ;
            sh:message "s223: If the relation `hasAspect` is present, it shall associate the `Property` with an `EnumerationKind`."^^xsd:string ;
            sh:path s223:hasAspect ],
        [ rdfs:comment "If a `Property` has an `ofSubstance` relation, it should also have an `ofMedium` relation."^^xsd:string ;
            sh:path s223:ofSubstance ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "If a `Property` has an `ofSubstance` relation, it should also have an `ofMedium` relation."^^xsd:string ;
                    sh:message "s223: Since Property {$this} has an `ofSubstance` relation, it should also have an `ofMedium` relation."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this
WHERE {
$this s223:ofSubstance ?substance .
FILTER NOT EXISTS {$this s223:ofMedium ?medium} .
}
"""^^xsd:string ] ] ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment "A `Property` cannot be declared an instance of both an `ActuatableProperty` and an `ObservableProperty`."^^xsd:string ;
            sh:message "s223: {$this} cannot be declared an instance of both an `ActuatableProperty` and an `ObservableProperty`."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
SELECT $this
WHERE {
$this a/rdfs:subClassOf* s223:ActuatableProperty .
$this a/rdfs:subClassOf* s223:ObservableProperty .
}
"""^^xsd:string ] .

s223:observes a s223:Relation,
        rdf:Property ;
    rdfs:label "observes"^^xsd:string ;
    rdfs:comment """A `Relation` that associates a `Sensor` with one `ObservableProperty` (see {s223:ObservableProperty})
which is used by the sensor to generate a measurement value (e.g., a temperature) or a simple observation of a stimulus
causing a reaction (e.g., a current binary switch that closes a dry contact when a fan is powered on)."""^^xsd:string .

s223:ConnectionPoint a s223:AbstractClass,
        sh:NodeShape ;
    rdfs:label "ConnectionPoint"^^xsd:string ;
    rdfs:comment """A `ConnectionPoint` is an abstract modeling construct used to represent the fact that one connectable thing can be connected to another connectable thing using a `Connection`. It is the abstract representation of the flange, wire terminal, or other physical feature where a connection is made. `Equipment`, `DomainSpace`s and `Junction`s can have one or more `ConnectionPoint`s (see {s223:Connectable}).

A `ConnectionPoint` is constrained to relate to a specific medium such as air, water, or electricity which determines what other things can be connected to it. For example, constraining a ConnectionPoint to be for air means it cannot be used for an electrical connection.

A `ConnectionPoint` belongs to exactly one connectable thing (see {s223:Connectable}).

`ConnectionPoint`s are represented graphically in this standard by a triangle with the point indicating a direction of flow, or a diamond in the case of a bidirectional flow as shown in Figure 6-1.

![Graphical Representation of a ConnectionPoint.](figures/Figure_5-2_Graphical_Depiciton_of_Connection_Points.svg)"""^^xsd:string ;
    rdfs:subClassOf s223:Concept ;
    sh:property [ rdfs:comment "Ensure that the Medium identified by a `ConnectionPoint` via the `hasMedium` relation is compatible with the Medium identified by the entity identified by the `mapsTo` relation."^^xsd:string ;
            sh:name "Test for compatible declared Medium"^^xsd:string ;
            sh:path s223:hasMedium ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Ensure that the Medium identified by a `ConnectionPoint` via the `hasMedium` relation is compatible with the Medium identified by the entity identified by the `mapsTo` relation."^^xsd:string ;
                    sh:message "s223: {$this} declares a medium of {?a}, but the medium of {?b} is declared by {?target} pointed to by the `mapsTo` relation."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT DISTINCT $this ?a ?b ?target
WHERE {
$this s223:hasMedium ?a .
$this s223:mapsTo+ ?target .
?target s223:hasMedium ?b .
?a a/rdfs:subClassOf* s223:Substance-Medium .
?b a/rdfs:subClassOf* s223:Substance-Medium .
FILTER (?a != ?b ) .
FILTER (NOT EXISTS {?b a/rdfs:subClassOf* ?a}) .
FILTER (NOT EXISTS {?a a/rdfs:subClassOf* ?b}) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `ConnectionPoint` can be associated with at most one other `ConnectionPoint` using the inverse of relation `mapsTo`"^^xsd:string ;
            sh:class s223:ConnectionPoint ;
            sh:maxCount 1 ;
            sh:message "s223: A `ConnectionPoint` can be associated with at most one other `ConnectionPoint` using the inverse of relation `mapsTo`"^^xsd:string ;
            sh:path [ sh:inversePath s223:mapsTo ] ],
        [ rdfs:comment "A `ConnectionPoint` shall be associated with exactly one `Connectable` using the relation `isConnectionPointOf`."^^xsd:string ;
            sh:class s223:Connectable ;
            sh:maxCount 1 ;
            sh:message "s223: A `ConnectionPoint` shall be associated with exactly one `Connectable` using the relation `isConnectionPointOf`."^^xsd:string ;
            sh:minCount 1 ;
            sh:name "ConnectionPointToEquipmentShape"^^xsd:string ;
            sh:path s223:isConnectionPointOf ],
        [ rdfs:comment "A `ConnectionPoint` shall be associated with exactly one `Substance-Medium` using the relation `hasMedium`."^^xsd:string ;
            sh:class s223:Substance-Medium ;
            sh:maxCount 1 ;
            sh:message "s223: A `ConnectionPoint` shall be associated with exactly one `Substance-Medium` using the relation `hasMedium`."^^xsd:string ;
            sh:minCount 1 ;
            sh:name "ConnectionPoint medium"^^xsd:string ;
            sh:path s223:hasMedium ],
        [ rdfs:comment "If the relation `hasElectricalPhase` is present it shall associate the `ConnectionPoint` with an ElectricalPhaseIdentifier or ElectricalVoltagePhases."^^xsd:string ;
            sh:message "s223: If the relation `hasElectricalPhase` is present it shall associate the `ConnectionPoint` with an ElectricalPhaseIdentifier or ElectricalVoltagePhases."^^xsd:string ;
            sh:or ( [ sh:class s223:EnumerationKind-ElectricalPhaseIdentifier ] [ sh:class s223:EnumerationKind-ElectricalVoltagePhases ] ) ;
            sh:path s223:hasElectricalPhase ],
        [ rdfs:comment "If a `ConnectionPoint` lacks a `connectsThrough` and `mapsTo` relation, and is not associated with a `Junction` or `Equipment` that is contained by an `Equipment`, then suggest that the `ConnectionPoint` probably needs an association with a `Connection`."^^xsd:string ;
            sh:path s223:connectsThrough ;
            sh:severity sh:Info ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "If a `ConnectionPoint` lacks a `connectsThrough` and `mapsTo` relation, and is not associated with a `Junction` or `Equipment` that is contained by an `Equipment`, then suggest that the `ConnectionPoint` probably needs an association with a `Connection`."^^xsd:string ;
                    sh:message "s223: `ConnectionPoint` {$this} probably needs an association with a `Connection`, or use of `hasOptionalConnectionPoint` or `hasBoundaryConnectionPoint` qualifiers."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
    SELECT $this
    WHERE {
        FILTER NOT EXISTS {?sys1 s223:hasBoundaryConnectionPoint $this} .
        FILTER NOT EXISTS {?sys2 s223:hasOptionalConnectionPoint $this} .
        FILTER NOT EXISTS {$this s223:connectsThrough ?anything1} .
        FILTER NOT EXISTS {$this s223:mapsTo ?anything2} .
        $this s223:isConnectionPointOf ?equipment .
        FILTER NOT EXISTS {?containerEquipment s223:contains ?equipment} .
        }
        """^^xsd:string ] ],
        [ rdfs:comment "A `ConnectionPoint` can be associated with at most one other `ConnectionPoint` using the relation `mapsTo`"^^xsd:string ;
            sh:class s223:ConnectionPoint ;
            sh:maxCount 1 ;
            sh:message "s223: A `ConnectionPoint` can be associated with at most one other `ConnectionPoint` using the relation `mapsTo`"^^xsd:string ;
            sh:path s223:mapsTo ],
        [ rdfs:comment "A `ConnectionPoint` shall be associated with at most one `Connectable` using the `cnx` relation."^^xsd:string ;
            sh:message "s223: A `ConnectionPoint` shall be associated with at most one `Connectable` using the `cnx` relation."^^xsd:string ;
            sh:path s223:cnx ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Connectable ] ;
            sh:qualifiedValueShapesDisjoint true ],
        [ rdfs:comment "If a `ConnectionPoint` `mapsTo` another `ConnectionPoint`, the respective `Equipment` should have a `contains` relation."^^xsd:string ;
            sh:path s223:mapsTo ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "If a `ConnectionPoint` `mapsTo` another `ConnectionPoint`, the respective `Equipment` should have a `contains` relation."^^xsd:string ;
                    sh:message "s223: {?otherEquipment} should contain {?equipment} because `ConnectionPoint` {$this} has a `mapsTo` relation."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?equipment ?otherEquipment
WHERE {
$this s223:mapsTo ?otherCP .
?equipment s223:hasConnectionPoint $this .
?otherEquipment s223:hasConnectionPoint ?otherCP .
FILTER NOT EXISTS {?otherEquipment s223:contains ?equipment}
}
"""^^xsd:string ] ],
        [ rdfs:comment "If a `ConnectionPoint` lacks a `connectsThrough` and `mapsTo` relation, but is associated with a `Junction` or `Equipment` that is contained by an `Equipment`, then suggest that the `ConnectionPoint` might need a `mapsTo` relation to a `ConnectionPoint` of the containing `Equipment`."^^xsd:string ;
            sh:path s223:mapsTo ;
            sh:severity sh:Info ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "If a `ConnectionPoint` lacks a `connectsThrough` and `mapsTo` relation, but is associated with a `Junction` or `Equipment` that is contained by an `Equipment`, then suggest that the `ConnectionPoint` might need a `mapsTo` relation to a `ConnectionPoint` of the containing `Equipment`."^^xsd:string ;
                    sh:message "s223: `ConnectionPoint` {$this} could be missing a `mapsTo` relation to a `ConnectionPoint` of {?containerEquipment} because it is associated with a `Junction` or `Equipment` that is contained by {?containerEquipment}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
    SELECT $this ?containerEquipment
    WHERE {
        FILTER NOT EXISTS {$this s223:connectsThrough ?anything1} .
        FILTER NOT EXISTS {$this s223:mapsTo ?anything2} .
        FILTER NOT EXISTS {?anything3 s223:hasBoundaryConnectionPoint $this} .
        $this s223:isConnectionPointOf ?equipment .
        ?containerEquipment s223:contains ?equipment .
        }
        """^^xsd:string ] ],
        [ rdfs:comment "If the relation `hasRole` is present it shall associate the `ConnectionPoint` with an `EnumerationKind-Role`."^^xsd:string ;
            sh:class s223:EnumerationKind-Role ;
            sh:message "s223: If the relation `hasRole` is present it shall associate the `ConnectionPoint` with an `EnumerationKind-Role`."^^xsd:string ;
            sh:path s223:hasRole ],
        [ rdfs:comment "A `ConnectionPoint` must not have both a `mapsTo` and a `connectsThrough` relation."^^xsd:string ;
            sh:path s223:mapsTo ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "A `ConnectionPoint` must not have both a `mapsTo` and a `connectsThrough` relation."^^xsd:string ;
                    sh:message "s223: {$this} cannot have both a `mapsTo` {?uppercp} and a `connectsThrough` {?connection}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?uppercp ?connection
WHERE {
$this s223:mapsTo ?uppercp .
$this s223:connectsThrough ?connection .
?connection a/rdfs:subClassOf* s223:Connection .
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `ConnectionPoint` shall be associated with at most one `Connection` using the relation `connectsThrough`."^^xsd:string ;
            sh:class s223:Connection ;
            sh:maxCount 1 ;
            sh:message "s223: This `ConnectionPoint` shall be associated with at most one `Connection`."^^xsd:string ;
            sh:name "ConnectionPointToConnectionShape"^^xsd:string ;
            sh:path s223:connectsThrough ;
            sh:severity sh:Info ],
        [ rdfs:comment "A `ConnectionPoint` shall be associated with at most one `Connection` using the `cnx` relation"^^xsd:string ;
            sh:message "s223: A `ConnectionPoint` shall be associated with at most one `Connection` using the `cnx` relation"^^xsd:string ;
            sh:path s223:cnx ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedValueShape [ sh:class s223:Connection ] ;
            sh:qualifiedValueShapesDisjoint true ] ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment "Subclasses of ConnectionPoint are Disjoint. An instance of a subclass of ConnectionPoint cannot be an instance of multiple such subclasses."^^xsd:string ;
            sh:message "s223: `ConnectionPoint` {$this} cannot be an instance of both {?subclass1} and {?subclass2}."^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
        SELECT $this ?subclass1 ?subclass2 WHERE {
            $this a ?subclass1, ?subclass2 .
            ?subclass1 rdfs:subClassOf s223:ConnectionPoint .
            ?subclass2 rdfs:subClassOf s223:ConnectionPoint .
            FILTER(?subclass1 != ?subclass2)
        }
    """^^xsd:string ] .

s223:QuantifiableProperty a s223:Class,
        sh:NodeShape ;
    rdfs:label "Quantifiable Property"^^xsd:string ;
    rdfs:comment "This class is for quantifiable values that describe an object (`System`, `Equipment`, etc.) that are typically static (`hasValue`). That is, they are neither measured nor specified in the course of operations."^^xsd:string ;
    rdfs:subClassOf s223:Property ;
    sh:property [ rdfs:comment "A `QuantifiableProperty` can be associated with an `EnumerableProperty` using the relation `hasAlarmStatus`."^^xsd:string ;
            sh:class s223:EnumerableProperty ;
            sh:message "s223: A `QuantifiableProperty` can be associated with an `EnumerableProperty` using the relation `hasAlarmStatus`."^^xsd:string ;
            sh:path s223:hasAlarmStatus ],
        [ rdfs:comment "This `QuantifiableProperty` uses a different `Unit` than the deadband associated with it."^^xsd:string ;
            sh:path qudt:hasUnit ;
            sh:severity sh:Info ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "This `QuantifiableProperty` uses a different `Unit` than the deadband associated with it."^^xsd:string ;
                    sh:message "s223: {$this} uses `Unit` {?punit}, while deadband {?deadband} uses `Unit` {?dunit}. Be careful."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?deadband ?punit ?dunit
WHERE {
$this qudt:hasUnit ?punit .
$this s223:hasDeadband ?deadband .
?deadband qudt:hasUnit ?dunit .
?punit qudt:hasDimensionVector ?pdv .
?dunit qudt:hasDimensionVector ?ddv .
FILTER (?punit != ?dunit) .
FILTER (?pdv = ?ddv) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "This `QuantifiableProperty` uses a different `Unit` than the threshold associated with it."^^xsd:string ;
            sh:path qudt:hasUnit ;
            sh:severity sh:Info ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "This `QuantifiableProperty` uses a different `Unit` than the threshold associated with it."^^xsd:string ;
                    sh:message "s223: {$this} uses `Unit` {?punit}, while threshold {?threshold} uses `Unit` {?tunit}. Be careful."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?threshold ?punit ?tunit
WHERE {
$this qudt:hasUnit ?punit .
$this s223:hasThreshold ?threshold .
?threshold qudt:hasUnit ?tunit .
?punit qudt:hasDimensionVector ?pdv .
?tunit qudt:hasDimensionVector ?tdv .
FILTER (?punit != ?tunit) .
FILTER (?pdv = ?tdv) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `QuantifiableProperty` can be associated with a`QuantifiableProperty` using the relation `hasThreshold`."^^xsd:string ;
            sh:class s223:QuantifiableProperty ;
            sh:message "s223: A `QuantifiableProperty` can be associated with a`QuantifiableProperty` using the relation `hasThreshold`."^^xsd:string ;
            sh:path s223:hasThreshold ],
        [ rdfs:comment """A `QuantifiableProperty` can be associated with an optional Boolean flag using the relation isDeltaQuantity.
If the relation isDeltaQuantity has a value of true, the associated value should be interpreted as a difference reading, such as a
temperature difference. This is needed to distinguish between a temperature reading and a temperature difference reading, which
affects unit conversion calculations."""^^xsd:string ;
            sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message """s223: A `QuantifiableProperty` can be associated with an optional Boolean flag using the relation isDeltaQuantity.
If the relation isDeltaQuantity has a value of true, the associated value should be interpreted as a difference reading, such as a
temperature difference. This is needed to distinguish between a temperature reading and a temperature difference reading, which
affects unit conversion calculations."""^^xsd:string ;
            sh:path qudt:isDeltaQuantity ],
        [ rdfs:comment "This `QuantifiableProperty` and the associated deadband use non-commensurate `Unit`s."^^xsd:string ;
            sh:path qudt:hasUnit ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "This `QuantifiableProperty` and the associated deadband use non-commensurate `Unit`s."^^xsd:string ;
                    sh:message "s223: {$this} uses `Unit` {?punit}, while deadband {?deadband} uses `Unit` {?dunit}. These are non-commensurate."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?deadband ?punit ?dunit
WHERE {
$this qudt:hasUnit ?punit .
$this s223:hasDeadband ?deadband .
?deadband qudt:hasUnit ?dunit .
?punit qudt:hasDimensionVector ?pdv .
?dunit qudt:hasDimensionVector ?ddv .
FILTER (?punit != ?dunit) .
FILTER (?pdv != ?ddv) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "This `QuantifiableProperty` and the associated setpoint use non-commensurate `Unit`s."^^xsd:string ;
            sh:path qudt:hasUnit ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "This `QuantifiableProperty` and the associated setpoint use non-commensurate `Unit`s."^^xsd:string ;
                    sh:message "s223: {$this} uses `Unit` {?punit}, while setpoint {?setpoint} uses `Unit` {?sunit}. These are non-commensurate."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?setpoint ?punit ?sunit
WHERE {
$this qudt:hasUnit ?punit .
$this s223:hasSetpoint ?setpoint .
?setpoint qudt:hasUnit ?sunit .
?punit qudt:hasDimensionVector ?pdv .
?sunit qudt:hasDimensionVector ?sdv .
FILTER (?punit != ?sunit) .
FILTER (?pdv != ?sdv) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "This `QuantifiableProperty` and the associated threshold use non-commensurate `Unit`s."^^xsd:string ;
            sh:path qudt:hasUnit ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "This `QuantifiableProperty` and the associated threshold use non-commensurate `Unit`s."^^xsd:string ;
                    sh:message "s223: {$this} uses `Unit` {?punit}, while threshold {?threshold} uses `Unit` {?tunit}. These are non-commensurate."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?threshold ?punit ?tunit
WHERE {
$this qudt:hasUnit ?punit .
$this s223:hasThreshold ?threshold .
?threshold qudt:hasUnit ?tunit .
?punit qudt:hasDimensionVector ?pdv .
?tunit qudt:hasDimensionVector ?tdv .
FILTER (?punit != ?tunit) .
FILTER (?pdv != ?tdv) .
}
"""^^xsd:string ] ],
        [ rdfs:comment """Normally, a `QuantifiableProperty` is associated with a static decimal value using `hasValue`, along with a single
`Unit` and `QuantityKind`. However, in some cases, a `QuantifiableProperty` may instead be associated with a `QuantityValue` using the relation
`quantityValue`. This allows the `QuantityValue` to express multiple equivalent combinations of `Unit` and value."""^^xsd:string ;
            sh:class qudt:QuantityValue ;
            sh:message """s223: Normally, a `QuantifiableProperty` is associated with a static decimal value using `hasValue`, along with a single
`Unit` and `QuantityKind`. However, in some cases, a `QuantifiableProperty` may instead be associated with a `QuantityValue` using the relation
`quantityValue`. This allows the `QuantityValue` to express multiple equivalent combinations of `Unit` and value."""^^xsd:string ;
            sh:path qudt:quantityValue ],
        [ rdfs:comment "A `QuantifiableProperty` can be associated with a `QuantifiableProperty` using the relation `hasDeadband`."^^xsd:string ;
            sh:class s223:QuantifiableProperty ;
            sh:message "s223: A `QuantifiableProperty` can be associated with a `QuantifiableProperty` using the relation `hasDeadband`."^^xsd:string ;
            sh:path s223:hasDeadband ],
        [ rdfs:comment "A `QuantifiableProperty` can be associated with a `QuantifiableProperty` using the relation `hasSetpoint`."^^xsd:string ;
            sh:class s223:QuantifiableProperty ;
            sh:message "s223: A `QuantifiableProperty` can be associated with a `QuantifiableProperty` using the relation `hasSetpoint`."^^xsd:string ;
            sh:path s223:hasSetpoint ],
        [ rdfs:comment "This `QuantifiableProperty` uses a different `Unit` than the setpoint associated with it."^^xsd:string ;
            sh:path qudt:hasUnit ;
            sh:severity sh:Info ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "This `QuantifiableProperty` uses a different `Unit` than the setpoint associated with it."^^xsd:string ;
                    sh:message "s223: {$this} uses `Unit` {?punit}, while setpoint {?setpoint} uses `Unit` {?sunit}. Be careful."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?setpoint ?punit ?sunit
WHERE {
$this qudt:hasUnit ?punit .
$this s223:hasSetpoint ?setpoint .
?setpoint qudt:hasUnit ?sunit .
?punit qudt:hasDimensionVector ?pdv .
?sunit qudt:hasDimensionVector ?sdv .
FILTER (?punit != ?sunit) .
FILTER (?pdv = ?sdv) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `QuantifiableProperty` shall be associated with a `QuantityKind` using the relation `hasQuantityKind`."^^xsd:string ;
            sh:class qudt:QuantityKind ;
            sh:maxCount 1 ;
            sh:message "s223: A `QuantifiableProperty` shall be associated with a `QuantityKind` using the relation `hasQuantityKind`."^^xsd:string ;
            sh:minCount 1 ;
            sh:path qudt:hasQuantityKind ],
        [ rdfs:comment "A `QuantifiableProperty` can be associated with at most one `Unit` using the relation `hasUnit`."^^xsd:string ;
            sh:class qudt:Unit ;
            sh:maxCount 1 ;
            sh:message "s223: A `QuantifiableProperty` can be associated with at most one `Unit` using the relation `hasUnit`."^^xsd:string ;
            sh:path qudt:hasUnit ],
        [ rdfs:comment "This `QuantifiableProperty` and the deadband associated with it have non-commensurate `QuantityKind`s."^^xsd:string ;
            sh:path qudt:hasQuantityKind ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "This `QuantifiableProperty` and the deadband associated with it have non-commensurate `QuantityKind`s."^^xsd:string ;
                    sh:message "s223: {$this} uses `QuantityKind` {?pqk} with DimensionVector {?pdv}, while deadband {?deadband} uses `QuantityKind` {?dqk} with DimensionVector {?ddv}. These are non-commensurate"^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?deadband ?pqk ?dqk ?pdv ?ddv
WHERE {
$this qudt:hasQuantityKind ?pqk .
$this s223:hasDeadband ?deadband .
?deadband qudt:hasQuantityKind ?dqk .
?pqk qudt:hasDimensionVector ?pdv .
?dqk qudt:hasDimensionVector ?ddv .
FILTER (?pqk != ?dqk) .
FILTER (?pdv != ?ddv) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "A `QuantifiableProperty` should use `s223:hasValue` instead of `qudt:value`."^^xsd:string ;
            sh:maxCount 0 ;
            sh:message "s223: A `QuantifiableProperty` should use `s223:hasValue` instead of `qudt:value`."^^xsd:string ;
            sh:path qudt:value ],
        [ rdfs:comment "This `QuantifiableProperty` and the threshold associated with it have non-commensurate `QuantityKind`s."^^xsd:string ;
            sh:path qudt:hasQuantityKind ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "This `QuantifiableProperty` and the threshold associated with it have non-commensurate `QuantityKind`s."^^xsd:string ;
                    sh:message "s223: {$this} uses `QuantityKind` {?pqk} with DimensionVector {?pdv}, while threshold {?threshold} uses `QuantityKind` {?tqk} with DimensionVector {?tdv}. These are non-commensurate"^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?threshold ?pqk ?sqk ?pdv ?sdv
WHERE {
$this qudt:hasQuantityKind ?pqk .
$this s223:hasThreshold ?threshold .
?threshold qudt:hasQuantityKind ?tqk .
?pqk qudt:hasDimensionVector ?pdv .
?tqk qudt:hasDimensionVector ?tdv .
FILTER (?pqk != ?tqk) .
FILTER (?pdv != ?tdv) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "This `QuantifiableProperty` cannot have a value without a `Unit`."^^xsd:string ;
            sh:path s223:hasValue ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "This `QuantifiableProperty` cannot have a value without a `Unit`."^^xsd:string ;
                    sh:message "s223: {$this} referenced by {?subject} has a value of {?v} but does not specify a `Unit`."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?v ?subject
WHERE {
$this s223:hasValue ?v .
FILTER NOT EXISTS {$this qudt:hasUnit ?u} .
?subject ?p $this .
}
"""^^xsd:string ] ],
        [ rdfs:comment "This `QuantifiableProperty` and the Setpoint associated with it have non-commensurate `QuantityKind`s."^^xsd:string ;
            sh:path qudt:hasQuantityKind ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "This `QuantifiableProperty` and the Setpoint associated with it have non-commensurate `QuantityKind`s."^^xsd:string ;
                    sh:message "s223: {$this} uses `QuantityKind` {?pqk} with DimensionVector {?pdv}, while Setpoint {?setpoint} uses `QuantityKind` {?sqk} with DimensionVector {?sdv}. These are non-commensurate"^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?setpoint ?pqk ?sqk ?pdv ?sdv
WHERE {
$this qudt:hasQuantityKind ?pqk .
$this s223:hasSetpoint ?setpoint .
?setpoint qudt:hasQuantityKind ?sqk .
?pqk qudt:hasDimensionVector ?pdv .
?sqk qudt:hasDimensionVector ?sdv .
FILTER (?pqk != ?sqk) .
FILTER (?pdv != ?sdv) .
}
"""^^xsd:string ] ] ;
    sh:sparql [ a sh:SPARQLConstraint ;
            rdfs:comment "Checks for consistent dimension vectors for a `QuantityKind` and the `Unit`"^^xsd:string ;
            sh:message "s223: Inconsistent dimensionalities among the `Property`'s `Unit` and `Property`'s `QuantityKind`"^^xsd:string ;
            sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
            sh:select """
SELECT $this
   WHERE
{
      $this qudt:hasQuantityKind/qudt:hasDimensionVector ?qkdv1 .
      $this qudt:hasUnit/qudt:hasDimensionVector ?qkdv2 .
FILTER (?qkdv1 != ?qkdv2) .
}
"""^^xsd:string ] .

s223:EnumerationKind-Role a s223:Class,
        s223:EnumerationKind-Role,
        sh:NodeShape ;
    rdfs:label "Role"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent roles played by entities, such as cooling, generator,
relief, and return. These enumeration kinds are intended to indicate the capability of an entity to play a given
role, rather than the role being actively played at any given point in time. For example,
a reversible piece of equipment might play a role of `Role-Cooling` at one time, and `Role-Heating` at another time.
Such an entity would be modeled using the `hasRole` relation with both role values. The active role at a particular time can be modeled as a `Property` with
an ExternalReference to telemetry data.

: EnumerationKind-Role Enumerations

| Enumeration |
|:-----------|
| `Role-Condenser` |
| `Role-Cooling` |
| `Role-Dehumidifying` |
| `Role-Discharge` |
| `Role-Economizer` |
| `Role-Evaporator` |
| `Role-Exhaust` |
| `Role-Expansion` |
| `Role-Generator` |
| `Role-HeatRecovery` |
| `Role-HeatTransfer` |
| `Role-Heating` |
| `Role-Load` |
| `Role-OutdoorAirIntake` |
| `Role-Primary` |
| `Role-Recirculating` |
| `Role-Relief` |
| `Role-Return` |
| `Role-Secondary` |
| `Role-Supply` |
| `Role-Ventilating` |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind .

s223:Frequency-50Hz a s223:Class,
        s223:Frequency-50Hz,
        sh:NodeShape ;
    rdfs:label "50 Hertz"^^xsd:string ;
    s223:hasValue 50.0 ;
    qudt:hasQuantityKind quantitykind:Frequency ;
    qudt:hasUnit unit:HZ ;
    rdfs:comment "Frequency-50Hz"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Frequency .

qudt:hasQuantityKind rdfs:comment "A reference to the `QuantityKind` of a `QuantifiableProperty` of interest, e.g., `quantitykind:Temperature`."^^xsd:string .

s223:Fluid-Air a s223:Class,
        s223:Fluid-Air,
        sh:NodeShape ;
    rdfs:label "Air"^^xsd:string ;
    rdfs:comment "Fluid-Air."^^xsd:string ;
    rdfs:subClassOf s223:Mix-Fluid .

s223:NumberOfElectricalPhases-ThreePhase a s223:Class,
        s223:NumberOfElectricalPhases-ThreePhase,
        sh:NodeShape ;
    rdfs:label "Three Phase AC Electricity"^^xsd:string ;
    s223:hasValue 3.0 ;
    qudt:hasQuantityKind quantitykind:Dimensionless ;
    qudt:hasUnit unit:NUM ;
    rdfs:comment "Three Phase AC Electricity"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-NumberOfElectricalPhases .

s223:Fluid-Water a s223:Class,
        s223:Fluid-Water,
        sh:NodeShape ;
    rdfs:label "Water"^^xsd:string ;
    s223:composedOf [ a s223:QuantifiableProperty ;
            rdfs:label "H2O i.e., pure water concentration"^^xsd:string ;
            s223:ofConstituent s223:Constituent-H2O ;
            qudt:hasQuantityKind quantitykind:VolumeFraction ;
            qudt:hasUnit unit:PERCENT ] ;
    rdfs:comment """This class and its enumerated subclasses represent water and aqueous solutions in various states.

: Fluid-Water Enumerations

| Enumeration |
|:-----------|
| `Water-ChilledWater` |
| `Water-GlycolSolution` (see {s223:Water-GlycolSolution}) |
| `Water-HotWater` |
| `Water-Steam` |"""^^xsd:string ;
    rdfs:subClassOf s223:Mix-Fluid .

s223:Constituent-Electricity a s223:Class,
        s223:Constituent-Electricity,
        sh:NodeShape ;
    rdfs:label "Electricity"^^xsd:string ;
    rdfs:comment """This class and its enumerated subclasses represent common forms of electrical energy, including AC, DC, and electrical communication signals.

: Constituent-Electricity Enumerations

| Enumeration |
|:-----------|
| `Electricity-AC` (see {s223:Electricity-AC})|
| `Electricity-DC` (see {s223:Electricity-DC})|
| `Electricity-Earth`  |
| `Electricity-Neutral` |
| `Electricity-Signal` (see {s223:Electricity-Signal}) |"""^^xsd:string ;
    rdfs:subClassOf s223:Medium-Constituent .

s223:NumberOfElectricalPhases-SinglePhase a s223:Class,
        s223:NumberOfElectricalPhases-SinglePhase,
        sh:NodeShape ;
    rdfs:label "Single Phase AC Electricity"^^xsd:string ;
    s223:hasValue 1.0 ;
    qudt:hasQuantityKind quantitykind:Dimensionless ;
    qudt:hasUnit unit:NUM ;
    rdfs:comment "Single Phase AC Electricity"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-NumberOfElectricalPhases .

s223:Numerical-Voltage a s223:Class,
        s223:Numerical-Voltage,
        sh:NodeShape ;
    rdfs:label "Voltage"^^xsd:string ;
    qudt:hasQuantityKind quantitykind:Voltage ;
    qudt:hasUnit unit:V ;
    rdfs:comment """This class and its enumerated subclasses represent common voltages for electricity service.

: Numerical-Voltage Enumerations

| Enumeration |
|:-----------|
| `Voltage-0V` |
| `Voltage-10000V` |
| `Voltage-110V` |
| `Voltage-120V` |
| `Voltage-127V` |
| `Voltage-12V` |
| `Voltage-139V` |
| `Voltage-1730V` |
| `Voltage-1900V` |
| `Voltage-190V` |
| `Voltage-208V` |
| `Voltage-219V` |
| `Voltage-220V` |
| `Voltage-230V` |
| `Voltage-2400V` |
| `Voltage-240V` |
| `Voltage-24V` |
| `Voltage-277V` |
| `Voltage-2V` |
| `Voltage-3000V` |
| `Voltage-3300V` |
| `Voltage-3460V` |
| `Voltage-347V` |
| `Voltage-380V` |
| `Voltage-3810V` |
| `Voltage-3V` |
| `Voltage-400V` |
| `Voltage-415V` |
| `Voltage-4160V` |
| `Voltage-480V` |
| `Voltage-48V` |
| `Voltage-5770V` |
| `Voltage-5V` |
| `Voltage-6000V` |
| `Voltage-600V` |
| `Voltage-6600V` |
| `Voltage-6V` |
| `Voltage-DCVoltage` (see {s223:Voltage-DCVoltage}) |
| `Voltage-PoE` (see {s223:Voltage-PoE}) |"""^^xsd:string ;
    rdfs:subClassOf s223:EnumerationKind-Numerical ;
    sh:property [ rdfs:comment "A `Numerical-Voltage` shall have a `QuantityKind` of `Voltage`"^^xsd:string ;
            sh:hasValue quantitykind:Voltage ;
            sh:path qudt:hasQuantityKind ],
        [ rdfs:comment "A `Numerical-Voltage` shall have a `Unit` of `Volts`"^^xsd:string ;
            sh:hasValue unit:V ;
            sh:path qudt:hasUnit ] .

s223:Frequency-60Hz a s223:Class,
        s223:Frequency-60Hz,
        sh:NodeShape ;
    rdfs:label "60 Hertz"^^xsd:string ;
    s223:hasValue 60.0 ;
    qudt:hasQuantityKind quantitykind:Frequency ;
    qudt:hasUnit unit:HZ ;
    rdfs:comment "Frequency-60Hz"^^xsd:string ;
    rdfs:subClassOf s223:Numerical-Frequency .

s223:OutletConnectionPoint a s223:Class,
        sh:NodeShape ;
    rdfs:label "Outlet Connection Point"^^xsd:string ;
    rdfs:comment "An `OutletConnectionPoint` is a `ConnectionPoint` for which a medium (`Substance-Medium`) is expected to flow out of the associated `Connectable`."^^xsd:string ;
    rdfs:subClassOf s223:ConnectionPoint ;
    sh:property [ rdfs:comment "If the relation `mapsTo` is present it shall associate the `OutletConnectionPoint` with an `OutletConnectionPoint`."^^xsd:string ;
            sh:class s223:OutletConnectionPoint ;
            sh:message "s223: If the relation `mapsTo` is present it shall associate the `OutletConnectionPoint` with an `OutletConnectionPoint`."^^xsd:string ;
            sh:path s223:mapsTo ],
        [ rdfs:comment "If the relation `pairedConnectionPoint` is present it shall associate the `OutletConnectionPoint` with an `InletConnectionPoint` or `BidirectionalConnectionPoint`."^^xsd:string ;
            sh:message "s223: If the relation `pairedConnectionPoint` is present it shall associate the `OutletConnectionPoint` with an `InletConnectionPoint` or `BidirectionalConnectionPoint`."^^xsd:string ;
            sh:or ( [ sh:class s223:InletConnectionPoint ] [ sh:class s223:BidirectionalConnectionPoint ] ) ;
            sh:path s223:pairedConnectionPoint ],
        [ rdfs:comment "Ensure an `OutletConnectionPoint` has a `mapsTo` relation to its containing `Equipment` if it has an external `Connection`"^^xsd:string ;
            sh:path s223:mapsTo ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Ensure an `OutletConnectionPoint` has a `mapsTo` relation to its containing `Equipment` if it has an external `Connection`"^^xsd:string ;
                    sh:message "s223: {$this} must have a `mapsTo` an `OutletConnectionPoint` of {?parentEquipment} and not an external `Connection` to {?destinationEquipment}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?parentEquipment ?destinationEquipment
WHERE {
?equipment s223:hasConnectionPoint $this .
?parentEquipment s223:contains ?equipment .
$this s223:connectsThrough/s223:connectsTo ?destinationEquipment .
FILTER NOT EXISTS {?parentEquipment s223:contains ?destinationEquipment} .
FILTER NOT EXISTS {$this s223:mapsTo ?anything} .
}
"""^^xsd:string ] ] .

rdf:Property a sh:NodeShape ;
    sh:property [ rdfs:comment "Every `Property` must have a label"^^xsd:string ;
            sh:path rdfs:label ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    sh:message "s223: {$this} must have an rdfs:label"^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this
WHERE {
BIND(REPLACE(STR($this), "^(.*)(/|#)([^#/]*)$", "$1") AS ?prop) .
FILTER (?prop = "http://data.ashrae.org/standard223") .
FILTER (NOT EXISTS {$this rdfs:label ?something}) .
}
"""^^xsd:string ] ],
        [ rdfs:comment "Every `Property` must have a comment"^^xsd:string ;
            sh:path rdfs:comment ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    sh:message "s223: {$this} must have an rdfs:comment"^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this
WHERE {
BIND(REPLACE(STR($this), "^(.*)(/|#)([^#/]*)$", "$1") AS ?prop) .
FILTER (?prop = "http://data.ashrae.org/standard223") .
FILTER (NOT EXISTS {$this rdfs:comment ?something}) .
}
"""^^xsd:string ] ] .

s223:Equipment a s223:Class,
        sh:NodeShape ;
    rdfs:label "Equipment"^^xsd:string ;
    rdfs:comment """`Equipment` is the modeling construct used to represent a thing designed to accomplish a specific task, or a complex thing
that contains component pieces of `Equipment` that are connected to each other and work together to accomplish a task. `Equipment` can have
`Connection`s and `ConnectionPoint`s through which one or more kinds of medium (see {s223:Substance-Medium}) might flow. Examples of possible `Equipment` include a `Pump`,
`Fan`, `AirHeatExchanger`, `Luminaire`, and `Sensor`, as well as more complex things like a heat pump, a chilled water plant, or a utility meter.
`Equipment` is distinct from a `System`, which is simply a logical grouping or collection of (only) `Equipment`.

In common usage, terms like equipment and system have a variety of ambiguous and possibly conflicting interpretations. A semantic model is
an attempt to eliminate such ambiguities and conflicts. If the thing being modeled involves `Connection`s and `ConnectionPoint`s, it must be modeled as
`Equipment` and not a `System`. Thus, a model of a chilled water plant that includes external connections to things beyond the plant must
be modeled as `Equipment`. Any contained `Equipment` within the chilled water plant (i.e., the pumps, valves, filters, and other things) may alternatively or in
addition be logically grouped and modeled as a `System`.

The graphical depiction of Equipment used in this document is a round-cornered
rectangle as shown in Figure 5-1.

![Graphical Depiction of Equipment.](figures/Figure_5-1_Graphical_Depiciton_of_Equipment.svg)"""^^xsd:string ;
    rdfs:subClassOf s223:Connectable ;
    sh:property [ rdfs:comment """If the relation `actuatedByProperty` is present it shall associate the `Equipment` with a `ActuatableProperty`.
Note that any `Equipment` may use this relation, not just `Actuator`."""^^xsd:string ;
            sh:class s223:ActuatableProperty ;
            sh:message "s223: If the relation `actuatedByProperty` is present it shall associate the `Equipment` with a `ActuatableProperty`. Note that any `Equipment` may use this relation, not just `Actuator`."^^xsd:string ;
            sh:path s223:actuatedByProperty ],
        [ rdfs:comment "Disallow contained equipment from having external incoming connections."^^xsd:string ;
            sh:path s223:connectedFrom ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Disallow contained equipment from having external incoming connections."^^xsd:string ;
                    sh:message "s223: {$this} should not have a connection from external equipment {?otherDev} because {?container} contains {$this}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?container ?otherDev
WHERE {
$this s223:connectedFrom ?otherDev .
$this ^s223:contains ?container .
?container a/rdfs:subClassOf* s223:Equipment .
FILTER NOT EXISTS {?container s223:contains ?otherDev .}
}
"""^^xsd:string ] ],
        [ rdfs:comment "If the relation `hasPhysicalLocation` is present it shall associate the `Equipment` with a `PhysicalSpace`."^^xsd:string ;
            sh:class s223:PhysicalSpace ;
            sh:message "s223: If the relation `hasPhysicalLocation` is present it shall associate the `Equipment` with a `PhysicalSpace`."^^xsd:string ;
            sh:path s223:hasPhysicalLocation ],
        [ rdfs:comment "If the relation `executes` is present it shall associate the `Equipment` with a `Function`."^^xsd:string ;
            sh:class s223:Function ;
            sh:message "s223: If the relation `executes` is present it shall associate the `Equipment` with a `Function`."^^xsd:string ;
            sh:path s223:executes ],
        [ a sh:PropertyShape ;
            rdfs:comment "If the relation `contains` is present it shall associate the `Equipment` with either `Equipment` or `Junction`."^^xsd:string ;
            sh:message "s223: If the relation `contains` is present it shall associate the `Equipment` with either `Equipment` or `Junction`."^^xsd:string ;
            sh:name "device contains shape"^^xsd:string ;
            sh:or ( [ sh:class s223:Equipment ] [ sh:class s223:Junction ] ) ;
            sh:path s223:contains ],
        [ rdfs:comment "Warning about a subClass of `Equipment` of type A containing something that is in the same subClass branch."^^xsd:string ;
            sh:path s223:contains ;
            sh:severity sh:Warning ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Warning about a subClass of `Equipment` of type A containing something that is in the same subClass branch."^^xsd:string ;
                    sh:message "s223: {$this}, of type {?type1}, contains {?subEquip} of type {?type2}, that could result in double-counting items in the class hierarchy of {?type1}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?subEquip ?type1 ?type2
WHERE {
  FILTER NOT EXISTS {$this a s223:Equipment} .
$this s223:contains+ ?subEquip .
  FILTER NOT EXISTS {?subEquip a s223:Equipment} .
$this a ?type1 .
?subEquip a ?type2 .
{
?type2 rdfs:subClassOf* ?type1 .
}
UNION
{
?type1 rdfs:subClassOf* ?type2 .
}
}
"""^^xsd:string ] ],
        [ rdfs:comment "Disallow contained equipment from having external outgoing connections."^^xsd:string ;
            sh:path s223:connectedTo ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Disallow contained equipment from having external outgoing connections."^^xsd:string ;
                    sh:message "s223: {$this} should not have a connection to external equipment {?otherDev} because {?container} contains {$this}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?container ?otherDev
WHERE {
$this s223:connectedTo ?otherDev .
$this ^s223:contains ?container .
?container a/rdfs:subClassOf* s223:Equipment .
FILTER NOT EXISTS {?container s223:contains ?otherDev .}
}
"""^^xsd:string ] ],
        [ rdfs:comment "If the relation `hasRole` is present it shall associate the `Equipment` with a `EnumerationKind-Role`."^^xsd:string ;
            sh:class s223:EnumerationKind-Role ;
            sh:message "s223: If the relation `hasRole` is present it shall associate the `Equipment` with a `EnumerationKind-Role`."^^xsd:string ;
            sh:path s223:hasRole ] .

s223:InletConnectionPoint a s223:Class,
        sh:NodeShape ;
    rdfs:label "Inlet Connection Point"^^xsd:string ;
    rdfs:comment "An `InletConnectionPoint` is a `ConnectionPoint` for which a medium (`Substance-Medium`) is expected to flow into the associated `Connectable`."^^xsd:string ;
    rdfs:subClassOf s223:ConnectionPoint ;
    sh:property [ rdfs:comment "If the relation `pairedConnectionPoint` is present it shall associate the `InletConnectionPoint` with an `OutletConnectionPoint` or `BidirectionalConnectionPoint`."^^xsd:string ;
            sh:message "s223: If the relation `pairedConnectionPoint` is present it shall associate the `InletConnectionPoint` with an `OutletConnectionPoint` or `BidirectionalConnectionPoint`."^^xsd:string ;
            sh:or ( [ sh:class s223:OutletConnectionPoint ] [ sh:class s223:BidirectionalConnectionPoint ] ) ;
            sh:path s223:pairedConnectionPoint ],
        [ rdfs:comment "Ensure an `InletConnectionPoint` has a `mapsTo` relation to its containing `Equipment` if it has an external `Connection`"^^xsd:string ;
            sh:path s223:mapsTo ;
            sh:sparql [ a sh:SPARQLConstraint ;
                    rdfs:comment "Ensure an `InletConnectionPoint` has a `mapsTo` relation to its containing `Equipment` if it has an external `Connection`"^^xsd:string ;
                    sh:message "s223: {$this} must have a `mapsTo` an `InletConnectionPoint` of {?parentEquipment} and not an external `Connection` from {?sourceEquipment}."^^xsd:string ;
                    sh:prefixes <http://data.ashrae.org/standard223/1.0/model/all> ;
                    sh:select """
SELECT $this ?parentEquipment ?sourceEquipment
WHERE {
?equipment s223:hasConnectionPoint $this .
?parentEquipment s223:contains ?equipment .
$this s223:connectsThrough/s223:connectsFrom ?sourceEquipment .
FILTER NOT EXISTS {?parentEquipment s223:contains ?sourceEquipment} .
FILTER NOT EXISTS {$this s223:mapsTo ?anything} .
}
"""^^xsd:string ] ],
        [ rdfs:comment "If the relation `mapsTo` is present it shall associate the `InletConnectionPoint` with an `InletConnectionPoint`."^^xsd:string ;
            sh:class s223:InletConnectionPoint ;
            sh:message "s223: If the relation `mapsTo` is present it shall associate the `InletConnectionPoint` with an `InletConnectionPoint`."^^xsd:string ;
            sh:path s223:mapsTo ] .

s223:Electricity-AC a s223:Class,
        s223:Electricity-AC,
        sh:NodeShape ;
    rdfs:label "AC electricity"^^xsd:string ;
    s223:hasFrequency s223:Numerical-Frequency ;
    s223:hasNumberOfElectricalPhases s223:Numerical-NumberOfElectricalPhases ;
    s223:hasVoltage s223:Numerical-Voltage ;
    rdfs:comment """This class and its enumerated subclasses represent common AC electricity services.

: Electricity-AC Enumerations

| Enumeration |
|:-----------|
| `AC-10000VLL-1Ph-60Hz` |
| `AC-10000VLL-3Ph-60Hz` |
| `AC-10000VLL-5770VLN-1Ph-60Hz` |
| `AC-10000VLL-5770VLN-3Ph-60Hz` |
| `AC-110VLN-1Ph-50Hz` |
| `AC-120VLN-1Ph-60Hz` |
| `AC-127VLN-1Ph-50Hz` |
| `AC-139VLN-1Ph-50Hz` |
| `AC-1730VLN-1Ph-60Hz` |
| `AC-1900VLN-1Ph-60Hz` |
| `AC-190VLL-110VLN-1Ph-50Hz` |
| `AC-190VLL-110VLN-3Ph-50Hz` |
| `AC-190VLL-1Ph-50Hz` |
| `AC-190VLL-3Ph-50Hz` |
| `AC-208VLL-120VLN-1Ph-60Hz` |
| `AC-208VLL-120VLN-3Ph-60Hz` |
| `AC-208VLL-1Ph-60Hz` |
| `AC-208VLL-3Ph-60Hz` |
| `AC-208VLN-1Ph-60Hz` |
| `AC-219VLN-1Ph-60Hz` |
| `AC-220VLL-127VLN-1Ph-50Hz` |
| `AC-220VLL-127VLN-3Ph-50Hz` |
| `AC-220VLL-1Ph-50Hz` |
| `AC-220VLL-3Ph-50Hz` |
| `AC-230VLN-1Ph-50Hz` |
| `AC-2400VLN-1Ph-60Hz` |
| `AC-240VLL-120VLN-1Ph-60Hz` |
| `AC-240VLL-139VLN-1Ph-50Hz` |
| `AC-240VLL-139VLN-3Ph-50Hz` |
| `AC-240VLL-1Ph-50Hz` |
| `AC-240VLL-1Ph-60Hz` |
| `AC-240VLL-208VLN-120VLN-1Ph-60Hz` |
| `AC-240VLL-208VLN-120VLN-3Ph-60Hz` |
| `AC-240VLL-3Ph-50Hz` |
| `AC-240VLL-3Ph-60Hz` |
| `AC-240VLN-1Ph-50Hz` |
| `AC-24VLN-1Ph-50Hz` |
| `AC-24VLN-1Ph-60Hz` |
| `AC-277VLN-1Ph-60Hz` |
| `AC-3000VLL-1730VLN-1Ph-60Hz` |
| `AC-3000VLL-1730VLN-3Ph-60Hz` |
| `AC-3000VLL-1Ph-60Hz` |
| `AC-3000VLL-3Ph-60Hz` |
| `AC-3300VLL-1900VLN-1Ph-60Hz` |
| `AC-3300VLL-1900VLN-3Ph-60Hz` |
| `AC-3300VLL-1Ph-60Hz` |
| `AC-3300VLL-3Ph-60Hz` |
| `AC-3460VLN-1Ph-60Hz` |
| `AC-347VLN-1Ph-60Hz` |
| `AC-380VLL-1Ph-60Hz` |
| `AC-380VLL-219VLN-1Ph-60Hz` |
| `AC-380VLL-219VLN-3Ph-60Hz` |
| `AC-380VLL-3Ph-60Hz` |
| `AC-3810VLN-1Ph-60Hz` |
| `AC-400VLL-1Ph-50Hz` |
| `AC-400VLL-230VLN-1Ph-50Hz` |
| `AC-400VLL-230VLN-3Ph-50Hz` |
| `AC-400VLL-3Ph-50Hz` |
| `AC-415VLL-1Ph-50Hz` |
| `AC-415VLL-240VLN-1Ph-50Hz` |
| `AC-415VLL-240VLN-3Ph-50Hz` |
| `AC-415VLL-3Ph-50Hz` |
| `AC-4160VLL-1Ph-60Hz` |
| `AC-4160VLL-2400VLN-1Ph-60Hz` |
| `AC-4160VLL-2400VLN-3Ph-60Hz` |
| `AC-4160VLL-3Ph-60Hz` |
| `AC-480VLL-1Ph-60Hz` |
| `AC-480VLL-277VLN-1Ph-60Hz` |
| `AC-480VLL-277VLN-3Ph-60Hz` |
| `AC-480VLL-3Ph-60Hz` |
| `AC-5770VLN-1Ph-60Hz` |
| `AC-6000VLL-1Ph-60Hz` |
| `AC-6000VLL-3460VLN-1Ph-60Hz` |
| `AC-6000VLL-3460VLN-3Ph-60Hz` |
| `AC-6000VLL-3Ph-60Hz` |
| `AC-600VLL-1Ph-60Hz` |
| `AC-600VLL-347VLN-1Ph-60Hz` |
| `AC-600VLL-347VLN-3Ph-60Hz` |
| `AC-600VLL-3Ph-60Hz` |
| `AC-6600VLL-1Ph-60Hz` |
| `AC-6600VLL-3810VLN-1Ph-60Hz` |
| `AC-6600VLL-3810VLN-3Ph-60Hz` |
| `AC-6600VLL-3Ph-60Hz` |"""^^xsd:string ;
    rdfs:subClassOf s223:Constituent-Electricity ;
    sh:property [ rdfs:comment "An AC electricity medium shall have a number of electrical phases."^^xsd:string ;
            sh:class s223:Numerical-NumberOfElectricalPhases ;
            sh:minCount 1 ;
            sh:path s223:hasNumberOfElectricalPhases ],
        [ rdfs:comment "An AC electricity medium shall have a voltage."^^xsd:string ;
            sh:minCount 1 ;
            sh:or ( [ sh:class s223:Numerical-LineLineVoltage ] [ sh:class s223:Numerical-LineNeutralVoltage ] [ sh:class s223:Numerical-Voltage ] ) ;
            sh:path s223:hasVoltage ],
        [ rdfs:comment "An AC electricity medium shall have a frequency"^^xsd:string ;
            sh:class s223:Numerical-Frequency ;
            sh:minCount 1 ;
            sh:path s223:hasFrequency ] .

<http://data.ashrae.org/standard223/1.0/model/all> a owl:Ontology ;
    owl:imports <http://qudt.org/3.1.8/shacl/qudt-all>,
        sh: ;
    owl:versionInfo "git:master@ee0024664c17a6664f3e9f21f873fa25dd5e17ea date:2025-11-25 16:11:37 UTC" ;
    sh:declare [ sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ;
            sh:prefix "rdf"^^xsd:string ],
        [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ;
            sh:prefix "quantitykind"^^xsd:string ],
        [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ;
            sh:prefix "s223"^^xsd:string ],
        [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ;
            sh:prefix "qudtqk"^^xsd:string ],
        [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ;
            sh:prefix "rdfs"^^xsd:string ],
        [ sh:namespace "http://data.ashrae.org/standard223/1.0/vocab/role#"^^xsd:anyURI ;
            sh:prefix "role"^^xsd:string ],
        [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ;
            sh:prefix "sh"^^xsd:string ],
        [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ;
            sh:prefix "qudt"^^xsd:string ],
        [ sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ;
            sh:prefix "unit"^^xsd:string ] .

s223:hasConnectionPoint a s223:RelationWithInverse,
        rdf:Property ;
    rdfs:label "has connection point"^^xsd:string ;
    s223:inverseOf s223:isConnectionPointOf ;
    rdfs:comment "One of two `Relation`s that associates `Connectable` thing with a `ConnectionPoint`. It is the inverse of the relation `isConnectionPointOf` (see {s223:isConnectionPointOf})."^^xsd:string .

s223:hasMedium a s223:Relation,
        rdf:Property ;
    rdfs:label "has Medium"^^xsd:string ;
    rdfs:comment "The relation `hasMedium` is used to indicate what medium is flowing through the connection (e.g., air, water, electricity). The possible values are defined in `Substance-Medium` (see {s223:Substance-Medium})."^^xsd:string .

