diff --git a/ontologies/223p.ttl b/ontologies/223p.ttl index d75c572..910cdc8 100644 --- a/ontologies/223p.ttl +++ b/ontologies/223p.ttl @@ -1322,20 +1322,6 @@ s223:inverseOf a rdf:Property ; sh:prefix "s223" ], [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; sh:prefix "s223" ], - [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; - sh:prefix "qudt" ], - [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; - sh:prefix "qudt" ], - [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; - sh:prefix "quantitykind" ], - [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; - sh:prefix "s223" ], - [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; - sh:prefix "s223" ], - [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; - sh:prefix "rdfs" ], - [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; - sh:prefix "s223" ], [ sh:namespace "http://data.ashrae.org/standard223/1.0/vocab/role#"^^xsd:anyURI ; sh:prefix "role" ], [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; @@ -1346,12 +1332,26 @@ s223:inverseOf a rdf:Property ; sh:prefix "rdfs" ], [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; sh:prefix "s223" ], + [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:prefix "qudt" ], + [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; + sh:prefix "quantitykind" ], + [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223" ], [ sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; sh:prefix "rdf" ], [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; sh:prefix "rdfs" ], [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; - sh:prefix "sh" ] . + sh:prefix "sh" ], + [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223" ], + [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:prefix "qudt" ], + [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223" ], + [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs" ] . bacnet:device-identifier a rdf:Property ; rdfs:label "Device Identifier" ; @@ -3080,12 +3080,7 @@ s223:Junction a s223:Class, sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ] ; sh:qualifiedValueShapesDisjoint true ] ] ) ; - sh:property [ rdfs:comment "A Junction must be associated with exactly one EnumerationKind-Medium using the relation hasMedium." ; - sh:class s223:Substance-Medium ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasMedium ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction." ; + 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." ; sh:name "Test for compatible declared Medium" ; sh:path s223:hasMedium ; sh:sparql [ a sh:SPARQLConstraint ; @@ -3124,7 +3119,12 @@ FILTER (?m1 != ?m2 ) . FILTER (NOT EXISTS {?m2 a/rdfs:subClassOf* ?m1}) . FILTER (NOT EXISTS {?m1 a/rdfs:subClassOf* ?m2}) . } -""" ] ] . +""" ] ], + [ rdfs:comment "A Junction must be associated with exactly one EnumerationKind-Medium using the relation hasMedium." ; + sh:class s223:Substance-Medium ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path s223:hasMedium ] . s223:Light-Infrared a s223:Class, s223:Light-Infrared, @@ -3601,16 +3601,7 @@ s223:Zone a s223:Class, rdfs:label "Zone" ; 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" ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "A Zone must be associated with exactly one EnumerationKind-Domain using the relation hasDomain." ; - sh:class s223:EnumerationKind-Domain ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasDomain ], - [ rdfs:comment "A Zone must be associated with at least one DomainSpace using the relation hasDomainSpace." ; - sh:class s223:DomainSpace ; - 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." ; + sh:property [ rdfs:comment "The associated Domain of a Zone and the Domain of the DomainSpaces it contains must be the same." ; 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." ; @@ -3625,7 +3616,16 @@ $this s223:contains ?ds . ?ds s223:hasDomain ?dsdomain . FILTER (?domain != ?dsdomain) } -""" ] ] ; +""" ] ], + [ rdfs:comment "A Zone must be associated with exactly one EnumerationKind-Domain using the relation hasDomain." ; + sh:class s223:EnumerationKind-Domain ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path s223:hasDomain ], + [ rdfs:comment "A Zone must be associated with at least one DomainSpace using the relation hasDomainSpace." ; + sh:class s223:DomainSpace ; + sh:minCount 1 ; + sh:path s223:hasDomainSpace ] ; sh:rule [ a sh:TripleRule ; rdfs:comment "Infer a hasDomain relation by checking any enclosed DomainSpaces to determine the domain." ; sh:object [ sh:path ( s223:hasDomainSpace s223:hasDomain ) ] ; @@ -3836,16 +3836,16 @@ s223:DomainSpace a s223:Class, rdfs:label "Domain Space" ; rdfs:comment "A DomainSpace is a member (or component) of a Zone and is associated with a Domain such as Lighting, HVAC, PhysicalSecurity, etc. Physical spaces enclose Domain spaces." ; rdfs:subClassOf s223:Connectable ; - sh:property [ rdfs:comment "A DomainSpace must be associated with exactly one EnumerationKind-Domain using the relation hasDomain." ; - sh:class s223:EnumerationKind-Domain ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasDomain ], - [ rdfs:comment "A DomainSpace must be enclosed by a PhysicalSpace." ; + sh:property [ rdfs:comment "A DomainSpace must be enclosed by a PhysicalSpace." ; sh:message "A DomainSpace must be enclosed by a PhysicalSpace." ; sh:minCount 1 ; sh:path [ sh:inversePath s223:encloses ] ; - sh:severity sh:Info ] ; + sh:severity sh:Info ], + [ rdfs:comment "A DomainSpace must be associated with exactly one EnumerationKind-Domain using the relation hasDomain." ; + sh:class s223:EnumerationKind-Domain ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path s223:hasDomain ] ; sh:rule [ a sh:TripleRule ; rdfs:comment "Infer a hasDomain relation by checking any enclosing Zone to determine the domain." ; sh:object [ sh:path ( [ sh:inversePath s223:hasDomainSpace ] s223:hasDomain ) ] ; @@ -3857,12 +3857,7 @@ s223:EnumerableProperty a s223:Class, rdfs:label "Enumerable Property" ; rdfs:comment "An EnumerableProperty is a property with an enumerated (fixed) set of possible values." ; rdfs:subClassOf s223:Property ; - sh:property [ rdfs:comment "An EnumerableProperty must be associated with exactly one EnumerationKind using the relation hasEnumerationKind." ; - sh:class s223:EnumerationKind ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasEnumerationKind ], - [ rdfs:comment "Checks for valid enumeration value consistent with the stated EnumerationKind." ; + sh:property [ rdfs:comment "Checks for valid enumeration value consistent with the stated EnumerationKind." ; sh:path s223:hasValue ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "Checks for valid enumeration value consistent with the stated EnumerationKind." ; @@ -3875,7 +3870,12 @@ $this s223:hasValue ?value . $this s223:hasEnumerationKind ?kind . FILTER (NOT EXISTS {?value a/rdfs:subClassOf* ?kind}) . } -""" ] ] . +""" ] ], + [ rdfs:comment "An EnumerableProperty must be associated with exactly one EnumerationKind using the relation hasEnumerationKind." ; + sh:class s223:EnumerationKind ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path s223:hasEnumerationKind ] . s223:ExternalReference a s223:Class, sh:NodeShape ; @@ -5376,37 +5376,7 @@ A Connection may contain branches or intersections. These may be modeled using J sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ] ; sh:qualifiedValueShapesDisjoint true ] ] ) ; - sh:property [ rdfs:comment "If the relation connectsAt is present it must associate the Connection with a ConnectionPoint." ; - sh:class s223:ConnectionPoint ; - sh:path s223:connectsAt ], - [ rdfs:comment "If the relation connectsFrom is present it must associate the Connection with a Connectable." ; - sh:class s223:Connectable ; - sh:name "ConnectionToUpstreamConnectableShape" ; - sh:path s223:connectsFrom ], - [ rdfs:comment "If the relation connectsTo is present it must associate the Connection with a Connectable." ; - sh:class s223:Connectable ; - sh:name "ConnectionToDownstreamConnectableShape" ; - sh:path s223:connectsTo ], - [ rdfs:comment "A Connection must be associated with exactly one EnumerationKind-Medium using the relation hasMedium." ; - sh:class s223:Substance-Medium ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:name "Connection medium" ; - sh:path s223:hasMedium ], - [ rdfs:comment "If the relation hasRole is present it must associate the Connection with an EnumerationKind-Role." ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ], - [ rdfs:comment "If the relation hasThermodynamicPhase is present it must associate the Connection with an EnumerationKind-Phase." ; - sh:class s223:EnumerationKind-Phase ; - sh:maxCount 1 ; - sh:path s223:hasThermodynamicPhase ], - [ rdfs:comment "A Connection must have two or more cnx relations to ConnectionPoints" ; - sh:class s223:ConnectionPoint ; - sh:message "A Connection must have two or more cnx relations to ConnectionPoints" ; - sh:minCount 2 ; - sh:path s223:cnx ; - sh:severity sh:Info ], - [ rdfs:comment "A Connection must only have a cnx relation with a ConnectionPoint" ; + sh:property [ rdfs:comment "A Connection must only have a cnx relation with a ConnectionPoint" ; sh:path s223:cnx ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "A Connection must only have a cnx relation with a ConnectionPoint" ; @@ -5456,7 +5426,37 @@ FILTER (?m1 != ?m2 ) . FILTER (NOT EXISTS {?m2 a/rdfs:subClassOf* ?m1}) . FILTER (NOT EXISTS {?m1 a/rdfs:subClassOf* ?m2}) . } -""" ] ] ; +""" ] ], + [ rdfs:comment "If the relation connectsAt is present it must associate the Connection with a ConnectionPoint." ; + sh:class s223:ConnectionPoint ; + sh:path s223:connectsAt ], + [ rdfs:comment "If the relation connectsFrom is present it must associate the Connection with a Connectable." ; + sh:class s223:Connectable ; + sh:name "ConnectionToUpstreamConnectableShape" ; + sh:path s223:connectsFrom ], + [ rdfs:comment "If the relation connectsTo is present it must associate the Connection with a Connectable." ; + sh:class s223:Connectable ; + sh:name "ConnectionToDownstreamConnectableShape" ; + sh:path s223:connectsTo ], + [ rdfs:comment "A Connection must be associated with exactly one EnumerationKind-Medium using the relation hasMedium." ; + sh:class s223:Substance-Medium ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "Connection medium" ; + sh:path s223:hasMedium ], + [ rdfs:comment "If the relation hasRole is present it must associate the Connection with an EnumerationKind-Role." ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment "If the relation hasThermodynamicPhase is present it must associate the Connection with an EnumerationKind-Phase." ; + sh:class s223:EnumerationKind-Phase ; + sh:maxCount 1 ; + sh:path s223:hasThermodynamicPhase ], + [ rdfs:comment "A Connection must have two or more cnx relations to ConnectionPoints" ; + sh:class s223:ConnectionPoint ; + sh:message "A Connection must have two or more cnx relations to ConnectionPoints" ; + sh:minCount 2 ; + sh:path s223:cnx ; + sh:severity sh:Info ] ; sh:rule [ a sh:SPARQLRule ; rdfs:comment "Infer the connectsFrom relation using connectsAt" ; sh:construct """ @@ -5570,7 +5570,20 @@ A QuantifiableProperty (or subClass thereof) must always be associated with a Un Enumerable properties must be associated with an EnumerationKind. """ ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "If the relation hasAspect is present, it must associate the Property with an EnumerationKind." ; + sh:property [ rdfs:comment "" ; + sh:path s223:ofSubstance ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "If an incoming relation hasConstituent exists, then the Property must have a declared substance using the relation ofSubstance." ; + sh:message "Property {$this} is referred to by {?something} with s223:hasConstituent, but the Property has no value for s223:ofSubstance." ; + sh:prefixes ; + sh:select """ +SELECT $this ?something +WHERE { +?something s223:hasConstituent $this . +FILTER NOT EXISTS {$this s223:ofSubstance ?someSubstance} . +} +""" ] ], + [ rdfs:comment "If the relation hasAspect is present, it must associate the Property with an EnumerationKind." ; sh:class s223:EnumerationKind ; sh:path s223:hasAspect ], [ rdfs:comment "If the relation hasExternalReference is present it must associate the Property with an ExternalReference." ; @@ -5591,20 +5604,7 @@ Enumerable properties must be associated with an EnumerationKind. sh:class s223:FunctionBlock ; sh:maxCount 1 ; sh:message "A Property can be associated with at most one FunctionBlock using the inverse relation hasOutput." ; - sh:path [ sh:inversePath s223:hasOutput ] ], - [ rdfs:comment "" ; - sh:path s223:ofSubstance ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "If an incoming relation hasConstituent exists, then the Property must have a declared substance using the relation ofSubstance." ; - sh:message "Property {$this} is referred to by {?something} with s223:hasConstituent, but the Property has no value for s223:ofSubstance." ; - sh:prefixes ; - sh:select """ -SELECT $this ?something -WHERE { -?something s223:hasConstituent $this . -FILTER NOT EXISTS {$this s223:ofSubstance ?someSubstance} . -} -""" ] ] ; + sh:path [ sh:inversePath s223:hasOutput ] ] ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "A Property instance cannot be declared an instance of both an ActuatableProperty and an ObservableProperty." ; sh:message "{$this} cannot be declared an instance of both an ActuatableProperty and an ObservableProperty." ; @@ -5633,29 +5633,7 @@ s223:Connectable a s223:Class, s223:abstract true ; rdfs:comment "Connectable is an abstract class representing a thing such as, Equipment (see `s223:Equipment`), DomainSpace (see `s223:DomainSpace`), or Junction (see `s223:Junction`) that can be connected via ConnectionPoints and Connections." ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "If the relation cnx is present it must associate the Connectable with a ConnectionPoint." ; - sh:class s223:ConnectionPoint ; - sh:path s223:cnx ], - [ rdfs:comment "If the relation connected is present it must associate the Connectable with a Connectable." ; - sh:class s223:Connectable ; - sh:name "SymmetricConnectableToConnectableShape" ; - sh:path s223:connected ], - [ rdfs:comment "If the relation connectedFrom is present it must associate the Connectable with a Connectable." ; - sh:class s223:Connectable ; - sh:path s223:connectedFrom ], - [ rdfs:comment "If the relation connectedThrough is present it must associate the Connectable with a Connection." ; - sh:class s223:Connection ; - sh:name "EquipmentToConnectionShape" ; - sh:path s223:connectedThrough ], - [ rdfs:comment "If the relation connectedTo is present it must associate the Connectable with a Connectable." ; - sh:class s223:Connectable ; - sh:name "ConnectableToConnectableShape" ; - sh:path s223:connectedTo ], - [ rdfs:comment "If the relation hasConnectionPoint is present it must associate the Connectable with a ConnectionPoint." ; - sh:class s223:ConnectionPoint ; - sh:name "EquipmentToConnectionPointShape" ; - sh:path s223:hasConnectionPoint ], - [ rdfs:comment "For a Connectable, cnx relation must associate the Connectable to a ConnectionPoint" ; + sh:property [ rdfs:comment "For a Connectable, cnx relation must associate the Connectable to a ConnectionPoint" ; sh:path s223:cnx ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "A Connectable should only have a s223:cnx relation with a ConnectionPoint" ; @@ -5679,7 +5657,29 @@ WHERE { $this s223:connected ?otherC . FILTER NOT EXISTS {$this s223:cnx+ ?otherC} } -""" ] ] ; +""" ] ], + [ rdfs:comment "If the relation cnx is present it must associate the Connectable with a ConnectionPoint." ; + sh:class s223:ConnectionPoint ; + sh:path s223:cnx ], + [ rdfs:comment "If the relation connected is present it must associate the Connectable with a Connectable." ; + sh:class s223:Connectable ; + sh:name "SymmetricConnectableToConnectableShape" ; + sh:path s223:connected ], + [ rdfs:comment "If the relation connectedFrom is present it must associate the Connectable with a Connectable." ; + sh:class s223:Connectable ; + sh:path s223:connectedFrom ], + [ rdfs:comment "If the relation connectedThrough is present it must associate the Connectable with a Connection." ; + sh:class s223:Connection ; + sh:name "EquipmentToConnectionShape" ; + sh:path s223:connectedThrough ], + [ rdfs:comment "If the relation connectedTo is present it must associate the Connectable with a Connectable." ; + sh:class s223:Connectable ; + sh:name "ConnectableToConnectableShape" ; + sh:path s223:connectedTo ], + [ rdfs:comment "If the relation hasConnectionPoint is present it must associate the Connectable with a ConnectionPoint." ; + sh:class s223:ConnectionPoint ; + sh:name "EquipmentToConnectionPointShape" ; + sh:path s223:hasConnectionPoint ] ; sh:rule [ a sh:SPARQLRule ; rdfs:comment "Infer the connected relation for BiDirectional connections" ; sh:construct """ @@ -5771,52 +5771,7 @@ ConnectionPoints are represented graphically in this standard by a triangle with """ ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "A ConnectionPoint must be associated with at most one Connectable using the cnx relation." ; - sh:message "A ConnectionPoint must be associated with at most one Connectable using the cnx relation." ; - sh:path s223:cnx ; - sh:qualifiedMaxCount 1 ; - sh:qualifiedValueShape [ sh:class s223:Connectable ] ; - sh:qualifiedValueShapesDisjoint true ], - [ rdfs:comment "A ConnectionPoint must be associated with at most one Connection using the cnx relation" ; - sh:message "A ConnectionPoint must be associated with at most one Connection using the cnx relation" ; - sh:path s223:cnx ; - sh:qualifiedMaxCount 1 ; - sh:qualifiedValueShape [ sh:class s223:Connection ] ; - sh:qualifiedValueShapesDisjoint true ], - [ rdfs:comment "A ConnectionPoint must be associated with at most one Connection using the relation connectsThrough." ; - sh:class s223:Connection ; - sh:maxCount 1 ; - sh:message "This ConnectionPoint must be associated with at most one Connection." ; - sh:name "ConnectionPointToConnectionShape" ; - sh:path s223:connectsThrough ; - sh:severity sh:Info ], - [ rdfs:comment "If the relation hasElectricalPhase is present it must associate the ConnectionPoint with an ElectricalPhaseIdentifier or ElectricalVoltagePhases." ; - sh:or ( [ sh:class s223:Aspect-ElectricalPhaseIdentifier ] [ sh:class s223:Aspect-ElectricalVoltagePhases ] ) ; - sh:path s223:hasElectricalPhase ], - [ rdfs:comment "A ConnectionPoint must be associated with exactly one Substance-Medium using the relation hasMedium." ; - sh:class s223:Substance-Medium ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:name "ConnectionPoint medium" ; - sh:path s223:hasMedium ], - [ rdfs:comment "If the relation hasRole is present it must associate the ConnectionPoint with an EnumerationKind-Role." ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ], - [ rdfs:comment "A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf." ; - sh:class s223:Connectable ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:name "ConnectionPointToEquipmentShape" ; - sh:path s223:isConnectionPointOf ], - [ rdfs:comment "A ConnectionPoint can be associated with at most one other ConnectionPoint using the relation mapsTo" ; - sh:class s223:ConnectionPoint ; - sh:maxCount 1 ; - sh:path s223:mapsTo ], - [ rdfs:comment "A ConnectionPoint can be associated with at most one other ConnectionPoint using the inverse of relation mapsTo" ; - sh:class s223:ConnectionPoint ; - sh:maxCount 1 ; - sh:path [ sh:inversePath s223:mapsTo ] ], - [ rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, and is not associated with a Junction or Equipment that is contained by an Equipment, then suggest that the ConnectionPoint probably needs an association with a Connection." ; + sh:property [ 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." ; sh:path s223:connectsThrough ; sh:severity sh:Info ; sh:sparql [ a sh:SPARQLConstraint ; @@ -5896,7 +5851,52 @@ $this s223:mapsTo ?otherCP . ?otherEquipment s223:hasConnectionPoint ?otherCP . FILTER NOT EXISTS {?otherEquipment s223:contains ?equipment} } -""" ] ] . +""" ] ], + [ rdfs:comment "A ConnectionPoint must be associated with at most one Connectable using the cnx relation." ; + sh:message "A ConnectionPoint must be associated with at most one Connectable using the cnx relation." ; + sh:path s223:cnx ; + sh:qualifiedMaxCount 1 ; + sh:qualifiedValueShape [ sh:class s223:Connectable ] ; + sh:qualifiedValueShapesDisjoint true ], + [ rdfs:comment "A ConnectionPoint must be associated with at most one Connection using the cnx relation" ; + sh:message "A ConnectionPoint must be associated with at most one Connection using the cnx relation" ; + sh:path s223:cnx ; + sh:qualifiedMaxCount 1 ; + sh:qualifiedValueShape [ sh:class s223:Connection ] ; + sh:qualifiedValueShapesDisjoint true ], + [ rdfs:comment "A ConnectionPoint must be associated with at most one Connection using the relation connectsThrough." ; + sh:class s223:Connection ; + sh:maxCount 1 ; + sh:message "This ConnectionPoint must be associated with at most one Connection." ; + sh:name "ConnectionPointToConnectionShape" ; + sh:path s223:connectsThrough ; + sh:severity sh:Info ], + [ rdfs:comment "If the relation hasElectricalPhase is present it must associate the ConnectionPoint with an ElectricalPhaseIdentifier or ElectricalVoltagePhases." ; + sh:or ( [ sh:class s223:Aspect-ElectricalPhaseIdentifier ] [ sh:class s223:Aspect-ElectricalVoltagePhases ] ) ; + sh:path s223:hasElectricalPhase ], + [ rdfs:comment "A ConnectionPoint must be associated with exactly one Substance-Medium using the relation hasMedium." ; + sh:class s223:Substance-Medium ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "ConnectionPoint medium" ; + sh:path s223:hasMedium ], + [ rdfs:comment "If the relation hasRole is present it must associate the ConnectionPoint with an EnumerationKind-Role." ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment "A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf." ; + sh:class s223:Connectable ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "ConnectionPointToEquipmentShape" ; + sh:path s223:isConnectionPointOf ], + [ rdfs:comment "A ConnectionPoint can be associated with at most one other ConnectionPoint using the relation mapsTo" ; + sh:class s223:ConnectionPoint ; + sh:maxCount 1 ; + sh:path s223:mapsTo ], + [ rdfs:comment "A ConnectionPoint can be associated with at most one other ConnectionPoint using the inverse of relation mapsTo" ; + sh:class s223:ConnectionPoint ; + sh:maxCount 1 ; + sh:path [ sh:inversePath s223:mapsTo ] ] . s223:DCVoltage-DCZeroVoltage a s223:Class, s223:DCVoltage-DCZeroVoltage, @@ -6088,10 +6088,7 @@ s223:OutletConnectionPoint a s223:Class, rdfs:label "Outlet Connection Point" ; rdfs:comment "An OutletConnectionPoint indicates that a substance must flow out of a Connectable (see 's223:Connectable') at this connection point and cannot flow in the other direction. An OutletConnectionPoint is a predefined subclass of ConnectionPoint." ; rdfs:subClassOf s223:ConnectionPoint ; - sh:property [ rdfs:comment "If the relation mapsTo is present it must associate the OutletConnectionPoint with an OutletConnectionPoint." ; - sh:class s223:OutletConnectionPoint ; - sh:path s223:mapsTo ], - [ rdfs:comment "Ensure an OutletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection" ; + sh:property [ rdfs:comment "Ensure an OutletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection" ; sh:path s223:mapsTo ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "Ensure an OutletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection" ; @@ -6106,17 +6103,17 @@ $this s223:connectsThrough/s223:connectsTo ?destinationEquipment . FILTER NOT EXISTS {?parentEquipment s223:contains ?destinationEquipment} . FILTER NOT EXISTS {$this s223:mapsTo ?anything} . } -""" ] ] . +""" ] ], + [ rdfs:comment "If the relation mapsTo is present it must associate the OutletConnectionPoint with an OutletConnectionPoint." ; + sh:class s223:OutletConnectionPoint ; + sh:path s223:mapsTo ] . s223:InletConnectionPoint a s223:Class, sh:NodeShape ; rdfs:label "Inlet Connection Point" ; rdfs:comment "An InletConnectionPoint indicates that a substance must flow into the equipment or domain space at this connection point and cannot flow the other direction. An IntletConnectionPoint is a subclass of ConnectionPoint." ; rdfs:subClassOf s223:ConnectionPoint ; - sh:property [ rdfs:comment "If the relation mapsTo is present it must associate the InletConnectionPoint with an InletConnectionPoint." ; - sh:class s223:InletConnectionPoint ; - sh:path s223:mapsTo ], - [ rdfs:comment "Ensure an InletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection" ; + sh:property [ rdfs:comment "Ensure an InletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection" ; sh:path s223:mapsTo ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "Ensure an InletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection" ; @@ -6131,7 +6128,10 @@ $this s223:connectsThrough/s223:connectsFrom ?sourceEquipment . FILTER NOT EXISTS {?parentEquipment s223:contains ?sourceEquipment} . FILTER NOT EXISTS {$this s223:mapsTo ?anything} . } -""" ] ] . +""" ] ], + [ rdfs:comment "If the relation mapsTo is present it must associate the InletConnectionPoint with an InletConnectionPoint." ; + sh:class s223:InletConnectionPoint ; + sh:path s223:mapsTo ] . s223:EnumerationKind-Aspect a s223:Class, s223:EnumerationKind-Aspect, @@ -6275,19 +6275,7 @@ s223:QuantifiableProperty a s223:Class, rdfs:comment "This class is for quantifiable values that describe an object (System, Equipment, etc.) that are typically static (hasValue). That is, they are neither measured nor specified in the course of operations." ; rdfs:subClassOf s223:Property, qudt:Quantity ; - sh:property [ rdfs:comment "A QuantifiableProperty can be associated with a decimal value using the relation hasValue." ; - sh:datatype xsd:decimal ; - sh:path s223:hasValue ], - [ rdfs:comment "A QuantifiableProperty must be associated with at least one QuantityKind using the relation hasQuantityKind." ; - sh:class qudt:QuantityKind ; - sh:minCount 1 ; - sh:path qudt:hasQuantityKind ], - [ rdfs:comment "A QuantifiableProperty must be associated with at least one Unit using the relation hasUnit." ; - sh:class qudt:Unit ; - sh:minCount 1 ; - sh:path qudt:hasUnit ; - sh:severity sh:Info ], - [ rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it." ; + sh:property [ rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it." ; sh:path qudt:hasUnit ; sh:severity sh:Info ; sh:sparql [ a sh:SPARQLConstraint ; @@ -6341,7 +6329,19 @@ $this s223:hasSetpoint ?setpoint . FILTER (?punit != ?sunit) . FILTER (?pdv != ?sdv) . } -""" ] ] ; +""" ] ], + [ rdfs:comment "A QuantifiableProperty can be associated with a decimal value using the relation hasValue." ; + sh:datatype xsd:decimal ; + sh:path s223:hasValue ], + [ rdfs:comment "A QuantifiableProperty must be associated with at least one QuantityKind using the relation hasQuantityKind." ; + sh:class qudt:QuantityKind ; + sh:minCount 1 ; + sh:path qudt:hasQuantityKind ], + [ rdfs:comment "A QuantifiableProperty must be associated with at least one Unit using the relation hasUnit." ; + sh:class qudt:Unit ; + sh:minCount 1 ; + sh:path qudt:hasUnit ; + sh:severity sh:Info ] ; sh:rule [ a sh:SPARQLRule ; rdfs:comment "Infer the hasQuantityKind relation if it is unambiguous." ; sh:construct """