From 1d431eff0d0da7d0b0aefc813f4f4619dad17f1c Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Sat, 15 Jun 2024 16:40:12 -0600 Subject: [PATCH] update 223p.ttl --- ontologies/223p.ttl | 1970 ++++++++++++++++++++++--------------------- 1 file changed, 992 insertions(+), 978 deletions(-) diff --git a/ontologies/223p.ttl b/ontologies/223p.ttl index ed4dfc6..93f76ce 100644 --- a/ontologies/223p.ttl +++ b/ontologies/223p.ttl @@ -2,8 +2,8 @@ @prefix dcterms: . @prefix ns1: . @prefix ns2: . -@prefix ns3: . -@prefix ns4: . +@prefix ns3: . +@prefix ns4: . @prefix ns5: . @prefix ns6: . @prefix org: . @@ -66,27 +66,27 @@ s223:SymmetricProperty a rdfs:Class, sh:path s223:hasProperty ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:QuantifiableActuatableProperty ; - sh:node [ sh:property [ sh:hasValue ; + sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Position ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path ns1:hasQuantityKind ], - [ sh:hasValue s223:EnumerationKind-Position ; + sh:path s223:hasAspect ], + [ sh:hasValue ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasAspect ] ] ] ; + sh:path ns1:hasQuantityKind ] ] ] ; sh:severity s223:g36 ] ] [ sh:property [ rdfs:comment "A ChilledWaterValve shall have at least one analog valve command property or at least two binary valve command properties using the relation hasProperty."^^xsd:string ; sh:minCount 2 ; sh:path s223:hasProperty ; sh:qualifiedMinCount 2 ; sh:qualifiedValueShape [ sh:class s223:EnumeratedActuatableProperty ; - sh:node [ sh:property [ sh:hasValue s223: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 . @@ -235,27 +235,27 @@ 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 ; sh:qualifiedMinCount 2 ; sh:qualifiedValueShape [ sh:class s223:EnumeratedActuatableProperty ; - sh:node [ sh:property [ sh:hasValue 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:hasValue 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 ; sh:targetClass . @@ -289,40 +289,21 @@ 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 at least a zone CO2 concentration property using the relation hasProperty, if applicable control is used."^^xsd:string ; - sh:message "g36: A Zone shall have at least a zone CO2 concentration property using the relation hasProperty, if applicable control is used."^^xsd:string ; + sh: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 ; sh:maxCount 1 ; sh:minCount 1 ; sh:path ns1:hasQuantityKind ], - [ sh:hasValue s223:Constituent-CO2 ; + [ sh:hasValue s223:Dimensioned-Delta ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:ofConstituent ] ] ] ; - sh:severity sh:Info ], - [ rdfs:comment "A Zone shall have at least one window switch on-off property using the relation hasProperty."^^xsd:string ; - sh:message "g36: A Zone shall have at least one window switch on-off property using the relation hasProperty."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasProperty ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:EnumeratedObservableProperty ; - sh:node [ sh:property [ sh:class s223:EnumerationKind-OnOff ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasEnumerationKind ], - [ 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:path s223:hasAspect ] ] ] ; + sh:qualifiedValueShapesDisjoint true ; 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 ; @@ -336,44 +317,63 @@ s223:SymmetricProperty a rdfs:Class, sh:path ns1:hasQuantityKind ] ] ] ; sh:qualifiedValueShapesDisjoint true ; 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:message "g36: A Zone shall have a zone temperature setpoint adjustment property using the relation hasProperty, if applicable."^^xsd:string ; + [ rdfs:comment "A Zone shall have at least one binary zone occupancy property using the relation hasProperty"^^xsd:string ; + sh:message "g36: A Zone shall have at least one binary zone occupancy property using the relation hasProperty"^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasProperty ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:EnumeratedObservableProperty ; + sh:node [ sh:property [ sh:class s223:EnumerationKind-Occupancy ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path s223:hasEnumerationKind ] ] ] ; + sh:severity sh:Info ], + [ rdfs:comment "A Zone shall have at least a zone CO2 concentration property using the relation hasProperty, if applicable control is used."^^xsd:string ; + sh:message "g36: A Zone shall have at least a zone CO2 concentration property using the relation hasProperty, if applicable control is used."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasProperty ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:QuantifiableObservableProperty ; - sh:node [ sh:property [ sh:hasValue s223:Dimensioned-Delta ; + 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:Constituent-CO2 ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path ns1:hasQuantityKind ] ] ] ; - sh:qualifiedValueShapesDisjoint true ; + sh:path s223:ofConstituent ] ] ] ; 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 ; + [ rdfs:comment "A Zone shall have at least one window switch on-off property using the relation hasProperty."^^xsd:string ; + sh:message "g36: A Zone shall have at least one window switch on-off property using the relation hasProperty."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasProperty ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:EnumeratedObservableProperty ; - sh:node [ sh:property [ sh:class s223:EnumerationKind-Override ; + sh:node [ sh:property [ sh:class s223:EnumerationKind-OnOff ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasEnumerationKind ] ] ] ; + sh:path s223:hasEnumerationKind ], + [ 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 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 ; + [ 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-Occupancy ; + 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 sh:Info ], + [ rdfs:comment "A Zone shall have at least one Domain-HVAC using the relation hasDomain. "^^xsd:string ; + sh:hasValue s223:Domain-HVAC ; + sh:message "g36: A Zone shall have at least one Domain-HVAC using the relation hasDomain. "^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasDomain ; + sh:severity s223:g36 ] ; sh:severity s223:g36 . a s223:Class, @@ -672,7 +672,7 @@ ns1:EnumeratedValue a rdfs:Class, rdfs:isDefinedBy ; rdfs:subClassOf ns1:Concept, ns1:Verifiable, - ns3:EnumeratedValue ; + ns4:EnumeratedValue ; sh:property ns1:EnumeratedValue-abbreviation, ns1:EnumeratedValue-description, ns1:EnumeratedValue-symbol . @@ -688,7 +688,7 @@ ns1:Enumeration a rdfs:Class,

The tags are a set of positive whole numbers, not necessarily contiguous and having no numerical significance, each corresponding to the associated literal identifier. An order attribute can also be given on the enumeration elements. An enumeration can itself be a member of an enumeration. This allows enumerations to be enumerated in a selection. Enumerations are also subclasses of Scalar Datatype. This allows them to be used as the reference of a datatype specification.

"""^^rdf:HTML ; rdfs:isDefinedBy ; rdfs:subClassOf ns1:Concept, - ns3:Enumeration ; + ns4:Enumeration ; sh:property ns1:Enumeration-abbreviation, ns1:Enumeration-default, ns1:Enumeration-element . @@ -698,7 +698,7 @@ ns1:EnumerationScale a rdfs:Class, rdfs:label "Enumeration scale"^^xsd:string ; rdfs:isDefinedBy ; rdfs:subClassOf ns1:Scale, - ns3:Enumeration . + ns4:Enumeration . ns1:Figure a rdfs:Class, sh:NodeShape ; @@ -1261,18 +1261,17 @@ 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 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:pattern "^[A-Za-z0-9-]+,[1-9][0-9]*$"^^xsd:string ], - [ a sh:PropertyShape ; rdfs:comment "If the relation priority-for-writing is present it provides the priority for writing values to the object."^^xsd:string ; sh:datatype xsd:nonNegativeInteger ; sh:maxCount 1 ; sh:minCount 0 ; sh:path ], + [ a sh:PropertyShape ; + rdfs:comment "If the relation device-name is present it associates the external reference with a BACnet device having the specific device name."^^xsd:string ; + sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path ], [ 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 ; @@ -1281,29 +1280,30 @@ 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 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-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 object-name is present it associates the external reference with the BACnet object having the specific object name."^^xsd:string ; - sh:datatype xsd:string ; + rdfs:comment "If the relation property-array-index is present it provides the index for reading items from a property that is an array."^^xsd:string ; + sh:datatype xsd:nonNegativeInteger ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path ], + 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 ; + 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: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 ; + 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 ; @@ -1330,18 +1330,18 @@ s223:Boiler a s223:Class, rdfs:label "Boiler"^^xsd:string ; rdfs:comment "A closed, pressure vessel that uses fuel or electricity for heating water or other fluids to supply steam or hot water for heating, humidification, or other applications."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Boiler shall have at least one inlet using the medium Water."^^xsd:string ; + sh:property [ rdfs:comment "A Boiler 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 Boiler shall have at least one outlet using the medium Water."^^xsd:string ; + [ rdfs:comment "A Boiler shall have at least one inlet using the medium 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 ] ] ] ] . @@ -1350,18 +1350,18 @@ 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 shall have at least one inlet using the medium Water."^^xsd:string ; + 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 inlet using the medium Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Water ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A ChilledBeam 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:minCount 1 ; sh:path s223:hasConnectionPoint ; @@ -1546,32 +1546,32 @@ FILTER (?high = ?low) . sh:class ns1:QuantityKind ; sh:minCount 1 ; sh:path ( s223:observes ns1:hasQuantityKind ) ] ; - sh:xone ( [ sh:property [ rdfs:comment "A DifferentialSensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocationHigh."^^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: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: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: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: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:hasObservationLocationHigh ] ] ), - ( [ sh:property [ rdfs:comment "A DifferentialSensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocationLow."^^xsd:string ; + 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: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: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: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: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:hasObservationLocationLow ] ] ) . + sh:path s223:hasObservationLocationHigh ] ] ) . s223:Door a s223:Class, sh:NodeShape ; @@ -1643,19 +1643,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 ] ] ] ] . @@ -1664,18 +1664,18 @@ s223:ElectricTransformer a s223:Class, rdfs:label "Electric transformer"^^xsd:string ; rdfs:comment "A piece of electrical equipment used to convert alternative current (AC) electric power from one voltage to another voltage."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "An ElectricTransformer shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:property [ rdfs:comment "An ElectricTransformer 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 "An ElectricTransformer shall have at least one inlet using the medium Electricity."^^xsd:string ; + [ rdfs:comment "An ElectricTransformer 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 ] ] ] ] . @@ -1699,16 +1699,16 @@ s223:FanCoilUnit a s223:Class, 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 Fan using the relation contains."^^xsd:string ; + sh:property [ 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 must be associated with at least 1 Coil using the relation contains."^^xsd:string ; + 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:contains ; + sh:path s223:hasRole ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:Coil ] ], + sh:qualifiedValueShape [ sh:in ( s223:Role-Heating s223:Role-Cooling ) ] ], [ rdfs:comment "A FanCoilUnit shall have at least one inlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; @@ -1716,18 +1716,18 @@ s223:FanCoilUnit a s223:Class, sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; 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 ) ] ], [ 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:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; - sh:path s223:hasMedium ] ] ] ] . + sh:path s223:hasMedium ] ] ] ], + [ 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:Fan ] ] . s223:FanPoweredTerminal a s223:Class, sh:NodeShape ; @@ -1745,7 +1745,12 @@ 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 should have one common constituent between the inlet and outlet"^^xsd:string ; + 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:path s223:hasConnectionPoint ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; @@ -1775,6 +1780,11 @@ WHERE { } } """^^xsd:string ] ], + [ rdfs:comment "A Filter shall have at least one outlet."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ], [ rdfs:comment "Ensure that the filter inlet and outlet have compatible mediums."^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:severity sh:Warning ; @@ -1797,16 +1807,6 @@ FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . } """^^xsd:string ] ], - [ rdfs:comment "A Filter shall have at least one outlet."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ], - [ rdfs:comment "A Filter shall have at least one inlet ConnectionPoint."^^xsd:string ; - sh: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 ; @@ -1843,18 +1843,18 @@ s223:FumeHood a s223:Class, rdfs:label "Fume hood"^^xsd:string ; rdfs:comment "A fume-collection device mounted over a work space, table, or shelf and serving to conduct unwanted gases away from an area."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A FumeHood shall have at least one inlet using the medium Air."^^xsd:string ; + sh:property [ rdfs:comment "A FumeHood 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 FumeHood shall have at least one outlet using the medium Air."^^xsd:string ; + [ rdfs:comment "A FumeHood 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 ] ] ] ] . @@ -1877,18 +1877,18 @@ s223:Furnace a s223:Class, rdfs:label "Furnace"^^xsd:string ; rdfs:comment "An enclosed chamber or structure in which heat is produced, as by burning fuel or by converting electrical energy. "^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Furnace shall have at least one inlet using the medium Air."^^xsd:string ; + sh:property [ rdfs:comment "A Furnace 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 Furnace shall have at least one outlet using the medium Air."^^xsd:string ; + [ rdfs:comment "A Furnace 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 ] ] ] ] . @@ -1912,18 +1912,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 ] ] ] ] . @@ -1944,15 +1944,12 @@ s223:HumiditySensor a s223:Class, rdfs:label "Humidity sensor"^^xsd:string ; rdfs:comment "A HumiditySensor is a specialization of a Sensor that observes a QuantifiableObservableProperty that represents a humidity measurement. "^^xsd:string ; rdfs:subClassOf s223:Sensor ; - sh:rule [ a sh:SPARQLRule ; - rdfs:comment "A HumiditySensor must always observe a Property that has a QuantityKind of RelativeHumidity."^^xsd:string ; - sh:construct """ -CONSTRUCT {?prop qudt:hasQuantityKind qudtqk:RelativeHumidity .} -WHERE { - $this s223:observes ?prop . -} -"""^^xsd:string ; - sh:prefixes ] . + sh:property [ rdfs:comment "A HumiditySensor must be defined in terms of the QuantityKind that is being measured, which must be either RelativeHumidity or AbsoluteHumidity."^^xsd:string ; + sh:class s223:QuantifiableObservableProperty ; + sh:message "A HumiditySensor must observe a QuantifiableObservableProperty that hasQuantityKind of either RelativeHumidity or AbsoluteHumidity."^^xsd:string ; + sh:node [ sh:property [ sh:or ( [ sh:hasValue ] [ sh:hasValue ] ) ; + sh:path ns1:hasQuantityKind ] ] ; + sh:path s223:observes ] . s223:IlluminanceSensor a s223:Class, sh:NodeShape ; @@ -1987,19 +1984,19 @@ s223:Inverter a s223:Class, rdfs:label "Inverter"^^xsd:string ; rdfs:comment "An electric energy converter that changes direct electric current to alternating current."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "An Inverter shall have at least one outlet using the medium Electricity-AC."^^xsd:string ; + sh:property [ rdfs:comment "An Inverter shall have at least one inlet using the medium Electricity-DC."^^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:Electricity-AC ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Electricity-DC ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "An Inverter shall have at least one inlet using the medium Electricity-DC."^^xsd:string ; + [ rdfs:comment "An Inverter shall have at least one outlet using the medium Electricity-AC."^^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:Electricity-DC ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Electricity-AC ; sh:path s223:hasMedium ] ] ] ] . s223:JunctionCPShape a sh:NodeShape ; @@ -2010,13 +2007,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 ; @@ -2133,19 +2130,19 @@ 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 shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:property [ 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 ] ] ] ], - [ rdfs:comment "An PhotovoltaicModule must have at least one inlet using the medium EM-Light."^^xsd:string ; + [ 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 ] ] ] ] . s223:Pipe a s223:Class, @@ -2183,19 +2180,7 @@ s223:Pump a s223:Class, rdfs:label "Pump"^^xsd:string ; rdfs:comment "A machine for imparting energy to a fluid, drawing a fluid into itself through an entrance port, and forcing the fluid out through an exhaust port."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ rdfs:comment "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant."^^xsd:string ; - sh:message "A Pump shall have at least one inlet 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 "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant."^^xsd:string ; + sh:property [ 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 ; @@ -2227,7 +2212,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 inlet using the medium Water, Oil or Refrigerant."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ rdfs:comment "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant."^^xsd:string ; + sh:message "A Pump shall have at least one inlet 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 ; @@ -2292,6 +2289,17 @@ s223:RadiatorInletShape a sh:NodeShape ; s223:RequiredCommentsShape a sh:NodeShape ; sh:severity sh:Info ; sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Every class of the 223 standard must be a direct or indirect subclass of s223:Concept. "^^xsd:string ; + sh:message "s223: Class {$this} must be within the rdfs:subClassOf hierarchy under s223:Concept."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this +WHERE { +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 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 ; @@ -2305,16 +2313,15 @@ FILTER NOT EXISTS {?rule 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 "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 ?path +SELECT $this WHERE { -$this sh:property ?propshape . -?propshape sh:sparql ?sparqlconstraint . -?propshape sh:path ?path . -FILTER NOT EXISTS {?sparqlconstraint rdfs:comment ?comment} . +$this sh:rule ?rule . +?rule a sh:SPARQLRule . +FILTER NOT EXISTS {?rule rdfs:comment ?comment} . } """^^xsd:string ], [ a sh:SPARQLConstraint ; @@ -2328,48 +2335,38 @@ FILTER NOT EXISTS {$this a sh:NodeShape} . } """^^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:prefixes ; - sh:select """ -SELECT $this ?path -WHERE { -$this sh:property ?propshape . -?propshape sh:path ?path . -FILTER NOT EXISTS {?propshape rdfs:comment ?comment} . -} -"""^^xsd:string ], - [ 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 "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 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:subClassOf* rdf:Property} . -FILTER NOT EXISTS {$this rdfs:subClassOf* s223:Concept} . +$this sh:property ?propshape . +?propshape sh:path ?path . +FILTER NOT EXISTS {?propshape 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 SPARQLConstraint for 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:sparql ?sparqlconstraint . +?propshape sh:path ?path . +FILTER NOT EXISTS {?sparqlconstraint rdfs:comment ?comment} . } """^^xsd:string ] ; sh:targetClass s223:Class . @@ -2463,14 +2460,14 @@ s223:Turbine a s223:Class, rdfs:label "Turbine"^^xsd:string ; rdfs:comment "An energy transducer that converts mechanical energy into electric energy."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Turbine must be associated with at least one ConnectionPoint using the relation hasConnectionPoint."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ], - [ rdfs:comment "A Turbine shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:property [ rdfs:comment "A Turbine shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:class s223:OutletConnectionPoint ; sh:minCount 1 ; sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ; + sh:path s223:hasConnectionPoint ], + [ rdfs:comment "A Turbine must be associated with at least one ConnectionPoint using the relation hasConnectionPoint."^^xsd:string ; + sh:minCount 1 ; sh:path s223:hasConnectionPoint ] . s223:TwoWayValve a s223:Class, @@ -2497,13 +2494,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 ; @@ -2518,7 +2515,10 @@ 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 "A VariableFrequencyDrive shall have at least one inlet using the medium Electricity."^^xsd:string ; + 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 inlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -2532,10 +2532,7 @@ s223:VariableFrequencyDrive a s223:Class, sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; - sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "If the relation connectedTo is present it must associate the VariableFrequencyDrive with a Equipment."^^xsd:string ; - sh:class s223:Equipment ; - sh:path s223:connectedTo ] . + sh:path s223:hasMedium ] ] ] ] . s223:WindowShade a s223:Class, sh:NodeShape ; @@ -2688,7 +2685,7 @@ ns1:AbstractQuantityKind-skos_broader rdfs:isDefinedBy . ns1:Citation-qudt_description rdfs:isDefinedBy ; @@ -2777,7 +2774,7 @@ ns1:ISO8601-UTCDateTime-BasicFormat a ns1:DateTimeStringEncodingType ; ns1:LittleEndian a ns1:EndianType ; rdfs:label "Little Endian"^^xsd:string ; - ns3:literal "little"^^xsd:string ; + ns4:literal "little"^^xsd:string ; rdfs:isDefinedBy . ns1:PhysicalConstant-qudt_latexSymbol rdfs:isDefinedBy ; @@ -19844,16 +19841,16 @@ s223:GlycolSolution-30Percent a s223:Class, sh:NodeShape ; rdfs:label "GlycolSolution-30Percent"^^xsd:string ; s223:composedOf [ a s223:QuantifiableProperty ; - rdfs:label "Glycol conc"^^xsd:string ; - s223:hasValue 30.0 ; - s223:ofConstituent s223:Constituent-Glycol ; - ns1:hasQuantityKind ; - ns1:hasUnit ], - [ a s223:QuantifiableProperty ; rdfs:label "Water conc"^^xsd:string ; s223:hasValue 70.0 ; s223:ofConstituent s223:Constituent-H2O ; ns1:hasQuantityKind ; + ns1:hasUnit ], + [ a s223:QuantifiableProperty ; + rdfs:label "Glycol conc"^^xsd:string ; + s223:hasValue 30.0 ; + s223:ofConstituent s223:Constituent-Glycol ; + ns1:hasQuantityKind ; ns1:hasUnit ] ; s223:hasFreezingPoint [ a s223:QuantifiableProperty ; rdfs:label "Freezing point"^^xsd:string ; @@ -19936,10 +19933,7 @@ 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 "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:property [ 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 ; @@ -19978,7 +19972,10 @@ GROUP BY $this } FILTER (?incount != ?outcount) } -"""^^xsd:string ] ] . +"""^^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 ] . s223:Light-Infrared a s223:Class, s223:Light-Infrared, @@ -20146,17 +20143,17 @@ 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:class s223:Property ; - sh:minCount 2 ; - sh:path s223:composedOf ], - [ rdfs:comment "One of the constituents of PoE must be 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 ], [ rdfs:comment "One of the constituents of PoE must be DC electrical power."^^xsd:string ; sh:path s223:composedOf ; sh:qualifiedMinCount 1 ; @@ -20426,16 +20423,16 @@ s223:System a s223:Class, rdfs:label "System"^^xsd:string ; rdfs:comment "A System is a logical grouping (collection) of Equipment for some functional or system reason, such as a chilled water system, or HVAC system. A System does not participate in Connections."^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ a sh:PropertyShape ; + 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 ; + sh:path s223:hasRole ], + [ a sh:PropertyShape ; rdfs:comment "A System should be associated with at least two instances of Equipment or System using the relation hasMember"^^xsd:string ; sh:message "s223: A System should be associated with at least two instances of Equipment or System using the relation hasMember"^^xsd:string ; sh:minCount 2 ; sh:or ( [ sh:class s223:Equipment ] [ sh:class s223:System ] ) ; sh:path s223:hasMember ; - sh:severity sh:Warning ], - [ rdfs:comment "If the relation hasRole is present, it must associate the System with an EnumerationKind-Role."^^xsd:string ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ] . + sh:severity sh:Warning ] . s223:Water-Steam a s223:Class, s223:Water-Steam, @@ -20503,18 +20500,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 inlet using the medium Light."^^xsd:string ; + sh:property [ 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 ] ] ] ], - [ rdfs:comment "A Window shall have at least one outlet using the medium Light."^^xsd:string ; + [ 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 ] ] ] ] . @@ -21472,7 +21469,7 @@ ns1:QuantityKindDimensionVector-latexSymbol a sh:PropertyShape ; ns1:QuantityType-value a sh:PropertyShape ; rdfs:isDefinedBy ; sh:class ns1:QuantityKind ; - sh:path ns3:value . + sh:path ns4:value . ns1:QuantityValue-hasUnit a sh:PropertyShape ; rdfs:isDefinedBy ; @@ -21506,7 +21503,7 @@ ns1:Rule-ruleType a sh:PropertyShape ; ns1:SIGNED a ns1:SignednessType ; rdfs:label "Signed"^^xsd:string ; - ns3:literal "signed"^^xsd:string ; + ns4:literal "signed"^^xsd:string ; rdfs:isDefinedBy . ns1:ScalarDatatype-bits a sh:PropertyShape ; @@ -21690,7 +21687,7 @@ ns1:TotallyOrdered a ns1:OrderedType ; ns1:UNSIGNED a ns1:SignednessType ; rdfs:label "Unsigned"^^xsd:string ; - ns3:literal "unsigned"^^xsd:string ; + ns4:literal "unsigned"^^xsd:string ; rdfs:isDefinedBy . ns1:Unit-applicableSystem a sh:PropertyShape ; @@ -22129,36 +22126,36 @@ ns1:imageLocation a rdf:Property ; rdfs:label "image location"^^xsd:string ; rdfs:isDefinedBy . -ns1:inferredApplicableUnit a ns4:MagicProperty ; +ns1:inferredApplicableUnit a ns3:MagicProperty ; rdfs:label "applicable units for a QuantityKind instance"^^xsd:string ; - ns4:body [ a ns5:Select ; + ns3:body [ a ns5:Select ; ns5:distinct true ; ns5:resultVariables ( [ ns5:varName "unit"^^xsd:string ] ) ; ns5:where ( [ a ns5:Union ; - ns5:elements ( ( [ ns5:object ns4:_arg1 ; + ns5:elements ( ( [ ns5:object ns3:_arg1 ; ns5:predicate ns1:hasQuantityKind ; ns5:subject [ ns5:varName "unit"^^xsd:string ] ] [ ns5:object ns1:Unit ; ns5:predicate rdf:type ; ns5:subject [ ns5:varName "unit"^^xsd:string ] ] ) ( [ a ns5:NotExists ; - ns5:elements ( [ ns5:object ns4:_arg1 ; + ns5:elements ( [ ns5:object ns3:_arg1 ; ns5:predicate ns1:hasQuantityKind ; ns5:subject [ ns5:varName "unit"^^xsd:string ] ] [ ns5:object ns1:Unit ; ns5:predicate rdf:type ; ns5:subject [ ns5:varName "unit"^^xsd:string ] ] ) ] [ ns5:object [ ns5:varName "parent1"^^xsd:string ] ; ns5:predicate skos:broader ; - ns5:subject ns4:_arg1 ] [ ns5:object [ ns5:varName "unit"^^xsd:string ] ; + ns5:subject ns3:_arg1 ] [ ns5:object [ ns5:varName "unit"^^xsd:string ] ; ns5:predicate ns1:inferredApplicableUnit ; ns5:subject [ ns5:varName "parent1"^^xsd:string ] ] ) ) ] ) ] ; - ns4:constraint [ a ns6:Argument ; + ns3:constraint [ a ns6:Argument ; ns6:predicate ns5:arg1 ; ns6:valueType ns1:QuantityKind ; rdfs:comment "The QuantityKind instance"^^xsd:string ] ; - ns4:returnType rdfs:Class ; + ns3:returnType rdfs:Class ; rdfs:comment """A magic property that returns all units that are "applicable" to a given QuantityKind, found by examining the incoming qudt:hasQuantityKind property for the provided QuantityKind. If there are none found, recurse up the skos:broader relation until such a QuantityKind is found. Example use: quantitykind:Power qudt:inferredApplicableUnit ?unit . """^^xsd:string ; - rdfs:subClassOf ns4:MagicProperties . + rdfs:subClassOf ns3:MagicProperties . ns1:isDeltaQuantity a rdf:Property ; rdfs:label "is Delta Quantity"^^xsd:string ; @@ -28340,78 +28337,6 @@ ns1:width a rdf:Property ; rdfs:isDefinedBy ; skos:broader . - a ns1:QuantityKind ; - rdfs:label "Absolute Humidity"@en ; - dcterms:description "\"Absolute Humidity\" is an amount of water vapor, usually discussed per unit volume. Absolute humidity in air ranges from zero to roughly 30 grams per cubic meter when the air is saturated at $30 ^\\circ C$. The absolute humidity changes as air temperature or pressure changes. This is very inconvenient for chemical engineering calculations, e.g. for clothes dryers, where temperature can vary considerably. As a result, absolute humidity is generally defined in chemical engineering as mass of water vapor per unit mass of dry air, also known as the mass mixing ratio, which is much more rigorous for heat and mass balance calculations. Mass of water per unit volume as in the equation above would then be defined as volumetric humidity. Because of the potential confusion."^^ns1:LatexString ; - ns1:applicableUnit , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - ; - ns1:hasDimensionVector ; - ns1:informativeReference "http://en.wikipedia.org/wiki/Humidity"^^xsd:anyURI, - "http://en.wikipedia.org/wiki/Humidity#Absolute_humidity"^^xsd:anyURI ; - ns1:isoNormativeReference "http://www.iso.org/iso/catalogue_detail?csnumber=31890"^^xsd:anyURI ; - ns1:latexDefinition """$AH = \\frac{\\mathcal{M}_\\omega}{\\vee_{net}}$, -where $\\mathcal{M}_\\omega$ is the mass of water vapor per unit volume of total air and $\\vee_{net}$ is water vapor mixture."""^^ns1:LatexString ; - ns1:symbol "AH"^^xsd:string ; - rdfs:isDefinedBy ; - rdfs:seeAlso ; - skos:broader . - a ns1:QuantityKind ; rdfs:label "Acceptor Ionization Energy"@en ; dcterms:description "\"Acceptor Ionization Energy\" is the ionization energy of an acceptor."^^rdf:HTML ; @@ -51519,17 +51444,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 ) ] ; @@ -51594,9 +51519,65 @@ s223:HeatingCoil a s223:Class, s223:Junction a s223:Class, sh:NodeShape ; rdfs:label "Junction"^^xsd:string ; - rdfs:comment "A Junction is a modeling construct used when a branching point within a Connection (see `s223:Connection`) is of significance, such as specifying the observation location of a Sensor. When a Junction is used, what might have been modeled as a single, branched Connection is separated into three or more separate Connections, all tied together with the Junction and its associated ConnectionPoints."^^xsd:string ; + rdfs:comment """A Junction is a modeling construct used when a branching point within a Connection (see `s223:Connection`) is of significance, +such as specifying the observation location of a Sensor. When a Junction is used, what might have been modeled as a single, branched Connection +is separated into three or more separate Connections, all tied together with the Junction and its associated ConnectionPoints. +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 "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 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 { + ?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 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 ?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 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 ; @@ -51616,6 +51597,28 @@ 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 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 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 """ +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 "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 ; @@ -51641,30 +51644,12 @@ 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 ; - 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 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 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 ; @@ -51697,7 +51682,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 3: Two ConnectionPoints with mediums with constituents."^^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 """ @@ -51709,62 +51694,6 @@ $this s223:cnx ?cp1 . $this s223:cnx ?cp2 . ?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . ?cp2 s223:hasMedium ?m2 . - ?m1 s223:composedOf/s223:ofConstituent ?s1 . - ?m2 s223:composedOf/s223:ofConstituent ?s2 . - FILTER NOT EXISTS { - ?m1 s223:composedOf/s223:ofConstituent ?s11 . - ?m2 s223:composedOf/s223:ofConstituent ?s12 . - FILTER (?s11 = ?s12) . - } - FILTER NOT EXISTS { - ?m1 s223:composedOf/s223:ofConstituent ?s21 . - ?m2 s223:composedOf/s223:ofConstituent ?s22 . - {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} . - } -} -"""^^xsd:string ] ], - [ rdfs:comment "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 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 """ -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 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 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: 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 ?m2 . -$this s223:hasMedium ?m1 . ?m2 s223:composedOf/s223:ofConstituent ?s2 . FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . FILTER NOT EXISTS { @@ -51800,18 +51729,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 "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:property [ 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 ] ] ] ] . + 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 ] ] . s223:Voltage-0V a s223:Class, s223:Voltage-0V, @@ -52128,17 +52057,17 @@ s223:ZoneGroup a s223:Class, rdfs:label "Zone group"^^xsd:string ; rdfs:comment "A ZoneGroup is a logical grouping (collection) of Zones 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 ZoneGroup must be associated with exactly one EnumerationKind-Domain using the relation hasDomain."^^xsd:string ; + sh:property [ rdfs:comment "A ZoneGroup must be associated with at least one Zone using the relation hasZone."^^xsd:string ; + sh:class s223:Zone ; + sh:message "s223: A ZoneGroup must be associated with at least one Zone using the relation hasZone."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasZone ], + [ rdfs:comment "A ZoneGroup 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 ZoneGroup must be associated with exactly one EnumerationKind-Domain using the relation hasDomain."^^xsd:string ; sh:minCount 1 ; - sh:path s223:hasDomain ], - [ rdfs:comment "A ZoneGroup must be associated with at least one Zone using the relation hasZone."^^xsd:string ; - sh:class s223:Zone ; - sh:message "s223: A ZoneGroup must be associated with at least one Zone using the relation hasZone."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasZone ] ; + sh:path s223:hasDomain ] ; sh:rule [ a sh:TripleRule ; rdfs:comment "Infer a hasDomain relation by checking any enclosed Zones to determine the domain."^^xsd:string ; sh:object [ sh:path ( s223:hasZone s223:hasDomain ) ] ; @@ -52796,6 +52725,78 @@ ns1:url a rdf:Property ; ns1:ucumCode "Z"^^xsd:string ; rdfs:isDefinedBy . + a ns1:QuantityKind ; + rdfs:label "Absolute Humidity"@en ; + dcterms:description "\"Absolute Humidity\" is an amount of water vapor, usually discussed per unit volume. Absolute humidity in air ranges from zero to roughly 30 grams per cubic meter when the air is saturated at $30 ^\\circ C$. The absolute humidity changes as air temperature or pressure changes. This is very inconvenient for chemical engineering calculations, e.g. for clothes dryers, where temperature can vary considerably. As a result, absolute humidity is generally defined in chemical engineering as mass of water vapor per unit mass of dry air, also known as the mass mixing ratio, which is much more rigorous for heat and mass balance calculations. Mass of water per unit volume as in the equation above would then be defined as volumetric humidity. Because of the potential confusion."^^ns1:LatexString ; + ns1:applicableUnit , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + ; + ns1:hasDimensionVector ; + ns1:informativeReference "http://en.wikipedia.org/wiki/Humidity"^^xsd:anyURI, + "http://en.wikipedia.org/wiki/Humidity#Absolute_humidity"^^xsd:anyURI ; + ns1:isoNormativeReference "http://www.iso.org/iso/catalogue_detail?csnumber=31890"^^xsd:anyURI ; + ns1:latexDefinition """$AH = \\frac{\\mathcal{M}_\\omega}{\\vee_{net}}$, +where $\\mathcal{M}_\\omega$ is the mass of water vapor per unit volume of total air and $\\vee_{net}$ is water vapor mixture."""^^ns1:LatexString ; + ns1:symbol "AH"^^xsd:string ; + rdfs:isDefinedBy ; + rdfs:seeAlso ; + skos:broader . + a ns1:QuantityKind ; rdfs:label "Absorptance"@en ; dcterms:description "Absorptance is the ratio of the radiation absorbed by a surface to that incident upon it. Also known as absorbance."^^rdf:HTML ; @@ -59201,18 +59202,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 outlet using the medium Air."^^xsd:string ; + sh:property [ 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 ] ] ] ], - [ rdfs:comment "A Coil shall have at least one inlet using the medium Air."^^xsd:string ; + [ 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 ] ] ] ] . @@ -59422,17 +59423,7 @@ s223:Water-GlycolSolution a s223:Class, ns1:hasQuantityKind ] ; rdfs:comment "This class has enumerated subclasses of water-glycol solutions in various concentrations."^^xsd:string ; rdfs:subClassOf s223:Fluid-Water ; - sh:property [ 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 "There must be at least two QuantifiableProperties that characterize the constituents of a Water-GlycolSolution."^^xsd:string ; - sh:class s223:QuantifiableProperty ; - sh:minCount 2 ; - sh:path s223:composedOf ], - [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-H2O."^^xsd:string ; + sh:property [ 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 ; @@ -59446,19 +59437,34 @@ s223:Water-GlycolSolution a s223:Class, 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:node [ sh:property [ 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 ] ] ] ] . + sh:path s223:ofConstituent ], + [ rdfs:comment "The quantity kind of the constituent must be VolumeFraction."^^xsd:string ; + sh:hasValue ; + sh:path ns1:hasQuantityKind ] ] ] ], + [ rdfs:comment "There must be at least two QuantifiableProperties that characterize the constituents of a Water-GlycolSolution."^^xsd:string ; + sh:class s223:QuantifiableProperty ; + sh:minCount 2 ; + sh:path s223:composedOf ], + [ rdfs:comment "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 ] . 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: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:hasDomainSpace ], + [ 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 ; @@ -59479,20 +59485,15 @@ $this s223:contains ?ds . ?ds s223:hasDomain ?dsdomain . 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 ; - sh:minCount 1 ; - sh:path s223:hasDomainSpace ] ; +"""^^xsd:string ] ] ; sh:rule [ a sh:TripleRule ; - rdfs:comment "Infer a hasDomain relation by checking any enclosing ZoneGroup to determine the domain."^^xsd:string ; - sh:object [ sh:path ( [ sh:inversePath s223:hasZone ] s223:hasDomain ) ] ; + 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 ) ] ; sh:predicate s223:hasDomain ; sh:subject sh:this ], [ 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 ) ] ; + rdfs:comment "Infer a hasDomain relation by checking any enclosing ZoneGroup to determine the domain."^^xsd:string ; + sh:object [ sh:path ( [ sh:inversePath s223:hasZone ] s223:hasDomain ) ] ; sh:predicate s223:hasDomain ; sh:subject sh:this ] . @@ -59573,7 +59574,7 @@ ns1:informativeReference a rdf:Property ; ns1:literal a rdf:Property ; rdfs:label "literal"^^xsd:string ; rdfs:isDefinedBy ; - rdfs:subPropertyOf ns3:literal . + rdfs:subPropertyOf ns4:literal . ns1:mathMLdefinition a rdf:Property ; rdfs:label "mathML definition"^^xsd:string ; @@ -69043,21 +69044,6 @@ That is, given a point P on a smooth curve C, the curvature of C at P is defined ns1:hasDimensionVector ; rdfs:isDefinedBy . - a ns1:QuantityKind ; - rdfs:label "Relative Humidity"@en ; - dcterms:description "$\\textit{Relative Humidity}$ is the ratio of the partial pressure of water vapor in an air-water mixture to the saturated vapor pressure of water at a prescribed temperature. The relative humidity of air depends not only on temperature but also on the pressure of the system of interest. $\\textit{Relative Humidity}$ is also referred to as $\\textit{Relative Partial Pressure}$. Relative partial pressure is often referred to as $RH$ and expressed in percent."^^ns1:LatexString ; - ns1:applicableUnit , - ; - ns1:hasDimensionVector ; - ns1:informativeReference "http://en.wikipedia.org/wiki/Relative_humidity"^^xsd:anyURI ; - ns1:isoNormativeReference "http://www.iso.org/iso/catalogue_detail?csnumber=31890"^^xsd:anyURI ; - ns1:latexDefinition "$\\varphi = p / p_{sat}$, where $p$ is partial pressure of vapour, $p_{sat}$ is thermodynamic temperature and $V$ is its partial pressure at saturation (at the same temperature). Relative partial pressure is often referred to as $RH$ and expressed in percent. $\\textit{Relative Humidity}$ is also referred to as $\\textit{Relative Partial Pressure}$."^^ns1:LatexString ; - ns1:latexSymbol "$\\varphi$"^^ns1:LatexString ; - rdfs:isDefinedBy ; - rdfs:seeAlso ; - skos:altLabel "RH"^^xsd:string ; - skos:broader . - a ns1:QuantityKind ; rdfs:label "Relative Partial Pressure"@en ; ns1:applicableUnit ; @@ -71929,10 +71915,7 @@ s223:EnumerationKind-Substance a s223:Class, rdfs:label "Substance"^^xsd:string ; rdfs:comment "This class has enumerated subclasses of the substances that are consumed, produced, transported, sensed, controlled or otherwise interacted with (e.g. water, air, etc.)."^^xsd:string ; rdfs:subClassOf s223:EnumerationKind ; - sh:property [ rdfs:comment "If the relation composedOf is present, it must associate an EnumerationKind-Substance with one or more Properties that identify and characterize those constituents."^^xsd:string ; - sh:class s223:Property ; - sh:path s223:composedOf ], - [ rdfs:comment "A substance may only have atomic constituents, it may not have a constituent that also composed ofs."^^xsd:string ; + sh:property [ rdfs:comment "A substance may only have atomic constituents, it may not have a constituent that also composed ofs."^^xsd:string ; sh:path s223:composedOf ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "If a substance has a constituent, that constituent may not itself have constituents."^^xsd:string ; @@ -71944,7 +71927,10 @@ WHERE { $this s223:composedOf ?constituent . ?constituent s223:ofConstituent/s223:composedOf ?nextConstituent . } -"""^^xsd:string ] ] . +"""^^xsd:string ] ], + [ rdfs:comment "If the relation composedOf is present, it must associate an EnumerationKind-Substance with one or more Properties that identify and characterize those constituents."^^xsd:string ; + sh:class s223:Property ; + sh:path s223:composedOf ] . s223:Fan a s223:Class, sh:NodeShape ; @@ -72135,12 +72121,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 Quantity Kind of Frequency"^^xsd:string ; - sh:hasValue ; - sh:path ns1:hasQuantityKind ], - [ rdfs:comment "A Numerical-Frequency must have a unit of Hertz"^^xsd:string ; + sh:property [ rdfs:comment "A Numerical-Frequency must have a unit of Hertz"^^xsd:string ; sh:hasValue ; - sh:path ns1:hasUnit ] . + sh:path ns1:hasUnit ], + [ rdfs:comment "A Numerical-Frequency must have a Quantity Kind of Frequency"^^xsd:string ; + sh:hasValue ; + sh:path ns1:hasQuantityKind ] . s223:Numerical-NumberOfElectricalPhases a s223:Class, s223:Numerical-NumberOfElectricalPhases, @@ -72151,16 +72137,6 @@ s223:Numerical-NumberOfElectricalPhases a s223:Class, rdfs:comment "This class has enumerated instances of number of electrical phases. The s223:hasNumberOfElectricalPhases relation points to one of the values of this enumeration."^^xsd:string ; rdfs:subClassOf s223:EnumerationKind-Numerical . -s223:QuantifiableObservableProperty a s223:Class, - sh:NodeShape ; - rdfs:label "Quantifiable Observable Property"^^xsd:string ; - rdfs:comment "This class is for quantifiable properties of which numerical values cannot be modified by a user or a machine outside of the model, but only observed, like a temperature reading or a voltage measure."^^xsd:string ; - rdfs:subClassOf s223:ObservableProperty, - s223:QuantifiableProperty ; - sh:property [ rdfs:comment "A QuantifiableObservableProperty can be associated with zero or more QuantifiableActuatableProperty(s) indicating the desired value(s) which the control process is trying to maintain using the relation hasSetpoint."^^xsd:string ; - sh:class s223:QuantifiableActuatableProperty ; - sh:path s223:hasSetpoint ] . - s223:Role-Cooling a s223:Class, s223:Role-Cooling, sh:NodeShape ; @@ -72758,6 +72734,21 @@ ns1:ucumCode a rdf:Property ; rdfs:isDefinedBy ; skos:broader . + a ns1:QuantityKind ; + rdfs:label "Relative Humidity"@en ; + dcterms:description "$\\textit{Relative Humidity}$ is the ratio of the partial pressure of water vapor in an air-water mixture to the saturated vapor pressure of water at a prescribed temperature. The relative humidity of air depends not only on temperature but also on the pressure of the system of interest. $\\textit{Relative Humidity}$ is also referred to as $\\textit{Relative Partial Pressure}$. Relative partial pressure is often referred to as $RH$ and expressed in percent."^^ns1:LatexString ; + ns1:applicableUnit , + ; + ns1:hasDimensionVector ; + ns1:informativeReference "http://en.wikipedia.org/wiki/Relative_humidity"^^xsd:anyURI ; + ns1:isoNormativeReference "http://www.iso.org/iso/catalogue_detail?csnumber=31890"^^xsd:anyURI ; + ns1:latexDefinition "$\\varphi = p / p_{sat}$, where $p$ is partial pressure of vapour, $p_{sat}$ is thermodynamic temperature and $V$ is its partial pressure at saturation (at the same temperature). Relative partial pressure is often referred to as $RH$ and expressed in percent. $\\textit{Relative Humidity}$ is also referred to as $\\textit{Relative Partial Pressure}$."^^ns1:LatexString ; + ns1:latexSymbol "$\\varphi$"^^ns1:LatexString ; + rdfs:isDefinedBy ; + rdfs:seeAlso ; + skos:altLabel "RH"^^xsd:string ; + skos:broader . + a ns1:QuantityKind ; rdfs:label "Flächenträgheitsmoment"@de, "second moment of area"@en, @@ -74045,6 +74036,16 @@ s223:QuantifiableActuatableProperty a s223:Class, rdfs:subClassOf s223:ActuatableProperty, s223:QuantifiableProperty . +s223:QuantifiableObservableProperty a s223:Class, + sh:NodeShape ; + rdfs:label "Quantifiable Observable Property"^^xsd:string ; + rdfs:comment "This class is for quantifiable properties of which numerical values cannot be modified by a user or a machine outside of the model, but only observed, like a temperature reading or a voltage measure."^^xsd:string ; + rdfs:subClassOf s223:ObservableProperty, + s223:QuantifiableProperty ; + sh:property [ rdfs:comment "A QuantifiableObservableProperty can be associated with zero or more QuantifiableActuatableProperty(s) indicating the desired value(s) which the control process is trying to maintain using the relation hasSetpoint."^^xsd:string ; + 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 can be a Connectable (see `s223:Connectable`), Connection (see `s223:Connection`), or ConnectionPoint (see `s223:ConnectioPoint`)."^^xsd:string . @@ -75384,12 +75385,6 @@ dcterms:creator a rdf:Property ; ns1:uneceCommonCode "D55"^^xsd:string ; rdfs:isDefinedBy . -s223:BidirectionalConnectionPoint a s223:Class, - sh:NodeShape ; - rdfs:label "Bidirectional Connection Point"^^xsd:string ; - rdfs:comment "A BidirectionalConnectionPoint is a predefined subclass of ConnectionPoint. Using a BidirectionalConnectionPoint implies that the flow direction is not fixed in one direction. It depends on the status of some other part of the system, such as a valve position, that is expected to change during operation (see `s223:Direction-Bidirectional`) or to model energy transfer occurring without specific flow direction."^^xsd:string ; - rdfs:subClassOf s223:ConnectionPoint . - s223:EnumerationKind-Numerical a s223:Class, s223:EnumerationKind-Numerical, sh:NodeShape ; @@ -75402,14 +75397,14 @@ s223:EnumerationKind-Numerical a s223:Class, sh:class ns1:QuantityKind ; sh:minCount 1 ; sh:path ns1:hasQuantityKind ], + [ rdfs:comment "An EnumerationKind-Numerical can be associated with a decimal value using the relation hasValue."^^xsd:string ; + sh:datatype xsd:decimal ; + sh:path s223:hasValue ], [ rdfs:comment "An EnumerationKind-Numerical 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:severity sh:Info ] . s223:EnumerationKind-Occupancy a s223:Class, s223:EnumerationKind-Occupancy, @@ -77253,6 +77248,15 @@ where, $\\tilde{\\nu}$ is wavelength, $h$ is Planck's Constant, $k$ is Boltzman' "W.h/kg"^^ns1:UCUMcs ; rdfs:isDefinedBy . +s223:BidirectionalConnectionPoint a s223:Class, + sh:NodeShape ; + rdfs:label "Bidirectional Connection Point"^^xsd:string ; + rdfs:comment "A BidirectionalConnectionPoint is a predefined subclass of ConnectionPoint. Using a BidirectionalConnectionPoint implies that the flow direction is not fixed in one direction. It depends on the status of some other part of the system, such as a valve position, that is expected to change during operation (see `s223:Direction-Bidirectional`) or to model energy transfer occurring without specific flow direction."^^xsd:string ; + rdfs:subClassOf s223:ConnectionPoint ; + sh:property [ rdfs:comment "If the relation mapsTo is present it must associate the BidirectionalConnectionPoint with a BidirectionalConnectionPoint."^^xsd:string ; + sh:class s223:BidirectionalConnectionPoint ; + sh:path s223:mapsTo ] . + s223:EnumerationKind-Binary a s223:Class, s223:EnumerationKind-Binary, sh:NodeShape ; @@ -78396,10 +78400,6 @@ s223:EM-Light a s223:Class, rdfs:comment "The EM-Light class has enumerated subclasses of what are considered visible or near-visible light."^^xsd:string ; rdfs:subClassOf s223:Constituent-EM . -s223:mapsTo a rdf:Property ; - rdfs:label "mapsTo"^^xsd:string ; - rdfs:comment "The relation mapsTo is used to associate a ConnectionPoint of a Connectable to a corresponding ConnectionPoint of the one containing it (see `pub:equipment-containment`). The associated ConnectionPoints must have the same direction (see `s223:EnumerationKind-Direction`) and compatiable medium Substance-Medium."^^xsd:string . - ns1:NumericUnionList a rdf:List ; rdfs:label "Numeric Union List"^^xsd:string ; rdf:first [ sh:datatype xsd:string ] ; @@ -79201,6 +79201,72 @@ A Connection may contain branches or intersections. These may be modeled using J """^^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 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 "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 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 "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 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 "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 "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 ; @@ -79222,9 +79288,12 @@ FILTER NOT EXISTS { } } """^^xsd:string ] ], - [ rdfs:comment "If the relation connectsAt is present it must associate the Connection with a ConnectionPoint."^^xsd:string ; + [ rdfs:comment "A Connection must have two or more cnx relations to ConnectionPoints"^^xsd:string ; sh:class s223:ConnectionPoint ; - sh:path s223:connectsAt ], + 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 ; @@ -79246,12 +79315,15 @@ FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . } """^^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 "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 "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 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 ; @@ -79280,46 +79352,6 @@ $this s223:hasMedium ?m1 . } } """^^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 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 "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 "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 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 ; @@ -79345,6 +79377,13 @@ FILTER NOT EXISTS { } } """^^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 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 ; @@ -79375,58 +79414,19 @@ FILTER (?cp1 != ?cp2 ) . {?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 "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 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 +"""^^xsd:string ] ] ; + sh:rule [ a sh:SPARQLRule ; + rdfs:comment "Infer the connectsTo relation using connectsAt"^^xsd:string ; + sh:construct """ +CONSTRUCT {$this s223:connectsTo ?equipment .} 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}) . +$this s223:connectsAt ?cp . +?cp a s223:InletConnectionPoint . +?cp s223:isConnectionPointOf ?equipment . } -"""^^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 ] ; - 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 connectsAt"^^xsd:string, - "InferredConnectionToConnectionPointBaseProperty"^^xsd:string ; - sh:object [ sh:path s223:connectsAt ] ; - sh:predicate s223:cnx ; - sh:subject sh:this ], +"""^^xsd:string ; + sh:name "InferredConnectionToDownstreamEquipmentProperty"^^xsd:string ; + sh:prefixes ], [ a sh:TripleRule ; rdfs:comment "Infer cnx relation using connectsThrough"^^xsd:string, "InferredConnectionToConnectionPointBasePropertyFromInverse"^^xsd:string ; @@ -79445,18 +79445,18 @@ $this s223:connectsAt ?cp . """^^xsd:string ; 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 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 ] . s223:DCVoltage-DCNegativeVoltage a s223:Class, s223:DCVoltage-DCNegativeVoltage, @@ -79492,6 +79492,10 @@ 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 . +s223:mapsTo a rdf:Property ; + rdfs:label "mapsTo"^^xsd:string ; + rdfs:comment "The relation mapsTo is used to associate a ConnectionPoint of a Connectable to a corresponding ConnectionPoint of the one containing it (see `pub:equipment-containment`). The associated ConnectionPoints must have the same direction (see `s223:EnumerationKind-Direction`) and compatiable medium Substance-Medium."^^xsd:string . + ns1:HTMLOrStringOrLangStringOrLatexString a rdf:List ; rdfs:label "HTML or string or langString or LatexString"^^xsd:string ; rdf:first [ sh:datatype rdf:HTML ] ; @@ -82293,25 +82297,7 @@ s223:Connectable a s223:Class, 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 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 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 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:property [ 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 ], @@ -82328,13 +82314,37 @@ WHERE { $this s223:connected ?otherC . FILTER NOT EXISTS {$this s223:cnx+ ?otherC} } -"""^^xsd:string ] ] ; - sh:rule [ 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 ], +"""^^xsd:string ] ], + [ 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 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 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 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 ] ; + sh:rule [ 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:TripleRule ; rdfs:comment "Infer the connected relation using connectedFrom"^^xsd:string ; sh:name "InferredEquipmentToEquipmentPropertyfromconnectedFrom"^^xsd:string ; @@ -82342,10 +82352,10 @@ FILTER NOT EXISTS {$this s223:cnx+ ?otherC} 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 ; + 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 ; @@ -82353,18 +82363,36 @@ FILTER NOT EXISTS {$this s223:cnx+ ?otherC} 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: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 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 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 connected relation for BiDirectional connections"^^xsd:string ; sh:construct """ @@ -82377,30 +82405,6 @@ 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: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, @@ -82420,7 +82424,14 @@ ConnectionPoints are represented graphically in this standard by a triangle with """^^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 entity identified by the mapsTo+ relation."^^xsd:string ; + sh:property [ 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 "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 ; @@ -82447,35 +82458,48 @@ FILTER (NOT EXISTS {?a a/rdfs:subClassOf* ?b}) . sh:minCount 1 ; sh:name "ConnectionPointToEquipmentShape"^^xsd:string ; sh:path s223:isConnectionPointOf ], - [ 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 "If a ConnectionPoint mapsTo another ConnectionPoint, the respective Equipment should have a contains relation."^^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 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 ; + 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 ?equipment ?otherEquipment -WHERE { -$this s223:mapsTo ?otherCP . -?equipment s223:hasConnectionPoint $this . -?otherEquipment s223:hasConnectionPoint ?otherCP . -FILTER NOT EXISTS {?otherEquipment s223:contains ?equipment} -} -"""^^xsd:string ] ], + 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 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 can be associated with at most one other ConnectionPoint using the relation mapsTo"^^xsd:string ; sh:class s223:ConnectionPoint ; sh:maxCount 1 ; sh:message "s223: A ConnectionPoint can be associated with at most one other ConnectionPoint using the relation mapsTo"^^xsd:string ; sh:path s223:mapsTo ], + [ rdfs:comment "A ConnectionPoint 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 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 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 "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 ; @@ -82492,16 +82516,30 @@ FILTER NOT EXISTS {?otherEquipment s223:contains ?equipment} FILTER NOT EXISTS {?containerEquipment s223:contains ?equipment} . } """^^xsd:string ] ], - [ 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 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 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 "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 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 not have both a mapsTo and a connectsThrough relation."^^xsd:string ; sh:path s223:mapsTo ; sh:sparql [ a sh:SPARQLConstraint ; @@ -82515,41 +82553,7 @@ $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 "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 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 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 ] . +"""^^xsd:string ] ] . s223:DCVoltage-DCZeroVoltage a s223:Class, s223:DCVoltage-DCZeroVoltage, @@ -83255,10 +83259,6 @@ s223:hasDomain a rdf:Property ; rdfs:label "has domain"^^xsd:string ; rdfs:comment "The relation hasDomain is used to indicate what domain a Zone or DomainSpace pertains to (e.g. HVAC, lighting, electrical, etc.). Possible values are defined in EnumerationKind-Domain (see `s223:EnumerationKind-Domain`)."^^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_CGS, ns1:QuantityKindDimensionVector_ISO, ns1:QuantityKindDimensionVector_Imperial, @@ -83735,14 +83735,14 @@ s223:Concept a s223:Class, s223:abstract true ; rdfs:comment "All classes defined in the 223 standard are subclasses of s223:Concept."^^xsd:string ; rdfs:subClassOf rdfs:Resource ; - sh:property [ rdfs:comment "A Concept must be associated with at least one label using the relation label."^^xsd:string ; + sh:property [ rdfs:comment "If the relation hasProperty is present, it must associate the concept with a Property."^^xsd:string ; + sh:class s223:Property ; + sh:path s223:hasProperty ], + [ rdfs:comment "A Concept must be associated with at least one label using the relation label."^^xsd:string ; sh:message "s223: A Concept must be associated with at least one label using the relation label."^^xsd:string ; sh:minCount 1 ; sh:path rdfs:label ; - sh:severity sh:Warning ], - [ rdfs:comment "If the relation hasProperty is present, it must associate the concept with a Property."^^xsd:string ; - sh:class s223:Property ; - sh:path s223:hasProperty ] ; + sh:severity sh:Warning ] ; sh:rule [ a sh:SPARQLRule ; rdfs:comment "Add an rdfs:label if it is missing."^^xsd:string ; sh:construct """ @@ -83757,23 +83757,6 @@ BIND(REPLACE(?localName, "-", " ", "i") AS ?newLabel) sh:name "AddLabelFromLocalName"^^xsd:string ; sh:prefixes ] ; sh:sparql [ 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 ; - sh:prefixes ; - sh:select """ -SELECT DISTINCT $this ?class -WHERE { -?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 ; rdfs:comment "Inconsistent Medium. Case 1: Two pure mediums."^^xsd:string ; sh:message "s223: {$this} hasMedium of {?m1}, but is associated with property {?prop} that has ofMedium of {?m2}."^^xsd:string ; sh:prefixes ; @@ -83834,6 +83817,23 @@ FILTER NOT EXISTS { {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . } } +"""^^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 ; + sh:prefixes ; + sh:select """ +SELECT DISTINCT $this ?class +WHERE { +?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 ; rdfs:comment "Inconsistent Medium. Case 2: A pure medium and an associated property with constituents."^^xsd:string ; @@ -83859,6 +83859,10 @@ 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 ; @@ -85267,10 +85271,20 @@ s223:EnumerationKind a s223:Class, rdfs:comment """This is the encapsulating class for all EnumerationKinds. EnumerationKinds define the (closed) set of permissible values for a given purpose. For example, the DayOfWeek EnumerationKind enumerates the days of the week and allows no other values. - -EnumerationKinds are arranged in a tree hierarchy, with the root class named EnumerationKind. Each subclass is named starting with its immediate superclass, followed by a hyphen and a name that is unique among the sibling superclasses. + +EnumerationKinds are arranged in a class hierarchy tree, with the root class named EnumerationKind. Each subclass is named +starting with its immediate superclass, followed by a hyphen and a name that is unique among the sibling classes. +Each class is also an instance of itself. This unusual modeling pattern was used to achieve: + +- The ability to set an EnumerationKind value that is more general, or not yet fully specified +at the time of modeling, such as s223:Electricity-AC without having to state exactly what voltage or frequency it is. + +- The ability to use the sh:class SHACL predicate at any level in the EnumerationKind hierarchy +to constrain a value in the s223 specification, even if it is a more general one such as s223:Electricity-AC in the above example. + Certain validation constraints exist in the standard that evaluate compatibility of EnumerationKinds. -Two values are deemed compatible if they are the same, if one is a direct ancestor (or descendant) of the other, or if they are mixtures sharing at least one constituent."""^^xsd:string ; +Two values are deemed compatible if they are the same, if one is a direct ancestor (or descendant) of the other, +or if they are mixtures sharing at least one constituent."""^^xsd:string ; rdfs:subClassOf s223:Concept . a ns1:QuantityKindDimensionVector_ISO, @@ -85832,11 +85846,15 @@ A QuantifiableProperty (or subClass thereof) must always be associated with a Un Enumerable properties must be associated with an EnumerationKind. """^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ 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:property [ 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: A Property can be associated with at most one EnumerationKind-Medium using the relation ofMedium."^^xsd:string ; - sh:path s223:ofMedium ], + 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 "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 ""^^xsd:string ; sh:path s223:ofConstituent ; sh:sparql [ a sh:SPARQLConstraint ; @@ -85850,30 +85868,26 @@ WHERE { FILTER NOT EXISTS {$this s223:ofConstituent ?someSubstance} . } """^^xsd:string ] ], - [ 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 "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 "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-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 "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:path [ sh:inversePath s223:hasOutput ] ], + [ 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 "If the relation hasAspect is present, it must associate the Property with an EnumerationKind."^^xsd:string ; + sh:class s223:EnumerationKind ; + sh:path s223:hasAspect ] ; 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 ; @@ -89405,11 +89419,6 @@ ns1:IdentifiersAndDescriptionsPropertyGroup a sh:PropertyGroup ; ns1:uneceCommonCode "M85"^^xsd:string ; rdfs:isDefinedBy . -ns1:hasQuantityKind a rdf:Property ; - rdfs:label "has quantity kind"^^xsd:string ; - rdfs:comment "A reference to the QuantityKind of a QuantifiableProperty of interest, e.g. quantitykind:Temperature."^^xsd:string ; - rdfs:isDefinedBy . - a ns1:QuantityKindDimensionVector_CGS, ns1:QuantityKindDimensionVector_ISO, ns1:QuantityKindDimensionVector_Imperial, @@ -89722,6 +89731,11 @@ ns1:hasQuantityKind a rdf:Property ; ns1:uneceCommonCode "LTN"^^xsd:string ; rdfs:isDefinedBy . +ns1:hasQuantityKind a rdf:Property ; + rdfs:label "has quantity kind"^^xsd:string ; + rdfs:comment "A reference to the QuantityKind of a QuantifiableProperty of interest, e.g. quantitykind:Temperature."^^xsd:string ; + rdfs:isDefinedBy . + a ns1:QuantityKind ; rdfs:label "Mass per Area"@en ; dcterms:description "The area density (also known as areal density, surface density, or superficial density) of a two-dimensional object is calculated as the mass per unit area. The SI derived unit is: kilogram per square metre ($kg \\cdot m^{-2}$)."^^ns1:LatexString ; @@ -90586,7 +90600,10 @@ s223:OutletConnectionPoint a s223:Class, rdfs:label "Outlet Connection Point"^^xsd:string ; rdfs:comment "An OutletConnectionPoint indicates that a substance must flow out of a Connectable (see 's223:Connectable') at this connection point and cannot flow in the other direction. An OutletConnectionPoint is a predefined subclass of ConnectionPoint."^^xsd:string ; rdfs:subClassOf s223:ConnectionPoint ; - sh:property [ rdfs:comment "Ensure an OutletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; + sh:property [ rdfs:comment "If the relation mapsTo is present it must associate the OutletConnectionPoint with an OutletConnectionPoint."^^xsd:string ; + sh:class s223:OutletConnectionPoint ; + sh:path s223:mapsTo ], + [ rdfs:comment "Ensure an OutletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; sh:path s223:mapsTo ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "Ensure an OutletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; @@ -90601,10 +90618,7 @@ $this s223:connectsThrough/s223:connectsTo ?destinationEquipment . FILTER NOT EXISTS {?parentEquipment s223:contains ?destinationEquipment} . FILTER NOT EXISTS {$this s223:mapsTo ?anything} . } -"""^^xsd:string ] ], - [ rdfs:comment "If the relation mapsTo is present it must associate the OutletConnectionPoint with an OutletConnectionPoint."^^xsd:string ; - sh:class s223:OutletConnectionPoint ; - sh:path s223:mapsTo ] . +"""^^xsd:string ] ] . a ns1:Unit ; rdfs:label "British Thermal Unit (International Definition)"@en ; @@ -91079,7 +91093,10 @@ s223:InletConnectionPoint a s223:Class, rdfs:label "Inlet Connection Point"^^xsd:string ; rdfs:comment "An InletConnectionPoint indicates that a substance must flow into the equipment or domain space at this connection point and cannot flow the other direction. An IntletConnectionPoint is a subclass of ConnectionPoint."^^xsd:string ; rdfs:subClassOf s223:ConnectionPoint ; - sh:property [ rdfs:comment "Ensure an InletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; + sh:property [ rdfs:comment "If the relation mapsTo is present it must associate the InletConnectionPoint with an InletConnectionPoint."^^xsd:string ; + sh:class s223:InletConnectionPoint ; + sh:path s223:mapsTo ], + [ rdfs:comment "Ensure an InletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; sh:path s223:mapsTo ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "Ensure an InletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; @@ -91094,10 +91111,7 @@ $this s223:connectsThrough/s223:connectsFrom ?sourceEquipment . FILTER NOT EXISTS {?parentEquipment s223:contains ?sourceEquipment} . FILTER NOT EXISTS {$this s223:mapsTo ?anything} . } -"""^^xsd:string ] ], - [ rdfs:comment "If the relation mapsTo is present it must associate the InletConnectionPoint with an InletConnectionPoint."^^xsd:string ; - sh:class s223:InletConnectionPoint ; - sh:path s223:mapsTo ] . +"""^^xsd:string ] ] . a ns1:QuantityKindDimensionVector_ISO, ns1:QuantityKindDimensionVector_Imperial, @@ -91659,23 +91673,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 actuatedByProperty is present it must associate the Equipment with a ActuatableProperty."^^xsd:string ; - sh:class s223:ActuatableProperty ; - sh:path s223:actuatedByProperty ], + sh:property [ rdfs:comment "Warning about a subClass of Equipment of type A containing something that is in the same subClass branch."^^xsd:string ; + sh:path s223:contains ; + sh:severity sh:Warning ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Warning about a subClass of Equipment of type A containing something that is in the same subClass branch."^^xsd:string ; + sh:message "s223: {$this}, of type {?type1}, contains {?subEquip} of type {?type2}, that could result in double-counting items in the class hierarchy of {?type1}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?subEquip ?type1 ?type2 +WHERE { + FILTER NOT EXISTS {$this a s223:Equipment} . +$this s223:contains+ ?subEquip . + FILTER NOT EXISTS {?subEquip a s223:Equipment} . +$this a ?type1 . +?subEquip a ?type2 . +{ +?type2 rdfs:subClassOf* ?type1 . +} +UNION +{ +?type1 rdfs:subClassOf* ?type2 . +} +} +"""^^xsd:string ] ], [ rdfs:comment "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 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 executes is present it must associate the Equipment with a Function."^^xsd:string ; - sh:class s223:Function ; - sh:path s223:executes ], - [ 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 actuatedByProperty is present it must associate the Equipment with a ActuatableProperty."^^xsd:string ; + sh:class s223:ActuatableProperty ; + sh:path s223:actuatedByProperty ], [ rdfs:comment "Disallow contained equipment from having external incoming connections."^^xsd:string ; sh:path s223:connectedFrom ; sh:sparql [ a sh:SPARQLConstraint ; @@ -91691,6 +91718,12 @@ $this ^s223:contains ?container . FILTER NOT EXISTS {?container s223:contains ?otherDev .} } """^^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 outgoing connections."^^xsd:string ; sh:path s223:connectedTo ; sh:sparql [ a sh:SPARQLConstraint ; @@ -91706,30 +91739,11 @@ $this ^s223:contains ?container . FILTER NOT EXISTS {?container s223:contains ?otherDev .} } """^^xsd:string ] ], - [ rdfs:comment "Warning about a subClass of Equipment of type A containing something that is in the same subClass branch."^^xsd:string ; - sh:path s223:contains ; - sh:severity sh:Warning ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Warning about a subClass of Equipment of type A containing something that is in the same subClass branch."^^xsd:string ; - sh:message "s223: {$this}, of type {?type1}, contains {?subEquip} of type {?type2}, that could result in double-counting items in the class hierarchy of {?type1}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?subEquip ?type1 ?type2 -WHERE { - FILTER NOT EXISTS {$this a s223:Equipment} . -$this s223:contains+ ?subEquip . - FILTER NOT EXISTS {?subEquip a s223:Equipment} . -$this a ?type1 . -?subEquip a ?type2 . -{ -?type2 rdfs:subClassOf* ?type1 . -} -UNION -{ -?type1 rdfs:subClassOf* ?type2 . -} -} -"""^^xsd:string ] ] ; + [ 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 ] ; sh:rule [ a sh:SPARQLRule ; rdfs:comment "For equipment contained within another piece of equipment use the mapsTo relation to infer a Medium from the containing equipment."^^xsd:string ; sh:construct """ @@ -92534,49 +92548,36 @@ s223:QuantifiableProperty a s223:Class, 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, ns1:Quantity ; - sh:property [ 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:property [ 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 "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 "This QuantifiableProperty and the Setpoint associated with it have non-commensurate QuantityKinds."^^xsd:string ; - sh:path ns1:hasQuantityKind ; + [ 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 and the Setpoint associated with it have non-commensurate QuantityKinds."^^xsd:string ; - sh:message "s223: {$this} uses QuantityKind {?pqk} with DimensionVector {?pdv}, while Setpoint {?setpoint} uses QuantityKind {?sqk} with DimensionVector {?sdv}. These are non-commensurate"^^xsd:string ; + 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 ?pqk ?sqk ?pdv ?sdv +SELECT $this ?setpoint ?punit ?sunit WHERE { -$this qudt:hasQuantityKind ?pqk . +$this qudt:hasUnit ?punit . $this s223:hasSetpoint ?setpoint . -?setpoint qudt:hasQuantityKind ?sqk . -?pqk qudt:hasDimensionVector ?pdv . -?sqk qudt:hasDimensionVector ?sdv . -FILTER (?pqk != ?sqk) . -FILTER (?pdv != ?sdv) . +?setpoint qudt:hasUnit ?sunit . +?punit qudt:hasDimensionVector ?pdv . +?sunit qudt:hasDimensionVector ?sdv . +FILTER (?punit != ?sunit) . +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 ; sh:sparql [ a sh:SPARQLConstraint ; @@ -92595,29 +92596,42 @@ FILTER (?punit != ?sunit) . FILTER (?pdv != ?sdv) . } """^^xsd:string ] ], - [ rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it."^^xsd:string ; - sh:path ns1:hasUnit ; - sh:severity sh:Info ; + [ 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 ; - 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 Setpoint associated with it have non-commensurate QuantityKinds."^^xsd:string ; + sh:message "s223: {$this} uses QuantityKind {?pqk} with DimensionVector {?pdv}, while Setpoint {?setpoint} uses QuantityKind {?sqk} with DimensionVector {?sdv}. These are non-commensurate"^^xsd:string ; sh:prefixes ; sh:select """ -SELECT $this ?setpoint ?punit ?sunit +SELECT $this ?setpoint ?pqk ?sqk ?pdv ?sdv WHERE { -$this qudt:hasUnit ?punit . +$this qudt:hasQuantityKind ?pqk . $this s223:hasSetpoint ?setpoint . -?setpoint qudt:hasUnit ?sunit . -?punit qudt:hasDimensionVector ?pdv . -?sunit qudt:hasDimensionVector ?sdv . -FILTER (?punit != ?sunit) . -FILTER (?pdv = ?sdv) . +?setpoint qudt:hasQuantityKind ?sqk . +?pqk qudt:hasDimensionVector ?pdv . +?sqk qudt:hasDimensionVector ?sdv . +FILTER (?pqk != ?sqk) . +FILTER (?pdv != ?sdv) . } """^^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 ] ; + 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 ; + 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 """ @@ -93168,23 +93182,6 @@ s223:Frequency-60Hz a s223:Class, ns1:latexDefinition "$L^-3 M$"^^ns1:LatexString ; rdfs:isDefinedBy . - a ns1:QuantityKindDimensionVector_CGS, - ns1:QuantityKindDimensionVector_ISO, - ns1:QuantityKindDimensionVector_Imperial, - ns1:QuantityKindDimensionVector_SI ; - rdfs:label "A0E0L1I0M1H0T-2D0"^^xsd:string ; - ns1:dimensionExponentForAmountOfSubstance 0 ; - ns1:dimensionExponentForElectricCurrent 0 ; - ns1:dimensionExponentForLength 1 ; - ns1:dimensionExponentForLuminousIntensity 0 ; - ns1:dimensionExponentForMass 1 ; - ns1:dimensionExponentForThermodynamicTemperature 0 ; - ns1:dimensionExponentForTime -2 ; - ns1:dimensionlessExponent 0 ; - ns1:hasReferenceQuantityKind ; - ns1:latexDefinition "$L M T^-2$"^^ns1:LatexString ; - rdfs:isDefinedBy . - a owl:Ontology ; owl:imports , , @@ -93196,35 +93193,29 @@ s223:Frequency-60Hz a s223:Class, sh: ; owl:versionInfo "Created with TopBraid Composer", "Created with TopBraid Composer"^^xsd:string ; - sh:declare [ 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://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; - sh:prefix "rdfs"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; - sh:prefix "sh"^^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://qudt.org/schema/qudt/"^^xsd:anyURI ; - sh:prefix "qudt"^^xsd:string ], + sh:declare [ 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/vocab/unit/"^^xsd:anyURI ; sh:prefix "unit"^^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/2002/07/owl#"^^xsd:anyURI ; + sh:prefix "owl"^^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/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; sh:prefix "rdf"^^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/schema/qudt/"^^xsd:anyURI ; + sh:namespace "http://qudt.org/vocab/dimensionvector/"^^xsd:anyURI ; + sh:prefix "qkdv"^^xsd:string ], + [ 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 ], - [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; - sh:prefix "qudtqk"^^xsd:string ], [ sh:namespace "http://data.ashrae.org/standard223/1.0/vocab/role#"^^xsd:anyURI ; sh:prefix "role"^^xsd:string ], [ a sh:PrefixDeclaration ; @@ -93233,71 +93224,94 @@ s223:Frequency-60Hz a s223:Class, [ a sh:PrefixDeclaration ; sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; sh:prefix "dcterms"^^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://qudt.org/vocab/unit/"^^xsd:anyURI ; - sh:prefix "unit"^^xsd:string ], [ a sh:PrefixDeclaration ; - 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://data.ashrae.org/standard223#"^^xsd:anyURI ; sh:prefix "s223"^^xsd:string ], - [ a sh:PrefixDeclaration ; - 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/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://www.w3.org/2001/XMLSchema#"^^xsd:anyURI ; - sh:prefix "xsd"^^xsd:string ], [ a sh:PrefixDeclaration ; sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; sh:prefix "skos"^^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 ], + [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; + sh:prefix "sh"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; - sh:prefix "quantitykind"^^xsd:string ], + sh:namespace "http://qudt.org/vocab/dimensionvector/"^^xsd:anyURI ; + sh:prefix "qkdv"^^xsd:string ], + [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; + sh:prefix "qudtqk"^^xsd:string ], + [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223"^^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/2002/07/owl#"^^xsd:anyURI ; sh:prefix "owl"^^xsd:string ], - [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; + [ 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 ], [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/dimensionvector/"^^xsd:anyURI ; - sh:prefix "qkdv"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/dimensionvector/"^^xsd:anyURI ; - sh:prefix "qkdv"^^xsd:string ], + sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; + sh:prefix "skos"^^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 ; + [ a sh:PrefixDeclaration ; + sh:namespace "http://www.w3.org/2001/XMLSchema#"^^xsd:anyURI ; + sh:prefix "xsd"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; sh:prefix "sh"^^xsd:string ], - [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; - sh:prefix "rdfs"^^xsd:string ], [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; sh:prefix "s223"^^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/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; + sh:prefix "rdf"^^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://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 ], + [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs"^^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://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 ], + [ 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://qudt.org/vocab/unit/"^^xsd:anyURI ; + sh:prefix "unit"^^xsd:string ], + [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; + sh:prefix "quantitykind"^^xsd:string ] . + + a ns1:QuantityKindDimensionVector_CGS, + ns1:QuantityKindDimensionVector_ISO, + ns1:QuantityKindDimensionVector_Imperial, + ns1:QuantityKindDimensionVector_SI ; + rdfs:label "A0E0L1I0M1H0T-2D0"^^xsd:string ; + ns1:dimensionExponentForAmountOfSubstance 0 ; + ns1:dimensionExponentForElectricCurrent 0 ; + ns1:dimensionExponentForLength 1 ; + ns1:dimensionExponentForLuminousIntensity 0 ; + ns1:dimensionExponentForMass 1 ; + ns1:dimensionExponentForThermodynamicTemperature 0 ; + ns1:dimensionExponentForTime -2 ; + ns1:dimensionlessExponent 0 ; + ns1:hasReferenceQuantityKind ; + ns1:latexDefinition "$L M T^-2$"^^ns1:LatexString ; + rdfs:isDefinedBy . a ns1:QuantityKind ; rdfs:label "Force Per Area"@en ; @@ -93597,14 +93611,14 @@ s223:Electricity-AC a s223:Class, sh:class s223:Numerical-NumberOfElectricalPhases ; sh:minCount 1 ; sh:path s223:hasNumberOfElectricalPhases ], - [ rdfs:comment "An electricity AC medium must have a frequency"^^xsd:string ; - sh:class s223:Numerical-Frequency ; - sh:minCount 1 ; - sh:path s223:hasFrequency ], [ rdfs:comment "An electricity AC medium must have a voltage."^^xsd:string ; sh:minCount 1 ; sh:or ( [ sh:class s223:Numerical-LineLineVoltage ] [ sh:class s223:Numerical-LineNeutralVoltage ] [ sh:class s223:Numerical-Voltage ] ) ; - sh:path s223:hasVoltage ] . + sh:path s223:hasVoltage ], + [ rdfs:comment "An electricity AC medium must have a frequency"^^xsd:string ; + sh:class s223:Numerical-Frequency ; + sh:minCount 1 ; + sh:path s223:hasFrequency ] . rdfs:label "QUDT SHACL Schema Supplement Version 2.1.37"^^xsd:string ; ns2:hasGraphMetadata ns2:GMD_SHACLQUDTOVERLAY-SCHEMA ;