From 482a2ec06bc7ae09e6017929b884ff6dfc6582ab Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Tue, 6 Aug 2024 09:52:08 -0600 Subject: [PATCH] update 223p.ttl --- ontologies/223p.ttl | 2828 ++++++++++++++++++++++--------------------- 1 file changed, 1454 insertions(+), 1374 deletions(-) diff --git a/ontologies/223p.ttl b/ontologies/223p.ttl index 76caeab..f27f05f 100644 --- a/ontologies/223p.ttl +++ b/ontologies/223p.ttl @@ -69,14 +69,14 @@ s223:SymmetricProperty a rdfs:Class, sh:path s223:hasProperty ; sh:qualifiedMinCount 2 ; sh:qualifiedValueShape [ sh:class s223:EnumeratedActuatableProperty ; - sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Position ; + sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Binary ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasAspect ], - [ sh:hasValue s223:EnumerationKind-Binary ; + sh:path s223:hasEnumerationKind ], + [ sh:hasValue s223:EnumerationKind-Position ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasEnumerationKind ] ] ] ; + sh:path s223:hasAspect ] ] ] ; sh:severity s223:g36 ] ] ) ; sh:severity s223:g36 ; sh:targetClass . @@ -218,14 +218,14 @@ s223:SymmetricProperty a rdfs:Class, sh:path s223:hasProperty ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:QuantifiableActuatableProperty ; - sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Position ; + sh:node [ sh:property [ sh:hasValue ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasAspect ], - [ sh:hasValue ; + sh:path ns1:hasQuantityKind ], + [ sh:hasValue s223:EnumerationKind-Position ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path ns1:hasQuantityKind ] ] ] ; + sh:path s223:hasAspect ] ] ] ; sh:severity s223:g36 ] ] [ 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 ; @@ -255,14 +255,14 @@ s223:SymmetricProperty a rdfs:Class, sh:path s223:hasProperty ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:EnumeratedActuatableProperty ; - sh:node [ sh:property [ sh:class s223:EnumerationKind-Binary ; + sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Position ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasEnumerationKind ], - [ sh:hasValue s223:EnumerationKind-Position ; + sh:path s223:hasAspect ], + [ sh:class s223:EnumerationKind-Binary ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasAspect ] ] ] ; + sh:path s223:hasEnumerationKind ] ] ] ; sh:severity s223:g36 ] ; sh:severity s223:g36 . @@ -272,50 +272,27 @@ s223:SymmetricProperty a rdfs:Class, rdfs:label "Zone"^^xsd:string ; rdfs:comment "A Zone is a generic thermal zone, with the points required for Guideline 36 controls. 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 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 ; - sh:severity s223:g36 ], - [ rdfs:comment "A Zone shall have a zone temperature setpoint adjustment property using the relation hasProperty, if applicable."^^xsd:string ; + sh:property [ 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 ; + sh:node [ sh:property [ sh:hasValue s223:Dimensioned-Delta ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path ns1:hasQuantityKind ], - [ sh:hasValue s223:Dimensioned-Delta ; + sh:path s223:hasAspect ], + [ sh:hasValue ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasAspect ] ] ] ; + sh:path ns1:hasQuantityKind ] ] ] ; sh:qualifiedValueShapesDisjoint true ; sh:severity sh:Info ], - [ rdfs:comment "A Zone shall have at least one zone thermostat override switch property using the relation hasProperty."^^xsd:string ; - sh:message "g36: A Zone shall have at least one zone thermostat override switch 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-Override ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasEnumerationKind ] ] ] ; - sh:severity sh:Info ], - [ rdfs:comment "A Zone shall have at least one zone temperature property using the relation hasProperty. "^^xsd:string ; - sh:message "g36: A Zone shall have at least one zone temperature property using the relation hasProperty. "^^xsd:string ; + [ 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:hasProperty ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:QuantifiableObservableProperty ; - sh:node [ sh:property [ sh:hasValue ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path ns1:hasQuantityKind ] ] ] ; - sh:qualifiedValueShapesDisjoint true ; + sh:path s223:hasDomain ; sh:severity s223:g36 ], [ 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 ; @@ -356,6 +333,29 @@ s223:SymmetricProperty a rdfs:Class, [ rdfs:comment "Property shall be measured at a window."^^xsd:string ; sh:class s223:Window ; sh:path [ sh:alternativePath ( ( [ sh:inversePath s223:observes ] s223:hasMeasurementLocation ) [ sh:inversePath s223:hasProperty ] ) ] ] ] ] ; + sh:severity sh:Info ], + [ rdfs:comment "A Zone shall have at least one zone temperature property using the relation hasProperty. "^^xsd:string ; + sh:message "g36: A Zone shall have at least one zone temperature property using the relation hasProperty. "^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasProperty ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:QuantifiableObservableProperty ; + sh:node [ sh:property [ sh:hasValue ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path ns1:hasQuantityKind ] ] ] ; + sh:qualifiedValueShapesDisjoint true ; + sh:severity s223:g36 ], + [ rdfs:comment "A Zone shall have at least one zone thermostat override switch property using the relation hasProperty."^^xsd:string ; + sh:message "g36: A Zone shall have at least one zone thermostat override switch 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-Override ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path s223:hasEnumerationKind ] ] ] ; sh:severity sh:Info ] ; sh:severity s223:g36 . @@ -365,17 +365,17 @@ s223:SymmetricProperty a rdfs:Class, 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 section 3.1.3 of Guideline 36."^^xsd:string ; rdfs:subClassOf s223:ZoneGroup ; - sh:property [ rdfs:comment "A ZoneGroup shall contain at least one Zone using the relation contains."^^xsd:string ; - sh:class ; - sh:message "g36: A ZoneGroup shall contain at least one Zone using the relation contains."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:contains ; - sh:severity s223:g36 ], - [ rdfs:comment "A ZoneGroup shall have the Domain HVAC using the relation hasDomain."^^xsd:string ; + 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 ; + sh:severity s223:g36 ], + [ rdfs:comment "A ZoneGroup shall contain at least one Zone using the relation contains."^^xsd:string ; + sh:class ; + sh:message "g36: A ZoneGroup shall contain at least one Zone using the relation contains."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:contains ; sh:severity s223:g36 ] ; sh:severity s223:g36 . @@ -1206,18 +1206,18 @@ s223:Actuator a s223:Class, rdfs:label "Actuator"^^xsd:string ; rdfs:comment "A piece of equipment, either electrically, pneumatically, or hydraulically operated, that makes a change in the physical world, such as the position of a valve or damper."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "If the relation actuates is present it must associate the Actuator with a Equipment."^^xsd:string ; - sh:class s223:Equipment ; - sh:path s223:actuates ], - [ rdfs:comment "An Actuator must be associated with at least one ActuatableProperty using the relation actuatedByProperty."^^xsd:string ; + sh:property [ rdfs:comment "An Actuator must be associated with at least one ActuatableProperty using the relation actuatedByProperty."^^xsd:string ; sh:class s223:ActuatableProperty ; sh:minCount 1 ; - sh:path s223:actuatedByProperty ] . + sh:path s223:actuatedByProperty ], + [ rdfs:comment "If the relation actuates is present it must associate the Actuator with a Equipment."^^xsd:string ; + sh:class s223:Equipment ; + sh:path s223:actuates ] . s223:AirHandlingUnit a s223:Class, sh:NodeShape ; rdfs:label "Air handling unit"^^xsd:string ; - rdfs:comment "An assembly consisting of sections containing a fan or fans and other necessary equipment to perform one or more of the following functions: circulating, filtration, heating, cooling, heat recovery, humidifying, dehumidifying, and mixing of air. It is usually connected to an air-distribution system."^^xsd:string ; + rdfs:comment "An assembly consisting of a fan or fans and other necessary equipment 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 Air."^^xsd:string ; sh:minCount 1 ; @@ -1240,24 +1240,24 @@ s223:BACnetExternalReference a s223:Class, rdfs:comment "BACnetExternalReference is a subclass of ExternalReference that contains BACnet protocol parameter values necessary to associate a property with a value."^^xsd:string ; rdfs:subClassOf s223:ExternalReference ; sh:property [ 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 ; + 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 ], + sh:path ; + sh:pattern "^[A-Za-z0-9-]+,[1-9][0-9]*$"^^xsd:string ], [ 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-2020 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 ; + 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 ], + sh:path ], [ 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 ; + 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 ; - sh:pattern "^[A-Za-z0-9-]+,[1-9][0-9]*$"^^xsd:string ], + sh:path ], [ 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 ; @@ -1265,11 +1265,11 @@ s223:BACnetExternalReference a s223:Class, sh:minCount 0 ; sh:path ], [ 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 ; + 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 ], + sh:path ], [ 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 ; @@ -1278,11 +1278,11 @@ s223:BACnetExternalReference a s223:Class, sh:path ; sh:pattern "^[A-Za-z0-9-]+,[1-9][0-9]*$"^^xsd:string ], [ 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 ; + rdfs:comment "If the relation property-identifier is present it is either a decimal number or exactly equal to the ASHRAE 135-2020 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 ] . + sh:path ] . s223:BatteryCPShape a sh:NodeShape ; rdfs:label "Battery CP Shape"^^xsd:string ; @@ -1329,12 +1329,7 @@ s223:ChilledBeam a s223:Class, rdfs:label "Chilled beam"^^xsd:string ; rdfs:comment "A structure 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 must 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 Water."^^xsd:string ; + sh:property [ rdfs:comment "A ChilledBeam shall have at least one outlet using the medium Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -1347,7 +1342,12 @@ s223:ChilledBeam a s223:Class, sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Water ; - sh:path s223:hasMedium ] ] ] ] . + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "A ChilledBeam must 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 ] ] . s223:Chiller a s223:Class, sh:NodeShape ; @@ -1429,14 +1429,14 @@ s223:ConnectionCnxShape a sh:NodeShape ; sh:minCount 1 ; sh:path s223:cnx ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ; sh:qualifiedValueShapesDisjoint true ; sh:severity sh:Warning ], [ rdfs:comment "A Connection shall have at least two cnx relations allowing flow in and out of the Connection."^^xsd:string ; sh:minCount 1 ; sh:path s223:cnx ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ; sh:qualifiedValueShapesDisjoint true ; sh:severity sh:Warning ] ] [ sh:property [ rdfs:comment "A Connection shall have at least two cnx relations allowing flow in and out of the Connection."^^xsd:string ; sh:minCount 2 ; @@ -1495,7 +1495,7 @@ s223:CoolingTower a s223:Class, s223:CorrelatedColorTemperatureSensor a s223:Class, sh:NodeShape ; rdfs:label "Correlated color temperature sensor"^^xsd:string ; - rdfs:comment "A subclass of LightSensor that observes the color of light."^^xsd:string ; + rdfs:comment "A subclass of LightSensor that observes the 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 must always observe a Property that has a QuantityKind of ThermodynamicTemperature."^^xsd:string ; sh:message "s223: A CorrelatedColorTemperatureSensor must always observe a Property that has a QuantityKind of ThermodynamicTemperature."^^xsd:string ; @@ -1505,56 +1505,6 @@ s223:CorrelatedColorTemperatureSensor a s223:Class, sh:node [ sh:property [ sh:hasValue ; sh:path ns1:hasQuantityKind ] ] ] ] . -s223:DifferentialSensor a s223:Class, - sh:NodeShape ; - rdfs:label "Differential sensor"^^xsd:string ; - rdfs:comment "A sensor that measures the difference of a quantity between any two points in the system."^^xsd:string ; - rdfs:subClassOf s223:AbstractSensor ; - sh:property [ rdfs:comment "A Differential Sensor must be defined in terms of the QuantityKind that is being measured."^^xsd:string ; - sh:class ns1:QuantityKind ; - sh:minCount 1 ; - sh:path ( s223:observes ns1:hasQuantityKind ) ], - [ rdfs:comment "A Differential Sensor must have different values for hasObservationLocationHigh and hasObservationLocationLow."^^xsd:string ; - sh:path s223:hasObservationLocationHigh ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Ensure that the values of hasObservationLocationHigh and hasObservationLocationLow are distinct."^^xsd:string ; - sh:message "s223: {$this} cannot have the same value, {?high}, for both hasObservationLocationHigh and hasObservationLocationLow"^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?high -WHERE { - $this s223:hasObservationLocationHigh ?high . - $this s223:hasObservationLocationLow ?low . -FILTER (?high = ?low) . -} -"""^^xsd:string ] ] ; - sh:xone ( [ sh:property [ rdfs:comment "A DifferentialSensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocationLow."^^xsd:string ; - sh:class s223:Connectable ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasObservationLocationLow ] ] [ sh:property [ rdfs:comment "A DifferentialSensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocationLow."^^xsd:string ; - sh:class s223:Connection ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasObservationLocationLow ] ] [ sh:property [ rdfs:comment "A DifferentialSensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocationLow."^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasObservationLocationLow ] ] ), - ( [ sh:property [ rdfs:comment "A DifferentialSensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocationHigh."^^xsd:string ; - sh:class s223:Connectable ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasObservationLocationHigh ] ] [ sh:property [ rdfs:comment "A DifferentialSensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocationHigh."^^xsd:string ; - sh:class s223:Connection ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasObservationLocationHigh ] ] [ sh:property [ rdfs:comment "A DifferentialSensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocationHigh."^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasObservationLocationHigh ] ] ) . - s223:Door a s223:Class, sh:NodeShape ; rdfs:label "Door"^^xsd:string ; @@ -1585,15 +1535,15 @@ s223:DualDuctTerminal a s223:Class, s223:Duct a s223:Class, sh:NodeShape ; rdfs:label "Duct"^^xsd:string ; - rdfs:comment """A Duct is used for the transportation of air. This includes air supply, return, and exhaust in HVAC (Heating, Ventilation, and - Air Conditioning) systems. Ducts can be cylindrical or rectangular and are designed to maintain airflow and pressure while minimizing air - leakage and heat loss or gain."""^^xsd:string ; + rdfs:comment """A Duct is a subclass of Connection that represents a tube or conduit through which air is conveyed. + Ducts can be cylindrical or rectangular and are designed to maintain airflow and pressure while minimizing air + leakage and heat loss or gain. This includes air 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 subclass of LightSensor that observes the deviation of the light spectrum from pure blackbody."^^xsd:string ; + rdfs:comment "A subclass of LightSensor that observes 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 must always observe a Property that has a QuantityKind of Duv."^^xsd:string ; sh:message "s223: A DuvSensor must always observe a Property that has a QuantityKind of Duv."^^xsd:string ; @@ -1627,19 +1577,19 @@ s223:ElectricOutlet a s223:Class, rdfs:label "Electric outlet"^^xsd:string ; rdfs:comment "A device to which a piece of electrical equipment can be connected in order to provide it with electricity"^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "An ElectricOutlet shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:property [ rdfs:comment "An ElectricOutlet shall have exactly one inlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 1 ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "An ElectricOutlet shall have exactly one inlet using the medium Electricity."^^xsd:string ; + [ rdfs:comment "An ElectricOutlet shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; - sh:qualifiedMaxCount 1 ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ] ] . @@ -1666,52 +1616,52 @@ s223:ElectricTransformer a s223:Class, s223:ElectricWire a s223:Class, sh:NodeShape ; rdfs:label "Electric wire"^^xsd:string ; - rdfs:comment "An ElectricWire is a subclass of Connection, that represents one or more electrical conductors used to convey electricity."^^xsd:string ; + rdfs:comment "An ElectricWire is a subclass of Connection, that represents one or more flexible conductors used to convey electricity."^^xsd:string ; rdfs:subClassOf s223:Connection ; - sh:property [ rdfs:comment "An ElectricWire must be associated with exactly one Constituent-Electricity using the relation hasMedium."^^xsd:string ; + sh:property [ rdfs:comment "If the relation hasElectricalPhase is present it must associate the ElectricWire with an ElectricalPhaseIdentifier or ElectricalVoltagePhases."^^xsd:string ; + sh:or ( [ sh:class s223:Aspect-ElectricalPhaseIdentifier ] [ sh:class s223:Aspect-ElectricalVoltagePhases ] ) ; + sh:path s223:hasElectricalPhase ], + [ rdfs:comment "An ElectricWire must be associated with exactly one Constituent-Electricity using the relation hasMedium."^^xsd:string ; sh:class s223:Constituent-Electricity ; sh:maxCount 1 ; sh:message "s223: An ElectricWire must be associated with exactly one Constituent-Electricity using the relation hasMedium."^^xsd:string ; sh:minCount 1 ; - sh:path s223:hasMedium ], - [ rdfs:comment "If the relation hasElectricalPhase is present it must associate the ElectricWire with an ElectricalPhaseIdentifier or ElectricalVoltagePhases."^^xsd:string ; - sh:or ( [ sh:class s223:Aspect-ElectricalPhaseIdentifier ] [ sh:class s223:Aspect-ElectricalVoltagePhases ] ) ; - sh:path s223:hasElectricalPhase ] . + sh:path s223:hasMedium ] . s223:FanCoilUnit a s223:Class, sh:NodeShape ; rdfs:label "Fan coil unit"^^xsd:string ; rdfs:comment "A device consisting of a heat exchanger (coil) and a fan to regulate the temperature of one or more spaces."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A FanCoilUnit must be associated with at least 1 Coil using the relation contains."^^xsd:string ; + sh:property [ rdfs:comment "A FanCoilUnit must 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:Coil ] ], - [ rdfs:comment "A FanCoilUnit must at least 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 have at least one outlet using the medium Air."^^xsd:string ; + sh:qualifiedValueShape [ sh:class s223:Fan ] ], + [ rdfs:comment "A FanCoilUnit shall have at least one inlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A FanCoilUnit must be associated with at least 1 Fan using the relation contains."^^xsd:string ; + [ rdfs:comment "A FanCoilUnit must 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:Fan ] ], - [ rdfs:comment "A FanCoilUnit shall have at least one inlet using the medium Air."^^xsd:string ; + sh:qualifiedValueShape [ sh:class s223:Coil ] ], + [ rdfs:comment "A FanCoilUnit shall have at least one outlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; - sh:path s223:hasMedium ] ] ] ] . + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "A FanCoilUnit must at least 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 ) ] ] . s223:FanPoweredTerminal a s223:Class, sh:NodeShape ; @@ -1729,39 +1679,28 @@ s223:Filter a s223:Class, rdfs:label "Filter"^^xsd:string ; rdfs:comment "A device that removes contaminants from gases or liquids."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "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 "A filter should have one common constituent between the inlet and outlet"^^xsd:string ; + sh:property [ rdfs:comment "A filter should have one common constituent between the inlet and outlet"^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent 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 ; + rdfs:comment "Inconsistent 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 ; sh:select """ -SELECT ?this ?m2 ?m1 +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} . - } +$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 "Ensure that the filter inlet and outlet have compatible mediums."^^xsd:string ; @@ -1786,28 +1725,39 @@ 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 inlet ConnectionPoint."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ], [ rdfs:comment "A filter should have one common constituent between the inlet and outlet"^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent 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 ; + rdfs:comment "Inconsistent 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 ; sh:select """ -SELECT $this ?m2 ?m1 +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} . -} + ?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 ] ], [ rdfs:comment "A Filter shall have at least one outlet."^^xsd:string ; @@ -1876,6 +1826,22 @@ s223:Furnace a s223:Class, sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ] . +s223:GaugePressureSensor a s223:Class, + sh:NodeShape ; + rdfs:label "Differential sensor"^^xsd:string ; + rdfs:comment "A pressure sensor that indicates pressure relative to atmospheric pressure."^^xsd:string ; + rdfs:subClassOf s223:PressureSensor ; + sh:property [ rdfs:comment "A GaugePressureSensor must always observe a Property that has a QuantityKind of GaugePressure."^^xsd:string ; + sh:message "s223: A GaugePressureSensor must always observe a Property that has a QuantityKind of GaugePressure."^^xsd:string ; + sh:path ( s223:observes ns1:hasQuantityKind ) ; + sh:value ], + [ rdfs:comment "A GaugePressureSensor must always observe a Property that has a value of true for qudt:isDeltaQuantity."^^xsd:string ; + sh:maxCount 1 ; + sh:message "A GaugePressureSensor must always observe a Property that has a value of true for qudt:isDeltaQuantity."^^xsd:string ; + sh:minCount 1 ; + sh:path ( s223:observes ns1:isDeltaQuantity ) ; + sh:value true ] . + s223:Generator a s223:Class, sh:NodeShape ; rdfs:label "Generator"^^xsd:string ; @@ -1896,18 +1862,18 @@ s223:HeatPump a s223:Class, rdfs:label "HeatPump"^^xsd:string ; rdfs:comment "A device that can heat or cool by transferring thermal energy using a reversible refrigeration cycle."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A HeatPump shall have at least one inlet using the medium Air."^^xsd:string ; + sh:property [ rdfs:comment "A HeatPump shall have at least one outlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A HeatPump shall have at least one outlet using the medium Air."^^xsd:string ; + [ rdfs:comment "A HeatPump shall have at least one inlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ] . @@ -1938,7 +1904,7 @@ s223:HumiditySensor a s223:Class, s223:IlluminanceSensor a s223:Class, sh:NodeShape ; rdfs:label "Illuminance sensor"^^xsd:string ; - rdfs:comment "A subclass of LightSensor that observes the level of illuminance."^^xsd:string ; + rdfs:comment "A subclass of LightSensor that observes 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 will always observe a Property that has a QuantityKind of Illuminance."^^xsd:string ; sh:message "s223: An IlluminanceSensor will always observe a Property that has a QuantityKind of Illuminance."^^xsd:string ; @@ -1991,13 +1957,13 @@ s223:JunctionCPShape a sh:NodeShape ; sh:minCount 2 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ; sh:qualifiedValueShapesDisjoint true ], [ rdfs:comment "A Junction shall have at least two ConnectionPoints 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:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ; sh:qualifiedValueShapesDisjoint true ] ] [ sh:property [ rdfs:comment "A Junction shall have at least two ConnectionPoints 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 ; @@ -2010,7 +1976,7 @@ s223:JunctionCPShape a sh:NodeShape ; s223:Luminaire a s223:Class, sh:NodeShape ; rdfs:label "Luminaire"^^xsd:string ; - rdfs:comment "A complete lighting unit consisting of a lamp or lamps together with the housing designed to distribute the light, position and protect the lamps, and connect the lamps to the power supply."^^xsd:string ; + rdfs:comment "A complete lighting unit 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 outlet using the medium EM-Light."^^xsd:string ; sh:minCount 1 ; @@ -2122,26 +2088,26 @@ s223:PhotovoltaicModule a s223:Class, 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 "An PhotovoltaicModule must have at least one inlet using the medium EM-Light."^^xsd:string ; + sh:property [ rdfs:comment "An PhotovoltaicModule shall have at least one outlet using the medium 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:EM-Light ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "An PhotovoltaicModule shall have at least one outlet using the medium Electricity."^^xsd:string ; + [ rdfs:comment "An PhotovoltaicModule must 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:OutletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:EM-Light ; sh:path s223:hasMedium ] ] ] ] . s223:Pipe a s223:Class, sh:NodeShape ; rdfs:label "Pipe"^^xsd:string ; - rdfs:comment """A Pipe is used primarily for the transportation of liquids and gases. This includes water, sewage, natural gas, -chemicals and even vacuum. They are designed to withstand internal pressure and sometimes external pressure as well. Examples + rdfs:comment """A Pipe is a subclass of Connection that represents a hollow cylinder of metal or other material used to convey a Medium. +They are designed to withstand internal pressure and sometimes external pressure as well. Examples include plumbing systems for potable water, waste drainage systems, and natural gas delivery systems."""^^xsd:string ; rdfs:subClassOf s223:Connection . @@ -2150,25 +2116,19 @@ s223:PowerOverEthernetSwitch a s223:Class, rdfs:label "Power Over Ethernet Switch"^^xsd:string ; rdfs:comment "A type of network hardware that connects and is capable of powering cabled devices, such as computers and Wi-Fi access points, in an Ethernet LAN so they can communicate with each other and to the internet."^^xsd:string ; rdfs:subClassOf s223:EthernetSwitch ; - sh:property [ rdfs:comment "A PowerOverEthernetSwitch shall have at least one BidirectionalConnectionPoint using the medium PowerAndSignal-PoE."^^xsd:string ; + sh:property [ rdfs:comment "A PowerOverEthernetSwitch shall have at least one inlet using the medium Electricity."^^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:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A PowerOverEthernetSwitch shall have at least one inlet using the medium Electricity."^^xsd:string ; + [ rdfs:comment "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:InletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; + sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ; + sh:node [ sh:property [ sh:class s223:PowerAndSignal-PoE ; sh:path s223:hasMedium ] ] ] ] . -s223:PressureSensor a s223:Class, - sh:NodeShape ; - rdfs:label "Pressure sensor"^^xsd:string ; - rdfs:comment "A PressureSensor is a specialization of a Sensor that observes a QuantifiableObservableProperty that represents a pressure measurement."^^xsd:string ; - rdfs:subClassOf s223:Sensor . - s223:Pump a s223:Class, sh:NodeShape ; rdfs:label "Pump"^^xsd:string ; @@ -2186,18 +2146,6 @@ s223:Pump a s223:Class, sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Oil ; sh:path s223:hasMedium ] ] ) ; sh:severity sh:Warning ] ] ], - [ rdfs:comment "A Pump shall have at least one outlet using the medium Water, Oil or 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 Water, Oil or Refrigerant."^^xsd:string ; - sh:message "A Pump shall have at least one outlet using the medium Water, Oil or 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 ConnectionPoints of a Pump must have compatible Media."^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:sparql [ a sh:SPARQLConstraint ; @@ -2218,7 +2166,19 @@ WHERE { FILTER (NOT EXISTS {?mediumb a/rdfs:subClassOf* ?mediuma}) . FILTER (NOT EXISTS {?mediuma a/rdfs:subClassOf* ?mediumb}) . } -"""^^xsd:string ] ] . +"""^^xsd:string ] ], + [ rdfs:comment "A Pump shall have at least one outlet using the medium Water, Oil or 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 Water, Oil or Refrigerant."^^xsd:string ; + sh:message "A Pump shall have at least one outlet using the medium Water, Oil or 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:RadiantPanelInletShape a sh:NodeShape ; rdfs:label "Radiant panel inlet shape"^^xsd:string ; @@ -2263,18 +2223,18 @@ s223:RadiatorInletShape a sh:NodeShape ; 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 inlet using the medium Electricity or Water."^^xsd:string ; + 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:InletConnectionPoint ; + 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 outlet using the medium Water."^^xsd:string ; + [ 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:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Water ; sh:path s223:hasMedium ] ] ] ] ] ) ; sh:severity sh:Warning ; @@ -2283,88 +2243,122 @@ s223:RadiatorInletShape a sh:NodeShape ; s223:RequiredCommentsShape a sh:NodeShape ; sh:severity sh:Info ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Ensure that every SPARQLRule must have an rdfs:comment. "^^xsd:string ; - sh:message "s223: Every SPARQLRule for Class {$this} must have an rdfs:comment."^^xsd:string ; + 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 ; sh:select """ SELECT $this WHERE { -$this sh:rule ?rule . -?rule a sh:SPARQLRule . -FILTER NOT EXISTS {?rule rdfs:comment ?comment} . +FILTER NOT EXISTS {$this rdfs:comment ?comment} . } """^^xsd:string ], [ a sh:SPARQLConstraint ; - rdfs:comment "Ensure that any property shape 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 ; + 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 ; sh:select """ -SELECT $this ?path +SELECT $this WHERE { -$this sh:property ?propshape . -?propshape sh:sparql ?sparqlconstraint . -?propshape sh:path ?path . -FILTER NOT EXISTS {?sparqlconstraint rdfs:comment ?comment} . +FILTER NOT EXISTS {$this a sh:NodeShape} . } """^^xsd:string ], [ a sh:SPARQLConstraint ; - rdfs:comment "Ensure that 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 ; + rdfs:comment "Ensure that 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 ; sh:select """ -SELECT $this ?pred +SELECT $this WHERE { $this sh:rule ?rule . -?rule a sh:TripleRule . -?rule sh:predicate ?pred . +?rule a sh:SPARQLRule . FILTER NOT EXISTS {?rule rdfs:comment ?comment} . } """^^xsd:string ], [ 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 ; + 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 ; sh:select """ SELECT $this WHERE { -FILTER NOT EXISTS {$this a sh:NodeShape} . +FILTER NOT EXISTS {$this rdfs:subClassOf* rdf:Property} . +FILTER NOT EXISTS {$this rdfs:subClassOf* s223:Concept} . } """^^xsd:string ], [ a sh:SPARQLConstraint ; rdfs:comment "Ensure that any 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:message "s223: The SPARQLConstraint for path {?path} for Class {$this} must have an rdfs:comment."^^xsd:string ; sh:prefixes ; sh:select """ SELECT $this ?path WHERE { $this sh:property ?propshape . +?propshape sh:sparql ?sparqlconstraint . ?propshape sh:path ?path . -FILTER NOT EXISTS {?propshape rdfs:comment ?comment} . +FILTER NOT EXISTS {?sparqlconstraint rdfs:comment ?comment} . } """^^xsd:string ], [ 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 ; + rdfs:comment "Ensure that 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 ; sh:select """ -SELECT $this +SELECT $this ?pred WHERE { -FILTER NOT EXISTS {$this rdfs:subClassOf* rdf:Property} . -FILTER NOT EXISTS {$this rdfs:subClassOf* s223:Concept} . +$this sh:rule ?rule . +?rule a sh:TripleRule . +?rule sh:predicate ?pred . +FILTER NOT EXISTS {?rule rdfs:comment ?comment} . } """^^xsd:string ], [ 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 ; + rdfs:comment "Ensure that any 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 ; sh:select """ -SELECT $this +SELECT $this ?path WHERE { -FILTER NOT EXISTS {$this rdfs:comment ?comment} . +$this sh:property ?propshape . +?propshape sh:path ?path . +FILTER NOT EXISTS {?propshape rdfs:comment ?comment} . } """^^xsd:string ] ; sh:targetClass s223:Class . +s223:SensorObservationLocationShape a sh:NodeShape ; + rdfs:label "Valve"^^xsd:string ; + rdfs:comment "A Sensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocation."^^xsd:string ; + sh:message "s223: A Sensor must 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 must 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 must 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 must 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 must be associated with exactly 1 of QuantifiableObservableProperty or EnumeratedObservableProperty using the relation observes."^^xsd:string ; + sh:message "s223: A Sensor must 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 must 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 must 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:SingleDuctTerminal a s223:Class, sh:NodeShape ; rdfs:label "Single Duct Terminal."^^xsd:string ; @@ -2469,16 +2463,16 @@ s223:TwoWayValve a s223:Class, 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 outlet."^^xsd:string ; + sh:property [ rdfs:comment "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:OutletConnectionPoint ] ], - [ rdfs:comment "A TwoWayValve shall have at least one inlet."^^xsd:string ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ], + [ rdfs:comment "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:InletConnectionPoint ] ] . + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ] . s223:ValveCPShape a sh:NodeShape ; rdfs:label "Valve"^^xsd:string ; @@ -2488,13 +2482,13 @@ s223:ValveCPShape a sh:NodeShape ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ; 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:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ; 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 ; @@ -2509,24 +2503,24 @@ s223:VariableFrequencyDrive a s223:Class, rdfs:label "VariableFrequencyDrive"^^xsd:string ; rdfs:comment "An electronic device that varies its output frequency to vary the rotating speed 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 "If the relation connectedTo is present it must associate the VariableFrequencyDrive with a Equipment."^^xsd:string ; - sh:class s223:Equipment ; - sh:path s223:connectedTo ], - [ rdfs:comment "A VariableFrequencyDrive shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:property [ rdfs:comment "A VariableFrequencyDrive shall have at least one inlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; - sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A VariableFrequencyDrive shall have at least one inlet using the medium Electricity."^^xsd:string ; + sh:path s223:hasMedium ] ] ] ; + sh:severity sh:Warning ], + [ rdfs:comment "If the relation connectedTo is present it must associate the VariableFrequencyDrive with a Equipment."^^xsd:string ; + sh:class s223:Equipment ; + sh:path s223:connectedTo ], + [ rdfs:comment "A VariableFrequencyDrive shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; - sh:path s223:hasMedium ] ] ] ; - sh:severity sh:Warning ] . + sh:path s223:hasMedium ] ] ] ] . s223:WindowShade a s223:Class, sh:NodeShape ; @@ -11552,80 +11546,6 @@ another substance in a given chemical reaction."""^^rdf:HTML ; ns1:symbol "0173-1#Z4-BAJ324#002"^^xsd:string ; rdfs:isDefinedBy . - a ns1:QuantityKind ; - rdfs:label "Gauge Pressure"@en ; - dcterms:description """Gauge Pressure is the pressure of a system relative to the pressure of the surrounding atmosphere. -It is the difference between the absolute pressure and the atmospheric pressure. Gauge pressure is positive for pressures -above atmospheric pressure and negative for pressures below it. A Quantity in QUDT having a QuantityKind of GaugePressure -would typically also assert the value of qudt:isDeltaQuantity to be true, indicating that the value is a difference between -two pressures."""^^ns1:LatexString ; - ns1:applicableUnit , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - ; - ns1:hasDimensionVector ; - rdfs:isDefinedBy ; - skos:broader . - a ns1:QuantityKind ; rdfs:label "Grand Canonical Partition Function"@en ; dcterms:description "An \"Grand Canonical Partition Function\" for a grand canonical ensemble, a system that can exchange both heat and particles with the environment, which has a constant temperature and a chemical potential."^^rdf:HTML ; @@ -22047,17 +21967,17 @@ s223:EthernetSwitch a s223:Class, rdfs:label "Ethernet switch"^^xsd:string ; rdfs:comment "A type of network hardware that connects cabled devices, such as computers and Wi-Fi access points, in an Ethernet LAN so they can communicate with each other and to the internet."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "An EthernetSwitch shall have at least two BidirectionalConnectionPoints 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 Electricity."^^xsd:string ; + sh:property [ rdfs:comment "An EthernetSwitch shall have at least one inlet using the medium 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 EthernetSwitch shall have at least two BidirectionalConnectionPoints 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 ] ] ] ] . s223:Gas-SuperHeated a s223:Class, @@ -22072,16 +21992,16 @@ s223:GlycolSolution-15Percent a s223:Class, sh:NodeShape ; rdfs:label "GlycolSolution-15Percent"^^xsd:string ; s223:composedOf [ a s223:QuantifiableProperty ; - rdfs:label "Water conc"^^xsd:string ; - s223:hasValue 85.0 ; - s223:ofConstituent s223:Constituent-H2O ; - ns1:hasQuantityKind ; - ns1:hasUnit ], - [ a s223:QuantifiableProperty ; rdfs:label "Glycol conc"^^xsd:string ; s223:hasValue 15.0 ; s223:ofConstituent s223:Constituent-Glycol ; ns1:hasQuantityKind ; + ns1:hasUnit ], + [ a s223:QuantifiableProperty ; + rdfs:label "Water conc"^^xsd:string ; + s223:hasValue 85.0 ; + s223:ofConstituent s223:Constituent-H2O ; + ns1:hasQuantityKind ; ns1:hasUnit ] ; s223:hasFreezingPoint [ a s223:QuantifiableProperty ; rdfs:label "Freezing point"^^xsd:string ; @@ -22186,7 +22106,13 @@ s223:HeatExchanger a s223:Class, rdfs:label "Heat exchanger"^^xsd:string ; rdfs:comment "A component intended to transfer heat from one medium to another while keeping the two media separate."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points."^^xsd:string ; + sh:property [ rdfs:comment "If the relation hasRole is present it must associate the HeatExchanger with a EnumerationKind-Role."^^xsd:string ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment "A heat exchanger shall have at least 4 connection points."^^xsd:string ; + sh:minCount 4 ; + sh:path s223:hasConnectionPoint ], + [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points."^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; @@ -22222,13 +22148,7 @@ GROUP BY $this } FILTER (?incount != ?outcount) } -"""^^xsd:string ] ], - [ rdfs:comment "If the relation hasRole is present it must associate the HeatExchanger with a EnumerationKind-Role."^^xsd:string ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ], - [ rdfs:comment "A heat exchanger shall have at least 4 connection points."^^xsd:string ; - sh:minCount 4 ; - sh:path s223:hasConnectionPoint ] . +"""^^xsd:string ] ] . s223:Light-Infrared a s223:Class, s223:Light-Infrared, @@ -22398,6 +22318,44 @@ s223:Presence-True a s223:Class, 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 """ +There are three primary use cases for measuring pressure in building environments. +- The first use case involves measuring absolute pressure, which is essential in applications like weather stations +where atmospheric pressure readings are required. +- The second use case pertains to measuring differential pressure. This is crucial in HVAC systems, for instance, +where it's necessary to measure the pressure drop across filters in ducts or compare the pressure between different +rooms and hallways to ensure proper airflow and contamination control. +- The third use case is measuring gauge pressure, which indicates pressure relative to atmospheric pressure. +This is commonly used in applications such as monitoring compressed gas cylinders. In this scenario, a gauge +reading of zero signifies that the measured pressure is equal to the atmospheric pressure, not a vacuum. + +Modeling a sensor that measures each of these can be performed as follows: + +Case 1. +- Class: s223:PressureSensor +- Sensor s223:hasObservationLocation some-location-of-interest +- Associated property quantity kind: quantitykind:Pressure + +Case 2. +- Class: s223:PressureSensor +- Sensor s223:hasObservationLocation some-location-of-interest +- Sensor s223:hasReferenceLocation some-reference-location +- Associated property quantity kind: quantitykind:Pressure +- Associated property qudt:isDeltaQuantity true + +Case 3. +- Class: s223:GaugePressureSensor (a subClassOf s223:PressureSensor) +- Sensor s223:hasObservationLocation some-location-of-interest +- Sensor s223:hasReferenceLocation some-reference-ambient-location +- Associated property quantity kind: quantitykind:GaugePressure +- Associated property qudt:isDeltaQuantity true + """^^xsd:string, + "A PressureSensor is a specialization of a Sensor that observes a QuantifiableObservableProperty that represents a pressure measurement."^^xsd:string ; + rdfs:subClassOf s223:Sensor . + s223:RadiantPanel a s223:Class, sh:NodeShape ; rdfs:label "Radiant panel"^^xsd:string ; @@ -22643,7 +22601,7 @@ s223:Substance-Soot a s223:Class, s223:System a s223:Class, sh:NodeShape ; rdfs:label "System"^^xsd:string ; - rdfs:comment "A System is a logical grouping (collection) of Equipment for some functional purpose, such as a chilled water system, or HVAC system. A System does not participate in Connections."^^xsd:string ; + rdfs:comment "A System is a logical grouping (collection) of Equipment for some functional purpose. Examples of possible systems iclude an air distribution system, or a hot water system. Systems can contain other Systems. A System does not participate in Connections."^^xsd:string ; rdfs:subClassOf s223:Concept ; sh:property [ rdfs:comment "If the relation hasRole is present, it must associate the System with an EnumerationKind-Role."^^xsd:string ; sh:class s223:EnumerationKind-Role ; @@ -22746,18 +22704,18 @@ s223:Window a s223:Class, rdfs:label "Window"^^xsd:string ; rdfs:comment "A daylight opening on a vertical or nearly vertical area of a room envelope."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Window shall have at least one outlet using the medium Light."^^xsd:string ; + sh:property [ rdfs:comment "A Window shall have at least one inlet using the medium Light."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:EM-Light ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A Window shall have at least one inlet using the medium Light."^^xsd:string ; + [ rdfs:comment "A Window shall have at least one outlet using the medium Light."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:EM-Light ; sh:path s223:hasMedium ] ] ] ] . @@ -22801,6 +22759,10 @@ s223:hasPhysicalLocation a rdf:Property ; rdfs:label "has Physical Location"^^xsd:string ; rdfs:comment "The relation hasPhysicalLocation is used to indicate the PhysicalSpace (see `s223:PhysicalSpace`) where a piece of Equipment (see `s223:Equipment`) is located. 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 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:hasReferenceLocation a rdf:Property ; + rdfs:label "has reference location"^^xsd:string ; + rdfs:comment "The relation hasReferenceLocation associates a differential sensor to the topological location of the baseline (reference) property (see `s223:observes`)."^^xsd:string . + s223:hasSetpoint a rdf:Property ; rdfs:label "has setpoint"^^xsd:string ; rdfs:comment "This relation binds a control setpoint to the quantifiable property indicating the desired value which the control process is trying to maintain."^^xsd:string . @@ -31714,6 +31676,80 @@ another substance in a given chemical reaction."""^^rdf:HTML ; rdfs:isDefinedBy ; skos:broader . + a ns1:QuantityKind ; + rdfs:label "Gauge Pressure"@en ; + dcterms:description """Gauge Pressure is the pressure of a system relative to the pressure of the surrounding atmosphere. +It is the difference between the absolute pressure and the atmospheric pressure. Gauge pressure is positive for pressures +above atmospheric pressure and negative for pressures below it. A Quantity in QUDT having a QuantityKind of GaugePressure +would typically also assert the value of qudt:isDeltaQuantity to be true, indicating that the value is a difference between +two pressures."""^^ns1:LatexString ; + ns1:applicableUnit , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + ; + ns1:hasDimensionVector ; + rdfs:isDefinedBy ; + skos:broader . + a ns1:QuantityKind ; rdfs:label "Gene Family Abundance"@en ; dcterms:description "The abundance of each gene family in the community. Gene families are groups of evolutionarily-related protein-coding sequences that often perform similar functions. Gene family abundance is reported in RPK (reads per kilobase) units to normalize for gene length."^^rdf:HTML ; @@ -51428,21 +51464,6 @@ THE UCUM TABLE (IN ALL FORMATS), UCUM DEFINITIONS, AND SPECIFICATION ARE PROVIDE rdfs:isDefinedBy ; owl:versionIRI . -s223:AbstractSensor a s223:Class, - sh:NodeShape ; - rdfs:label "Abstract sensor"^^xsd:string ; - s223:abstract true ; - rdfs:comment "This is an abstract class that represents properties that are common to all sensor types."^^xsd:string ; - rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "If the relation hasMeasurementResolution is present it must associate the AbstractSensor with a QuantifiableProperty."^^xsd:string ; - sh:class s223:QuantifiableProperty ; - sh:path s223:hasMeasurementResolution ], - [ rdfs:comment "An AbstractSensor must be associated with exactly one ObservableProperty using the relation observes."^^xsd:string ; - sh:class s223:ObservableProperty ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:observes ] . - s223:Aspect-Effectiveness a s223:Aspect-Effectiveness, s223:Class, sh:NodeShape ; @@ -51597,17 +51618,17 @@ s223:DomainSpace a s223:Class, rdfs:label "Domain Space"^^xsd:string ; rdfs:comment "A DomainSpace is a member (or component) of a Zone and is associated with a Domain such as Lighting, HVAC, PhysicalSecurity, etc. Physical spaces enclose Domain spaces."^^xsd:string ; rdfs:subClassOf s223:Connectable ; - sh:property [ 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 ], - [ rdfs:comment "A DomainSpace must be associated with exactly one EnumerationKind-Domain using the relation hasDomain."^^xsd:string ; + sh:property [ rdfs:comment "A DomainSpace must 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 must be associated with exactly one EnumerationKind-Domain using the relation hasDomain."^^xsd:string ; sh:minCount 1 ; - sh:path s223:hasDomain ] ; + 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 ] ; sh:rule [ a sh:TripleRule ; rdfs:comment "Infer a hasDomain relation by checking any enclosing Zone to determine the domain."^^xsd:string ; sh:object [ sh:path ( [ sh:inversePath s223:hasDomainSpace ] s223:hasDomain ) ] ; @@ -51678,17 +51699,11 @@ is separated into three or more separate Connections, all tied together with the 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."""^^xsd:string ; rdfs:subClassOf s223:Connectable ; - sh:property [ rdfs:comment "A Junction must be associated with exactly one EnumerationKind-Medium using the relation hasMedium."^^xsd:string ; - sh:class s223:Substance-Medium ; - sh:maxCount 1 ; - sh:message "s223: A Junction must be associated with exactly one EnumerationKind-Medium using the relation hasMedium."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasMedium ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; + sh:property [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; sh:name "Test for compatible declared Medium"^^xsd:string ; sh:path s223:hasMedium ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 1: Two pure mediums."^^xsd:string ; + rdfs:comment "Inconsistent 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 ; sh:select """ @@ -51698,27 +51713,52 @@ $this s223:cnx ?cp . ?cp a/rdfs:subClassOf* s223:ConnectionPoint . ?cp s223:hasMedium ?m1 . $this s223:hasMedium ?m2 . -FILTER (?m1 != ?m2 ) . +?m2 s223:composedOf/s223:ofConstituent ?s2 . 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}) . +FILTER NOT EXISTS { + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . +} } """^^xsd:string ] ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; + [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; sh:name "Test for compatible declared Medium"^^xsd:string ; sh:path s223:hasMedium ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent 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 ; + rdfs:comment "Inconsistent 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 ; 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 . +?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 "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 3: Two ConnectionPoints with mediums with constituents."^^xsd:string ; + sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; + sh:prefixes ; + 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 { @@ -51737,7 +51777,7 @@ $this s223:hasMedium ?m2 . sh:name "Test for compatible declared Medium"^^xsd:string ; sh:path s223:hasMedium ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 2: A Junction with constituents and an associated ConnectionPoint with a pure Medium."^^xsd:string ; + rdfs:comment "Inconsistent 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 ; sh:select """ @@ -51747,36 +51787,11 @@ $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 "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 2: Two ConnectionPoints 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 ; - 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 (?m1 != ?m2 ) . 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} . -} +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 "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; @@ -51803,22 +51818,26 @@ FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . } """^^xsd:string ] ], - [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; + [ rdfs:comment "A Junction must be associated with exactly one EnumerationKind-Medium using the relation hasMedium."^^xsd:string ; + sh:class s223:Substance-Medium ; + sh:maxCount 1 ; + sh:message "s223: A Junction must be associated with exactly one EnumerationKind-Medium using the relation hasMedium."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasMedium ], + [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; sh:name "Test for compatible declared Medium"^^xsd:string ; sh:path s223:hasMedium ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 3: Two ConnectionPoints with mediums with constituents."^^xsd:string ; - sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; + rdfs:comment "Inconsistent 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 ; sh:select """ -SELECT $this ?cp1 ?m1 ?cp2 ?m2 +SELECT $this ?m2 ?cp ?m1 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 . +$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 { @@ -51833,20 +51852,22 @@ $this s223:cnx ?cp2 . } } """^^xsd:string ] ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; + [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; sh:name "Test for compatible declared Medium"^^xsd:string ; sh:path s223:hasMedium ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent 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 ; + rdfs:comment "Inconsistent Medium. Case 2: Two ConnectionPoints 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 ; sh:select """ -SELECT $this ?m2 ?cp ?m1 +SELECT $this ?cp1 ?m1 ?cp2 ?m2 WHERE { -$this s223:cnx ?cp . -?cp a/rdfs:subClassOf* s223:ConnectionPoint . -?cp s223:hasMedium ?m2 . -$this s223:hasMedium ?m1 . +$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 { @@ -51889,7 +51910,14 @@ s223:PowerAndSignal-PoE a s223:Class, s223:ofConstituent s223:Electricity-DC ] ; rdfs:comment "This class has enumerated subclasses of Power over Ethernet."^^xsd:string ; rdfs:subClassOf s223:Mix-PowerAndSignal ; - sh:property [ rdfs:comment "There must be at least two Properties that characterize the constituents of Power over Ethernet."^^xsd:string ; + sh:property [ rdfs:comment "One of the constituents of PoE must be Ethernet."^^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 PoE must be Ethernet."^^xsd:string ; + sh:class s223:Signal-Ethernet ; + sh:path s223:ofConstituent ] ] ] ], + [ rdfs:comment "There must 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 ], @@ -51899,13 +51927,6 @@ s223:PowerAndSignal-PoE a s223:Class, sh:qualifiedValueShape [ sh:class s223:Property ; sh:node [ sh:property [ rdfs:comment "One of the constituents of PoE must be DC electrical power."^^xsd:string ; sh:class s223:Electricity-DC ; - sh:path s223:ofConstituent ] ] ] ], - [ rdfs:comment "One of the constituents of PoE must be Ethernet."^^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 PoE must be Ethernet."^^xsd:string ; - sh:class s223:Signal-Ethernet ; sh:path s223:ofConstituent ] ] ] ] . s223:ResistanceHeater a s223:Class, @@ -51913,18 +51934,18 @@ s223:ResistanceHeater a s223:Class, rdfs:label "Electrical resistance heater"^^xsd:string ; rdfs:comment "Resistance heaters provide electrical resistance heating, for example an electric heating coil within a Fan Coil Unit."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A ResistanceHeater shall have at least one inlet using the medium Electricity."^^xsd:string ; + sh:property [ rdfs:comment "ResistanceHeaters must 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 ResistanceHeater shall have at least one inlet using the medium 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 "ResistanceHeaters must have the role Role-Heating."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasRole ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:Role-Heating ] ] . + sh:path s223:hasMedium ] ] ] ] . s223:Voltage-0V a s223:Class, s223:Voltage-0V, @@ -52316,11 +52337,6 @@ ns1:id a rdf:Property ; dcterms:description "The \"qudt:id\" is an identifier string that uniquely identifies a QUDT concept. The identifier is constructed using a prefix. For example, units are coded using the pattern: \"UCCCENNNN\", where \"CCC\" is a numeric code or a category and \"NNNN\" is a digit string for a member element of that category. For scaled units there may be an addition field that has the format \"QNN\" where \"NN\" is a digit string representing an exponent power, and \"Q\" is a qualifier that indicates with the code \"P\" that the power is a positive decimal exponent, or the code \"N\" for a negative decimal exponent, or the code \"B\" for binary positive exponents."^^rdf:HTML ; rdfs:isDefinedBy . -ns1:isDeltaQuantity a rdf:Property ; - rdfs:label "is Delta Quantity"^^xsd:string ; - rdfs:comment "This property is used to identify a Quantity instance that is a measure of a change, or interval, of some property, rather than a measure of its absolute value. This is important for measurements such as temperature differences where the conversion among units would be calculated differently because of offsets."^^xsd:string ; - rdfs:isDefinedBy . - ns1:isoNormativeReference a rdf:Property ; rdfs:label "normative reference (ISO)"^^xsd:string ; dcterms:description "Provides a way to reference the ISO unit definition."^^rdf:HTML ; @@ -59667,18 +59683,18 @@ s223:Coil a s223:Class, rdfs:label "Coil"^^xsd:string ; rdfs:comment "A cooling or heating element made of pipe or tube that may or may not be finned and formed into helical or serpentine shape."^^xsd:string ; rdfs:subClassOf s223:HeatExchanger ; - sh:property [ rdfs:comment "A Coil shall have at least one inlet using the medium Air."^^xsd:string ; + sh:property [ rdfs:comment "A Coil shall have at least one outlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A Coil shall have at least one outlet using the medium Air."^^xsd:string ; + [ rdfs:comment "A Coil shall have at least one inlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ] . @@ -59805,12 +59821,12 @@ s223:PhysicalSpace a s223:Class, rdfs:label "Physical Space"^^xsd:string ; rdfs:comment "A PhysicalSpace is an architectural concept representing a room, a collection of rooms such as a floor, a part of a room, or any physical space that might not even be thought of as a room, such as a patio space or a roof."^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "If the relation encloses is present it must associate the PhysicalSpace with a DomainSpace."^^xsd:string ; - sh:class s223:DomainSpace ; - sh:path s223:encloses ], - [ rdfs:comment "If the relation contains is present it must associate the PhysicalSpace with a PhysicalSpace."^^xsd:string ; + sh:property [ rdfs:comment "If the relation contains is present it must associate the PhysicalSpace with a PhysicalSpace."^^xsd:string ; sh:class s223:PhysicalSpace ; - sh:path s223:contains ] . + sh:path s223:contains ], + [ rdfs:comment "If the relation encloses is present it must associate the PhysicalSpace with a DomainSpace."^^xsd:string ; + sh:class s223:DomainSpace ; + sh:path s223:encloses ] . s223:Role-Controller a s223:Class, s223:Role-Controller, @@ -59889,44 +59905,43 @@ s223:Water-GlycolSolution a s223:Class, sh:class s223:QuantifiableProperty ; sh:minCount 2 ; sh:path s223:composedOf ], - [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-Glycol."^^xsd:string ; + [ rdfs:comment "If the relation hasFreezingPoint is used, the object must be a QuantifiableProperty with a quantity kind of Temperature."^^xsd:string ; + sh:class s223:QuantifiableProperty ; + sh:message "The object must be a QuantifiableProperty with a quantity kind of Temperature."^^xsd:string ; + sh:node [ sh:property [ sh:hasValue ; + sh:path ns1:hasQuantityKind ] ] ; + sh:path s223:hasFreezingPoint ], + [ rdfs:comment "One of the constituents of a Water-GlycolSolution must 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 quantity kind of the constituent must be VolumeFraction."^^xsd:string ; sh:hasValue ; sh:path ns1:hasQuantityKind ], - [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-Glycol."^^xsd:string ; - sh:hasValue s223:Constituent-Glycol ; + [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-H2O."^^xsd:string ; + sh:hasValue s223:Constituent-H2O ; sh:path s223:ofConstituent ] ] ] ], - [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-H2O."^^xsd:string ; + [ rdfs:comment "One of the constituents of a Water-GlycolSolution must 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 must be Constituent-H2O."^^xsd:string ; - sh:hasValue s223:Constituent-H2O ; - sh:path s223:ofConstituent ], - [ rdfs:comment "The quantity kind of the constituent must be VolumeFraction."^^xsd:string ; + sh:node [ sh:property [ rdfs:comment "The quantity kind of the constituent must be VolumeFraction."^^xsd:string ; sh:hasValue ; - sh:path ns1:hasQuantityKind ] ] ] ], - [ rdfs:comment "If the relation hasFreezingPoint is used, the object must be a QuantifiableProperty with a quantity kind of Temperature."^^xsd:string ; - sh:class s223:QuantifiableProperty ; - sh:message "The object must be a QuantifiableProperty with a quantity kind of Temperature."^^xsd:string ; - sh:node [ sh:property [ sh:hasValue ; - sh:path ns1:hasQuantityKind ] ] ; - sh:path s223:hasFreezingPoint ] . + sh:path ns1:hasQuantityKind ], + [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-Glycol."^^xsd:string ; + sh:hasValue s223:Constituent-Glycol ; + sh:path s223:ofConstituent ] ] ] ] . s223:Zone a s223:Class, sh:NodeShape ; rdfs:label "Zone"^^xsd:string ; rdfs:comment "A Zone is a logical grouping (collection) of domain spaces for some functional or system reason, to identify a domain of control, such as a Lighting Zone, or a heating zone"^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "A Zone must 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 must be associated with exactly one EnumerationKind-Domain using the relation hasDomain."^^xsd:string ; + sh:property [ rdfs:comment "A Zone must be associated with at least one DomainSpace using the relation hasDomainSpace."^^xsd:string ; + sh:class s223:DomainSpace ; + sh:message "s223: A Zone must be associated with at least one DomainSpace using the relation hasDomainSpace."^^xsd:string ; sh:minCount 1 ; - sh:path s223:hasDomain ], + sh:path s223:hasDomainSpace ], [ rdfs:comment "The associated Domain of a Zone and the Domain of the DomainSpaces it contains must be the same."^^xsd:string ; sh:path s223:hasDomain ; sh:sparql [ a sh:SPARQLConstraint ; @@ -59943,11 +59958,12 @@ $this s223:contains ?ds . FILTER (?domain != ?dsdomain) } """^^xsd:string ] ], - [ rdfs:comment "A Zone must be associated with at least one DomainSpace using the relation hasDomainSpace."^^xsd:string ; - sh:class s223:DomainSpace ; - sh:message "s223: A Zone must be associated with at least one DomainSpace using the relation hasDomainSpace."^^xsd:string ; + [ rdfs:comment "A Zone must 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 must be associated with exactly one EnumerationKind-Domain using the relation hasDomain."^^xsd:string ; sh:minCount 1 ; - sh:path s223:hasDomainSpace ] ; + sh:path s223:hasDomain ] ; sh:rule [ a sh:TripleRule ; rdfs:comment "Infer a hasDomain relation by checking any enclosed DomainSpaces to determine the domain."^^xsd:string ; sh:object [ sh:path ( s223:hasDomainSpace s223:hasDomain ) ] ; @@ -59972,11 +59988,6 @@ s223:hasDomainSpace a rdf:Property ; rdfs:label "has domain space"^^xsd:string ; rdfs:comment "The relation hasDomainSpace is used to associate a Zone with the DomainSpace(s) that make up that Zone."^^xsd:string . -s223:hasObservationLocationLow a rdf:Property ; - rdfs:label "has observation location low"^^xsd:string ; - rdfs:comment "The relation hasObservationLocationLow associates a differential sensor to one of the topological locations where a differential property is observed (see `s223:observes`)."^^xsd:string ; - rdfs:subPropertyOf s223:hasObservationLocation . - s223:hasOutput a rdf:Property ; rdfs:label "has output"^^xsd:string ; rdfs:comment "The relation hasOutput is used to relate a Function (see `s223:Function`) to a Property (see `s223:Property`) that is calculated by the Function."^^xsd:string . @@ -60030,6 +60041,11 @@ ns1:informativeReference a rdf:Property ; dcterms:description "Provides a way to reference a source that provided useful but non-normative information."^^rdf:HTML ; rdfs:isDefinedBy . +ns1:isDeltaQuantity a rdf:Property ; + rdfs:label "is Delta Quantity"^^xsd:string ; + rdfs:comment "This property is used to identify a Quantity instance that is a measure of a change, or interval, of some property, rather than a measure of its absolute value. This is important for measurements such as temperature differences where the conversion among units would be calculated differently because of offsets."^^xsd:string ; + rdfs:isDefinedBy . + ns1:literal a rdf:Property ; rdfs:label "literal"^^xsd:string ; rdfs:isDefinedBy ; @@ -60045,11 +60061,6 @@ ns1:normativeReference a rdf:Property ; dcterms:description "Provides a way to reference information that is an authorative source providing a standard definition"^^rdf:HTML ; rdfs:isDefinedBy . -ns1:value a rdf:Property ; - rdfs:label "value"^^xsd:string ; - dcterms:description "A property to relate an observable thing with a value expressed as a decimal"^^rdf:HTML ; - rdfs:isDefinedBy . - a ns1:ConstantValue ; rdfs:label "Value for Sackur-Tetrode constant 1 K 101.325 kPa"^^xsd:string ; ns1:hasUnit ; @@ -68033,15 +68044,6 @@ s223:connectsAt a rdf:Property ; s223:inverseOf s223:connectsThrough ; rdfs:comment "The relation connectsAt binds a Connection to a specific ConnectionPoint."^^xsd:string . -s223:hasObservationLocationHigh a rdf:Property ; - rdfs:label "has observation location high"^^xsd:string ; - rdfs:comment "The relation hasObservationLocationHigh associates a differential sensor to one of the topological locations where a differential property is observed (see `s223:observes`)."^^xsd:string ; - rdfs:subPropertyOf s223:hasObservationLocation . - -s223:hasValue a rdf:Property ; - rdfs:label "hasValue"^^xsd:string ; - rdfs:comment "hasValue is used to contain a fixed value that is part of a 223 model, rather than a computed, measured, or externally derived variable."^^xsd:string . - dcterms:contributor a rdf:Property ; rdfs:label "contributor"^^xsd:string . @@ -68086,6 +68088,11 @@ ns1:siExactMatch a rdf:Property ; rdfs:label "Individual from SI Reference Point"^^xsd:string ; rdfs:isDefinedBy . +ns1:value a rdf:Property ; + rdfs:label "value"^^xsd:string ; + dcterms:description "A property to relate an observable thing with a value expressed as a decimal"^^rdf:HTML ; + rdfs:isDefinedBy . + a ns1:ConstantValue ; rdfs:label "Value for molar volume of ideal gas 273.15 K 101.325 kPa"^^xsd:string ; ns1:hasUnit ; @@ -71062,12 +71069,12 @@ s223:Numerical-Frequency a s223:Class, ns1:hasUnit ; rdfs:comment "This class has enumerated instances of common electrical frequencies."^^xsd:string ; rdfs:subClassOf s223:EnumerationKind-Numerical ; - sh:property [ rdfs:comment "A Numerical-Frequency must have a unit of Hertz"^^xsd:string ; - sh:hasValue ; - sh:path ns1:hasUnit ], - [ rdfs:comment "A Numerical-Frequency must have a Quantity Kind of Frequency"^^xsd:string ; + sh:property [ rdfs:comment "A Numerical-Frequency must have a Quantity Kind of Frequency"^^xsd:string ; sh:hasValue ; - sh:path ns1:hasQuantityKind ] . + sh:path ns1:hasQuantityKind ], + [ rdfs:comment "A Numerical-Frequency must have a unit of Hertz"^^xsd:string ; + sh:hasValue ; + sh:path ns1:hasUnit ] . s223:Numerical-NumberOfElectricalPhases a s223:Class, s223:Numerical-NumberOfElectricalPhases, @@ -71117,6 +71124,14 @@ s223:connectsThrough a rdf:Property ; s223:inverseOf s223:connectsAt ; rdfs:comment "The relation connectsThrough binds a ConnectionPoint to a Connection without regard to the direction of flow."^^xsd:string . +s223:hasObservationLocation a rdf:Property ; + rdfs:label "has observation location"^^xsd:string ; + rdfs:comment "The relation hasObservationLocation associates a sensor to the topological location where it is observing the 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:hasValue a rdf:Property ; + rdfs:label "hasValue"^^xsd:string ; + rdfs:comment "hasValue is used to contain a fixed value that is part of a 223 model, rather than a computed, measured, or externally derived variable."^^xsd:string . + s223:hasVoltage a rdf:Property ; rdfs:label "hasVoltage"^^xsd:string ; rdfs:comment "The relation hasVoltage is used to identify the voltage of an electricity enumeration kind. "^^xsd:string . @@ -73510,10 +73525,6 @@ s223:QuantifiableObservableProperty a s223:Class, sh:class s223:QuantifiableActuatableProperty ; sh:path s223:hasSetpoint ] . -s223:hasObservationLocation a rdf:Property ; - rdfs:label "has observation location"^^xsd:string ; - rdfs:comment "The relation hasObservationLocation associates a sensor to the topological location where it is observing the 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:ofConstituent a rdf:Property ; rdfs:label "of constituent"^^xsd:string ; rdfs:comment "The relation ofConstituent is used to associate a Property that characterizes a medium mix with one of the constituents of that mix. (ex. Fluid-Water composedOf property ofConstituent Constituent-H2O."^^xsd:string . @@ -75778,18 +75789,18 @@ s223:EnumerationKind-Numerical a s223:Class, ns1:hasUnit ; 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 sting"^^xsd:string ; rdfs:subClassOf s223:EnumerationKind ; - sh:property [ rdfs:comment "An EnumerationKind-Numerical must be associated with at least one QuantityKind using the relation hasQuantityKind."^^xsd:string ; - sh:class ns1:QuantityKind ; - sh:minCount 1 ; - sh:path ns1:hasQuantityKind ], - [ rdfs:comment "An EnumerationKind-Numerical must be associated with at least one Unit using the relation hasUnit."^^xsd:string ; + sh:property [ rdfs:comment "An EnumerationKind-Numerical must be associated with at least one Unit using the relation hasUnit."^^xsd:string ; sh:class ns1:Unit ; sh:minCount 1 ; sh:path ns1:hasUnit ; sh:severity sh:Info ], [ 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 ] . + sh:path s223:hasValue ], + [ rdfs:comment "An EnumerationKind-Numerical must be associated with at least one QuantityKind using the relation hasQuantityKind."^^xsd:string ; + sh:class ns1:QuantityKind ; + sh:minCount 1 ; + sh:path ns1:hasQuantityKind ] . s223:EnumerationKind-Occupancy a s223:Class, s223:EnumerationKind-Occupancy, @@ -77778,65 +77789,285 @@ s223:BidirectionalConnectionPoint a s223:Class, sh:class s223:BidirectionalConnectionPoint ; sh:path s223:mapsTo ] . -s223:EnumerationKind-Binary a s223:Class, - s223:EnumerationKind-Binary, +s223:Connection a s223:Class, sh:NodeShape ; - rdfs:label "EnumerationKind Binary"^^xsd:string ; - rdfs:comment "This class has enumerated subclasses of True, False and Unknown used to describe the possible values of a binary property"^^xsd:string ; - rdfs:subClassOf s223:EnumerationKind . + rdfs:label "Connection"^^xsd:string ; + rdfs:comment """A Connection is the modeling construct used to represent the thing (e.g., pipe, duct, wire, 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 ConnectionPoints 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 InletConnectionPoints (see `s223:InletConnectionPoint`) to represent the +inflow points and OutletConnectionPoints (see `s223:OutletConnectionPoint`) to represent the outflow points. + +A Connection may contain branches or intersections. These may be modeled using Junctions if it is necessary to identify a specific intersection. +(see `s223:Junction`). -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, flowrate, or concentration, or Enumerable (see `s223:EnumeratedObservableProperty`), such as an alarm state or occupancy state."^^xsd:string ; - rdfs:subClassOf s223:AbstractSensor ; - 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 .} +![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) +"""^^xsd:string ; + rdfs:subClassOf s223:Concept ; + sh:property [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent 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 ; + sh:select """ +SELECT $this ?m2 ?cp ?m1 WHERE { -{ -SELECT ?prop (COUNT (DISTINCT ?measurementLocation) AS ?count) $this +$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 "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent 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 ; + sh:select """ +SELECT $this ?m2 ?cp ?m1 WHERE { -FILTER (NOT EXISTS {$this s223:hasObservationLocation ?anything}) . -$this s223:observes ?prop . -?measurementLocation s223:hasProperty ?prop . +$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} . } -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 ] ], + [ rdfs:comment "If the relation hasRole is present it must associate the Connection with an EnumerationKind-Role."^^xsd:string ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment "If the relation connectsAt is present it must associate the Connection with a ConnectionPoint."^^xsd:string ; + sh:class s223:ConnectionPoint ; + sh:path s223:connectsAt ], + [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent 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 ; + 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 ] ], + [ rdfs:comment "A Connection must 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 must 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 "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent 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 ; + 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 "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 3: Two ConnectionPoints with mediums with constituents."^^xsd:string ; + sh:message "s223: {?cp1} with Medium {?m2} is incompatible with {?cp2} with Medium {?m1}."^^xsd:string ; + sh:prefixes ; + 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 "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 ; + sh:select """SELECT $this ?something +WHERE { +$this s223:cnx ?something . +FILTER NOT EXISTS {?something a/rdfs:subClassOf* s223:ConnectionPoint} . +}"""^^xsd:string ] ], + [ rdfs:comment "If the relation hasThermodynamicPhase is present it must associate the Connection with at most one EnumerationKind-Phase."^^xsd:string ; + sh:class s223:EnumerationKind-Phase ; + sh:maxCount 1 ; + sh:message "s223: If the relation hasThermodynamicPhase is present it must associate the Connection with at most one EnumerationKind-Phase."^^xsd:string ; + sh:path s223:hasThermodynamicPhase ], + [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 2: 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 ; + 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 "If the relation connectsTo is present it must associate the Connection with a Connectable."^^xsd:string ; + sh:class s223:Connectable ; + sh:name "ConnectionToDownstreamConnectableShape"^^xsd:string ; + sh:path s223:connectsTo ], + [ rdfs:comment "A Connection must have two or more cnx relations to ConnectionPoints"^^xsd:string ; + sh:class s223:ConnectionPoint ; + sh:message "s223: A Connection must have two or more cnx relations to ConnectionPoints"^^xsd:string ; + sh:minCount 2 ; + sh:path s223:cnx ; + sh:severity sh:Warning ], + [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 1: Two ConnectionPoints with pure mediums."^^xsd:string ; + sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; + sh:prefixes ; + 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 connectsFrom is present it must associate the Connection with a Connectable."^^xsd:string ; + sh:class s223:Connectable ; + sh:name "ConnectionToUpstreamConnectableShape"^^xsd:string ; + sh:path s223:connectsFrom ] ; + sh:rule [ a sh:TripleRule ; + rdfs:comment "Infer the connectsAt relation using cnx"^^xsd:string, + "InferredConnectionToConnectionPointProperty"^^xsd:string ; + sh:object [ sh:path s223:cnx ] ; + sh:predicate s223:connectsAt ; + sh:subject sh:this ], + [ a sh:TripleRule ; + rdfs:comment "Infer cnx relation using connectsThrough"^^xsd:string, + "InferredConnectionToConnectionPointBasePropertyFromInverse"^^xsd:string ; + sh:object [ sh:path [ sh:inversePath s223:connectsThrough ] ] ; + sh:predicate s223:cnx ; + sh:subject sh:this ], + [ a sh:SPARQLRule ; + rdfs:comment "Infer the connectsFrom relation using 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 "InferredMeasurementLocation"^^xsd:string ; - sh:prefixes ] ; - sh:xone ( [ sh:property [ rdfs:comment "A Sensor must 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 must 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 must 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 ] ] ), - ( [ sh:property [ rdfs:comment "A Sensor must 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 must 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 ] ] ) . + sh:name "InferredConnectionToUpstreamEquipmentProperty"^^xsd:string ; + sh:prefixes ], + [ a sh:SPARQLRule ; + rdfs:comment "Infer the connectsTo relation using 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 ], + [ a sh:TripleRule ; + rdfs:comment "Infer cnx relation using connectsAt"^^xsd:string, + "InferredConnectionToConnectionPointBaseProperty"^^xsd:string ; + sh:object [ sh:path s223:connectsAt ] ; + sh:predicate s223:cnx ; + sh:subject sh:this ] . + +s223:EnumerationKind-Binary a s223:Class, + s223:EnumerationKind-Binary, + sh:NodeShape ; + rdfs:label "EnumerationKind Binary"^^xsd:string ; + rdfs:comment "This class has enumerated subclasses of True, False and Unknown used to describe the possible values of a binary property"^^xsd:string ; + rdfs:subClassOf s223:EnumerationKind . s223:composedOf a rdf:Property ; rdfs:label "composed of"^^xsd:string ; @@ -79485,279 +79716,6 @@ s223:Aspect-ElectricalPhaseIdentifier a s223:Aspect-ElectricalPhaseIdentifier, rdfs:comment "The value of the associated Property identifies the electrical phase of the Connection."^^xsd:string ; rdfs:subClassOf s223:EnumerationKind-Aspect . -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, wire, 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 ConnectionPoints 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 InletConnectionPoints (see `s223:InletConnectionPoint`) to represent the -inflow points and OutletConnectionPoints (see `s223:OutletConnectionPoint`) to represent the outflow points. - -A Connection may contain branches or intersections. These may be modeled using Junctions if it is necessary to identify a specific intersection. -(see `s223:Junction`). - -![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) -"""^^xsd:string ; - rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 2: 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 ; - 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 "If the relation connectsFrom is present it must associate the Connection with a Connectable."^^xsd:string ; - sh:class s223:Connectable ; - sh:name "ConnectionToUpstreamConnectableShape"^^xsd:string ; - sh:path s223:connectsFrom ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent 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 ; - 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 "A Connection must have two or more cnx relations to ConnectionPoints"^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:message "s223: A Connection must have two or more cnx relations to ConnectionPoints"^^xsd:string ; - sh:minCount 2 ; - sh:path s223:cnx ; - sh:severity sh:Warning ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent 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 ; - 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 ] ], - [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 1: Two ConnectionPoints with pure mediums."^^xsd:string ; - sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; - sh:prefixes ; - 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 "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent 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 ; - 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 "If the relation connectsAt is present it must associate the Connection with a ConnectionPoint."^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:path s223:connectsAt ], - [ 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 ; - sh:select """SELECT $this ?something -WHERE { -$this s223:cnx ?something . -FILTER NOT EXISTS {?something a/rdfs:subClassOf* s223:ConnectionPoint} . -}"""^^xsd:string ] ], - [ rdfs:comment "If the relation hasRole is present it must associate the Connection with an EnumerationKind-Role."^^xsd:string ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ], - [ rdfs:comment "A Connection must 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 must 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 "If the relation hasThermodynamicPhase is present it must associate the Connection with at most one EnumerationKind-Phase."^^xsd:string ; - sh:class s223:EnumerationKind-Phase ; - sh:maxCount 1 ; - sh:message "s223: If the relation hasThermodynamicPhase is present it must associate the Connection with at most one EnumerationKind-Phase."^^xsd:string ; - sh:path s223:hasThermodynamicPhase ], - [ rdfs:comment "If the relation connectsTo is present it must associate the Connection with a Connectable."^^xsd:string ; - sh:class s223:Connectable ; - sh:name "ConnectionToDownstreamConnectableShape"^^xsd:string ; - sh:path s223:connectsTo ], - [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 3: Two ConnectionPoints with mediums with constituents."^^xsd:string ; - sh:message "s223: {?cp1} with Medium {?m2} is incompatible with {?cp2} with Medium {?m1}."^^xsd:string ; - sh:prefixes ; - 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 "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent 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 ; - 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 ] ] ; - sh:rule [ a sh:TripleRule ; - rdfs:comment "Infer cnx relation using connectsThrough"^^xsd:string, - "InferredConnectionToConnectionPointBasePropertyFromInverse"^^xsd:string ; - sh:object [ sh:path [ sh:inversePath s223:connectsThrough ] ] ; - sh:predicate s223:cnx ; - sh:subject sh:this ], - [ a sh:TripleRule ; - rdfs:comment "Infer the connectsAt relation using cnx"^^xsd:string, - "InferredConnectionToConnectionPointProperty"^^xsd:string ; - sh:object [ sh:path s223:cnx ] ; - sh:predicate s223:connectsAt ; - sh:subject sh:this ], - [ a sh:TripleRule ; - rdfs:comment "Infer cnx relation using connectsAt"^^xsd:string, - "InferredConnectionToConnectionPointBaseProperty"^^xsd:string ; - sh:object [ sh:path s223:connectsAt ] ; - sh:predicate s223:cnx ; - sh:subject sh:this ], - [ a sh:SPARQLRule ; - rdfs:comment "Infer the connectsTo relation using 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 ], - [ a sh:SPARQLRule ; - rdfs:comment "Infer the connectsFrom relation using 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 ] . - s223:DCVoltage-DCNegativeVoltage a s223:Class, s223:DCVoltage-DCNegativeVoltage, sh:NodeShape ; @@ -79788,6 +79746,83 @@ s223:LineLineVoltage-240V a s223:Class, rdfs:comment "240V Line-Line Voltage"^^xsd:string ; rdfs:subClassOf s223:Numerical-LineLineVoltage . +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, flowrate, or concentration, or Enumerable (see `s223:EnumeratedObservableProperty`), such as an alarm state or occupancy state."^^xsd:string ; + rdfs:subClassOf s223:Equipment ; + sh:property [ rdfs:comment "s223: If the hasReferenceLocation relation exists, the observed Property must 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 must have isDeltaQuantity true."^^xsd:string ; + sh:message "s223: Sensor {$this} has a reference location, but its Property lacks isDeltaQuantity true."^^xsd:string ; + sh:prefixes ; + 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 must be associated with exactly one location using the relation hasObservationLocation."^^xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path s223:hasObservationLocation ], + [ rdfs:comment "If the relation hasMeasurementResolution is present it must associate a Sensor with a QuantifiableProperty."^^xsd:string ; + sh:class s223:QuantifiableProperty ; + sh:path s223:hasMeasurementResolution ], + [ rdfs:comment "A DifferentialSensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasReferenceLocation."^^xsd:string ; + sh:class s223:Connectable ; + sh:maxCount 1 ; + sh:path s223:hasReferenceLocation ], + [ rdfs:comment "s223: If the observed Property has isDeltaQuantity true, the Sensor must 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 must 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 ; + 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 "A Sensor must be associated with exactly one ObservableProperty using the relation observes."^^xsd:string ; + sh:class s223:ObservableProperty ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path s223:observes ] ; + 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 ] . + s223:hasAspect a 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 . @@ -81007,6 +81042,154 @@ Note that SI supports only the use of symbols and deprecates the use of any abbr ns1:uneceCommonCode "L96"^^xsd:string ; rdfs:isDefinedBy . +s223:ConnectionPoint a s223:Class, + sh:NodeShape ; + rdfs:label "ConnectionPoint"^^xsd:string ; + s223:abstract true ; + 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, DomainSpaces and Junctions can have one or more ConnectionPoints (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'). + +ConnectionPoints 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 "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 "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."^^xsd:string ; + sh:prefixes ; + sh:select """ + SELECT $this + WHERE { + 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 "Ensure that the Medium identified by a ConnectionPoint via the s223: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 s223: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 ; + 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:EnumerationKind-Medium . +?b a/rdfs:subClassOf* s223:EnumerationKind-Medium . +FILTER (?a != ?b ) . +FILTER (NOT EXISTS {?b a/rdfs:subClassOf* ?a}) . +FILTER (NOT EXISTS {?a a/rdfs:subClassOf* ?b}) . +} +"""^^xsd:string ] ], + [ rdfs:comment "If the relation hasElectricalPhase is present it must associate the ConnectionPoint with an ElectricalPhaseIdentifier or ElectricalVoltagePhases."^^xsd:string ; + sh:or ( [ sh:class s223:Aspect-ElectricalPhaseIdentifier ] [ sh:class s223:Aspect-ElectricalVoltagePhases ] ) ; + sh:path s223:hasElectricalPhase ], + [ rdfs:comment "A ConnectionPoint must 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 must 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 "A ConnectionPoint must 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 must be associated with at most one Connection."^^xsd:string ; + sh:name "ConnectionPointToConnectionShape"^^xsd:string ; + sh:path s223:connectsThrough ; + sh:severity sh:Info ], + [ 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 ; + 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 "A ConnectionPoint must be associated with at most one Connectable using the cnx relation."^^xsd:string ; + sh:message "s223: A ConnectionPoint must 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 "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 ; + 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 "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 ; + sh:select """ + SELECT $this ?containerEquipment + WHERE { + FILTER NOT EXISTS {$this s223:connectsThrough ?anything1} . + FILTER NOT EXISTS {$this s223:mapsTo ?anything2} . + $this s223:isConnectionPointOf ?equipment . + ?containerEquipment s223:contains ?equipment . + } + """^^xsd:string ] ], + [ rdfs:comment "A ConnectionPoint must be associated with at most one Connection using the cnx relation"^^xsd:string ; + sh:message "s223: A ConnectionPoint must 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 ], + [ rdfs:comment "If the relation hasRole is present it must associate the ConnectionPoint with an EnumerationKind-Role."^^xsd:string ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment "A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf."^^xsd:string ; + sh:class s223:Connectable ; + sh:maxCount 1 ; + sh:message "s223: A ConnectionPoint must 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 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 ] . + s223:EnumerationKind-Position a s223:Class, s223:EnumerationKind-Position, sh:NodeShape ; @@ -82206,6 +82389,122 @@ $G = \\frac{1}{R}$, where $R$ is resistance."""^^ns1:LatexString ; rdfs:isDefinedBy ; skos:altLabel "solar year"^^xsd:string . +s223:Connectable a s223:Class, + sh:NodeShape ; + rdfs:label "Connectable"^^xsd:string ; + s223:abstract true ; + 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 ConnectionPoints and Connections."^^xsd:string ; + rdfs:subClassOf s223:Concept ; + sh:property [ rdfs:comment "If a Connectable has s223:connected or s223: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 s223:connected or s223: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 ; + sh:select """ +SELECT $this ?otherC +WHERE { +$this s223:connected ?otherC . +FILTER NOT EXISTS {$this s223:cnx+ ?otherC} +} +"""^^xsd:string ] ], + [ rdfs:comment "If the relation connectedTo is present it must associate the Connectable with a Connectable."^^xsd:string ; + sh:class s223:Connectable ; + sh:name "ConnectableToConnectableShape"^^xsd:string ; + sh:path s223:connectedTo ], + [ rdfs:comment "If the relation connectedFrom is present it must associate the Connectable with a Connectable."^^xsd:string ; + sh:class s223:Connectable ; + sh:path s223:connectedFrom ], + [ rdfs:comment "If the relation connectedThrough is present it must associate the Connectable with a Connection."^^xsd:string ; + sh:class s223:Connection ; + sh:name "EquipmentToConnectionShape"^^xsd:string ; + sh:path s223:connectedThrough ], + [ rdfs:comment "If the relation cnx is present it must associate the Connectable with a ConnectionPoint."^^xsd:string ; + sh:class s223:ConnectionPoint ; + sh:path s223:cnx ], + [ rdfs:comment "If the relation hasConnectionPoint is present it must associate the Connectable with a ConnectionPoint."^^xsd:string ; + sh:class s223:ConnectionPoint ; + sh:name "EquipmentToConnectionPointShape"^^xsd:string ; + sh:path s223:hasConnectionPoint ], + [ rdfs:comment "If the relation connected is present it must associate the Connectable with a Connectable."^^xsd:string ; + sh:class s223:Connectable ; + sh:name "SymmetricConnectableToConnectableShape"^^xsd:string ; + sh:path s223:connected ] ; + sh:rule [ a sh:TripleRule ; + rdfs:comment "Infer the connected relation using connectedTo"^^xsd:string ; + sh:name "InferredEquipmentToEquipmentPropertyfromconnectedTo"^^xsd:string ; + sh:object [ sh:path s223:connectedTo ] ; + sh:predicate s223:connected ; + sh:subject sh:this ], + [ a sh:TripleRule ; + rdfs:comment "Infer the connected relation using connectedFrom"^^xsd:string ; + sh:name "InferredEquipmentToEquipmentPropertyfromconnectedFrom"^^xsd:string ; + sh:object [ sh:path s223:connectedFrom ] ; + sh:predicate s223:connected ; + sh:subject sh:this ], + [ a sh:TripleRule ; + rdfs:comment "Infer the cnx relation using isConnectionPointOf."^^xsd:string ; + sh:name "InferredEquipmentToConnectionPointCnxPropertyFromInverse"^^xsd:string ; + sh:object [ sh:path [ sh:inversePath s223:isConnectionPointOf ] ] ; + sh:predicate s223:cnx ; + sh:subject sh:this ], + [ a sh:TripleRule ; + rdfs:comment "Infer the connectedThrough relation using hasConnectionPoint and connectsThrough"^^xsd:string ; + sh:name "InferredEquipmentToConnectionProperty"^^xsd:string ; + sh:object [ sh:path ( s223:hasConnectionPoint s223:connectsThrough ) ] ; + sh:predicate s223:connectedThrough ; + sh:subject sh:this ], + [ a sh:TripleRule ; + rdfs:comment "Infer the hasConnectionPoint relation using cnx"^^xsd:string ; + sh:name "InferredEquipmentToConnectionPointProperty"^^xsd:string ; + sh:object [ sh:path s223:cnx ] ; + sh:predicate s223:hasConnectionPoint ; + sh:subject sh:this ], + [ a sh:TripleRule ; + rdfs:comment "Infer the cnx relationship using hasConnectionPoint."^^xsd:string ; + sh:name "InferredEquipmentToConnectionPointCnxProperty"^^xsd:string ; + sh:object [ sh:path s223:hasConnectionPoint ] ; + sh:predicate s223:cnx ; + sh:subject sh:this ], + [ 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 ], + [ 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 ], + [ 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 ] . + ns1:hasUnit a rdf:Property ; rdfs:label "has unit"^^xsd:string ; dcterms:description "This property relates a system of units with a unit of measure that is either a) defined by the system, or b) accepted for use by the system and is convertible to a unit of equivalent dimension that is defined by the system. Systems of units may distinguish between base and derived units. Base units are the units which measure the base quantities for the corresponding system of quantities. The base units are used to define units for all other quantities as products of powers of the base units. Such units are called derived units for the system. Thirdly, c) a reference to the unit of measure of a quantity (variable or constant) of interest"^^rdf:HTML ; @@ -82670,270 +82969,6 @@ ns1:hasUnit a rdf:Property ; rdfs:isDefinedBy ; skos:altLabel "RPK"^^xsd:string . -s223:Connectable a s223:Class, - sh:NodeShape ; - rdfs:label "Connectable"^^xsd:string ; - s223:abstract true ; - 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 ConnectionPoints and Connections."^^xsd:string ; - rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "If the relation connectedThrough is present it must associate the Connectable with a Connection."^^xsd:string ; - sh:class s223:Connection ; - sh:name "EquipmentToConnectionShape"^^xsd:string ; - sh:path s223:connectedThrough ], - [ rdfs:comment "If the relation connectedFrom is present it must associate the Connectable with a Connectable."^^xsd:string ; - sh:class s223:Connectable ; - sh:path s223:connectedFrom ], - [ rdfs:comment "If the relation connectedTo is present it must associate the Connectable with a Connectable."^^xsd:string ; - sh:class s223:Connectable ; - sh:name "ConnectableToConnectableShape"^^xsd:string ; - sh:path s223:connectedTo ], - [ rdfs:comment "If the relation cnx is present it must associate the Connectable with a ConnectionPoint."^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:path s223:cnx ], - [ rdfs:comment "If a Connectable has s223:connected or s223: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 s223:connected or s223: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 ; - sh:select """ -SELECT $this ?otherC -WHERE { -$this s223:connected ?otherC . -FILTER NOT EXISTS {$this s223:cnx+ ?otherC} -} -"""^^xsd:string ] ], - [ rdfs:comment "If the relation connected is present it must associate the Connectable with a Connectable."^^xsd:string ; - sh:class s223:Connectable ; - sh:name "SymmetricConnectableToConnectableShape"^^xsd:string ; - sh:path s223:connected ], - [ rdfs:comment "If the relation hasConnectionPoint is present it must associate the Connectable with a ConnectionPoint."^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:name "EquipmentToConnectionPointShape"^^xsd:string ; - sh:path s223:hasConnectionPoint ] ; - 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 ], - [ 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 ], - [ a sh:TripleRule ; - rdfs:comment "Infer the cnx relation using isConnectionPointOf."^^xsd:string ; - sh:name "InferredEquipmentToConnectionPointCnxPropertyFromInverse"^^xsd:string ; - sh:object [ sh:path [ sh:inversePath s223:isConnectionPointOf ] ] ; - sh:predicate s223:cnx ; - sh:subject sh:this ], - [ a sh:TripleRule ; - rdfs:comment "Infer the connected relation using connectedFrom"^^xsd:string ; - sh:name "InferredEquipmentToEquipmentPropertyfromconnectedFrom"^^xsd:string ; - sh:object [ sh:path s223:connectedFrom ] ; - sh:predicate s223:connected ; - sh:subject sh:this ], - [ a sh:TripleRule ; - rdfs:comment "Infer the connected relation using connectedTo"^^xsd:string ; - sh:name "InferredEquipmentToEquipmentPropertyfromconnectedTo"^^xsd:string ; - sh:object [ sh:path s223:connectedTo ] ; - sh:predicate s223:connected ; - sh:subject sh:this ], - [ a sh:TripleRule ; - rdfs:comment "Infer the connectedThrough relation using hasConnectionPoint and connectsThrough"^^xsd:string ; - sh:name "InferredEquipmentToConnectionProperty"^^xsd:string ; - sh:object [ sh:path ( s223:hasConnectionPoint s223:connectsThrough ) ] ; - sh:predicate s223:connectedThrough ; - sh:subject sh:this ], - [ a sh:TripleRule ; - rdfs:comment "Infer the cnx relationship using hasConnectionPoint."^^xsd:string ; - sh:name "InferredEquipmentToConnectionPointCnxProperty"^^xsd:string ; - sh:object [ sh:path s223:hasConnectionPoint ] ; - sh:predicate s223:cnx ; - sh:subject sh:this ], - [ a sh:TripleRule ; - rdfs:comment "Infer the hasConnectionPoint relation using cnx"^^xsd:string ; - sh:name "InferredEquipmentToConnectionPointProperty"^^xsd:string ; - sh:object [ sh:path s223:cnx ] ; - sh:predicate s223:hasConnectionPoint ; - sh:subject sh:this ], - [ 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 ] . - -s223:ConnectionPoint a s223:Class, - sh:NodeShape ; - rdfs:label "ConnectionPoint"^^xsd:string ; - s223:abstract true ; - 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, DomainSpaces and Junctions can have one or more ConnectionPoints (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 `s222:Connectable'). - -ConnectionPoints 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 "If the relation hasRole is present it must associate the ConnectionPoint with an EnumerationKind-Role."^^xsd:string ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ], - [ 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 ; - sh:select """ - SELECT $this ?containerEquipment - WHERE { - FILTER NOT EXISTS {$this s223:connectsThrough ?anything1} . - FILTER NOT EXISTS {$this s223:mapsTo ?anything2} . - $this s223:isConnectionPointOf ?equipment . - ?containerEquipment s223:contains ?equipment . - } - """^^xsd:string ] ], - [ 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 ; - 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 "Ensure that the Medium identified by a ConnectionPoint via the s223: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 s223: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 ; - 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:EnumerationKind-Medium . -?b a/rdfs:subClassOf* s223:EnumerationKind-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 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 ; - 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 must 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 must 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 "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 "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."^^xsd:string ; - sh:prefixes ; - sh:select """ - SELECT $this - WHERE { - 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 must be associated with at most one Connectable using the cnx relation."^^xsd:string ; - sh:message "s223: A ConnectionPoint must 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 the relation hasElectricalPhase is present it must associate the ConnectionPoint with an ElectricalPhaseIdentifier or ElectricalVoltagePhases."^^xsd:string ; - sh:or ( [ sh:class s223:Aspect-ElectricalPhaseIdentifier ] [ sh:class s223:Aspect-ElectricalVoltagePhases ] ) ; - sh:path s223:hasElectricalPhase ], - [ 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 must 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 must 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 must be associated with at most one Connection using the cnx relation"^^xsd:string ; - sh:message "s223: A ConnectionPoint must 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 ], - [ rdfs:comment "A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf."^^xsd:string ; - sh:class s223:Connectable ; - sh:maxCount 1 ; - sh:message "s223: A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf."^^xsd:string ; - sh:minCount 1 ; - sh:name "ConnectionPointToEquipmentShape"^^xsd:string ; - sh:path s223:isConnectionPointOf ] . - s223:DCVoltage-DCZeroVoltage a s223:Class, s223:DCVoltage-DCZeroVoltage, sh:NodeShape ; @@ -84017,28 +84052,20 @@ BIND(REPLACE(?localName, "-", " ", "i") AS ?newLabel) sh:name "AddLabelFromLocalName"^^xsd:string ; sh:prefixes ] ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent 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 ; + rdfs:comment "Ensure that any instance that is declared to be an instance of an abstract class must also be declared an instance of at least one subClass of that abstract class"^^xsd:string ; + sh:message "s223: {$this} cannot be declared an instance of only abstract class {?class}."^^xsd:string ; sh:prefixes ; sh:select """ -SELECT $this ?m1 ?prop ?m2 +SELECT DISTINCT $this ?class 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} . - } +?class s223:abstract true . +$this a ?class . +OPTIONAL { +?otherClass rdfs:subClassOf+ ?class . +$this a ?otherClass . +FILTER (?class != ?otherClass) . +} +FILTER (!bound (?otherClass)) . } """^^xsd:string ], [ a sh:SPARQLConstraint ; @@ -84060,24 +84087,26 @@ FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . } """^^xsd:string ], [ a sh:SPARQLConstraint ; - rdfs:comment "Ensure that any instance that is declared to be an instance of an abstract class must also be declared an instance of at least one subClass of that abstract class"^^xsd:string ; - sh:message "s223: {$this} cannot be declared an instance of only abstract class {?class}."^^xsd:string ; + rdfs:comment "Inconsistent 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 ; sh:select """ -SELECT DISTINCT $this ?class +SELECT $this ?m1 ?prop ?m2 WHERE { -?class s223:abstract true . -$this a ?class . -OPTIONAL { -?otherClass rdfs:subClassOf+ ?class . -$this a ?otherClass . -FILTER (?class != ?otherClass) . +$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} . } -FILTER (!bound (?otherClass)) . } """^^xsd:string ], [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 2: A pure medium and an associated property with constituents."^^xsd:string ; + rdfs:comment "Inconsistent 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 ; sh:select """ @@ -84087,25 +84116,31 @@ $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} . -} + ?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 ], [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent 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 ; + rdfs:comment "Inconsistent 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 ; sh:select """ SELECT $this ?m1 ?prop ?m2 WHERE { -$this s223:hasMedium ?m2 . +$this s223:hasMedium ?m1 . $this ?p ?prop . ?prop a/rdfs:subClassOf* s223:Property . -?prop s223:ofMedium ?m1 . +?prop s223:ofMedium ?m2 . ?m2 s223:composedOf/s223:ofConstituent ?s2 . FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . FILTER NOT EXISTS { @@ -84119,10 +84154,6 @@ s223:cnx a s223:SymmetricProperty ; rdfs:label "cnx"^^xsd:string ; rdfs:comment "The cnx relation is a symmetric property used to associate adjacent entities in a connection path (comprised of Equipment-ConnectionPoint-Connection-ConnectionPoint-Equipment sequences)."^^xsd:string . -s223:observes a rdf:Property ; - rdfs:label "observes"^^xsd:string ; - rdfs:comment "The relation observes binds a sensor to one ObservableProperty `see s223:ObservableProperty` which is used by the sensor to generate a measurement value (ex. a temperature) or a simple observation of a stimulus causing a reaction (a current binary switch that closes a dry contact when a fan is powered on)."^^xsd:string . - a ns1:QuantityKindDimensionVector_ISO, ns1:QuantityKindDimensionVector_Imperial, ns1:QuantityKindDimensionVector_SI ; @@ -85433,6 +85464,10 @@ Two values are deemed compatible if they are the same, if one is a direct ancest or if they are mixtures sharing at least one constituent."""^^xsd:string ; rdfs:subClassOf s223:Concept . +s223:observes a rdf:Property ; + rdfs:label "observes"^^xsd:string ; + rdfs:comment "The relation observes binds a sensor to one ObservableProperty `see s223:ObservableProperty` which is used by the sensor to generate a measurement value (ex. a temperature) or a simple observation of a stimulus causing a reaction (a current binary switch that closes a dry contact when a fan is powered on)."^^xsd:string . + a ns1:QuantityKindDimensionVector_ISO, ns1:QuantityKindDimensionVector_Imperial, ns1:QuantityKindDimensionVector_SI ; @@ -86083,28 +86118,16 @@ A property that is not an instance of one of its 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 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 "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:property [ 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 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 "If the relation hasAspect is present, it must associate the Property with an EnumerationKind."^^xsd:string ; + sh:class s223:EnumerationKind ; + sh:path s223:hasAspect ], [ rdfs:comment "If the relation hasExternalReference is present it must associate the Property with an ExternalReference."^^xsd:string ; sh:class s223:ExternalReference ; sh:path s223:hasExternalReference ], - [ rdfs:comment "A Property can be associated with at most one EnumerationKind-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 EnumerationKind-Medium using the relation ofMedium."^^xsd:string ; - sh:path s223:ofMedium ], [ rdfs:comment ""^^xsd:string ; sh:path s223:ofConstituent ; sh:sparql [ a sh:SPARQLConstraint ; @@ -86118,13 +86141,25 @@ WHERE { FILTER NOT EXISTS {$this s223:ofConstituent ?someSubstance} . } """^^xsd:string ] ], + [ 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 "An instance of s223:Property must not be observed (set) by more than one entity."^^xsd:string ; sh:maxCount 1 ; sh:message "s223: An instance of s223:Property must not be observed (set) by more than one entity."^^xsd:string ; sh:path [ sh:inversePath s223:observes ] ], - [ rdfs:comment "If the relation hasAspect is present, it must associate the Property with an EnumerationKind."^^xsd:string ; - sh:class s223:EnumerationKind ; - sh:path s223:hasAspect ] ; + [ rdfs:comment "A Property can be associated with at most one EnumerationKind-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 EnumerationKind-Medium using the relation ofMedium."^^xsd:string ; + sh:path s223:ofMedium ], + [ 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 ] ] ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "A Property instance 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 ; @@ -86586,12 +86621,11 @@ s223:QuantifiableProperty a s223:Class, 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 "This QuantifiableProperty uses a different Unit than the Setpoint associated with it."^^xsd:string ; + sh:property [ rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units."^^xsd:string ; sh:path ns1: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 ; + rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units."^^xsd:string ; + sh:message "s223: {$this} uses Unit {?punit}, while Setpoint {?setpoint} uses Unit {?sunit}. These are non-commensurate."^^xsd:string ; sh:prefixes ; sh:select """ SELECT $this ?setpoint ?punit ?sunit @@ -86602,23 +86636,9 @@ $this s223:hasSetpoint ?setpoint . ?punit qudt:hasDimensionVector ?pdv . ?sunit qudt:hasDimensionVector ?sdv . FILTER (?punit != ?sunit) . -FILTER (?pdv = ?sdv) . +FILTER (?pdv != ?sdv) . } """^^xsd:string ] ], - [ rdfs:comment "A QuantifiableProperty can be associated with at most one Unit using the relation hasUnit."^^xsd:string ; - sh:class ns1: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 ns1:hasUnit ], - [ rdfs:comment """Normally, a QuantifiableProperty is associated with a static decimal value using s223:hasValue, along with a single -unit and quantity kind. However, in some cases, a QuantifiableProperty may instead be associated with a qudt:QuantityValue using the relation -qudt:quantityValue. This allows the qudt:QuantityValue to express multiple equivalent combinations of unit and value."""^^xsd:string ; - sh:class ns1:QuantityValue ; - sh:path ns1:quantityValue ], - [ rdfs:comment "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; - sh:maxCount 0 ; - sh:message "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; - sh:path ns1:value ], [ rdfs:comment "This QuantifiableProperty cannot have a value without a Unit."^^xsd:string ; sh:path s223:hasValue ; sh:sparql [ a sh:SPARQLConstraint ; @@ -86633,6 +86653,59 @@ FILTER NOT EXISTS {$this qudt:hasUnit ?u} . ?subject ?p $this . } """^^xsd:string ] ], + [ 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:path ns1:isDeltaQuantity ], + [ rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it."^^xsd:string ; + sh:path ns1: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 ; + 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 uses hasSetpoint to reference a Property that lacks an Aspect of Aspect-Setpoint."^^xsd:string ; + sh:path ns1:hasAspect ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "This QuantifiableProperty uses hasSetpoint to reference a Property that lacks an Aspect of Aspect-Setpoint."^^xsd:string ; + sh:message "s223: {$this} uses hasSetpoint to reference {?setpoint} that lacks an Aspect of Aspect-Setpoint."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?setpoint +WHERE { +$this s223:hasSetpoint ?setpoint . +FILTER NOT EXISTS {?setpoint s223:hasAspect s223:Aspect-Setpoint} . +} +"""^^xsd:string ] ], + [ rdfs:comment "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; + sh:maxCount 0 ; + sh:message "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; + sh:path ns1:value ], + [ rdfs:comment "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; + sh:maxCount 0 ; + sh:message "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; + sh:path ns1:value ], + [ rdfs:comment "A QuantifiableProperty must be associated with a QuantityKind using the relation hasQuantityKind."^^xsd:string ; + sh:class ns1:QuantityKind ; + sh:maxCount 1 ; + sh:message "s223: A QuantifiableProperty must be associated with a QuantityKind using the relation hasQuantityKind."^^xsd:string ; + sh:minCount 1 ; + sh:path ns1:hasQuantityKind ], [ rdfs:comment "This QuantifiableProperty and the Setpoint associated with it have non-commensurate QuantityKinds."^^xsd:string ; sh:path ns1:hasQuantityKind ; sh:sparql [ a sh:SPARQLConstraint ; @@ -86651,37 +86724,44 @@ FILTER (?pqk != ?sqk) . FILTER (?pdv != ?sdv) . } """^^xsd:string ] ], - [ rdfs:comment "A QuantifiableProperty must be associated with a QuantityKind using the relation hasQuantityKind."^^xsd:string ; - sh:class ns1:QuantityKind ; - sh:maxCount 1 ; - sh:message "s223: A QuantifiableProperty must be associated with a QuantityKind using the relation hasQuantityKind."^^xsd:string ; - sh:minCount 1 ; - sh:path ns1:hasQuantityKind ], - [ rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units."^^xsd:string ; - sh:path ns1:hasUnit ; + [ rdfs:comment """Normally, a QuantifiableProperty is associated with a static decimal value using s223:hasValue, along with a single +unit and quantity kind. However, in some cases, a QuantifiableProperty may instead be associated with a qudt:QuantityValue using the relation +qudt:quantityValue. This allows the qudt:QuantityValue to express multiple equivalent combinations of unit and value."""^^xsd:string ; + sh:class ns1:QuantityValue ; + sh:path ns1:quantityValue ], + [ rdfs:comment "This QuantifiableProperty with Aspect-Setpoint is not referenced by any Property using hasSetpoint."^^xsd:string ; + sh:path ns1:hasSetpoint ; + sh:severity sh:Info ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units."^^xsd:string ; - sh:message "s223: {$this} uses Unit {?punit}, while Setpoint {?setpoint} uses Unit {?sunit}. These are non-commensurate."^^xsd:string ; + rdfs:comment "This QuantifiableProperty with Aspect-Setpoint is not referenced by any Property using hasSetpoint."^^xsd:string ; + sh:message "s223: {$this} has Aspect-Setpoint but is not referenced by any Property using hasSetpoint."^^xsd:string ; sh:prefixes ; sh:select """ -SELECT $this ?setpoint ?punit ?sunit +SELECT $this 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) . +$this s223:hasAspect s223:Aspect-Setpoint . +FILTER NOT EXISTS {?anything s223:hasSetpoint $this} . } """^^xsd:string ] ], - [ 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 ; + [ rdfs:comment "A QuantifiableProperty can be associated with at most one Unit using the relation hasUnit."^^xsd:string ; + sh:class ns1:Unit ; sh:maxCount 1 ; - sh:path ns1:isDeltaQuantity ] ; + sh:message "s223: A QuantifiableProperty can be associated with at most one Unit using the relation hasUnit."^^xsd:string ; + sh:path ns1:hasUnit ], + [ 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 ; + sh:select """ +SELECT $this ?v ?subject +WHERE { +$this s223:hasValue ?v . +FILTER NOT EXISTS {$this qudt:hasUnit ?u} . +?subject ?p $this . +} +"""^^xsd:string ] ] ; sh:rule [ a sh:SPARQLRule ; rdfs:comment "Infer the hasQuantityKind relation if it is unambiguous."^^xsd:string ; sh:construct """ @@ -91868,17 +91948,36 @@ The graphical depiction of Equipment used in this standard is a rounded cornered ![Graphical Depiction of Equipment.](figures/Figure_5-1Graphical_Depiciton_of_Equipment.svg) """^^xsd:string ; rdfs:subClassOf s223:Connectable ; - sh:property [ rdfs:comment "If the relation hasRole is present it must associate the Equipment with a EnumerationKind-Role."^^xsd:string ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ], + sh:property [ rdfs:comment "If the relation executes is present it must associate the Equipment with a Function."^^xsd:string ; + sh:class s223:Function ; + sh:path s223:executes ], + [ 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 ; + 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 ] ], [ a sh:PropertyShape ; rdfs:comment "If the relation contains is present it must 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 "If the relation hasPhysicalLocation is present it must associate the Equipment with a PhysicalSpace."^^xsd:string ; - sh:class s223:PhysicalSpace ; - sh:path s223:hasPhysicalLocation ], + [ rdfs:comment "If the relation hasRole is present it must associate the Equipment with a EnumerationKind-Role."^^xsd:string ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment """If the relation actuatedByProperty is present it must associate the Equipment with a ActuatableProperty. +Note that any Equipment may use this relation, not just Actuator."""^^xsd:string ; + sh:class s223:ActuatableProperty ; + sh:path s223:actuatedByProperty ], [ 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 ; @@ -91903,9 +92002,9 @@ UNION } } """^^xsd:string ] ], - [ rdfs:comment "If the relation executes is present it must associate the Equipment with a Function."^^xsd:string ; - sh:class s223:Function ; - sh:path s223:executes ], + [ rdfs:comment "If the relation hasPhysicalLocation is present it must associate the Equipment with a PhysicalSpace."^^xsd:string ; + sh:class s223:PhysicalSpace ; + sh:path s223:hasPhysicalLocation ], [ rdfs:comment "Disallow contained equipment from having external incoming connections."^^xsd:string ; sh:path s223:connectedFrom ; sh:sparql [ a sh:SPARQLConstraint ; @@ -91920,26 +92019,7 @@ $this ^s223:contains ?container . ?container a/rdfs:subClassOf* s223:Equipment . FILTER NOT EXISTS {?container s223:contains ?otherDev .} } -"""^^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 ; - 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 actuatedByProperty is present it must associate the Equipment with a ActuatableProperty. -Note that any Equipment may use this relation, not just Actuator."""^^xsd:string ; - sh:class s223:ActuatableProperty ; - sh:path s223:actuatedByProperty ] ; +"""^^xsd:string ] ] ; sh:rule [ 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 """ @@ -91979,12 +92059,12 @@ s223:Numerical-Voltage a s223:Class, ns1:hasUnit ; rdfs:comment "This class has enumerated instances of common voltages."^^xsd:string ; rdfs:subClassOf s223:EnumerationKind-Numerical ; - sh:property [ rdfs:comment "A Numerical-Voltage must have a unit of Volts"^^xsd:string ; - sh:hasValue ; - sh:path ns1:hasUnit ], - [ rdfs:comment "A Numerical-Voltage must have a Quantity Kind of Voltage"^^xsd:string ; + sh:property [ rdfs:comment "A Numerical-Voltage must have a Quantity Kind of Voltage"^^xsd:string ; sh:hasValue ; - sh:path ns1:hasQuantityKind ] . + sh:path ns1:hasQuantityKind ], + [ rdfs:comment "A Numerical-Voltage must have a unit of Volts"^^xsd:string ; + sh:hasValue ; + sh:path ns1:hasUnit ] . s223:NumberOfElectricalPhases-SinglePhase a s223:Class, s223:NumberOfElectricalPhases-SinglePhase, @@ -93452,6 +93532,23 @@ s223:Frequency-60Hz a s223:Class, "flux energetic"@ro, "ısı akış oranı"@tr . + a ns1:QuantityKindDimensionVector_CGS, + ns1:QuantityKindDimensionVector_ISO, + ns1:QuantityKindDimensionVector_Imperial, + ns1:QuantityKindDimensionVector_SI ; + rdfs:label "A0E0L0I0M0H0T1D0"^^xsd:string ; + ns1:dimensionExponentForAmountOfSubstance 0 ; + ns1:dimensionExponentForElectricCurrent 0 ; + ns1:dimensionExponentForLength 0 ; + ns1:dimensionExponentForLuminousIntensity 0 ; + ns1:dimensionExponentForMass 0 ; + ns1:dimensionExponentForThermodynamicTemperature 0 ; + ns1:dimensionExponentForTime 1 ; + ns1:dimensionlessExponent 0 ; + ns1:hasReferenceQuantityKind ; + ns1:latexDefinition "$T$"^^ns1:LatexString ; + rdfs:isDefinedBy . + a owl:Ontology ; owl:imports , , @@ -93464,19 +93561,22 @@ s223:Frequency-60Hz a s223:Class, owl:versionInfo "Created with TopBraid Composer", "Created with TopBraid Composer"^^xsd:string ; sh:declare [ a sh:PrefixDeclaration ; + sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:prefix "qudt"^^xsd:string ], + [ a sh:PrefixDeclaration ; sh:namespace "http://qudt.org/vocab/dimensionvector/"^^xsd:anyURI ; sh:prefix "qkdv"^^xsd:string ], [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; sh:prefix "s223"^^xsd:string ], - [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; - sh:prefix "rdfs"^^xsd:string ], - [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; - sh:prefix "sh"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; - sh:prefix "sh"^^xsd:string ], - [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; - sh:prefix "s223"^^xsd:string ], + sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; + sh:prefix "unit"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; + sh:prefix "rdf"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; + sh:prefix "quantitykind"^^xsd:string ], [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; sh:prefix "rdfs"^^xsd:string ], [ a sh:PrefixDeclaration ; @@ -93485,103 +93585,83 @@ s223:Frequency-60Hz a s223:Class, [ a sh:PrefixDeclaration ; sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; sh:prefix "skos"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; - sh:prefix "skos"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; - sh:prefix "rdf"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; - sh:prefix "unit"^^xsd:string ], - [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; - sh:prefix "rdfs"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; - sh:prefix "dcterms"^^xsd:string ], + [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:prefix "qudt"^^xsd:string ], + [ sh:namespace "http://data.ashrae.org/standard223/1.0/vocab/role#"^^xsd:anyURI ; + sh:prefix "role"^^xsd:string ], + [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223"^^xsd:string ], [ 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 "qudtqk"^^xsd:string ], [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; sh:prefix "sh"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; + sh:prefix "dcterms"^^xsd:string ], + [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs"^^xsd:string ], + [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs"^^xsd:string ], + [ sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; + sh:prefix "unit"^^xsd:string ], [ a sh:PrefixDeclaration ; sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; sh:prefix "rdfs"^^xsd:string ], - [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; - sh:prefix "quantitykind"^^xsd:string ], - [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; - sh:prefix "qudt"^^xsd:string ], - [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; - sh:prefix "qudt"^^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://qudt.org/schema/qudt/"^^xsd:anyURI ; + [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; + sh:prefix "unit"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; sh:prefix "qudt"^^xsd:string ], [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; sh:prefix "s223"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2002/07/owl#"^^xsd:anyURI ; - sh:prefix "owl"^^xsd:string ], - [ sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; - sh:prefix "unit"^^xsd:string ], - [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; - sh:prefix "qudt"^^xsd:string ], + sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; + sh:prefix "sh"^^xsd:string ], [ a sh:PrefixDeclaration ; sh:namespace "http://qudt.org/vocab/dimensionvector/"^^xsd:anyURI ; sh:prefix "qkdv"^^xsd:string ], - [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; - sh:prefix "s223"^^xsd:string ], + [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; + sh:prefix "sh"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; - sh:prefix "dcterms"^^xsd:string ], + sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; + sh:prefix "skos"^^xsd:string ], + [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:prefix "qudt"^^xsd:string ], [ a sh:PrefixDeclaration ; sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; sh:prefix "rdf"^^xsd:string ], + [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223"^^xsd:string ], + [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs"^^xsd:string ], + [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; + sh:prefix "quantitykind"^^xsd:string ], [ a sh:PrefixDeclaration ; sh:namespace "http://www.w3.org/2001/XMLSchema#"^^xsd:anyURI ; sh:prefix "xsd"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; - sh:prefix "quantitykind"^^xsd:string ], - [ sh:namespace "http://data.ashrae.org/standard223/1.0/vocab/role#"^^xsd:anyURI ; - sh:prefix "role"^^xsd:string ], + sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; + sh:prefix "dcterms"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://www.w3.org/2002/07/owl#"^^xsd:anyURI ; + sh:prefix "owl"^^xsd:string ], + [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223"^^xsd:string ], [ a sh:PrefixDeclaration ; sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; sh:prefix "quantitykind"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; - sh:prefix "qudt"^^xsd:string ], - [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; - sh:prefix "rdfs"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; - sh:prefix "unit"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; sh:prefix "qudt"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; - sh:prefix "rdfs"^^xsd:string ], - [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; - sh:prefix "s223"^^xsd:string ] . - - a ns1:QuantityKindDimensionVector_CGS, - ns1:QuantityKindDimensionVector_ISO, - ns1:QuantityKindDimensionVector_Imperial, - ns1:QuantityKindDimensionVector_SI ; - rdfs:label "A0E0L0I0M0H0T1D0"^^xsd:string ; - ns1:dimensionExponentForAmountOfSubstance 0 ; - ns1:dimensionExponentForElectricCurrent 0 ; - ns1:dimensionExponentForLength 0 ; - ns1:dimensionExponentForLuminousIntensity 0 ; - ns1:dimensionExponentForMass 0 ; - ns1:dimensionExponentForThermodynamicTemperature 0 ; - ns1:dimensionExponentForTime 1 ; - ns1:dimensionlessExponent 0 ; - ns1:hasReferenceQuantityKind ; - ns1:latexDefinition "$T$"^^ns1:LatexString ; - rdfs:isDefinedBy . + [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:prefix "qudt"^^xsd:string ] . a ns1:Unit ; rdfs:label "متر"@ar,