From a12e8b493d43684d92b367a9b43e78e89953c061 Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Tue, 16 Jul 2024 11:43:07 -0600 Subject: [PATCH] update 223p.ttl --- ontologies/223p.ttl | 2009 +++++++++++++++++++++---------------------- 1 file changed, 977 insertions(+), 1032 deletions(-) diff --git a/ontologies/223p.ttl b/ontologies/223p.ttl index 77f9670c..a6975ccc 100644 --- a/ontologies/223p.ttl +++ b/ontologies/223p.ttl @@ -2,10 +2,7 @@ @prefix dcterms: . @prefix ns1: . @prefix ns2: . -@prefix ns3: . -@prefix ns4: . -@prefix ns5: . -@prefix ns6: . +@prefix ns3: . @prefix org: . @prefix owl: . @prefix prov: . @@ -72,14 +69,14 @@ s223:SymmetricProperty a rdfs:Class, sh:path s223:hasProperty ; sh:qualifiedMinCount 2 ; sh:qualifiedValueShape [ sh:class s223:EnumeratedActuatableProperty ; - sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Position ; + sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Binary ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasAspect ], - [ sh:hasValue s223:EnumerationKind-Binary ; + sh:path s223:hasEnumerationKind ], + [ sh:hasValue s223:EnumerationKind-Position ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasEnumerationKind ] ] ] ; + sh:path s223:hasAspect ] ] ] ; sh:severity s223:g36 ] ] ) ; sh:severity s223:g36 ; sh:targetClass . @@ -102,27 +99,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 damper shall have at least one analog damper command property or at least two binary damper command properties using the relation hasProperty."^^xsd:string ; sh:minCount 2 ; sh:path s223:hasProperty ; sh:qualifiedMinCount 2 ; sh:qualifiedValueShape [ sh:class s223:EnumeratedActuatableProperty ; - sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Binary ; + sh: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 . @@ -221,14 +218,14 @@ s223:SymmetricProperty a rdfs:Class, sh:path s223:hasProperty ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:QuantifiableActuatableProperty ; - sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Position ; + sh:node [ sh:property [ sh:hasValue ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasAspect ], - [ sh:hasValue ; + sh:path ns1:hasQuantityKind ], + [ sh:hasValue s223:EnumerationKind-Position ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path ns1:hasQuantityKind ] ] ] ; + sh:path s223:hasAspect ] ] ] ; sh:severity s223:g36 ] ] [ sh:property [ rdfs:comment "A HotWaterValve shall have at least one analog valve command property or at least two binary valve command properties using the relation hasProperty."^^xsd:string ; sh:minCount 2 ; sh:path s223:hasProperty ; @@ -286,27 +283,22 @@ s223:SymmetricProperty a rdfs:Class, 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 ; + [ 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:path s223:hasAspect ] ] ] ; + sh:qualifiedValueShapesDisjoint true ; sh:severity sh:Info ], - [ rdfs:comment "A Zone shall have at least one Domain-HVAC using the relation hasDomain. "^^xsd:string ; - sh:hasValue s223:Domain-HVAC ; - sh:message "g36: A Zone shall have at least one Domain-HVAC using the relation hasDomain. "^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasDomain ; - sh:severity s223:g36 ], [ rdfs:comment "A Zone shall have at least one zone thermostat override switch property using the relation hasProperty."^^xsd:string ; sh:message "g36: A Zone shall have at least one zone thermostat override switch property using the relation hasProperty."^^xsd:string ; sh:minCount 1 ; @@ -318,21 +310,40 @@ s223:SymmetricProperty a rdfs:Class, sh:minCount 1 ; sh:path s223:hasEnumerationKind ] ] ] ; sh:severity sh:Info ], - [ rdfs:comment "A Zone shall have a zone temperature setpoint adjustment property using the relation hasProperty, if applicable."^^xsd:string ; - sh:message "g36: A Zone shall have a zone temperature setpoint adjustment property using the relation hasProperty, if applicable."^^xsd:string ; + [ 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:minCount 1 ; sh:path s223:hasProperty ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:QuantifiableObservableProperty ; - sh:node [ sh:property [ sh:hasValue ; + sh:node [ sh:property [ sh:hasValue s223:Constituent-CO2 ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path ns1:hasQuantityKind ], - [ sh:hasValue s223:Dimensioned-Delta ; + sh:path s223:ofConstituent ], + [ sh:hasValue ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasAspect ] ] ] ; - sh:qualifiedValueShapesDisjoint true ; + sh:path ns1:hasQuantityKind ] ] ] ; + 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: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 ; @@ -345,21 +356,7 @@ s223:SymmetricProperty a rdfs:Class, sh:minCount 1 ; sh:path ns1:hasQuantityKind ] ] ] ; sh:qualifiedValueShapesDisjoint true ; - sh:severity s223:g36 ], - [ rdfs:comment "A Zone shall have at least one window switch on-off property using the relation hasProperty."^^xsd:string ; - sh:message "g36: A Zone shall have at least one window switch on-off property using the relation hasProperty."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasProperty ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:EnumeratedObservableProperty ; - sh:node [ sh:property [ rdfs:comment "Property shall be measured at a window."^^xsd:string ; - sh:class s223:Window ; - sh:path [ sh:alternativePath ( ( [ sh:inversePath s223:observes ] s223:hasMeasurementLocation ) [ sh:inversePath s223:hasProperty ] ) ] ], - [ sh:class s223:EnumerationKind-OnOff ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasEnumerationKind ] ] ] ; - sh:severity sh:Info ] ; + sh:severity s223:g36 ] ; sh:severity s223:g36 . a s223:Class, @@ -368,17 +365,17 @@ s223:SymmetricProperty a rdfs:Class, rdfs:label "Zone Group"^^xsd:string ; rdfs:comment "A ZoneGroup is a grouping of zones that may be scheduled together. Zone groupings must be assigned based on rules in section 3.1.3 of Guideline 36."^^xsd:string ; rdfs:subClassOf s223:ZoneGroup ; - sh:property [ rdfs:comment "A ZoneGroup shall have the Domain HVAC using the relation hasDomain."^^xsd:string ; - sh:hasValue s223:Domain-HVAC ; - sh:message "g36: A ZoneGroup shall have the Domain HVAC using the relation hasDomain."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasDomain ; - sh:severity s223:g36 ], - [ rdfs:comment "A ZoneGroup shall contain at least one Zone using the relation contains."^^xsd:string ; + sh:property [ rdfs:comment "A ZoneGroup shall contain at least one Zone using the relation contains."^^xsd:string ; sh:class ; sh:message "g36: A ZoneGroup shall contain at least one Zone using the relation contains."^^xsd:string ; sh:minCount 1 ; sh:path s223:contains ; + sh:severity s223:g36 ], + [ rdfs:comment "A ZoneGroup shall have the Domain HVAC using the relation hasDomain."^^xsd:string ; + sh:hasValue s223:Domain-HVAC ; + sh:message "g36: A ZoneGroup shall have the Domain HVAC using the relation hasDomain."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasDomain ; sh:severity s223:g36 ] ; sh:severity s223:g36 . @@ -658,7 +655,7 @@ ns1:EnumeratedValue a rdfs:Class, rdfs:isDefinedBy ; rdfs:subClassOf ns1:Concept, ns1:Verifiable, - ns6:EnumeratedValue ; + ns3:EnumeratedValue ; sh:property ns1:EnumeratedValue-abbreviation, ns1:EnumeratedValue-description, ns1:EnumeratedValue-symbol . @@ -674,7 +671,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, - ns6:Enumeration ; + ns3:Enumeration ; sh:property ns1:Enumeration-abbreviation, ns1:Enumeration-default, ns1:Enumeration-element . @@ -684,7 +681,7 @@ ns1:EnumerationScale a rdfs:Class, rdfs:label "Enumeration scale"^^xsd:string ; rdfs:isDefinedBy ; rdfs:subClassOf ns1:Scale, - ns6:Enumeration . + ns3:Enumeration . ns1:Figure a rdfs:Class, sh:NodeShape ; @@ -1226,18 +1223,18 @@ s223:AirHandlingUnit a s223:Class, rdfs:label "Air handling unit"^^xsd:string ; rdfs:comment "An assembly consisting of sections containing a fan or fans and other necessary equipment to perform one or more of the following functions: circulating, filtration, heating, cooling, heat recovery, humidifying, dehumidifying, and mixing of air. It is usually connected to an air-distribution system."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "An AirHandlingUnit shall have at least one outlet using the medium Air."^^xsd:string ; + sh:property [ rdfs:comment "An AirHandlingUnit 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 "An AirHandlingUnit shall have at least one inlet using the medium Air."^^xsd:string ; + [ rdfs:comment "An AirHandlingUnit 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 ] ] ] ] . @@ -1247,13 +1244,6 @@ 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 object-identifier is present it associates the external reference with the BACnet object having the specific object identifier."^^xsd:string ; - sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path ; - 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 ; sh:maxCount 1 ; @@ -1266,18 +1256,24 @@ s223:BACnetExternalReference a s223:Class, sh:minCount 0 ; sh:path ], [ 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 device-identifier is present it associates the external reference with a BACnet device having the specific device identifier."^^xsd:string ; + rdfs:comment "If the relation 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 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:pattern "^[A-Za-z0-9-]+,[1-9][0-9]*$"^^xsd:string ], + sh:path ], [ a sh:PropertyShape ; rdfs:comment "If the relation property-array-index is present it provides the index for reading items from a property that is an array."^^xsd:string ; sh:datatype xsd:nonNegativeInteger ; @@ -1285,11 +1281,12 @@ s223:BACnetExternalReference a s223:Class, sh:minCount 0 ; sh:path ], [ a sh:PropertyShape ; - rdfs:comment "If the relation priority-for-writing is present it provides the priority for writing values to the object."^^xsd:string ; - sh:datatype xsd:nonNegativeInteger ; + rdfs:comment "If the relation object-identifier is present it associates the external reference with the BACnet object having the specific object identifier."^^xsd:string ; + sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path ] . + sh:path ; + sh:pattern "^[A-Za-z0-9-]+,[1-9][0-9]*$"^^xsd:string ] . s223:BatteryCPShape a sh:NodeShape ; rdfs:label "Battery CP Shape"^^xsd:string ; @@ -1336,7 +1333,14 @@ s223:ChilledBeam a s223:Class, rdfs:label "Chilled beam"^^xsd:string ; rdfs:comment "A structure with a colder surface temperature where air passes through, and air movement is induced in the room to achieve cooling. Cooling medium is generally water."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A ChilledBeam must be associated with the Role-Cooling using the relation hasRole"^^xsd:string ; + sh:property [ 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 ; @@ -1346,13 +1350,6 @@ s223:ChilledBeam a s223:Class, sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Fluid-Water ; - sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A ChilledBeam shall have at least one 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 ] ] ] ] . @@ -1361,18 +1358,18 @@ s223:Chiller a s223:Class, rdfs:label "Chiller"^^xsd:string ; rdfs:comment "A refrigerating machine used to transfer heat from fluids."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Chiller shall have at least one inlet using the medium Water."^^xsd:string ; + sh:property [ rdfs:comment "A Chiller 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 Chiller shall have at least one outlet using the medium Water."^^xsd:string ; + [ rdfs:comment "A Chiller 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 ] ] ] ] . @@ -1408,16 +1405,16 @@ s223:Compressor a s223:Class, rdfs:label "Compressor"^^xsd:string ; rdfs:comment "A device for mechanically increasing the pressure of a gas."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Compressor shall have at least one outlet."^^xsd:string ; + sh:property [ rdfs:comment "A Compressor shall have at least one inlet."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ], - [ rdfs:comment "A Compressor shall have at least one inlet."^^xsd:string ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ], + [ rdfs:comment "A Compressor shall have at least one outlet."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ] . + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ] . s223:ConcentrationSensor a s223:Class, sh:NodeShape ; @@ -1433,14 +1430,14 @@ s223:ConnectionCnxShape a sh:NodeShape ; sh:minCount 1 ; sh:path s223:cnx ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ; sh:qualifiedValueShapesDisjoint true ; sh:severity sh:Warning ], [ rdfs:comment "A Connection shall have at least two cnx relations allowing flow in and out of the Connection."^^xsd:string ; sh:minCount 1 ; sh:path s223:cnx ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ; sh:qualifiedValueShapesDisjoint true ; sh:severity sh:Warning ] ] [ sh:property [ rdfs:comment "A Connection shall have at least two cnx relations allowing flow in and out of the Connection."^^xsd:string ; sh:minCount 2 ; @@ -1481,18 +1478,18 @@ s223:CoolingTower a s223:Class, rdfs:label "Cooling tower"^^xsd:string ; rdfs:comment "A heat transfer device in which atmospheric air cools warm water, generally by direct contact via evaporation."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A CoolingTower shall have at least one outlet using the medium Water."^^xsd:string ; + sh:property [ rdfs:comment "A CoolingTower 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 ] ] ] ], - [ rdfs:comment "A CoolingTower shall have at least one inlet using the medium Water."^^xsd:string ; + [ rdfs:comment "A CoolingTower 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 ] ] ] ] . @@ -1532,32 +1529,32 @@ WHERE { FILTER (?high = ?low) . } """^^xsd:string ] ] ; - sh:xone ( [ sh:property [ rdfs:comment "A DifferentialSensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocationLow."^^xsd:string ; + sh: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: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: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: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: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:path s223:hasObservationLocationLow ] ] ) . s223:Door a s223:Class, sh:NodeShape ; @@ -1589,7 +1586,9 @@ s223:DualDuctTerminal a s223:Class, s223:Duct a s223:Class, sh:NodeShape ; rdfs:label "Duct"^^xsd:string ; - rdfs:comment "A Duct is a subclass of Connection, that represents a conduit through which air is conveyed."^^xsd:string ; + rdfs:comment """A Duct is used for the transportation of air. This includes air supply, return, and exhaust in HVAC (Heating, Ventilation, and + Air Conditioning) systems. Ducts can be cylindrical or rectangular and are designed to maintain airflow and pressure while minimizing air + leakage and heat loss or gain."""^^xsd:string ; rdfs:subClassOf s223:Connection . s223:DuvSensor a s223:Class, @@ -1650,18 +1649,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 inlet using the medium Electricity."^^xsd:string ; + sh:property [ 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 ] ] ] ], - [ rdfs:comment "An ElectricTransformer shall have at least one outlet using the medium Electricity."^^xsd:string ; + [ 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 ] ] ] ] . @@ -1685,33 +1684,33 @@ 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 shall have at least one inlet using the medium Air."^^xsd:string ; + sh:property [ rdfs:comment "A FanCoilUnit shall have at least one outlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ], - [ 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 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:Coil ] ], + [ rdfs:comment "A FanCoilUnit must at least have the role Role-Heating or Role-Cooling."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasRole ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:in ( s223:Role-Heating s223:Role-Cooling ) ] ], [ rdfs:comment "A FanCoilUnit 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 ] ], - [ rdfs:comment "A FanCoilUnit shall have at least one outlet using the medium Air."^^xsd:string ; + [ rdfs:comment "A FanCoilUnit shall have at least one inlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ] . @@ -1731,34 +1730,7 @@ 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 "Ensure that the filter inlet and outlet have compatible mediums."^^xsd:string ; - sh:path s223:hasConnectionPoint ; - sh:severity sh:Warning ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 1: Two pure mediums."^^xsd:string ; - sh:message "s223: {$this} with inlet medium {?m2} is incompatible with outlet medium {?m1}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?m2 ?m1 -WHERE { -$this s223:cnx ?cp1, ?cp2 . -?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . -?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . -FILTER (?cp1 != ?cp2) . -?cp1 s223:hasMedium ?m1 . -?cp2 s223:hasMedium ?m2 . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS {?m2 s223:composedOf ?c2} -FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . -FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . -} -"""^^xsd:string ] ], - [ rdfs:comment "A Filter shall have at least one inlet ConnectionPoint."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ], - [ rdfs:comment "A filter should have one common constituent between the inlet and outlet"^^xsd:string ; + sh:property [ rdfs:comment "A filter should have one common constituent between the inlet and outlet"^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; @@ -1782,11 +1754,6 @@ FILTER NOT EXISTS { } } """^^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 should have one common constituent between the inlet and outlet"^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:severity sh:Warning ; @@ -1816,7 +1783,39 @@ WHERE { {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} . } } -"""^^xsd:string ] ] . +"""^^xsd:string ] ], + [ rdfs:comment "Ensure that the filter inlet and outlet have compatible mediums."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:severity sh:Warning ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 1: Two pure mediums."^^xsd:string ; + sh:message "s223: {$this} with inlet medium {?m2} is incompatible with outlet medium {?m1}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?m2 ?m1 +WHERE { +$this s223:cnx ?cp1, ?cp2 . +?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . +?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . +FILTER (?cp1 != ?cp2) . +?cp1 s223:hasMedium ?m1 . +?cp2 s223:hasMedium ?m2 . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS {?m2 s223:composedOf ?c2} +FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . +FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . +} +"""^^xsd:string ] ], + [ rdfs:comment "A Filter shall have at least one outlet."^^xsd:string ; + sh: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 ] ] . s223:FlowSensor a s223:Class, sh:NodeShape ; @@ -1883,14 +1882,14 @@ s223:Generator a s223:Class, rdfs:label "Generator"^^xsd:string ; rdfs:comment "An energy transducer that transforms non-electric energy into electric energy."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Generator must be associated with at least one ConnectionPoint using the relation hasConnectionPoint."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ], - [ rdfs:comment "A Generator shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:property [ rdfs:comment "A Generator 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 Generator must be associated with at least one ConnectionPoint using the relation hasConnectionPoint."^^xsd:string ; + sh:minCount 1 ; sh:path s223:hasConnectionPoint ] . s223:HeatPump a s223:Class, @@ -1898,18 +1897,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 ] ] ] ] . @@ -1970,19 +1969,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 inlet using the medium Electricity-DC."^^xsd:string ; + sh:property [ 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 ] ] ] ], - [ rdfs:comment "An Inverter shall have at least one outlet using the medium Electricity-AC."^^xsd:string ; + [ 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 ] ] ] ] . s223:JunctionCPShape a sh:NodeShape ; @@ -1993,13 +1992,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 ; @@ -2060,12 +2059,12 @@ s223:OccupantCounter a s223:Class, sh:class s223:QuantifiableObservableProperty ; sh:message "s223: An OccupantCounter must always observe a QuantifiableObservableProperty that has a QuantityKind of Population and a Unit of unit:NUM."^^xsd:string ; sh:minCount 1 ; - sh:node [ sh:property [ sh:hasValue ; + sh:node [ sh:property [ sh:hasValue ; sh:maxCount 1 ; - sh:path ns1:hasUnit ], - [ sh:hasValue ; + sh:path ns1:hasQuantityKind ], + [ sh:hasValue ; sh:maxCount 1 ; - sh:path ns1:hasQuantityKind ] ] ; + sh:path ns1:hasUnit ] ] ; sh:path s223:observes ] . s223:OccupantMotionSensor a s223:Class, @@ -2116,25 +2115,27 @@ s223:PhotovoltaicModule a s223:Class, rdfs:label "Photovoltaic module"^^xsd:string ; rdfs:comment "A piece of equipment that converts sunlight into electricity."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "An PhotovoltaicModule must have at least one inlet using the medium EM-Light."^^xsd:string ; + sh:property [ rdfs:comment "An PhotovoltaicModule shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:EM-Light ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "An PhotovoltaicModule shall have at least one outlet using the medium Electricity."^^xsd:string ; + [ rdfs:comment "An PhotovoltaicModule must have at least one inlet using the medium EM-Light."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:EM-Light ; sh:path s223:hasMedium ] ] ] ] . s223:Pipe a s223:Class, sh:NodeShape ; rdfs:label "Pipe"^^xsd:string ; - rdfs:comment "A Pipe is a subclass of Connection, that represents a hollow cylinder of metal or other material used to convey a Medium."^^xsd:string ; + rdfs:comment """A Pipe is used primarily for the transportation of liquids and gases. This includes water, sewage, natural gas, +chemicals and even vacuum. They are designed to withstand internal pressure and sometimes external pressure as well. Examples +include plumbing systems for potable water, waste drainage systems, and natural gas delivery systems."""^^xsd:string ; rdfs:subClassOf s223:Connection . s223:PowerOverEthernetSwitch a s223:Class, @@ -2166,7 +2167,19 @@ 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: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 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ rdfs:comment "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant."^^xsd:string ; + sh:message "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant."^^xsd:string ; + sh:or ( [ sh:property [ sh:class s223:Fluid-Water ; + sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Refrigerant ; + sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Oil ; + sh:path s223:hasMedium ] ] ) ; + sh:severity sh:Warning ] ] ], + [ rdfs:comment "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 ; @@ -2198,19 +2211,7 @@ WHERE { FILTER (NOT EXISTS {?mediumb a/rdfs:subClassOf* ?mediuma}) . FILTER (NOT EXISTS {?mediuma a/rdfs:subClassOf* ?mediumb}) . } -"""^^xsd:string ] ], - [ rdfs:comment "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; - sh:node [ rdfs:comment "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant."^^xsd:string ; - sh:message "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant."^^xsd:string ; - sh:or ( [ sh:property [ sh:class s223:Fluid-Water ; - sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Refrigerant ; - sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Oil ; - sh:path s223:hasMedium ] ] ) ; - sh:severity sh:Warning ] ] ] . +"""^^xsd:string ] ] . s223:RadiantPanelInletShape a sh:NodeShape ; rdfs:label "Radiant panel inlet shape"^^xsd:string ; @@ -2275,15 +2276,14 @@ s223:RadiatorInletShape a sh:NodeShape ; s223:RequiredCommentsShape a sh:NodeShape ; sh:severity sh:Info ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Ensure that every TripleRule must have an rdfs:comment. "^^xsd:string ; - sh:message "s223: The TripleRule inferring {?pred} for Class {$this} must have an rdfs:comment."^^xsd:string ; + rdfs:comment "Ensure that every SPARQLRule must have an rdfs:comment. "^^xsd:string ; + sh:message "s223: Every SPARQLRule for Class {$this} must have an rdfs:comment."^^xsd:string ; sh:prefixes ; sh:select """ -SELECT $this ?pred +SELECT $this WHERE { $this sh:rule ?rule . -?rule a sh:TripleRule . -?rule sh:predicate ?pred . +?rule a sh:SPARQLRule . FILTER NOT EXISTS {?rule rdfs:comment ?comment} . } """^^xsd:string ], @@ -2298,61 +2298,62 @@ 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 SPARQLConstraint for path {?path} for Class {$this} must have an rdfs:comment."^^xsd:string ; + rdfs:comment "Ensure that every TripleRule must have an rdfs:comment. "^^xsd:string ; + sh:message "s223: The TripleRule inferring {?pred} for Class {$this} must have an rdfs:comment."^^xsd:string ; sh:prefixes ; sh:select """ -SELECT $this ?path +SELECT $this ?pred 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:TripleRule . +?rule sh:predicate ?pred . +FILTER NOT EXISTS {?rule rdfs:comment ?comment} . } """^^xsd:string ], [ a sh:SPARQLConstraint ; - rdfs:comment "Every class of the 223 standard must have an rdfs:comment. "^^xsd:string ; - sh:message "s223: Class {$this} must have an rdfs:comment."^^xsd:string ; + rdfs:comment "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:comment ?comment} . +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 SPARQLRule must have an rdfs:comment. "^^xsd:string ; - sh:message "s223: Every SPARQLRule for Class {$this} must have an rdfs:comment."^^xsd:string ; + rdfs:comment "Every class of the 223 standard must have an rdfs:comment. "^^xsd:string ; + sh:message "s223: Class {$this} must have an rdfs:comment."^^xsd:string ; sh:prefixes ; sh:select """ SELECT $this WHERE { -$this sh:rule ?rule . -?rule a sh:SPARQLRule . -FILTER NOT EXISTS {?rule rdfs:comment ?comment} . +FILTER NOT EXISTS {$this rdfs:comment ?comment} . } """^^xsd:string ], [ a sh:SPARQLConstraint ; rdfs:comment "Ensure that any property shape must have an rdfs:comment. "^^xsd:string ; - sh:message "s223: The property shape with path {?path} for Class {$this} must have an rdfs:comment."^^xsd:string ; + sh:message "s223: The SPARQLConstraint for path {?path} for Class {$this} must have an rdfs:comment."^^xsd:string ; sh:prefixes ; sh:select """ SELECT $this ?path WHERE { $this sh:property ?propshape . +?propshape sh:sparql ?sparqlconstraint . ?propshape sh:path ?path . -FILTER NOT EXISTS {?propshape rdfs:comment ?comment} . +FILTER NOT EXISTS {?sparqlconstraint rdfs:comment ?comment} . } """^^xsd:string ], [ a sh:SPARQLConstraint ; - rdfs:comment "Every class of the 223 standard must be a direct or indirect subclass of s223:Concept. "^^xsd:string ; - sh:message "s223: Class {$this} must be within the rdfs:subClassOf hierarchy under s223:Concept."^^xsd:string ; + rdfs:comment "Ensure that 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 ] ; sh:targetClass s223:Class . @@ -2461,16 +2462,16 @@ s223:TwoWayValve a s223:Class, rdfs:label "Two way valve"^^xsd:string ; rdfs:comment "A Valve that can divert a fluid in one of two directions."^^xsd:string ; rdfs:subClassOf s223:Valve ; - sh:property [ rdfs:comment "A TwoWayValve shall have at least one inlet."^^xsd:string ; + sh:property [ rdfs:comment "A TwoWayValve shall have at least one outlet."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ], - [ rdfs:comment "A TwoWayValve shall have at least one outlet."^^xsd:string ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ], + [ rdfs:comment "A TwoWayValve shall have at least one inlet."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ] . + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ] . s223:ValveCPShape a sh:NodeShape ; rdfs:label "Valve"^^xsd:string ; @@ -2501,16 +2502,16 @@ 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 outlet 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 outlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ] ], - [ 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 ; @@ -2651,8 +2652,6 @@ s223:inverseOf a rdf:Property ; owl:versionInfo "Created with TopBraid Composer"^^xsd:string . - owl:versionInfo "Created with TopBraid Composer"^^xsd:string . - rdfs:label "QUDT SCHEMA Facade graph - v2.1.37"^^xsd:string ; rdfs:comment "Facade graph for single place to redirect QUDT schema imports. Note that currently, the functions import uses SPIN and OWL."^^xsd:string ; owl:versionInfo "Created with TopBraid Composer"^^xsd:string . @@ -2671,7 +2670,7 @@ ns1:AbstractQuantityKind-skos_broader rdfs:isDefinedBy . ns1:Citation-qudt_description rdfs:isDefinedBy ; @@ -2760,7 +2759,7 @@ ns1:ISO8601-UTCDateTime-BasicFormat a ns1:DateTimeStringEncodingType ; ns1:LittleEndian a ns1:EndianType ; rdfs:label "Little Endian"^^xsd:string ; - ns6:literal "little"^^xsd:string ; + ns3:literal "little"^^xsd:string ; rdfs:isDefinedBy . ns1:PhysicalConstant-qudt_latexSymbol rdfs:isDefinedBy ; @@ -19919,10 +19918,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 ; @@ -19961,7 +19957,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, @@ -20129,7 +20128,14 @@ s223:PowerAndSignal-PoE a s223:Class, s223:ofConstituent s223:Signal-Ethernet ] ; rdfs:comment "This class has enumerated subclasses of Power over Ethernet."^^xsd:string ; rdfs:subClassOf s223:Mix-PowerAndSignal ; - sh:property [ rdfs:comment "There must be at least two Properties that characterize the constituents of Power over Ethernet."^^xsd:string ; + sh:property [ rdfs:comment "One of the constituents of PoE must be Ethernet."^^xsd:string ; + sh:path s223:composedOf ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:Property ; + sh:node [ sh:property [ rdfs:comment "One of the constituents of PoE must be Ethernet."^^xsd:string ; + sh:class s223:Signal-Ethernet ; + sh:path s223:ofConstituent ] ] ] ], + [ rdfs:comment "There must be at least two Properties that characterize the constituents of Power over Ethernet."^^xsd:string ; sh:class s223:Property ; sh:minCount 2 ; sh:path s223:composedOf ], @@ -20139,13 +20145,6 @@ s223:PowerAndSignal-PoE a s223:Class, sh:qualifiedValueShape [ sh:class s223:Property ; sh:node [ sh:property [ rdfs:comment "One of the constituents of PoE must be DC electrical power."^^xsd:string ; sh:class s223:Electricity-DC ; - sh:path s223:ofConstituent ] ] ] ], - [ rdfs:comment "One of the constituents of PoE must be Ethernet."^^xsd:string ; - sh:path s223:composedOf ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:Property ; - sh:node [ sh:property [ rdfs:comment "One of the constituents of PoE must be Ethernet."^^xsd:string ; - sh:class s223:Signal-Ethernet ; sh:path s223:ofConstituent ] ] ] ] . s223:Presence-False a s223:Class, @@ -20407,18 +20406,18 @@ s223:Substance-Soot a s223:Class, s223:System a s223:Class, sh:NodeShape ; rdfs:label "System"^^xsd:string ; - rdfs:comment "A System is a logical grouping (collection) of Equipment for some functional or system reason, such as a chilled water system, or HVAC system. A System does not participate in Connections."^^xsd:string ; + rdfs:comment "A System is a logical grouping (collection) of Equipment for some functional purpose, 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-ChilledWater a s223:Class, s223:Water-ChilledWater, @@ -21479,7 +21478,7 @@ ns1:QuantityKindDimensionVector-latexSymbol a sh:PropertyShape ; ns1:QuantityType-value a sh:PropertyShape ; rdfs:isDefinedBy ; sh:class ns1:QuantityKind ; - sh:path ns6:value . + sh:path ns3:value . ns1:QuantityValue-hasUnit a sh:PropertyShape ; rdfs:isDefinedBy ; @@ -21513,7 +21512,7 @@ ns1:Rule-ruleType a sh:PropertyShape ; ns1:SIGNED a ns1:SignednessType ; rdfs:label "Signed"^^xsd:string ; - ns6:literal "signed"^^xsd:string ; + ns3:literal "signed"^^xsd:string ; rdfs:isDefinedBy . ns1:ScalarDatatype-bits a sh:PropertyShape ; @@ -21697,7 +21696,7 @@ ns1:TotallyOrdered a ns1:OrderedType ; ns1:UNSIGNED a ns1:SignednessType ; rdfs:label "Unsigned"^^xsd:string ; - ns6:literal "unsigned"^^xsd:string ; + ns3:literal "unsigned"^^xsd:string ; rdfs:isDefinedBy . ns1:Unit-applicableSystem a sh:PropertyShape ; @@ -22136,37 +22135,6 @@ ns1:imageLocation a rdf:Property ; rdfs:label "image location"^^xsd:string ; rdfs:isDefinedBy . -ns1:inferredApplicableUnit a ns4:MagicProperty ; - rdfs:label "applicable units for a QuantityKind instance"^^xsd:string ; - ns4:body [ a ns3:Select ; - ns3:distinct true ; - ns3:resultVariables ( [ ns3:varName "unit"^^xsd:string ] ) ; - ns3:where ( [ a ns3:Union ; - ns3:elements ( ( [ ns3:object ns4:_arg1 ; - ns3:predicate ns1:hasQuantityKind ; - ns3:subject [ ns3:varName "unit"^^xsd:string ] ] [ ns3:object ns1:Unit ; - ns3:predicate rdf:type ; - ns3:subject [ ns3:varName "unit"^^xsd:string ] ] ) ( [ a ns3:NotExists ; - ns3:elements ( [ ns3:object ns4:_arg1 ; - ns3:predicate ns1:hasQuantityKind ; - ns3:subject [ ns3:varName "unit"^^xsd:string ] ] [ ns3:object ns1:Unit ; - ns3:predicate rdf:type ; - ns3:subject [ ns3:varName "unit"^^xsd:string ] ] ) ] [ ns3:object [ ns3:varName "parent1"^^xsd:string ] ; - ns3:predicate skos:broader ; - ns3:subject ns4:_arg1 ] [ ns3:object [ ns3:varName "unit"^^xsd:string ] ; - ns3:predicate ns1:inferredApplicableUnit ; - ns3:subject [ ns3:varName "parent1"^^xsd:string ] ] ) ) ] ) ] ; - ns4:constraint [ a ns5:Argument ; - ns5:predicate ns3:arg1 ; - ns5:valueType ns1:QuantityKind ; - rdfs:comment "The QuantityKind instance"^^xsd:string ] ; - ns4: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 . - ns1:javaName a rdf:Property ; rdfs:label "java name"^^xsd:string ; rdfs:isDefinedBy . @@ -51282,14 +51250,14 @@ s223:AbstractSensor a s223:Class, s223:abstract true ; rdfs:comment "This is an abstract class that represents properties that are common to all sensor types."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "If the relation hasMeasurementResolution is present it must associate the AbstractSensor with a QuantifiableProperty."^^xsd:string ; - sh:class s223:QuantifiableProperty ; - sh:path s223:hasMeasurementResolution ], - [ rdfs:comment "An AbstractSensor must be associated with exactly one ObservableProperty using the relation observes."^^xsd:string ; + sh:property [ rdfs:comment "An AbstractSensor must be associated with exactly one ObservableProperty using the relation observes."^^xsd:string ; sh:class s223:ObservableProperty ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:observes ] . + sh:path s223:observes ], + [ rdfs:comment "If the relation hasMeasurementResolution is present it must associate the AbstractSensor with a QuantifiableProperty."^^xsd:string ; + sh:class s223:QuantifiableProperty ; + sh:path s223:hasMeasurementResolution ] . s223:Aspect-Effectiveness a s223:Aspect-Effectiveness, s223:Class, @@ -51467,13 +51435,7 @@ s223:EnumerableProperty a s223:Class, rdfs:label "Enumerable Property"^^xsd:string ; rdfs:comment "An EnumerableProperty is a property with an enumerated (fixed) set of possible values."^^xsd:string ; rdfs:subClassOf s223:Property ; - sh:property [ rdfs:comment "An EnumerableProperty must be associated with exactly one EnumerationKind using the relation hasEnumerationKind."^^xsd:string ; - sh:class s223:EnumerationKind ; - sh:maxCount 1 ; - sh:message "s223: An EnumerableProperty must be associated with exactly one EnumerationKind using the relation hasEnumerationKind."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasEnumerationKind ], - [ rdfs:comment "Checks for valid enumeration value consistent with the stated EnumerationKind."^^xsd:string ; + sh:property [ rdfs:comment "Checks for valid enumeration value consistent with the stated EnumerationKind."^^xsd:string ; sh:path s223:hasValue ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "Checks for valid enumeration value consistent with the stated EnumerationKind."^^xsd:string ; @@ -51486,7 +51448,13 @@ $this s223:hasValue ?value . $this s223:hasEnumerationKind ?kind . FILTER (NOT EXISTS {?value a/rdfs:subClassOf* ?kind}) . } -"""^^xsd:string ] ] . +"""^^xsd:string ] ], + [ rdfs:comment "An EnumerableProperty must be associated with exactly one EnumerationKind using the relation hasEnumerationKind."^^xsd:string ; + sh:class s223:EnumerationKind ; + sh:maxCount 1 ; + sh:message "s223: An EnumerableProperty must be associated with exactly one EnumerationKind using the relation hasEnumerationKind."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasEnumerationKind ] . s223:ExternalReference a s223:Class, sh:NodeShape ; @@ -51526,31 +51494,7 @@ is separated into three or more separate Connections, all tied together with the Junction is a subClassOf Connectable, which gives it the ability to have connection points, but unlike Equipment (and like Connection) it is not allowed to change the Medium that passes through it. This is why Junction is a sibling class to Equipment and not a subclass."""^^xsd:string ; rdfs:subClassOf s223:Connectable ; - sh:property [ rdfs:comment "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 "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; + sh:property [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; sh:name "Test for compatible declared Medium"^^xsd:string ; sh:path s223:hasMedium ; sh:sparql [ a sh:SPARQLConstraint ; @@ -51599,11 +51543,17 @@ $this s223:hasMedium ?m2 . } } """^^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 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 ; + 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 """ @@ -51614,41 +51564,29 @@ $this s223:cnx ?cp1 . ?cp1 s223:hasMedium ?m1 . $this s223:cnx ?cp2 . ?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . +FILTER (?cp1 != ?cp2 ) . ?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} . - } +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 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 ; + [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; sh:name "Test for compatible declared Medium"^^xsd:string ; sh:path s223:hasMedium ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 3: Junction with a pure medium and an associated ConnectionPoint with constituents."^^xsd:string ; - sh:message "s223: Junction {$this} with Medium {?m1} is incompatible with {?cp} with Medium {?m2}."^^xsd:string ; + rdfs:comment "Inconsistent Medium. Case 2: 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 ?m2 . -$this s223:hasMedium ?m1 . +?cp s223:hasMedium ?m1 . +$this s223:hasMedium ?m2 . ?m2 s223:composedOf/s223:ofConstituent ?s2 . FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . FILTER NOT EXISTS { @@ -51657,20 +51595,22 @@ FILTER NOT EXISTS { } } """^^xsd:string ] ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; + [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; sh:name "Test for compatible declared Medium"^^xsd:string ; sh:path s223:hasMedium ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 2: A 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 ; + rdfs:comment "Inconsistent Medium. Case 2: Two ConnectionPoints with a medium with constituents and a pure Medium."^^xsd:string ; + sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; sh:prefixes ; sh:select """ -SELECT $this ?m2 ?cp ?m1 +SELECT $this ?cp1 ?m1 ?cp2 ?m2 WHERE { -$this s223:cnx ?cp . -?cp a/rdfs:subClassOf* s223:ConnectionPoint . -?cp s223:hasMedium ?m1 . -$this s223:hasMedium ?m2 . +$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 { @@ -51683,7 +51623,7 @@ FILTER NOT EXISTS { 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 ; + 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 """ @@ -51694,13 +51634,41 @@ $this s223:cnx ?cp1 . ?cp1 s223:hasMedium ?m1 . $this s223:cnx ?cp2 . ?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . -FILTER (?cp1 != ?cp2 ) . ?cp2 s223:hasMedium ?m2 . -FILTER (?m1 != ?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 ?c2} -FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . -FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . +FILTER NOT EXISTS { + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . +} } """^^xsd:string ] ] . @@ -51751,8 +51719,7 @@ s223:Voltage-0V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "0V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-10000V a s223:Class, s223:Voltage-10000V, @@ -51762,8 +51729,7 @@ s223:Voltage-10000V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "10000V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-110V a s223:Class, s223:Voltage-110V, @@ -51773,8 +51739,7 @@ s223:Voltage-110V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "110V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-120V a s223:Class, s223:Voltage-120V, @@ -51784,8 +51749,7 @@ s223:Voltage-120V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "120V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-127V a s223:Class, s223:Voltage-127V, @@ -51795,8 +51759,7 @@ s223:Voltage-127V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "127V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-139V a s223:Class, s223:Voltage-139V, @@ -51806,8 +51769,7 @@ s223:Voltage-139V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "139V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-1730V a s223:Class, s223:Voltage-1730V, @@ -51817,8 +51779,7 @@ s223:Voltage-1730V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "1730V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-1900V a s223:Class, s223:Voltage-1900V, @@ -51828,8 +51789,7 @@ s223:Voltage-1900V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "1900V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-219V a s223:Class, s223:Voltage-219V, @@ -51839,8 +51799,7 @@ s223:Voltage-219V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "219V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-220V a s223:Class, s223:Voltage-220V, @@ -51850,8 +51809,7 @@ s223:Voltage-220V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "220V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-231V a s223:Class, s223:Voltage-231V, @@ -51861,8 +51819,7 @@ s223:Voltage-231V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "231V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-2400V a s223:Class, s223:Voltage-2400V, @@ -51872,8 +51829,7 @@ s223:Voltage-2400V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "2400V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-277V a s223:Class, s223:Voltage-277V, @@ -51883,8 +51839,7 @@ s223:Voltage-277V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "277V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-3000V a s223:Class, s223:Voltage-3000V, @@ -51894,8 +51849,7 @@ s223:Voltage-3000V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "3000V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-3300V a s223:Class, s223:Voltage-3300V, @@ -51905,8 +51859,7 @@ s223:Voltage-3300V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "3300V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-3460V a s223:Class, s223:Voltage-3460V, @@ -51916,8 +51869,7 @@ s223:Voltage-3460V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "3460V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-347V a s223:Class, s223:Voltage-347V, @@ -51927,8 +51879,7 @@ s223:Voltage-347V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "347V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-3810V a s223:Class, s223:Voltage-3810V, @@ -51938,8 +51889,7 @@ s223:Voltage-3810V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "3810V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-400V a s223:Class, s223:Voltage-400V, @@ -51949,8 +51899,7 @@ s223:Voltage-400V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "400V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-415V a s223:Class, s223:Voltage-415V, @@ -51960,8 +51909,7 @@ s223:Voltage-415V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "415V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-4160V a s223:Class, s223:Voltage-4160V, @@ -51971,8 +51919,7 @@ s223:Voltage-4160V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "4160V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-480V a s223:Class, s223:Voltage-480V, @@ -51982,8 +51929,7 @@ s223:Voltage-480V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "480V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-5770V a s223:Class, s223:Voltage-5770V, @@ -51993,8 +51939,7 @@ s223:Voltage-5770V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "5770V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-6000V a s223:Class, s223:Voltage-6000V, @@ -52004,8 +51949,7 @@ s223:Voltage-6000V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "6000V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-600V a s223:Class, s223:Voltage-600V, @@ -52015,8 +51959,7 @@ s223:Voltage-600V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "600V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-6600V a s223:Class, s223:Voltage-6600V, @@ -52026,25 +51969,24 @@ s223:Voltage-6600V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "6600V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:ZoneGroup a s223:Class, sh:NodeShape ; 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 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:property [ 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 ] ; + 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: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 ) ] ; @@ -59313,7 +59255,8 @@ s223:Medium-Mix a s223:Class, s223:ObservableProperty a s223:Class, sh:NodeShape ; rdfs:label "Observable Property"^^xsd:string ; - rdfs:comment "This class describes non-numeric properties of which real-time value cannot be modified by a user or a machine outside of the model. Sensor readings are typically observable properties as their values naturally fluctuate, but are not meant to be modified by a user."^^xsd:string ; + rdfs:comment """This class describes the superset of properties (both numeric and non-numeric) for which the real-time value is observed. +Sensor readings are typically observable properties as their values naturally fluctuate, but are not meant to be modified by a user."""^^xsd:string ; rdfs:subClassOf s223:Property . s223:OccupancySensor a s223:Class, @@ -59327,12 +59270,12 @@ s223:PhysicalSpace a s223:Class, rdfs:label "Physical Space"^^xsd:string ; rdfs:comment "A PhysicalSpace is an architectural concept representing a room, a collection of rooms such as a floor, a part of a room, or any physical space that might not even be thought of as a room, such as a patio space or a roof."^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "If the relation encloses is present it must associate the PhysicalSpace with a DomainSpace."^^xsd:string ; - sh:class s223:DomainSpace ; - sh:path s223:encloses ], - [ rdfs:comment "If the relation contains is present it must associate the PhysicalSpace with a PhysicalSpace."^^xsd:string ; + sh:property [ rdfs:comment "If the relation contains is present it must associate the PhysicalSpace with a PhysicalSpace."^^xsd:string ; sh:class s223:PhysicalSpace ; - sh:path s223:contains ] . + sh:path s223:contains ], + [ rdfs:comment "If the relation encloses is present it must associate the PhysicalSpace with a DomainSpace."^^xsd:string ; + sh:class s223:DomainSpace ; + sh:path s223:encloses ] . s223:Role-Controller a s223:Class, s223:Role-Controller, @@ -59356,8 +59299,7 @@ s223:Voltage-208V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "208V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-240V a s223:Class, s223:Voltage-240V, @@ -59367,8 +59309,7 @@ s223:Voltage-240V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "240V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-2V a s223:Class, s223:Voltage-2V, @@ -59378,8 +59319,7 @@ s223:Voltage-2V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "2V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-3V a s223:Class, s223:Voltage-3V, @@ -59389,8 +59329,7 @@ s223:Voltage-3V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "3V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Water-GlycolSolution a s223:Class, s223:Water-GlycolSolution, @@ -59411,16 +59350,26 @@ 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 "One of the constituents of a Water-GlycolSolution must be Constituent-H2O."^^xsd:string ; + 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: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-H2O."^^xsd:string ; + sh:node [ sh:property [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-H2O."^^xsd:string ; sh:hasValue s223:Constituent-H2O ; - sh:path s223:ofConstituent ] ] ] ], + 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 "One of the constituents of a Water-GlycolSolution must be Constituent-Glycol."^^xsd:string ; sh:path s223:composedOf ; sh:qualifiedMinCount 1 ; @@ -59430,29 +59379,14 @@ s223:Water-GlycolSolution a s223:Class, sh:path ns1:hasQuantityKind ], [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-Glycol."^^xsd:string ; sh:hasValue s223:Constituent-Glycol ; - sh:path s223:ofConstituent ] ] ] ], - [ 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 ] . + sh:path s223:ofConstituent ] ] ] ] . s223:Zone a s223:Class, sh:NodeShape ; rdfs:label "Zone"^^xsd:string ; rdfs:comment "A Zone is a logical grouping (collection) of domain spaces for some functional or system reason, to identify a domain of control, such as a Lighting Zone, or a heating zone"^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "A Zone must be associated with 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 "The associated Domain of a Zone and the Domain of the DomainSpaces it contains must be the same."^^xsd:string ; + sh:property [ rdfs:comment "The associated Domain of a Zone and the Domain of the DomainSpaces it contains must be the same."^^xsd:string ; sh:path s223:hasDomain ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "The associated Domain of a Zone and the Domain of the DomainSpaces it contains must be the same."^^xsd:string ; @@ -59468,6 +59402,11 @@ $this s223:contains ?ds . FILTER (?domain != ?dsdomain) } """^^xsd:string ] ], + [ rdfs:comment "A Zone must be associated with at least one DomainSpace using the relation hasDomainSpace."^^xsd:string ; + sh:class s223:DomainSpace ; + sh:message "s223: A Zone must be associated with at least one DomainSpace using the relation hasDomainSpace."^^xsd:string ; + 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 ; @@ -59562,7 +59501,7 @@ ns1:informativeReference a rdf:Property ; ns1:literal a rdf:Property ; rdfs:label "literal"^^xsd:string ; rdfs:isDefinedBy ; - rdfs:subPropertyOf ns6:literal . + rdfs:subPropertyOf ns3:literal . ns1:mathMLdefinition a rdf:Property ; rdfs:label "mathML definition"^^xsd:string ; @@ -67637,12 +67576,12 @@ s223:Function a s223:Class, rdfs:label "Function"^^xsd:string ; rdfs:comment "A Function is used to model transfer and/or transformation of information (i.e. Property). It has relations to input Properties and output Properties. The actual algorithms that perform the transformations are described in CDL and are out of scope of the 223 standard."^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "If the relation hasInput is present it must associate a Function with a Property."^^xsd:string ; + sh:property [ rdfs:comment "If the relation hasOutput is present it must associate a Function with a Property."^^xsd:string ; sh:class s223:Property ; - sh:path s223:hasInput ], - [ rdfs:comment "If the relation hasOutput is present it must associate a Function with a Property."^^xsd:string ; + sh:path s223:hasOutput ], + [ rdfs:comment "If the relation hasInput is present it must associate a Function with a Property."^^xsd:string ; sh:class s223:Property ; - sh:path s223:hasOutput ] . + sh:path s223:hasInput ] . s223:LineNeutralVoltage-110V a s223:Class, s223:LineNeutralVoltage-110V, @@ -67843,8 +67782,7 @@ s223:Voltage-12V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "12V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-190V a s223:Class, s223:Voltage-190V, @@ -67854,8 +67792,7 @@ s223:Voltage-190V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "190V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-48V a s223:Class, s223:Voltage-48V, @@ -67865,8 +67802,7 @@ s223:Voltage-48V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "48V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-5V a s223:Class, s223:Voltage-5V, @@ -67876,8 +67812,7 @@ s223:Voltage-5V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "5V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-6V a s223:Class, s223:Voltage-6V, @@ -67887,8 +67822,7 @@ s223:Voltage-6V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "6V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:connectedFrom a rdf:Property ; rdfs:label "connected from"^^xsd:string ; @@ -72109,12 +72043,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, @@ -72147,8 +72081,7 @@ s223:Voltage-24V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "24V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:Voltage-380V a s223:Class, s223:Voltage-380V, @@ -72158,8 +72091,7 @@ s223:Voltage-380V a s223:Class, ns1:hasQuantityKind ; ns1:hasUnit ; rdfs:comment "380V Voltage"^^xsd:string ; - rdfs:subClassOf s223:Numerical-Voltage, - s223:QuantifiableProperty . + rdfs:subClassOf s223:Numerical-Voltage . s223:connectsThrough a rdf:Property ; rdfs:label "connects through"^^xsd:string ; @@ -74027,7 +73959,7 @@ s223:QuantifiableActuatableProperty a s223:Class, 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:comment "This class is for quantifiable properties of which numerical values are observed, like a temperature reading or a voltage measure."^^xsd:string ; rdfs:subClassOf s223:ObservableProperty, s223:QuantifiableProperty ; sh:property [ rdfs:comment "A QuantifiableObservableProperty can be associated with zero or more QuantifiableActuatableProperty(s) indicating the desired value(s) which the control process is trying to maintain using the relation hasSetpoint."^^xsd:string ; @@ -75381,18 +75313,18 @@ s223:EnumerationKind-Numerical a s223:Class, ns1:hasUnit ; rdfs:comment "Numerical enumeration kinds are used to support the definitions of the Electricity medium. The enumerations instances in these classes have names that are recognizable by humans but are just a string for a computer application. To avoid the need to parse strings, each of these enumeration kinds have properties associated with the enumeration that represent electrical phase, voltage, and frequency. The purpose of these properties is to enable a machine to query them and obtain the same information that a person would associate with the sting"^^xsd:string ; rdfs:subClassOf s223:EnumerationKind ; - sh:property [ rdfs:comment "An EnumerationKind-Numerical must be associated with at least one QuantityKind using the relation hasQuantityKind."^^xsd:string ; + sh:property [ rdfs:comment "An EnumerationKind-Numerical must be associated with at least one Unit using the relation hasUnit."^^xsd:string ; + sh:class ns1:Unit ; + sh:minCount 1 ; + sh:path ns1:hasUnit ; + sh:severity sh:Info ], + [ rdfs:comment "An EnumerationKind-Numerical must be associated with at least one QuantityKind using the relation hasQuantityKind."^^xsd:string ; sh:class ns1:QuantityKind ; sh:minCount 1 ; sh:path ns1:hasQuantityKind ], [ rdfs:comment "An EnumerationKind-Numerical 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 ] . + sh:path s223:hasValue ] . s223:EnumerationKind-Occupancy a s223:Class, s223:EnumerationKind-Occupancy, @@ -77282,7 +77214,16 @@ UNION """^^xsd:string ; sh:name "InferredMeasurementLocation"^^xsd:string ; sh:prefixes ] ; - sh:xone ( [ sh:property [ rdfs:comment "A Sensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocation."^^xsd:string ; + sh:xone ( [ sh:property [ rdfs:comment "A Sensor must be associated with exactly 1 of QuantifiableObservableProperty or EnumeratedObservableProperty using the relation observes."^^xsd:string ; + sh:class s223:QuantifiableObservableProperty ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path s223:observes ] ] [ sh:property [ rdfs:comment "A Sensor must be associated with exactly 1 of QuantifiableObservableProperty or EnumeratedObservableProperty using the relation observes."^^xsd:string ; + sh:class s223:EnumeratedObservableProperty ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path s223:observes ] ] ), + ( [ sh:property [ rdfs:comment "A Sensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocation."^^xsd:string ; sh:class s223:Connectable ; sh:maxCount 1 ; sh:minCount 1 ; @@ -77294,16 +77235,7 @@ UNION sh:class s223:ConnectionPoint ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasObservationLocation ] ] ), - ( [ sh:property [ rdfs:comment "A Sensor must be associated with exactly 1 of QuantifiableObservableProperty or EnumeratedObservableProperty using the relation observes."^^xsd:string ; - sh:class s223:QuantifiableObservableProperty ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:observes ] ] [ sh:property [ rdfs:comment "A Sensor must be associated with exactly 1 of QuantifiableObservableProperty or EnumeratedObservableProperty using the relation observes."^^xsd:string ; - sh:class s223:EnumeratedObservableProperty ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:observes ] ] ) . + sh:path s223:hasObservationLocation ] ] ) . s223:composedOf a rdf:Property ; rdfs:label "composed of"^^xsd:string ; @@ -79181,83 +79113,27 @@ s223:Aspect-ElectricalPhaseIdentifier a s223:Aspect-ElectricalPhaseIdentifier, s223:Connection a s223:Class, sh:NodeShape ; rdfs:label "Connection"^^xsd:string ; - rdfs:comment """A Connection is the modeling construct used to represent a physical thing (e.g., pipe, duct, or wire) that is used to convey some Medium (e.g., water, air, or electricity), or a virtual connection to convey electromagnetic radiation (e.g. light or wifi signal) between two connectable things. All Connections have two or more ConnectionPoints bound to either Equipment (see `s223:Equipment`), DomainSpace (see `s223:DomainSpace`), or Junction (see `s223:Junction`) See Figure 6-2. If the direction of flow is constrained, that constraint is indicated by using one or more InletConnectionPoints (see `s223:InletConnectionPoint`) to represent the inflow points and OutletConnectionPoints (see `s223:OutletConnectionPoint`) to represent the outflow points. + rdfs:comment """A Connection is the modeling construct used to represent the thing (e.g., pipe, duct, wire, or free space) that is used to convey +some Medium (e.g., water, air, electricity, light, wi-fi) between two connectable things. All Connections have two or more ConnectionPoints bound +to either Equipment (see `s223:Equipment`), DomainSpace (see `s223:DomainSpace`), or Junction (see `s223:Junction`) See Figure 6-2. If the direction +of flow is constrained, that constraint is indicated by using one or more InletConnectionPoints (see `s223:InletConnectionPoint`) to represent the +inflow points and OutletConnectionPoints (see `s223:OutletConnectionPoint`) to represent the outflow points. -A Connection may contain branches or intersections. These may be modeled using Junctions if it is necessary to identify a specific intersection. (see `s223:Junction`). +A Connection may contain branches or intersections. These may be modeled using Junctions if it is necessary to identify a specific intersection. +(see `s223:Junction`). ![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) """^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "A Connection must have two or more cnx relations to ConnectionPoints"^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:message "s223: A Connection must have two or more cnx relations to ConnectionPoints"^^xsd:string ; - sh:minCount 2 ; - sh:path s223:cnx ; - sh:severity sh:Warning ], - [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 2: A medium with constituents and a pure Medium."^^xsd:string ; - sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?cp1 ?m1 ?cp2 ?m2 -WHERE { -$this s223:cnx ?cp1 . -?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . -?cp1 s223:hasMedium ?m1 . -$this s223:cnx ?cp2 . -?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . -FILTER (?cp1 != ?cp2 ) . -?cp2 s223:hasMedium ?m2 . -?m2 s223:composedOf/s223:ofConstituent ?s2 . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS { - ?m2 s223:composedOf/s223:ofConstituent ?s12 . - {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . -} -} -"""^^xsd:string ] ], - [ rdfs:comment "If the relation 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 all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 3: Two ConnectionPoints with mediums with constituents."^^xsd:string ; - sh:message "s223: {?cp1} with Medium {?m2} is incompatible with {?cp2} with Medium {?m1}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?cp1 ?m1 ?cp2 ?m2 -WHERE { -$this s223:cnx ?cp1 . -?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . -?cp1 s223:hasMedium ?m2 . -$this s223:cnx ?cp2 . -?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . -FILTER (?cp1 != ?cp2 ) . -?cp2 s223:hasMedium ?m1 . - ?m1 s223:composedOf/s223:ofConstituent ?s1 . - ?m2 s223:composedOf/s223:ofConstituent ?s2 . - FILTER NOT EXISTS { - ?m1 s223:composedOf/s223:ofConstituent ?s11 . - ?m2 s223:composedOf/s223:ofConstituent ?s12 . - FILTER (?s11 = ?s12) . - } - FILTER NOT EXISTS { - ?m1 s223:composedOf/s223:ofConstituent ?s21 . - ?m2 s223:composedOf/s223:ofConstituent ?s22 . - {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} . - } -} -"""^^xsd:string ] ], + sh:property [ rdfs:comment "If the relation connectsTo is present it must associate the Connection with a Connectable."^^xsd:string ; + sh:class s223:Connectable ; + sh:name "ConnectionToDownstreamConnectableShape"^^xsd:string ; + sh:path s223:connectsTo ], [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; sh:name "Test for compatible declared Medium"^^xsd:string ; sh:path s223:hasMedium ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 3: Connection with a pure medium and an associated ConnectionPoint with constituents."^^xsd:string ; + 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 """ @@ -79265,8 +79141,8 @@ SELECT $this ?m2 ?cp ?m1 WHERE { $this s223:cnx ?cp . ?cp a/rdfs:subClassOf* s223:ConnectionPoint . -?cp s223:hasMedium ?m2 . -$this s223:hasMedium ?m1 . +?cp s223:hasMedium ?m1 . +$this s223:hasMedium ?m2 . ?m2 s223:composedOf/s223:ofConstituent ?s2 . FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . FILTER NOT EXISTS { @@ -79279,7 +79155,7 @@ FILTER NOT EXISTS { 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 ; + rdfs:comment "Inconsistent Medium. Case 3: Connection with a pure medium and an associated ConnectionPoint with constituents."^^xsd:string ; sh:message "s223: Connection {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; sh:prefixes ; sh:select """ @@ -79287,8 +79163,8 @@ SELECT $this ?m2 ?cp ?m1 WHERE { $this s223:cnx ?cp . ?cp a/rdfs:subClassOf* s223:ConnectionPoint . -?cp s223:hasMedium ?m1 . -$this s223:hasMedium ?m2 . +?cp s223:hasMedium ?m2 . +$this s223:hasMedium ?m1 . ?m2 s223:composedOf/s223:ofConstituent ?s2 . FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . FILTER NOT EXISTS { @@ -79297,20 +79173,26 @@ FILTER NOT EXISTS { } } """^^xsd:string ] ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; + [ rdfs:comment "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 4: A Connection with constituents and an associated ConnectionPoint with constituents."^^xsd:string ; - sh:message "s223: Connection {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; + rdfs:comment "Inconsistent Medium. Case 3: Two ConnectionPoints with mediums with constituents."^^xsd:string ; + sh:message "s223: {?cp1} with Medium {?m2} is incompatible with {?cp2} with Medium {?m1}."^^xsd:string ; sh:prefixes ; sh:select """ -SELECT $this ?m2 ?cp ?m1 +SELECT $this ?cp1 ?m1 ?cp2 ?m2 WHERE { -$this s223:cnx ?cp . -?cp a/rdfs:subClassOf* s223:ConnectionPoint . -?cp s223:hasMedium ?m2 . -$this s223:hasMedium ?m1 . +$this s223:cnx ?cp1 . +?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . +?cp1 s223:hasMedium ?m2 . +$this s223:cnx ?cp2 . +?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . +FILTER (?cp1 != ?cp2 ) . +?cp2 s223:hasMedium ?m1 . ?m1 s223:composedOf/s223:ofConstituent ?s1 . ?m2 s223:composedOf/s223:ofConstituent ?s2 . FILTER NOT EXISTS { @@ -79325,14 +79207,25 @@ $this s223:hasMedium ?m1 . } } """^^xsd:string ] ], - [ rdfs:comment "If the relation connectsTo is present it must associate the Connection with a Connectable."^^xsd:string ; - sh:class s223:Connectable ; - sh:name "ConnectionToDownstreamConnectableShape"^^xsd:string ; - sh:path s223:connectsTo ], + [ rdfs:comment "A Connection must be associated with exactly one Substance-Medium using the relation hasMedium."^^xsd:string ; + sh:class s223:Substance-Medium ; + sh:maxCount 1 ; + sh:message "s223: A Connection must be associated with exactly one Substance-Medium using the relation hasMedium."^^xsd:string ; + sh:minCount 1 ; + sh:name "Connection medium"^^xsd:string ; + sh:path s223:hasMedium ], + [ rdfs:comment "If the relation hasThermodynamicPhase is present it must associate the Connection with at most one EnumerationKind-Phase."^^xsd:string ; + sh:class s223:EnumerationKind-Phase ; + sh:maxCount 1 ; + sh:message "s223: If the relation hasThermodynamicPhase is present it must associate the Connection with at most one EnumerationKind-Phase."^^xsd:string ; + sh:path s223:hasThermodynamicPhase ], [ rdfs:comment "If the relation 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 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 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 ; @@ -79356,9 +79249,31 @@ FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . } """^^xsd:string ] ], - [ rdfs:comment "If the relation connectsAt is present it must associate the Connection with a ConnectionPoint."^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:path s223:connectsAt ], + [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 2: A medium with constituents and a pure Medium."^^xsd:string ; + sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?cp1 ?m1 ?cp2 ?m2 +WHERE { +$this s223:cnx ?cp1 . +?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . +?cp1 s223:hasMedium ?m1 . +$this s223:cnx ?cp2 . +?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . +FILTER (?cp1 != ?cp2 ) . +?cp2 s223:hasMedium ?m2 . +?m2 s223:composedOf/s223:ofConstituent ?s2 . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS { + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . +} +} +"""^^xsd:string ] ], [ rdfs:comment "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 ; @@ -79380,13 +79295,6 @@ FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . } """^^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 "A Connection must only have a cnx relation with a ConnectionPoint"^^xsd:string ; sh:path s223:cnx ; sh:sparql [ a sh:SPARQLConstraint ; @@ -79398,23 +79306,46 @@ WHERE { $this s223:cnx ?something . FILTER NOT EXISTS {?something a/rdfs:subClassOf* s223:ConnectionPoint} . }"""^^xsd:string ] ], - [ rdfs:comment "If the relation hasThermodynamicPhase is present it must associate the Connection with at most one EnumerationKind-Phase."^^xsd:string ; - sh:class s223:EnumerationKind-Phase ; - sh:maxCount 1 ; - sh:message "s223: If the relation hasThermodynamicPhase is present it must associate the Connection with at most one EnumerationKind-Phase."^^xsd:string ; - sh:path s223:hasThermodynamicPhase ] ; - sh:rule [ a sh:SPARQLRule ; - rdfs:comment "Infer the connectsTo relation using connectsAt"^^xsd:string ; - sh:construct """ -CONSTRUCT {$this s223:connectsTo ?equipment .} + [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 4: A Connection with constituents and an associated ConnectionPoint with constituents."^^xsd:string ; + sh:message "s223: Connection {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?m2 ?cp ?m1 WHERE { -$this s223:connectsAt ?cp . -?cp a s223:InletConnectionPoint . -?cp s223:isConnectionPointOf ?equipment . +$this s223:cnx ?cp . +?cp a/rdfs:subClassOf* s223:ConnectionPoint . +?cp s223:hasMedium ?m2 . +$this s223:hasMedium ?m1 . + ?m1 s223:composedOf/s223:ofConstituent ?s1 . + ?m2 s223:composedOf/s223:ofConstituent ?s2 . + FILTER NOT EXISTS { + ?m1 s223:composedOf/s223:ofConstituent ?s11 . + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + FILTER (?s11 = ?s12) . + } + FILTER NOT EXISTS { + ?m1 s223:composedOf/s223:ofConstituent ?s21 . + ?m2 s223:composedOf/s223:ofConstituent ?s22 . + {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} . + } } -"""^^xsd:string ; - sh:name "InferredConnectionToDownstreamEquipmentProperty"^^xsd:string ; - sh:prefixes ], +"""^^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 ] ; + sh:rule [ a sh:TripleRule ; + rdfs:comment "Infer cnx relation using connectsAt"^^xsd:string, + "InferredConnectionToConnectionPointBaseProperty"^^xsd:string ; + sh:object [ sh:path s223:connectsAt ] ; + sh:predicate s223:cnx ; + sh:subject sh:this ], [ a sh:TripleRule ; rdfs:comment "Infer the connectsAt relation using cnx"^^xsd:string, "InferredConnectionToConnectionPointProperty"^^xsd:string ; @@ -79439,12 +79370,18 @@ $this s223:connectsAt ?cp . sh:object [ sh:path [ sh:inversePath s223:connectsThrough ] ] ; sh:predicate s223:cnx ; sh:subject sh:this ], - [ a sh:TripleRule ; - rdfs:comment "Infer cnx relation using connectsAt"^^xsd:string, - "InferredConnectionToConnectionPointBaseProperty"^^xsd:string ; - sh:object [ sh:path s223:connectsAt ] ; - sh:predicate s223:cnx ; - sh:subject sh:this ] . + [ a sh:SPARQLRule ; + rdfs:comment "Infer the connectsTo relation using connectsAt"^^xsd:string ; + sh:construct """ +CONSTRUCT {$this s223:connectsTo ?equipment .} +WHERE { +$this s223:connectsAt ?cp . +?cp a s223:InletConnectionPoint . +?cp s223:isConnectionPointOf ?equipment . +} +"""^^xsd:string ; + sh:name "InferredConnectionToDownstreamEquipmentProperty"^^xsd:string ; + sh:prefixes ] . s223:DCVoltage-DCNegativeVoltage a s223:Class, s223:DCVoltage-DCNegativeVoltage, @@ -82285,28 +82222,10 @@ 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 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 connectedTo is present it must associate the Connectable with a Connectable."^^xsd:string ; - sh:class s223:Connectable ; - sh:name "ConnectableToConnectableShape"^^xsd:string ; - sh:path s223:connectedTo ], - [ rdfs:comment "If the relation connected is present it must associate the Connectable with a Connectable."^^xsd:string ; + sh:property [ 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 connectedThrough is present it must associate the Connectable with a Connection."^^xsd:string ; - sh:class s223:Connection ; - sh:name "EquipmentToConnectionShape"^^xsd:string ; - sh:path s223:connectedThrough ], - [ rdfs:comment "If the relation connectedFrom is present it must associate the Connectable with a Connectable."^^xsd:string ; - sh:class s223:Connectable ; - sh:path s223:connectedFrom ], [ rdfs:comment "If a Connectable has s223:connected or s223:connectedTo (i.e. high-level connection specification), it must also have the supporting cnx relations (low-level connection specification)."^^xsd:string ; sh:path s223:cnx ; sh:severity sh:Warning ; @@ -82320,31 +82239,44 @@ WHERE { $this s223:connected ?otherC . FILTER NOT EXISTS {$this s223:cnx+ ?otherC} } -"""^^xsd:string ] ] ; - sh:rule [ 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 hasConnectionPoint relation using cnx"^^xsd:string ; - sh:name "InferredEquipmentToConnectionPointProperty"^^xsd:string ; - sh:object [ sh:path s223:cnx ] ; - sh:predicate s223:hasConnectionPoint ; - sh:subject sh:this ], - [ a sh:SPARQLRule ; - rdfs:comment "Infer the connectedFrom relations using connectsThrough and connectsFrom."^^xsd:string ; +"""^^xsd:string ] ], + [ rdfs:comment "If the relation connectedFrom is present it must associate the Connectable with a Connectable."^^xsd:string ; + sh:class s223:Connectable ; + sh:path s223:connectedFrom ], + [ rdfs:comment "If the relation connectedThrough is present it must associate the Connectable with a Connection."^^xsd:string ; + sh:class s223:Connection ; + sh:name "EquipmentToConnectionShape"^^xsd:string ; + sh:path s223:connectedThrough ], + [ rdfs:comment "If the relation 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 connectedTo is present it must associate the Connectable with a Connectable."^^xsd:string ; + sh:class s223:Connectable ; + sh:name "ConnectableToConnectableShape"^^xsd:string ; + sh:path s223:connectedTo ], + [ rdfs:comment "If the relation cnx is present it must associate the Connectable with a ConnectionPoint."^^xsd:string ; + sh:class s223:ConnectionPoint ; + sh:path s223:cnx ] ; + sh:rule [ a sh:SPARQLRule ; + rdfs:comment "Infer the connected relation for BiDirectional connections"^^xsd:string ; sh:construct """ -CONSTRUCT {$this s223:connectedFrom ?equipment .} +CONSTRUCT {$this s223:connected ?d2 .} WHERE { -$this s223:hasConnectionPoint ?cp . -?cp a s223:InletConnectionPoint . -?cp s223:connectsThrough/s223:connectsFrom ?equipment . +$this s223:connectedThrough/^s223:connectedThrough ?d2 . +FILTER ($this != ?d2) . +FILTER NOT EXISTS {$this s223:contains* ?d2} . +FILTER NOT EXISTS {?d2 s223:contains* $this} . } """^^xsd:string ; - sh:name "InferredEquipmentToUpstreamEquipmentProperty"^^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 connected relation using connectedFrom"^^xsd:string ; sh:name "InferredEquipmentToEquipmentPropertyfromconnectedFrom"^^xsd:string ; @@ -82352,36 +82284,23 @@ $this s223:hasConnectionPoint ?cp . sh:predicate s223:connected ; sh:subject sh:this ], [ a sh:TripleRule ; - rdfs:comment "Infer the cnx relationship using hasConnectionPoint."^^xsd:string ; - sh:name "InferredEquipmentToConnectionPointCnxProperty"^^xsd:string ; - sh:object [ sh:path s223:hasConnectionPoint ] ; - sh:predicate s223:cnx ; - sh:subject sh:this ], - [ a sh:TripleRule ; - rdfs:comment "Infer the 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 ; + rdfs:comment "Infer the hasConnectionPoint relation using cnx"^^xsd:string ; + sh:name "InferredEquipmentToConnectionPointProperty"^^xsd:string ; + sh:object [ sh:path s223:cnx ] ; + sh:predicate s223:hasConnectionPoint ; sh:subject sh:this ], [ a sh:SPARQLRule ; - rdfs:comment "Infer the connected relation for BiDirectional connections"^^xsd:string ; + rdfs:comment "Infer the connectedFrom relations using connectsThrough and connectsFrom."^^xsd:string ; sh:construct """ -CONSTRUCT {$this s223:connected ?d2 .} +CONSTRUCT {$this s223:connectedFrom ?equipment .} WHERE { -$this s223:connectedThrough/^s223:connectedThrough ?d2 . -FILTER ($this != ?d2) . -FILTER NOT EXISTS {$this s223:contains* ?d2} . -FILTER NOT EXISTS {?d2 s223:contains* $this} . +$this s223:hasConnectionPoint ?cp . +?cp a s223:InletConnectionPoint . +?cp s223:connectsThrough/s223:connectsFrom ?equipment . } """^^xsd:string ; - sh:name "InferredEquipmentToDownstreamEquipmentProperty"^^xsd:string ; + sh:name "InferredEquipmentToUpstreamEquipmentProperty"^^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:SPARQLRule ; rdfs:comment "Infer the connectedTo relation using connectsThrough and connectsTo."^^xsd:string ; sh:construct """ @@ -82393,7 +82312,25 @@ $this s223:hasConnectionPoint ?cp . } """^^xsd:string ; sh:name "InferredEquipmentToDownstreamEquipmentProperty"^^xsd:string ; - sh:prefixes ] . + sh:prefixes ], + [ a sh:TripleRule ; + rdfs:comment "Infer the connectedThrough relation using hasConnectionPoint and connectsThrough"^^xsd:string ; + sh:name "InferredEquipmentToConnectionProperty"^^xsd:string ; + sh:object [ sh:path ( s223:hasConnectionPoint s223:connectsThrough ) ] ; + sh:predicate s223:connectedThrough ; + sh:subject sh:this ], + [ a sh:TripleRule ; + rdfs:comment "Infer the cnx relationship using hasConnectionPoint."^^xsd:string ; + sh:name "InferredEquipmentToConnectionPointCnxProperty"^^xsd:string ; + sh:object [ sh:path s223:hasConnectionPoint ] ; + sh:predicate s223:cnx ; + sh:subject sh:this ], + [ a sh:TripleRule ; + rdfs:comment "Infer the 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 ] . s223:ConnectionPoint a s223:Class, sh:NodeShape ; @@ -82412,37 +82349,23 @@ ConnectionPoints are represented graphically in this standard by a triangle with """^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "A ConnectionPoint must not have both a mapsTo and a connectsThrough relation."^^xsd:string ; - sh:path s223:mapsTo ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "A ConnectionPoint must not have both a mapsTo and a connectsThrough relation."^^xsd:string ; - sh:message "s223: {$this} cannot have both a mapsTo {?uppercp} and a connectsThrough {?connection}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?uppercp ?connection -WHERE { -$this s223:mapsTo ?uppercp . -$this s223:connectsThrough ?connection . -?connection a/rdfs:subClassOf* s223:Connection . -} -"""^^xsd:string ] ], - [ rdfs:comment "If the relation hasRole is present it must associate the ConnectionPoint with an EnumerationKind-Role."^^xsd:string ; + sh:property [ rdfs:comment "If the relation hasRole is present it must associate the ConnectionPoint with an EnumerationKind-Role."^^xsd:string ; sh:class s223:EnumerationKind-Role ; sh:path s223:hasRole ], - [ rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, 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 ; + [ 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, and is not associated with a Junction or Equipment that is contained by an Equipment, then suggest that the ConnectionPoint probably needs an association with a Connection."^^xsd:string ; - sh:message "s223: ConnectionPoint {$this} probably needs an association with a Connection."^^xsd:string ; + 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 + SELECT $this ?containerEquipment WHERE { FILTER NOT EXISTS {$this s223:connectsThrough ?anything1} . FILTER NOT EXISTS {$this s223:mapsTo ?anything2} . $this s223:isConnectionPointOf ?equipment . - FILTER NOT EXISTS {?containerEquipment s223:contains ?equipment} . + ?containerEquipment s223:contains ?equipment . } """^^xsd:string ] ], [ rdfs:comment "A ConnectionPoint must be associated with at most one Connection using the relation connectsThrough."^^xsd:string ; @@ -82452,13 +82375,6 @@ $this s223:connectsThrough ?connection . sh:name "ConnectionPointToConnectionShape"^^xsd:string ; sh:path s223:connectsThrough ; sh:severity sh:Info ], - [ rdfs:comment "A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf."^^xsd:string ; - sh:class s223:Connectable ; - sh:maxCount 1 ; - sh:message "s223: A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf."^^xsd:string ; - sh:minCount 1 ; - sh:name "ConnectionPointToEquipmentShape"^^xsd:string ; - sh:path s223:isConnectionPointOf ], [ rdfs:comment "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 ; @@ -82478,6 +82394,20 @@ FILTER (?a != ?b ) . FILTER (NOT EXISTS {?b a/rdfs:subClassOf* ?a}) . FILTER (NOT EXISTS {?a a/rdfs:subClassOf* ?b}) . } +"""^^xsd:string ] ], + [ rdfs:comment "A ConnectionPoint must not have both a mapsTo and a connectsThrough relation."^^xsd:string ; + sh:path s223:mapsTo ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "A ConnectionPoint must not have both a mapsTo and a connectsThrough relation."^^xsd:string ; + sh:message "s223: {$this} cannot have both a mapsTo {?uppercp} and a connectsThrough {?connection}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?uppercp ?connection +WHERE { +$this s223:mapsTo ?uppercp . +$this s223:connectsThrough ?connection . +?connection a/rdfs:subClassOf* s223:Connection . +} """^^xsd:string ] ], [ rdfs:comment "A ConnectionPoint can be associated with at most one other ConnectionPoint using the relation mapsTo"^^xsd:string ; sh:class s223:ConnectionPoint ; @@ -82493,20 +82423,20 @@ FILTER (NOT EXISTS {?a a/rdfs:subClassOf* ?b}) . sh:qualifiedMaxCount 1 ; sh:qualifiedValueShape [ sh:class s223:Connectable ] ; sh:qualifiedValueShapesDisjoint true ], - [ 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 ; + [ rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, and is not associated with a Junction or Equipment that is contained by an Equipment, then suggest that the ConnectionPoint probably needs an association with a Connection."^^xsd:string ; + sh:path s223:connectsThrough ; sh:severity sh:Info ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, 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 ; + rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, and is not associated with a Junction or Equipment that is contained by an Equipment, then suggest that the ConnectionPoint probably needs an association with a Connection."^^xsd:string ; + sh:message "s223: ConnectionPoint {$this} probably needs an association with a Connection."^^xsd:string ; sh:prefixes ; sh:select """ - SELECT $this ?containerEquipment + SELECT $this WHERE { FILTER NOT EXISTS {$this s223:connectsThrough ?anything1} . FILTER NOT EXISTS {$this s223:mapsTo ?anything2} . $this s223:isConnectionPointOf ?equipment . - ?containerEquipment s223:contains ?equipment . + FILTER NOT EXISTS {?containerEquipment s223:contains ?equipment} . } """^^xsd:string ] ], [ rdfs:comment "If a ConnectionPoint mapsTo another ConnectionPoint, the respective Equipment should have a contains relation."^^xsd:string ; @@ -82524,6 +82454,19 @@ $this s223:mapsTo ?otherCP . FILTER NOT EXISTS {?otherEquipment s223:contains ?equipment} } """^^xsd:string ] ], + [ rdfs:comment "A ConnectionPoint must be associated with at most one Connection using the cnx relation"^^xsd:string ; + sh:message "s223: A ConnectionPoint must be associated with at most one Connection using the cnx relation"^^xsd:string ; + sh:path s223:cnx ; + sh:qualifiedMaxCount 1 ; + sh:qualifiedValueShape [ sh:class s223:Connection ] ; + sh:qualifiedValueShapesDisjoint true ], + [ rdfs:comment "A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf."^^xsd:string ; + sh:class s223:Connectable ; + sh:maxCount 1 ; + sh:message "s223: A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf."^^xsd:string ; + sh:minCount 1 ; + sh:name "ConnectionPointToEquipmentShape"^^xsd:string ; + sh:path s223:isConnectionPointOf ], [ rdfs:comment "A ConnectionPoint must be associated with exactly one Substance-Medium using the relation hasMedium."^^xsd:string ; sh:class s223:Substance-Medium ; sh:maxCount 1 ; @@ -82535,13 +82478,7 @@ FILTER NOT EXISTS {?otherEquipment s223:contains ?equipment} 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 ] . + sh:path [ sh:inversePath s223:mapsTo ] ] . s223:DCVoltage-DCZeroVoltage a s223:Class, s223:DCVoltage-DCZeroVoltage, @@ -83745,21 +83682,20 @@ BIND(REPLACE(?localName, "-", " ", "i") AS ?newLabel) sh:name "AddLabelFromLocalName"^^xsd:string ; sh:prefixes ] ; sh:sparql [ 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 ; + rdfs:comment "Ensure that any instance that is declared to be an instance of an abstract class must also be declared an instance of at least one subClass of that abstract class"^^xsd:string ; + sh:message "s223: {$this} cannot be declared an instance of only abstract class {?class}."^^xsd:string ; sh:prefixes ; sh:select """ -SELECT $this ?m1 ?prop ?m2 +SELECT DISTINCT $this ?class WHERE { -$this s223:hasMedium ?m1 . -$this ?p ?prop . -?prop a/rdfs:subClassOf* s223:Property . -?prop s223:ofMedium ?m2 . -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}) . +?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 ; @@ -83826,20 +83762,21 @@ FILTER NOT EXISTS { } """^^xsd:string ], [ a sh:SPARQLConstraint ; - rdfs:comment "Ensure that any instance that is declared to be an instance of an abstract class must also be declared an instance of at least one subClass of that abstract class"^^xsd:string ; - sh:message "s223: {$this} cannot be declared an instance of only abstract class {?class}."^^xsd:string ; + rdfs:comment "Inconsistent Medium. Case 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 ; sh:select """ -SELECT DISTINCT $this ?class +SELECT $this ?m1 ?prop ?m2 WHERE { -?class s223:abstract true . -$this a ?class . -OPTIONAL { -?otherClass rdfs:subClassOf+ ?class . -$this a ?otherClass . -FILTER (?class != ?otherClass) . -} -FILTER (!bound (?otherClass)) . +$this s223:hasMedium ?m1 . +$this ?p ?prop . +?prop a/rdfs:subClassOf* s223:Property . +?prop s223:ofMedium ?m2 . +FILTER (?m1 != ?m2 ) . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS {?m2 s223:composedOf ?c2} +FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . +FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . } """^^xsd:string ] . @@ -85819,7 +85756,7 @@ s223:Property a s223:Class, The Property class is the parent of all variations of a property, which are: ActuatableProperty - parent of subclass of properties that can be modified by user or machine outside of the model (typically command); -ObservableProperty - parent of subclass of properties that can not be modified by user or machine outside of the model (typically measures); +ObservableProperty - parent of subclass of properties that are observed (typically measures); EnumerableProperty - parent of subclass of properties defined by EnumerationKind; QuantifiableProperty - parent of subclass of properties defined by numerical values. @@ -85829,17 +85766,13 @@ QuantifiableObservableProperty, EnumeratedObservableProperty, EnumeratedActuatableProperty. -A QuantifiableProperty (or subClass thereof) must always be associated with a Unit and a QuantityKind, either explicitly from the Property, or through the associated Value. If the Unit is defined, the SHACL reasoner (if invoked) will figure out and assert the QuantityKind (the most general version). +A QuantifiableProperty (or subClass thereof) must always be associated with a Unit and a QuantityKind, either explicitly from the Property, +or through the associated Value. If the Unit is defined, the SHACL reasoner (if invoked) will figure out and assert the QuantityKind (the most general version). 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 Function using the inverse relation hasOutput."^^xsd:string ; - sh:class s223:Function ; - sh:maxCount 1 ; - sh:message "s223: A Property can be associated with at most one Function using the inverse relation hasOutput."^^xsd:string ; - sh:path [ sh:inversePath s223:hasOutput ] ], - [ rdfs:comment ""^^xsd:string ; + sh:property [ rdfs:comment ""^^xsd:string ; sh:path s223:ofConstituent ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "If an incoming relation composedOf exists, then the Property must have a declared substance using the relation ofConstituent."^^xsd:string ; @@ -85852,30 +85785,35 @@ WHERE { FILTER NOT EXISTS {$this s223:ofConstituent ?someSubstance} . } """^^xsd:string ] ], + [ rdfs:comment "A Property can use at most one relation hasValue if it is required to provide a static value in the model. It is not meant for real-time value (see `s223:hasExternalReference`)."^^xsd:string ; + sh:maxCount 1 ; + sh:message "s223: A Property can use at most one relation hasValue if it is required to provide a static value in the model. It is not meant for real-time value (see `s223:hasExternalReference`)."^^xsd:string ; + sh:path s223:hasValue ], + [ rdfs:comment "An instance of s223:Property must not be observed (set) by more than one entity."^^xsd:string ; + sh:maxCount 1 ; + sh:message "s223: An instance of s223:Property must not be observed (set) by more than one entity."^^xsd:string ; + sh:path [ sh:inversePath s223:observes ] ], [ rdfs:comment "If the relation hasAspect is present, it must associate the Property with an EnumerationKind."^^xsd:string ; sh:class s223:EnumerationKind ; sh:path s223:hasAspect ], - [ rdfs:comment "A Property can be associated with at most one EnumerationKind-Substance using the relation ofSubstance."^^xsd:string ; - sh:class s223:EnumerationKind-Substance ; - sh:maxCount 1 ; - sh:message "s223: A Property can be associated with at most one EnumerationKind-Substance using the relation ofSubstance."^^xsd:string ; - sh:path s223:ofSubstance ], - [ rdfs:comment "If the relation 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 ; + [ 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 Function using the inverse relation hasOutput."^^xsd:string ; + sh:class s223:Function ; 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 "An instance of s223:Property must not be observed (set) by more than one entity."^^xsd:string ; + sh:message "s223: A Property can be associated with at most one Function using the inverse relation hasOutput."^^xsd:string ; + sh:path [ sh:inversePath s223:hasOutput ] ], + [ rdfs:comment "A Property 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: An instance of s223:Property must not be observed (set) by more than one entity."^^xsd:string ; - sh:path [ sh:inversePath s223:observes ] ] ; + sh:message "s223: A Property can be associated with at most one EnumerationKind-Substance using the relation ofSubstance."^^xsd:string ; + sh:path s223:ofSubstance ] ; 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 ; @@ -86078,6 +86016,141 @@ s223:Fluid-Water a s223:Class, rdfs:comment "This class has enumerated subclasses of water and aqueous solutions in various states."^^xsd:string ; rdfs:subClassOf s223:Mix-Fluid . +s223:QuantifiableProperty a s223:Class, + sh:NodeShape ; + rdfs:label "Quantifiable Property"^^xsd:string ; + rdfs:comment "This class is for quantifiable values that describe an object (System, Equipment, etc.) that are typically static (hasValue). That is, they are neither measured nor specified in the course of operations."^^xsd:string ; + rdfs:subClassOf s223:Property ; + sh:property [ rdfs:comment """Normally, a QuantifiableProperty is associated with a static decimal value using s223:hasValue, along with a single +unit and quantity kind. However, in some cases, a QuantifiableProperty may instead be associated with a qudt:QuantityValue using the relation +qudt:quantityValue. This allows the qudt:QuantityValue to express multiple equivalent combinations of unit and value."""^^xsd:string ; + sh:class ns1:QuantityValue ; + sh:path ns1:quantityValue ], + [ rdfs:comment "A QuantifiableProperty 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 """A QuantifiableProperty can be associated with an optional Boolean flag using the relation isDeltaQuantity. +If the relation isDeltaQuantity has a value of true, the associated value should be interpreted as a difference reading, such as a +temperature difference. This is needed to distinguish between a temperature reading and a temperature difference reading, which +affects unit conversion calculations."""^^xsd:string ; + sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:path ns1:isDeltaQuantity ], + [ rdfs:comment "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 ; + rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units."^^xsd:string ; + sh:message "s223: {$this} uses Unit {?punit}, while Setpoint {?setpoint} uses Unit {?sunit}. These are non-commensurate."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?setpoint ?punit ?sunit +WHERE { +$this qudt:hasUnit ?punit . +$this s223:hasSetpoint ?setpoint . +?setpoint qudt:hasUnit ?sunit . +?punit qudt:hasDimensionVector ?pdv . +?sunit qudt:hasDimensionVector ?sdv . +FILTER (?punit != ?sunit) . +FILTER (?pdv != ?sdv) . +} +"""^^xsd:string ] ], + [ rdfs:comment "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; + sh:maxCount 0 ; + sh:message "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; + sh:path ns1:value ], + [ rdfs:comment "This QuantifiableProperty cannot have a value without a Unit."^^xsd:string ; + sh:path s223:hasValue ; + sh:sparql [ a sh:SPARQLConstraint ; + 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 ] ], + [ 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 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 ?pqk ?sqk ?pdv ?sdv +WHERE { +$this qudt:hasQuantityKind ?pqk . +$this s223:hasSetpoint ?setpoint . +?setpoint qudt:hasQuantityKind ?sqk . +?pqk qudt:hasDimensionVector ?pdv . +?sqk qudt:hasDimensionVector ?sdv . +FILTER (?pqk != ?sqk) . +FILTER (?pdv != ?sdv) . +} +"""^^xsd:string ] ], + [ rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it."^^xsd:string ; + sh:path ns1:hasUnit ; + sh:severity sh:Info ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it."^^xsd:string ; + sh:message "s223: {$this} uses Unit {?punit}, while Setpoint {?setpoint} uses Unit {?sunit}. Be careful."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?setpoint ?punit ?sunit +WHERE { +$this qudt:hasUnit ?punit . +$this s223:hasSetpoint ?setpoint . +?setpoint qudt:hasUnit ?sunit . +?punit qudt:hasDimensionVector ?pdv . +?sunit qudt:hasDimensionVector ?sdv . +FILTER (?punit != ?sunit) . +FILTER (?pdv = ?sdv) . +} +"""^^xsd:string ] ] ; + sh:rule [ a sh:SPARQLRule ; + rdfs:comment "Infer the hasQuantityKind relation if it is unambiguous."^^xsd:string ; + sh:construct """ +CONSTRUCT { +$this qudt:hasQuantityKind ?uniqueqk +} +WHERE { +{ +SELECT $this (COUNT (DISTINCT (?qk)) AS ?count) +WHERE { +FILTER (NOT EXISTS {$this qudt:hasQuantityKind ?something}) . +$this qudt:hasUnit/qudt:hasQuantityKind ?qk . +} +GROUP BY $this +} +FILTER (?count = 1) +$this qudt:hasUnit/qudt:hasQuantityKind ?uniqueqk . +} +"""^^xsd:string ; + sh:prefixes ] ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Checks for consistent dimension vectors for a QuantityKind and the Unit"^^xsd:string ; + sh:message "s223: Inconsistent dimensionalities among the Property's Unit and Property's Quantity Kind"^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this + WHERE +{ + $this qudt:hasQuantityKind/qudt:hasDimensionVector ?qkdv1 . + $this qudt:hasUnit/qudt:hasDimensionVector ?qkdv2 . +FILTER (?qkdv1 != ?qkdv2) . +} +"""^^xsd:string ] . + a ns1:QuantityKindDimensionVector_ISO, ns1:QuantityKindDimensionVector_Imperial, ns1:QuantityKindDimensionVector_SI ; @@ -88765,6 +88838,11 @@ ns1:IdentifiersAndDescriptionsPropertyGroup a sh:PropertyGroup ; ns1:symbol "pPa"^^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_ISO, ns1:QuantityKindDimensionVector_Imperial, ns1:QuantityKindDimensionVector_SI ; @@ -89719,11 +89797,6 @@ ns1:IdentifiersAndDescriptionsPropertyGroup a sh:PropertyGroup ; 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 ; @@ -91652,20 +91725,29 @@ s223:Equipment a s223:Class, sh:NodeShape ; rdfs:label "Equipment"^^xsd:string ; rdfs:comment """ -An Equipment is the modeling construct used to represent a mechanical device designed to accomplish a specific task, -or a complex device that contains component pieces of Equipment. Unlike a System, Equipment can have ConnectionPoints and participate +Equipment is the modeling construct used to represent a device designed to accomplish a specific task, +or a complex device that contains component pieces of Equipment. This is distinct from a System, which is a logical grouping or collection of Equipment. +Equipment can have ConnectionPoints and participate in the flow of one or more kinds of Medium. Examples of possible equipment include a Pump, Fan, HeatExchanger, Luminaire, -TemperatureSensor, FlowSensor or more complex examples such as a chilled water plant. +TemperatureSensor, or FlowSensor. + +In common usage terms like equipment and system have a variety of ambituous and possibly conflicting interpretations. A semantic model +is an attempt to eliminate such ambiguities and conflicts. If the thing being modeled has a need for ConnectionPoints it must be modeled as Equipment and not a System. +Thus, a complex example like a chlled water plant is modeled as Equipment because it has connection points for distributing chilled water. The same chilled water plant +may be part of a logical grouping of pumps, valves, filters, and other things modeled as a chilled water System. + The graphical depiction of Equipment used in this standard is a rounded cornered rectangle as show in Figure 5-1. ![Graphical Depiction of Equipment.](figures/Figure_5-1Graphical_Depiciton_of_Equipment.svg) """^^xsd:string ; rdfs:subClassOf s223:Connectable ; - sh:property [ 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:property [ rdfs:comment "If the relation hasRole is present it must associate the Equipment with a EnumerationKind-Role."^^xsd:string ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment """If the relation actuatedByProperty is present it must associate the Equipment with a ActuatableProperty. +Note that any Equipment may use this relation, not just Actuator."""^^xsd:string ; + sh:class s223:ActuatableProperty ; + sh:path s223:actuatedByProperty ], [ rdfs:comment "If the relation executes is present it must associate the Equipment with a Function."^^xsd:string ; sh:class s223:Function ; sh:path s223:executes ], @@ -91693,73 +91775,71 @@ UNION } } """^^xsd:string ] ], - [ rdfs:comment "Disallow contained equipment from having external incoming connections."^^xsd:string ; - sh:path s223:connectedFrom ; + [ rdfs:comment "Disallow contained equipment from having external outgoing connections."^^xsd:string ; + sh:path s223:connectedTo ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Disallow contained equipment from having external incoming connections."^^xsd:string ; - sh:message "s223: {$this} should not have a connection from external equipment {?otherDev} because {?container} contains {$this}."^^xsd:string ; + rdfs:comment "Disallow contained equipment from having external outgoing connections."^^xsd:string ; + sh:message "s223: {$this} should not have a connection to external equipment {?otherDev} because {?container} contains {$this}."^^xsd:string ; sh:prefixes ; sh:select """ SELECT $this ?container ?otherDev WHERE { -$this s223:connectedFrom ?otherDev . +$this s223:connectedTo ?otherDev . $this ^s223:contains ?container . ?container a/rdfs:subClassOf* s223:Equipment . FILTER NOT EXISTS {?container s223:contains ?otherDev .} } """^^xsd:string ] ], - [ rdfs:comment "If the relation hasRole is present it must associate the Equipment with a EnumerationKind-Role."^^xsd:string ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ], - [ rdfs:comment """If the relation actuatedByProperty is present it must associate the Equipment with a ActuatableProperty. -Note that any Equipment may use this relation, not just Actuator."""^^xsd:string ; - sh:class s223:ActuatableProperty ; - sh:path s223:actuatedByProperty ], - [ rdfs:comment "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 ; + [ rdfs:comment "Disallow contained equipment from having external incoming connections."^^xsd:string ; + sh:path s223:connectedFrom ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Disallow contained equipment from having external outgoing connections."^^xsd:string ; - sh:message "s223: {$this} should not have a connection to external equipment {?otherDev} because {?container} contains {$this}."^^xsd:string ; + rdfs:comment "Disallow contained equipment from having external incoming connections."^^xsd:string ; + sh:message "s223: {$this} should not have a connection from external equipment {?otherDev} because {?container} contains {$this}."^^xsd:string ; sh:prefixes ; sh:select """ SELECT $this ?container ?otherDev WHERE { -$this s223:connectedTo ?otherDev . +$this s223:connectedFrom ?otherDev . $this ^s223:contains ?container . ?container a/rdfs:subClassOf* s223:Equipment . FILTER NOT EXISTS {?container s223:contains ?otherDev .} } -"""^^xsd:string ] ] ; +"""^^xsd:string ] ], + [ a sh:PropertyShape ; + rdfs:comment "If the relation contains is present it must associate the Equipment with either Equipment or Junction."^^xsd:string ; + sh:name "device contains shape"^^xsd:string ; + sh:or ( [ sh:class s223:Equipment ] [ sh:class s223:Junction ] ) ; + sh:path s223:contains ], + [ rdfs:comment "If the relation hasPhysicalLocation is present it must associate the Equipment with a PhysicalSpace."^^xsd:string ; + sh:class s223:PhysicalSpace ; + sh:path s223:hasPhysicalLocation ] ; sh:rule [ a sh:SPARQLRule ; - rdfs:comment "For equipment containing another piece of equipment, use the mapsTo relation to infer a Medium from the contained equipment."^^xsd:string ; + rdfs:comment "For equipment contained within another piece of equipment use the mapsTo relation to infer a Medium from the containing equipment."^^xsd:string ; sh:construct """ CONSTRUCT { - ?parentCp s223:hasMedium ?medium . + ?childCp s223:hasMedium ?medium . } WHERE { $this s223:hasConnectionPoint ?cp . - ?cp s223:mapsTo ?parentCp . + ?childCp s223:mapsTo ?cp . ?cp s223:connectsThrough ?connection . ?cp s223:hasMedium ?medium . - FILTER NOT EXISTS {?parentCp s223:hasMedium ?something} . + FILTER NOT EXISTS {?childCp s223:hasMedium ?something} . } """^^xsd:string ; sh:prefixes ], [ 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 ; + rdfs:comment "For equipment containing another piece of equipment, use the mapsTo relation to infer a Medium from the contained equipment."^^xsd:string ; sh:construct """ CONSTRUCT { - ?childCp s223:hasMedium ?medium . + ?parentCp s223:hasMedium ?medium . } WHERE { $this s223:hasConnectionPoint ?cp . - ?childCp s223:mapsTo ?cp . + ?cp s223:mapsTo ?parentCp . ?cp s223:connectsThrough ?connection . ?cp s223:hasMedium ?medium . - FILTER NOT EXISTS {?childCp s223:hasMedium ?something} . + FILTER NOT EXISTS {?parentCp s223:hasMedium ?something} . } """^^xsd:string ; sh:prefixes ] . @@ -91772,12 +91852,12 @@ s223:Numerical-Voltage a s223:Class, ns1:hasUnit ; rdfs:comment "This class has enumerated instances of common voltages."^^xsd:string ; rdfs:subClassOf s223:EnumerationKind-Numerical ; - sh:property [ rdfs:comment "A Numerical-Voltage must have a unit of Volts"^^xsd:string ; - sh:hasValue ; - sh:path ns1:hasUnit ], - [ rdfs:comment "A Numerical-Voltage must have a Quantity Kind of Voltage"^^xsd:string ; + sh:property [ rdfs:comment "A Numerical-Voltage must have a Quantity Kind of Voltage"^^xsd:string ; sh:hasValue ; - sh:path ns1:hasQuantityKind ] . + sh:path ns1:hasQuantityKind ], + [ rdfs:comment "A Numerical-Voltage must have a unit of Volts"^^xsd:string ; + sh:hasValue ; + sh:path ns1:hasUnit ] . s223:NumberOfElectricalPhases-SinglePhase a s223:Class, s223:NumberOfElectricalPhases-SinglePhase, @@ -92531,141 +92611,6 @@ s223:NumberOfElectricalPhases-SinglePhase a s223:Class, ns1:symbol "plancklength"^^xsd:string ; rdfs:isDefinedBy . -s223:QuantifiableProperty a s223:Class, - sh:NodeShape ; - rdfs:label "Quantifiable Property"^^xsd:string ; - rdfs:comment "This class is for quantifiable values that describe an object (System, Equipment, etc.) that are typically static (hasValue). That is, they are neither measured nor specified in the course of operations."^^xsd:string ; - rdfs:subClassOf s223:Property ; - sh:property [ rdfs:comment "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 ] ], - [ 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 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 ?pqk ?sqk ?pdv ?sdv -WHERE { -$this qudt:hasQuantityKind ?pqk . -$this s223:hasSetpoint ?setpoint . -?setpoint qudt:hasQuantityKind ?sqk . -?pqk qudt:hasDimensionVector ?pdv . -?sqk qudt:hasDimensionVector ?sdv . -FILTER (?pqk != ?sqk) . -FILTER (?pdv != ?sdv) . -} -"""^^xsd:string ] ], - [ rdfs:comment "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; - sh:maxCount 0 ; - sh:message "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; - sh:path ns1:value ], - [ rdfs:comment """A QuantifiableProperty can be associated with an optional Boolean flag using the relation isDeltaQuantity. -If the relation isDeltaQuantity has a value of true, the associated value should be interpreted as a difference reading, such as a -temperature difference. This is needed to distinguish between a temperature reading and a temperature difference reading, which -affects unit conversion calculations."""^^xsd:string ; - sh:datatype xsd:boolean ; - sh:maxCount 1 ; - sh:path ns1:isDeltaQuantity ], - [ rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units."^^xsd:string ; - sh:path ns1:hasUnit ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units."^^xsd:string ; - sh:message "s223: {$this} uses Unit {?punit}, while Setpoint {?setpoint} uses Unit {?sunit}. These are non-commensurate."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?setpoint ?punit ?sunit -WHERE { -$this qudt:hasUnit ?punit . -$this s223:hasSetpoint ?setpoint . -?setpoint qudt:hasUnit ?sunit . -?punit qudt:hasDimensionVector ?pdv . -?sunit qudt:hasDimensionVector ?sdv . -FILTER (?punit != ?sunit) . -FILTER (?pdv != ?sdv) . -} -"""^^xsd:string ] ], - [ rdfs:comment "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 uses a different Unit than the Setpoint associated with it."^^xsd:string ; - sh:path ns1:hasUnit ; - sh:severity sh:Info ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it."^^xsd:string ; - sh:message "s223: {$this} uses Unit {?punit}, while Setpoint {?setpoint} uses Unit {?sunit}. Be careful."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?setpoint ?punit ?sunit -WHERE { -$this qudt:hasUnit ?punit . -$this s223:hasSetpoint ?setpoint . -?setpoint qudt:hasUnit ?sunit . -?punit qudt:hasDimensionVector ?pdv . -?sunit qudt:hasDimensionVector ?sdv . -FILTER (?punit != ?sunit) . -FILTER (?pdv = ?sdv) . -} -"""^^xsd:string ] ], - [ rdfs:comment """Normally, a QuantifiableProperty is associated with a static decimal value using s223:hasValue, along with a single -unit and quantity kind. However, in some cases, a QuantifiableProperty may instead be associated with a qudt:QuantityValue using the relation -qudt:quantityValue. This allows the qudt:QuantityValue to express multiple equivalent combinations of unit and value."""^^xsd:string ; - sh:class ns1:QuantityValue ; - sh:path ns1:quantityValue ], - [ rdfs:comment "A QuantifiableProperty 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 ] ; - sh:rule [ a sh:SPARQLRule ; - rdfs:comment "Infer the hasQuantityKind relation if it is unambiguous."^^xsd:string ; - sh:construct """ -CONSTRUCT { -$this qudt:hasQuantityKind ?uniqueqk -} -WHERE { -{ -SELECT $this (COUNT (DISTINCT (?qk)) AS ?count) -WHERE { -FILTER (NOT EXISTS {$this qudt:hasQuantityKind ?something}) . -$this qudt:hasUnit/qudt:hasQuantityKind ?qk . -} -GROUP BY $this -} -FILTER (?count = 1) -$this qudt:hasUnit/qudt:hasQuantityKind ?uniqueqk . -} -"""^^xsd:string ; - sh:prefixes ] ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Checks for consistent dimension vectors for a QuantityKind and the Unit"^^xsd:string ; - sh:message "s223: Inconsistent dimensionalities among the Property's Unit and Property's Quantity Kind"^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this - WHERE -{ - $this qudt:hasQuantityKind/qudt:hasDimensionVector ?qkdv1 . - $this qudt:hasUnit/qudt:hasDimensionVector ?qkdv2 . -FILTER (?qkdv1 != ?qkdv2) . -} -"""^^xsd:string ] . - a ns1:QuantityKind ; rdfs:label "Volume"@en ; dcterms:description "The volume of a solid object is the three-dimensional concept of how much space it occupies, often quantified numerically. One-dimensional figures (such as lines) and two-dimensional shapes (such as squares) are assigned zero volume in the three-dimensional space."^^rdf:HTML ; @@ -93193,108 +93138,108 @@ s223:Frequency-60Hz a s223:Class, sh: ; owl:versionInfo "Created with TopBraid Composer", "Created with TopBraid Composer"^^xsd:string ; - sh:declare [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; - sh:prefix "skos"^^xsd:string ], + sh:declare [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; + sh:prefix "quantitykind"^^xsd:string ], + [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223"^^xsd:string ], + [ sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; + sh:prefix "rdf"^^xsd:string ], + [ sh:namespace "http://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://qudt.org/vocab/unit/"^^xsd:anyURI ; sh:prefix "unit"^^xsd:string ], - [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; - sh:prefix "rdfs"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; - sh:prefix "skos"^^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/2002/07/owl#"^^xsd:anyURI ; - sh:prefix "owl"^^xsd:string ], + [ sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; + sh:prefix "unit"^^xsd:string ], [ a sh:PrefixDeclaration ; sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; sh:prefix "qudt"^^xsd:string ], - [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; - sh:prefix "qudt"^^xsd:string ], + [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; + sh:prefix "sh"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; - sh:prefix "unit"^^xsd:string ], + sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; + sh:prefix "dcterms"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://www.w3.org/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://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223"^^xsd:string ], + [ sh:namespace "http://data.ashrae.org/standard223/1.0/vocab/role#"^^xsd:anyURI ; + sh:prefix "role"^^xsd:string ], [ a sh:PrefixDeclaration ; 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 "quantitykind"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs"^^xsd:string ], [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; sh:prefix "qudt"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + 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/2002/07/owl#"^^xsd:anyURI ; - sh:prefix "owl"^^xsd:string ], - [ sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; - sh:prefix "rdf"^^xsd:string ], + sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:prefix "qudt"^^xsd:string ], [ a sh:PrefixDeclaration ; sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; sh:prefix "rdf"^^xsd:string ], - [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; - sh:prefix "sh"^^xsd:string ], - [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; - sh:prefix "qudt"^^xsd:string ], + [ sh:namespace "http://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 ], + [ 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/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; sh:prefix "rdf"^^xsd:string ], - [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; - sh:prefix "quantitykind"^^xsd:string ], - [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; - sh:prefix "s223"^^xsd:string ], - [ sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; - sh:prefix "unit"^^xsd:string ], - [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; - sh:prefix "s223"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; - sh:prefix "quantitykind"^^xsd:string ], + sh:namespace "http://qudt.org/vocab/dimensionvector/"^^xsd:anyURI ; + sh:prefix "qkdv"^^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://www.w3.org/2002/07/owl#"^^xsd:anyURI ; + sh:prefix "owl"^^xsd:string ], [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; sh:prefix "rdfs"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; - sh:prefix "dcterms"^^xsd:string ], + sh:namespace "http://qudt.org/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://www.w3.org/2001/XMLSchema#"^^xsd:anyURI ; sh:prefix "xsd"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; - sh:prefix "quantitykind"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; - sh:prefix "rdfs"^^xsd:string ], + sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; + sh:prefix "sh"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/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/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 ], - [ 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/ns/shacl#"^^xsd:anyURI ; - sh:prefix "sh"^^xsd:string ], - [ sh:namespace "http://data.ashrae.org/standard223/1.0/vocab/role#"^^xsd:anyURI ; - sh:prefix "role"^^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/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://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; - sh:prefix "qudtqk"^^xsd:string ] . + [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs"^^xsd:string ] . a ns1:QuantityKindDimensionVector_CGS, ns1:QuantityKindDimensionVector_ISO, @@ -93607,18 +93552,18 @@ s223:Electricity-AC a s223:Class, s223:hasVoltage s223:Numerical-Voltage ; rdfs:comment "This class has enumerated instances of all AC forms of electricity."^^xsd:string ; rdfs:subClassOf s223:Constituent-Electricity ; - sh:property [ rdfs:comment "An electricity AC medium must have a number of electrical phases."^^xsd:string ; + sh:property [ 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 number of electrical phases."^^xsd:string ; sh:class s223:Numerical-NumberOfElectricalPhases ; sh:minCount 1 ; sh:path s223:hasNumberOfElectricalPhases ], [ 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 ], - [ rdfs:comment "An electricity AC medium must have a frequency"^^xsd:string ; - sh:class s223:Numerical-Frequency ; - sh:minCount 1 ; - sh:path s223:hasFrequency ] . + sh:path s223:hasVoltage ] . s223:hasMedium a rdf:Property ; rdfs:label "has Medium"^^xsd:string ; @@ -94641,30 +94586,30 @@ Unlike the meter and second, which exist as fundamental units in the SI system f rdfs:isDefinedBy . rdf:Property a sh:NodeShape ; - sh:property [ rdfs:comment "This Property must have a label"^^xsd:string ; - sh:path rdfs:label ; + sh:property [ rdfs:comment "This Property must have a comment"^^xsd:string ; + sh:path rdfs:comment ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "s223: {$this} must have an rdfs:label"^^xsd:string ; + sh:message "s223: {$this} must have an rdfs:comment"^^xsd:string ; sh:prefixes ; sh:select """ SELECT $this WHERE { BIND(REPLACE(STR($this), "^(.*)(/|#)([^#/]*)$", "$1") AS ?prop) . FILTER (?prop = "http://data.ashrae.org/standard223") . -FILTER (NOT EXISTS {$this rdfs:label ?something}) . +FILTER (NOT EXISTS {$this rdfs:comment ?something}) . } """^^xsd:string ] ], - [ rdfs:comment "This Property must have a comment"^^xsd:string ; - sh:path rdfs:comment ; + [ rdfs:comment "This Property must have a label"^^xsd:string ; + sh:path rdfs:label ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "s223: {$this} must have an rdfs:comment"^^xsd:string ; + sh:message "s223: {$this} must have an rdfs:label"^^xsd:string ; sh:prefixes ; sh:select """ SELECT $this WHERE { BIND(REPLACE(STR($this), "^(.*)(/|#)([^#/]*)$", "$1") AS ?prop) . FILTER (?prop = "http://data.ashrae.org/standard223") . -FILTER (NOT EXISTS {$this rdfs:comment ?something}) . +FILTER (NOT EXISTS {$this rdfs:label ?something}) . } """^^xsd:string ] ] .