diff --git a/generate_interactive_doc.py b/generate_interactive_doc.py index 7f24d87..f59bacf 100644 --- a/generate_interactive_doc.py +++ b/generate_interactive_doc.py @@ -12,6 +12,7 @@ def simplify_node(node): if isinstance(node, BNode): return stable_id(node) + return g.namespace_manager.qname(node) for prefix, namespace in g.namespace_manager.namespaces(): if str(node).startswith(namespace): return prefix + ":" + str(node)[len(namespace):] @@ -142,6 +143,38 @@ def get_all_constraints(g): seen = set() +# add all nodeshapes that are not classes +for node_shape in set(g.subjects(predicate=RDF["type"], object=SH.NodeShape)): + # check it's not a class + if (node_shape, RDF["type"], S223["Class"]) in g: + continue + + if isinstance(node_shape, BNode): + node_name = stable_id(node_shape) + else: + node_name = simplify_node(node_shape) + # avoid duplicates + if node_name in seen: + continue + seen.add(node_name) + + immediate_subgraph = g.cbd(node_shape) + bind_namespaces(immediate_subgraph) + subgraph = get_subgraph(g, node_shape) + bind_namespaces(subgraph) + + name_or_label = g.value(node_shape, SH["name"]) or g.value(node_shape, RDFS["label"]) + message_or_comment = g.value(node_shape, SH["message"]) or g.value(node_shape, RDFS.comment) + label = name_or_label or message_or_comment or "Node Shape" + prop_defns.append({ + "class": None if isinstance(node_shape, BNode) else node_shape, + "name": node_name, + "label": label, + "immediate_subgraph": immediate_subgraph, + "subgraph": subgraph, + "see_alsos": [], + }) + # TODO: do this for property shapes! for property_shape in set(g.objects(predicate=SH["property"])): if isinstance(property_shape, BNode): diff --git a/index.html b/index.html index 5681742..923b1c3 100644 --- a/index.html +++ b/index.html @@ -1319,29 +1319,7 @@

Connectable

s223:abstract true ; rdfs:comment "Connectable is an abstract class representing a thing (Equipment or DomainSpace) 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" ; @@ -1365,7 +1343,29 @@

Connectable

$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 relationship for BiDirectional connections" ; sh:construct """ @@ -1520,7 +1520,14 @@

Details

s223:abstract true ; rdfs:comment "Connectable is an abstract class representing a thing (Equipment or DomainSpace) 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:property [ rdfs:comment "For a Connectable, cnx relation must associate the Connectable to a ConnectionPoint" ; + sh:path s223:cnx ; + sh:sparql [ ] ], + [ rdfs:comment "If one ConnectionPoint mapsTo another ConnectionPoint, the respective Equipment shall have a contains relation." ; + sh:path s223:mapsTo ; + sh:severity sh:Warning ; + sh:sparql [ ] ], + [ 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." ; @@ -1541,14 +1548,7 @@

Details

[ 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:path s223:cnx ; - sh:sparql [ ] ], - [ rdfs:comment "If one ConnectionPoint mapsTo another ConnectionPoint, the respective Equipment shall have a contains relation." ; - sh:path s223:mapsTo ; - sh:severity sh:Warning ; - sh:sparql [ ] ] ; + sh:path s223:hasConnectionPoint ] ; sh:rule [ ], [ ], [ ], @@ -1576,48 +1576,7 @@

Details

""" ; 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: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 "A ConnectionPoint 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 "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: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 ; @@ -1697,7 +1656,48 @@

Details

?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: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 "A ConnectionPoint 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 "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: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 ] ] . @@ -1722,37 +1722,7 @@

Connection

![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) """ ; rdfs:subClassOf s223:Concept ; - 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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; - sh:class s223:EnumerationKind-Phase ; - sh:maxCount 1 ; - sh:path s223:hasPhase ], - [ 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 "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" ; @@ -1802,7 +1772,37 @@

Connection

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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; + sh:class s223:EnumerationKind-Phase ; + sh:maxCount 1 ; + sh:path s223:hasPhase ], + [ 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 "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 relationship" ; sh:construct """ @@ -1889,7 +1889,18 @@

Details

![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) """ ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "If the relation connectsAt is present it must associate the Connection with a ConnectionPoint." ; + sh:property [ rdfs:comment "A Connection must only have a cnx relation with a ConnectionPoint" ; + sh:path s223:cnx ; + sh:sparql [ ] ], + [ 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." ; + sh:name "Test for compatible declared Medium" ; + sh:path s223:hasMedium ; + sh:sparql [ ] ], + [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another." ; + sh:name "Test for compatible declared Medium" ; + sh:path s223:hasMedium ; + sh:sparql [ ] ], + [ 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." ; @@ -1918,18 +1929,7 @@

Details

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:path s223:cnx ; - sh:sparql [ ] ], - [ 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." ; - sh:name "Test for compatible declared Medium" ; - sh:path s223:hasMedium ; - sh:sparql [ ] ], - [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another." ; - sh:name "Test for compatible declared Medium" ; - sh:path s223:hasMedium ; - sh:sparql [ ] ] ; + sh:severity sh:Info ] ; sh:rule [ ], [ ], [ ], @@ -1941,7 +1941,11 @@

Details

rdfs:label "Differential sensor" ; rdfs:comment "A sensor that measures the difference of a quantity between any two points in the system." ; rdfs:subClassOf s223:AbstractSensor ; - sh:property [ rdfs:comment "A Differential Sensor must have different values for hasObservationLocationHigh and hasObservationLocationLow." ; + sh:property [ rdfs:comment "A Differential Sensor must be defined in terms of the QuantityKind that is being measured." ; + sh:class <http://qudt.org/schema/qudt/QuantityKind> ; + sh:minCount 1 ; + sh:path ( s223:observes <http://qudt.org/schema/qudt/hasQuantityKind> ) ], + [ rdfs:comment "A Differential Sensor must have different values for hasObservationLocationHigh and hasObservationLocationLow." ; sh:path s223:hasObservationLocationHigh ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "Ensure that the values of hasObservationLocationHigh and hasObservationLocationLow are distinct." ; @@ -1954,11 +1958,7 @@

Details

?this s223:hasObservationLocationLow ?low . FILTER (?high = ?low) . } -""" ] ], - [ rdfs:comment "A Differential Sensor must be defined in terms of the QuantityKind that is being measured." ; - sh:class <http://qudt.org/schema/qudt/QuantityKind> ; - sh:minCount 1 ; - sh:path ( s223:observes <http://qudt.org/schema/qudt/hasQuantityKind> ) ] ; +""" ] ] ; sh:xone ( [ sh:property [ rdfs:comment "A DifferentialSensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocationHigh." ; sh:class s223:Connectable ; sh:maxCount 1 ; @@ -2006,12 +2006,7 @@

Details

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 ; @@ -2050,7 +2045,12 @@

Details

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:Sensor a s223:Class, sh:NodeShape ; @@ -2115,10 +2115,7 @@

Details

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" ; @@ -2134,17 +2131,17 @@

Details

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:OutletConnectionPoint a s223:Class, sh:NodeShape ; rdfs:label "Outlet Connection Point" ; rdfs:comment "An OutletConnectionPoint indicates that a substance must flow out of the domain space 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" ; @@ -2160,7 +2157,10 @@

Details

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:Connectable a s223:Class, sh:NodeShape ; @@ -2168,28 +2168,7 @@

Details

s223:abstract true ; rdfs:comment "Connectable is an abstract class representing a thing (Equipment or DomainSpace) 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: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" ; @@ -2213,7 +2192,28 @@

Details

$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: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 relationship for BiDirectional connections" ; sh:construct """ @@ -2305,48 +2305,7 @@

Details

""" ; 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:qualifiedValueShapesDisjoint true ], - [ rdfs:comment "A ConnectionPoint must be associated with at most one Connection using the relation connectsThrough." ; - 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 "A ConnectionPoint 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 "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 ; @@ -2426,40 +2385,8 @@

Details

?otherEquipment s223:hasConnectionPoint ?otherCP . FILTER NOT EXISTS {?otherEquipment s223:contains ?equipment} } -""" ] ] . - - - - - - -
-

ConnectionPoint

-

URI: http://data.ashrae.org/standard223#ConnectionPoint

-

-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-@prefix s223: <http://data.ashrae.org/standard223#> .
-@prefix sh: <http://www.w3.org/ns/shacl#> .
-@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-
-s223:ConnectionPoint a s223:Class,
-        sh:NodeShape ;
-    rdfs:label "ConnectionPoint" ;
-    s223:abstract true ;
-    rdfs:comment """
-A ConnectionPoint is an abstract modeling construct used to represent the fact that one connectable thing can be connected to another connectable thing using a Connection. It is the abstract representation of the flange, wire terminal, or other physical feature where a connection is made. Equipment and DomainSpaces can have one or more ConnectionPoints (see `s223:Connectable` and `s223:Connection`).
-
-A ConnectionPoint is constrained to relate to a specific medium such as air, water, or electricity which determines what other things can be connected to it. For example, constraining a ConnectionPoint to be for air means it cannot be used for an electrical connection.
-
-A ConnectionPoint belongs to exactly one connectable thing.
-
-ConnectionPoints are represented graphically in this standard by a triangle with the point indicating a direction of flow, or a diamond in the case of a bidirectional connection as shown in Figure 6-1. 
-
-![Graphical Representation of a ConnectionPoint.](figures/Figure_5-2_Graphical_Depiciton_of_Connection_Points.svg)
-
- """ ;
-    rdfs:subClassOf s223:Concept ;
-    sh:property [ rdfs:comment "A ConnectionPoint must be associated with at most one Connectable using the cnx relation." ;
+""" ] ],
+        [ 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 ;
@@ -2469,10 +2396,9 @@ 

ConnectionPointConnectionPoint

+ +
+ +
+

ConnectionPoint

+

URI: http://data.ashrae.org/standard223#ConnectionPoint

+

+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix s223: <http://data.ashrae.org/standard223#> .
+@prefix sh: <http://www.w3.org/ns/shacl#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+s223:ConnectionPoint a s223:Class,
+        sh:NodeShape ;
+    rdfs:label "ConnectionPoint" ;
+    s223:abstract true ;
+    rdfs:comment """
+A ConnectionPoint is an abstract modeling construct used to represent the fact that one connectable thing can be connected to another connectable thing using a Connection. It is the abstract representation of the flange, wire terminal, or other physical feature where a connection is made. Equipment and DomainSpaces can have one or more ConnectionPoints (see `s223:Connectable` and `s223:Connection`).
+
+A ConnectionPoint is constrained to relate to a specific medium such as air, water, or electricity which determines what other things can be connected to it. For example, constraining a ConnectionPoint to be for air means it cannot be used for an electrical connection.
+
+A ConnectionPoint belongs to exactly one connectable thing.
+
+ConnectionPoints are represented graphically in this standard by a triangle with the point indicating a direction of flow, or a diamond in the case of a bidirectional connection as shown in Figure 6-1. 
+
+![Graphical Representation of a ConnectionPoint.](figures/Figure_5-2_Graphical_Depiciton_of_Connection_Points.svg)
+
+ """ ;
+    rdfs:subClassOf s223:Concept ;
+    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 ;
@@ -2581,7 +2539,49 @@ 

ConnectionPoint

@@ -2631,12 +2631,7 @@

Details

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 ; @@ -2675,7 +2670,12 @@

Details

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:Sensor a s223:Class, sh:NodeShape ; @@ -2746,7 +2746,25 @@

Details

""" ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "A ConnectionPoint must be associated with at most one Connectable using the cnx relation." ; + 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 [ ] ], + [ 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." ; + sh:name "Test for compatible declared Medium" ; + sh:path s223:hasMedium ; + sh:sparql [ ] ], + [ rdfs:comment "A ConnectionPoint must not have both a mapsTo and a connectsThrough relation." ; + sh:path s223:mapsTo ; + sh:sparql [ ] ], + [ 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." ; + sh:path s223:mapsTo ; + sh:severity sh:Info ; + sh:sparql [ ] ], + [ rdfs:comment "If a ConnectionPoint mapsTo another ConnectionPoint, the respective Equipment should have a contains relation." ; + sh:path s223:mapsTo ; + sh:sparql [ ] ], + [ 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 ; @@ -2787,25 +2805,7 @@

Details

[ 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 [ ] ], - [ 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 [ ] ], - [ 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." ; - sh:name "Test for compatible declared Medium" ; - sh:path s223:hasMedium ; - sh:sparql [ ] ], - [ rdfs:comment "A ConnectionPoint must not have both a mapsTo and a connectsThrough relation." ; - sh:path s223:mapsTo ; - sh:sparql [ ] ], - [ 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." ; - sh:path s223:mapsTo ; - sh:severity sh:Info ; - sh:sparql [ ] ], - [ rdfs:comment "If a ConnectionPoint mapsTo another ConnectionPoint, the respective Equipment should have a contains relation." ; - sh:path s223:mapsTo ; - sh:sparql [ ] ] . + sh:path [ ] ] . s223:Connection a s223:Class, sh:NodeShape ; @@ -2816,35 +2816,7 @@

Details

![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) """ ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "If the relation connectsAt is present it must associate the Connection with a 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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; - sh:class s223:EnumerationKind-Phase ; - sh:maxCount 1 ; - sh:path s223:hasPhase ], - [ 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 "A Connection must have two or more cnx relations to ConnectionPoints" ; - 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" ; @@ -2894,11 +2866,39 @@

Details

FILTER (NOT EXISTS {?m2 a/rdfs:subClassOf* ?m1}) . FILTER (NOT EXISTS {?m1 a/rdfs:subClassOf* ?m2}) . } -""" ] ] ; - sh:rule [ a sh:SPARQLRule ; - rdfs:comment "Infer the connectsFrom relationship" ; - sh:construct """ -CONSTRUCT {$this s223:connectsFrom ?equipment .} +""" ] ], + [ rdfs:comment "If the relation connectsAt is present it must associate the Connection with a 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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; + sh:class s223:EnumerationKind-Phase ; + sh:maxCount 1 ; + sh:path s223:hasPhase ], + [ 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 "A Connection must have two or more cnx relations to ConnectionPoints" ; + 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 relationship" ; + sh:construct """ +CONSTRUCT {$this s223:connectsFrom ?equipment .} WHERE { $this s223:connectsAt ?cp . ?cp a s223:OutletConnectionPoint . @@ -2944,27 +2944,7 @@

Details

s223:abstract true ; rdfs:comment "Connectable is an abstract class representing a thing (Equipment or DomainSpace) 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: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: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" ; @@ -2988,7 +2968,27 @@

Details

$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: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:name "EquipmentToConnectionPointShape" ; + sh:path s223:hasConnectionPoint ] ; sh:rule [ a sh:SPARQLRule ; rdfs:comment "Infer the connected relationship for BiDirectional connections" ; sh:construct """ @@ -3566,7 +3566,11 @@

Differential rdfs:label "Differential sensor" ; rdfs:comment "A sensor that measures the difference of a quantity between any two points in the system." ; rdfs:subClassOf s223:AbstractSensor ; - sh:property [ rdfs:comment "A Differential Sensor must have different values for hasObservationLocationHigh and hasObservationLocationLow." ; + sh:property [ rdfs:comment "A Differential Sensor must be defined in terms of the QuantityKind that is being measured." ; + sh:class <http://qudt.org/schema/qudt/QuantityKind> ; + sh:minCount 1 ; + sh:path ( s223:observes <http://qudt.org/schema/qudt/hasQuantityKind> ) ], + [ rdfs:comment "A Differential Sensor must have different values for hasObservationLocationHigh and hasObservationLocationLow." ; sh:path s223:hasObservationLocationHigh ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "Ensure that the values of hasObservationLocationHigh and hasObservationLocationLow are distinct." ; @@ -3579,11 +3583,7 @@

Differential ?this s223:hasObservationLocationLow ?low . FILTER (?high = ?low) . } -""" ] ], - [ rdfs:comment "A Differential Sensor must be defined in terms of the QuantityKind that is being measured." ; - sh:class <http://qudt.org/schema/qudt/QuantityKind> ; - sh:minCount 1 ; - sh:path ( s223:observes <http://qudt.org/schema/qudt/hasQuantityKind> ) ] ; +""" ] ] ; sh:xone ( [ sh:property [ rdfs:comment "A DifferentialSensor must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasObservationLocationHigh." ; sh:class s223:Connectable ; sh:maxCount 1 ; @@ -3628,13 +3628,13 @@

Details

rdfs:label "Differential sensor" ; rdfs:comment "A sensor that measures the difference of a quantity between any two points in the system." ; rdfs:subClassOf s223:AbstractSensor ; - sh:property [ rdfs:comment "A Differential Sensor must have different values for hasObservationLocationHigh and hasObservationLocationLow." ; - sh:path s223:hasObservationLocationHigh ; - sh:sparql [ ] ], - [ rdfs:comment "A Differential Sensor must be defined in terms of the QuantityKind that is being measured." ; + sh:property [ rdfs:comment "A Differential Sensor must be defined in terms of the QuantityKind that is being measured." ; sh:class <http://qudt.org/schema/qudt/QuantityKind> ; sh:minCount 1 ; - sh:path [ ] ] ; + sh:path [ ] ], + [ rdfs:comment "A Differential Sensor must have different values for hasObservationLocationHigh and hasObservationLocationLow." ; + sh:path s223:hasObservationLocationHigh ; + sh:sparql [ ] ] ; sh:xone [ ], [ ] . @@ -4128,16 +4128,16 @@

Domain Space

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 ) ] ; @@ -4173,37 +4173,7 @@

Details

![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) """ ; rdfs:subClassOf s223:Concept ; - 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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; - sh:class s223:EnumerationKind-Phase ; - sh:maxCount 1 ; - sh:path s223:hasPhase ], - [ 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 "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" ; @@ -4253,7 +4223,37 @@

Details

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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; + sh:class s223:EnumerationKind-Phase ; + sh:maxCount 1 ; + sh:path s223:hasPhase ], + [ 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 "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 relationship" ; sh:construct """ @@ -4302,16 +4302,16 @@

Details

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: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 [ ] . s223:encloses a rdf:Property ; @@ -4981,12 +4981,7 @@

Enumerable P 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." ; @@ -4999,7 +4994,12 @@

Enumerable P $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 ] . @@ -5018,14 +5018,14 @@

Details

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:property [ rdfs:comment "Checks for valid enumeration value consistent with the stated EnumerationKind." ; + sh:path s223:hasValue ; + sh:sparql [ ] ], + [ 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:path s223:hasValue ; - sh:sparql [ ] ] . + sh:path s223:hasEnumerationKind ] .
@@ -5280,7 +5280,13 @@

Details

rdfs:label "Heat exchanger" ; rdfs:comment "A component intended to transfer heat from one medium to another while keeping the two media separate" ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points." ; + sh:property [ rdfs:comment "A heat exchanger shall have at least 4 connection points." ; + sh:minCount 4 ; + sh:path s223:hasConnectionPoint ], + [ rdfs:comment "If the relation hasRole is present it must associate the HeatExchanger with a EnumerationKind-Role." ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points." ; sh:path s223:hasConnectionPoint ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; @@ -5316,29 +5322,14 @@

Details

} FILTER (?incount != ?outcount) } -""" ] ], - [ rdfs:comment "A heat exchanger shall have at least 4 connection points." ; - sh:minCount 4 ; - sh:path s223:hasConnectionPoint ], - [ rdfs:comment "If the relation hasRole is present it must associate the HeatExchanger with a EnumerationKind-Role." ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ] . +""" ] ] . s223:Zone a s223:Class, sh:NodeShape ; 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." ; @@ -5353,7 +5344,16 @@

Details

?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 ) ] ; @@ -5391,16 +5391,16 @@

Details

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 ) ] ; @@ -5590,37 +5590,7 @@

Details

![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) """ ; rdfs:subClassOf s223:Concept ; - 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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; - sh:class s223:EnumerationKind-Phase ; - sh:maxCount 1 ; - sh:path s223:hasPhase ], - [ 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 "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" ; @@ -5670,23 +5640,53 @@

Details

FILTER (NOT EXISTS {?m2 a/rdfs:subClassOf* ?m1}) . FILTER (NOT EXISTS {?m1 a/rdfs:subClassOf* ?m2}) . } -""" ] ] ; - sh:rule [ a sh:SPARQLRule ; - rdfs:comment "Infer the connectsFrom relationship" ; - sh:construct """ -CONSTRUCT {$this s223:connectsFrom ?equipment .} -WHERE { -$this s223:connectsAt ?cp . -?cp a s223:OutletConnectionPoint . -?cp s223:isConnectionPointOf ?equipment . -} -""" ; - sh:name "InferredConnectionToUpstreamEquipmentProperty" ; - sh:prefixes <http://data.ashrae.org/standard223/1.0/inference/model-rules> ], - [ a sh:SPARQLRule ; - rdfs:comment "Infer the connectsTo relationship" ; - sh:construct """ -CONSTRUCT {$this s223:connectsTo ?equipment .} +""" ] ], + [ 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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; + sh:class s223:EnumerationKind-Phase ; + sh:maxCount 1 ; + sh:path s223:hasPhase ], + [ 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 "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 relationship" ; + sh:construct """ +CONSTRUCT {$this s223:connectsFrom ?equipment .} +WHERE { +$this s223:connectsAt ?cp . +?cp a s223:OutletConnectionPoint . +?cp s223:isConnectionPointOf ?equipment . +} +""" ; + sh:name "InferredConnectionToUpstreamEquipmentProperty" ; + sh:prefixes <http://data.ashrae.org/standard223/1.0/inference/model-rules> ], + [ a sh:SPARQLRule ; + rdfs:comment "Infer the connectsTo relationship" ; + sh:construct """ +CONSTRUCT {$this s223:connectsTo ?equipment .} WHERE { $this s223:connectsAt ?cp . ?cp a s223:InletConnectionPoint . @@ -5733,7 +5733,24 @@

Details

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)""" ; rdfs:subClassOf s223:Connectable ; - sh:property [ rdfs:comment "If a contained equipment has external connections, make sure that the containing equipment has the same external connections." ; + sh:property [ a sh:PropertyShape ; + rdfs:comment "If the relation contains is present it must associate the Equipment with either Equipment or Junction." ; + sh:name "device contains shape" ; + sh:or ( [ sh:class s223:Equipment ] [ sh:class s223:Junction ] ) ; + sh:path s223:contains ], + [ rdfs:comment "If the relation commandedByProperty is present it must associate the Equipment with a ActuatableProperty." ; + sh:class s223:ActuatableProperty ; + sh:path s223:commandedByProperty ], + [ rdfs:comment "If the relation executes is present it must associate the Equipment with a FunctionBlock." ; + sh:class s223:FunctionBlock ; + sh:path s223:executes ], + [ rdfs:comment "If the relation hasPhysicalLocation is present it must associate the Equipment with a PhysicalSpace." ; + sh:class s223:PhysicalSpace ; + sh:path s223:hasPhysicalLocation ], + [ rdfs:comment "If the relation hasRole is present it must associate the Equipment with a EnumerationKind-Role." ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment "If a contained equipment has external connections, make sure that the containing equipment has the same external connections." ; sh:path s223:connectedFrom ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "If a contained equipment has external connections, make sure that the containing equipment has the same external connections." ; @@ -5788,24 +5805,7 @@

Details

?type1 rdfs:subClassOf* ?type2 . } } -""" ] ], - [ a sh:PropertyShape ; - rdfs:comment "If the relation contains is present it must associate the Equipment with either Equipment or Junction." ; - sh:name "device contains shape" ; - sh:or ( [ sh:class s223:Equipment ] [ sh:class s223:Junction ] ) ; - sh:path s223:contains ], - [ rdfs:comment "If the relation commandedByProperty is present it must associate the Equipment with a ActuatableProperty." ; - sh:class s223:ActuatableProperty ; - sh:path s223:commandedByProperty ], - [ rdfs:comment "If the relation executes is present it must associate the Equipment with a FunctionBlock." ; - sh:class s223:FunctionBlock ; - sh:path s223:executes ], - [ rdfs:comment "If the relation hasPhysicalLocation is present it must associate the Equipment with a PhysicalSpace." ; - sh:class s223:PhysicalSpace ; - sh:path s223:hasPhysicalLocation ], - [ rdfs:comment "If the relation hasRole is present it must associate the Equipment with a EnumerationKind-Role." ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ] ; +""" ] ] ; sh:rule [ a sh:SPARQLRule ; rdfs:comment "For equipment contained within another piece of equipment use the mapsTo relation to infer a Medium from the containing equipment." ; sh:construct """ @@ -5854,49 +5854,7 @@

Details

""" ; 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 "A ConnectionPoint 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 "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 ; @@ -5976,7 +5934,49 @@

Details

?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 "A ConnectionPoint 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 "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:EnumerationKind-Context a s223:Class, s223:EnumerationKind-Context, @@ -6607,7 +6607,24 @@

Equipment

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)""" ; rdfs:subClassOf s223:Connectable ; - sh:property [ rdfs:comment "If a contained equipment has external connections, make sure that the containing equipment has the same external connections." ; + sh:property [ a sh:PropertyShape ; + rdfs:comment "If the relation contains is present it must associate the Equipment with either Equipment or Junction." ; + sh:name "device contains shape" ; + sh:or ( [ sh:class s223:Equipment ] [ sh:class s223:Junction ] ) ; + sh:path s223:contains ], + [ rdfs:comment "If the relation commandedByProperty is present it must associate the Equipment with a ActuatableProperty." ; + sh:class s223:ActuatableProperty ; + sh:path s223:commandedByProperty ], + [ rdfs:comment "If the relation executes is present it must associate the Equipment with a FunctionBlock." ; + sh:class s223:FunctionBlock ; + sh:path s223:executes ], + [ rdfs:comment "If the relation hasPhysicalLocation is present it must associate the Equipment with a PhysicalSpace." ; + sh:class s223:PhysicalSpace ; + sh:path s223:hasPhysicalLocation ], + [ rdfs:comment "If the relation hasRole is present it must associate the Equipment with a EnumerationKind-Role." ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment "If a contained equipment has external connections, make sure that the containing equipment has the same external connections." ; sh:path s223:connectedFrom ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "If a contained equipment has external connections, make sure that the containing equipment has the same external connections." ; @@ -6662,24 +6679,7 @@

Equipment

?type1 rdfs:subClassOf* ?type2 . } } -""" ] ], - [ a sh:PropertyShape ; - rdfs:comment "If the relation contains is present it must associate the Equipment with either Equipment or Junction." ; - sh:name "device contains shape" ; - sh:or ( [ sh:class s223:Equipment ] [ sh:class s223:Junction ] ) ; - sh:path s223:contains ], - [ rdfs:comment "If the relation commandedByProperty is present it must associate the Equipment with a ActuatableProperty." ; - sh:class s223:ActuatableProperty ; - sh:path s223:commandedByProperty ], - [ rdfs:comment "If the relation executes is present it must associate the Equipment with a FunctionBlock." ; - sh:class s223:FunctionBlock ; - sh:path s223:executes ], - [ rdfs:comment "If the relation hasPhysicalLocation is present it must associate the Equipment with a PhysicalSpace." ; - sh:class s223:PhysicalSpace ; - sh:path s223:hasPhysicalLocation ], - [ rdfs:comment "If the relation hasRole is present it must associate the Equipment with a EnumerationKind-Role." ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ] ; +""" ] ] ; sh:rule [ a sh:SPARQLRule ; rdfs:comment "For equipment contained within another piece of equipment use the mapsTo relation to infer a Medium from the containing equipment." ; sh:construct """ @@ -6744,37 +6744,7 @@

Details

![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) """ ; rdfs:subClassOf s223:Concept ; - 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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; - sh:class s223:EnumerationKind-Phase ; - sh:maxCount 1 ; - sh:path s223:hasPhase ], - [ 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 "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" ; @@ -6824,33 +6794,63 @@

Details

FILTER (NOT EXISTS {?m2 a/rdfs:subClassOf* ?m1}) . FILTER (NOT EXISTS {?m1 a/rdfs:subClassOf* ?m2}) . } -""" ] ] ; - sh:rule [ a sh:SPARQLRule ; - rdfs:comment "Infer the connectsFrom relationship" ; - sh:construct """ -CONSTRUCT {$this s223:connectsFrom ?equipment .} -WHERE { -$this s223:connectsAt ?cp . -?cp a s223:OutletConnectionPoint . -?cp s223:isConnectionPointOf ?equipment . -} -""" ; - sh:name "InferredConnectionToUpstreamEquipmentProperty" ; - sh:prefixes <http://data.ashrae.org/standard223/1.0/inference/model-rules> ], - [ a sh:SPARQLRule ; - rdfs:comment "Infer the connectsTo relationship" ; - sh:construct """ -CONSTRUCT {$this s223:connectsTo ?equipment .} -WHERE { -$this s223:connectsAt ?cp . -?cp a s223:InletConnectionPoint . -?cp s223:isConnectionPointOf ?equipment . -} -""" ; - sh:name "InferredConnectionToDownstreamEquipmentProperty" ; - sh:prefixes <http://data.ashrae.org/standard223/1.0/inference/model-rules> ], - [ a sh:TripleRule ; - rdfs:comment "Infer cnx relationship from connectsAt", +""" ] ], + [ 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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; + sh:class s223:EnumerationKind-Phase ; + sh:maxCount 1 ; + sh:path s223:hasPhase ], + [ 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 "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 relationship" ; + sh:construct """ +CONSTRUCT {$this s223:connectsFrom ?equipment .} +WHERE { +$this s223:connectsAt ?cp . +?cp a s223:OutletConnectionPoint . +?cp s223:isConnectionPointOf ?equipment . +} +""" ; + sh:name "InferredConnectionToUpstreamEquipmentProperty" ; + sh:prefixes <http://data.ashrae.org/standard223/1.0/inference/model-rules> ], + [ a sh:SPARQLRule ; + rdfs:comment "Infer the connectsTo relationship" ; + sh:construct """ +CONSTRUCT {$this s223:connectsTo ?equipment .} +WHERE { +$this s223:connectsAt ?cp . +?cp a s223:InletConnectionPoint . +?cp s223:isConnectionPointOf ?equipment . +} +""" ; + sh:name "InferredConnectionToDownstreamEquipmentProperty" ; + sh:prefixes <http://data.ashrae.org/standard223/1.0/inference/model-rules> ], + [ a sh:TripleRule ; + rdfs:comment "Infer cnx relationship from connectsAt", "InferredConnectionToConnectionPointBaseProperty" ; sh:object [ sh:path s223:connectsAt ] ; sh:predicate s223:cnx ; @@ -6873,10 +6873,7 @@

Details

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" ; @@ -6892,17 +6889,17 @@

Details

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:OutletConnectionPoint a s223:Class, sh:NodeShape ; rdfs:label "Outlet Connection Point" ; rdfs:comment "An OutletConnectionPoint indicates that a substance must flow out of the domain space 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" ; @@ -6918,7 +6915,10 @@

Details

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:hasPhysicalLocation a rdf:Property ; rdfs:label "has Physical Location" ; @@ -6931,17 +6931,7 @@

Details

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)""" ; rdfs:subClassOf s223:Connectable ; - sh:property [ rdfs:comment "If a contained equipment has external connections, make sure that the containing equipment has the same external connections." ; - sh:path s223:connectedFrom ; - sh:sparql [ ] ], - [ rdfs:comment "Make sure that a containing Equipment inherits the outgoing connectedTo relations of contained Equipment if they are not internal connections." ; - sh:path s223:connectedTo ; - sh:sparql [ ] ], - [ rdfs:comment "Warning about a subClass of Equipment of type A containing something that is in the same subClass branch." ; - sh:path s223:contains ; - sh:severity sh:Warning ; - sh:sparql [ ] ], - [ a sh:PropertyShape ; + sh:property [ a sh:PropertyShape ; rdfs:comment "If the relation contains is present it must associate the Equipment with either Equipment or Junction." ; sh:name "device contains shape" ; sh:or [ rdf:first [ ] ; @@ -6958,7 +6948,17 @@

Details

sh:path s223:hasPhysicalLocation ], [ rdfs:comment "If the relation hasRole is present it must associate the Equipment with a EnumerationKind-Role." ; sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ] ; + sh:path s223:hasRole ], + [ rdfs:comment "If a contained equipment has external connections, make sure that the containing equipment has the same external connections." ; + sh:path s223:connectedFrom ; + sh:sparql [ ] ], + [ rdfs:comment "Make sure that a containing Equipment inherits the outgoing connectedTo relations of contained Equipment if they are not internal connections." ; + sh:path s223:connectedTo ; + sh:sparql [ ] ], + [ rdfs:comment "Warning about a subClass of Equipment of type A containing something that is in the same subClass branch." ; + sh:path s223:contains ; + sh:severity sh:Warning ; + sh:sparql [ ] ] ; sh:rule [ ], [ ] . @@ -7675,7 +7675,13 @@

Heat exchanger

Heat exchanger @@ -7736,16 +7736,16 @@

Details

rdfs:label "Heat exchanger" ; rdfs:comment "A component intended to transfer heat from one medium to another while keeping the two media separate" ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points." ; - sh:path s223:hasConnectionPoint ; - sh:severity sh:Warning ; - sh:sparql [ ] ], - [ rdfs:comment "A heat exchanger shall have at least 4 connection points." ; + sh:property [ rdfs:comment "A heat exchanger shall have at least 4 connection points." ; sh:minCount 4 ; sh:path s223:hasConnectionPoint ], [ rdfs:comment "If the relation hasRole is present it must associate the HeatExchanger with a EnumerationKind-Role." ; sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ] . + sh:path s223:hasRole ], + [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points." ; + sh:path s223:hasConnectionPoint ; + sh:severity sh:Warning ; + sh:sparql [ ] ] . @@ -8045,10 +8045,7 @@

Inlet Co 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" ; @@ -8064,7 +8061,10 @@

Inlet Co 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 ] . @@ -8095,7 +8095,13 @@

Details

rdfs:label "Heat exchanger" ; rdfs:comment "A component intended to transfer heat from one medium to another while keeping the two media separate" ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points." ; + sh:property [ rdfs:comment "A heat exchanger shall have at least 4 connection points." ; + sh:minCount 4 ; + sh:path s223:hasConnectionPoint ], + [ rdfs:comment "If the relation hasRole is present it must associate the HeatExchanger with a EnumerationKind-Role." ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points." ; sh:path s223:hasConnectionPoint ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; @@ -8131,13 +8137,7 @@

Details

} FILTER (?incount != ?outcount) } -""" ] ], - [ rdfs:comment "A heat exchanger shall have at least 4 connection points." ; - sh:minCount 4 ; - sh:path s223:hasConnectionPoint ], - [ rdfs:comment "If the relation hasRole is present it must associate the HeatExchanger with a EnumerationKind-Role." ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ] . +""" ] ] . s223:Connection a s223:Class, sh:NodeShape ; @@ -8148,37 +8148,7 @@

Details

![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) """ ; rdfs:subClassOf s223:Concept ; - 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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; - sh:class s223:EnumerationKind-Phase ; - sh:maxCount 1 ; - sh:path s223:hasPhase ], - [ 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 "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" ; @@ -8228,7 +8198,37 @@

Details

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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; + sh:class s223:EnumerationKind-Phase ; + sh:maxCount 1 ; + sh:path s223:hasPhase ], + [ 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 "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 relationship" ; sh:construct """ @@ -8277,12 +8277,12 @@

Details

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 [ ] ] . + sh:sparql [ ] ], + [ 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:Connectable a s223:Class, sh:NodeShape ; @@ -8290,29 +8290,7 @@

Details

s223:abstract true ; rdfs:comment "Connectable is an abstract class representing a thing (Equipment or DomainSpace) 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" ; @@ -8336,7 +8314,29 @@

Details

$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 relationship for BiDirectional connections" ; sh:construct """ @@ -8510,12 +8510,7 @@

Junction

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 ; @@ -8554,7 +8549,12 @@

Junction

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 ] . @@ -8585,37 +8585,7 @@

Details

![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) """ ; rdfs:subClassOf s223:Concept ; - 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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; - sh:class s223:EnumerationKind-Phase ; - sh:maxCount 1 ; - sh:path s223:hasPhase ], - [ 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 "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" ; @@ -8665,7 +8635,37 @@

Details

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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; + sh:class s223:EnumerationKind-Phase ; + sh:maxCount 1 ; + sh:path s223:hasPhase ], + [ 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 "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 relationship" ; sh:construct """ @@ -8716,19 +8716,19 @@

Details

rdfs:subClassOf s223:Connectable ; sh:or [ rdf:first [ ] ; rdf:rest [ ] ] ; - 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 [ ] ], [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another." ; sh:name "Test for compatible declared Medium" ; sh:path s223:hasMedium ; - sh:sparql [ ] ] . + sh:sparql [ ] ], + [ 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 ] . @@ -9023,7 +9023,13 @@

Details

rdfs:label "Heat exchanger" ; rdfs:comment "A component intended to transfer heat from one medium to another while keeping the two media separate" ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points." ; + sh:property [ rdfs:comment "A heat exchanger shall have at least 4 connection points." ; + sh:minCount 4 ; + sh:path s223:hasConnectionPoint ], + [ rdfs:comment "If the relation hasRole is present it must associate the HeatExchanger with a EnumerationKind-Role." ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points." ; sh:path s223:hasConnectionPoint ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; @@ -9059,20 +9065,32 @@

Details

} FILTER (?incount != ?outcount) } -""" ] ], - [ rdfs:comment "A heat exchanger shall have at least 4 connection points." ; - sh:minCount 4 ; - sh:path s223:hasConnectionPoint ], - [ rdfs:comment "If the relation hasRole is present it must associate the HeatExchanger with a EnumerationKind-Role." ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ] . +""" ] ] . s223:Pump a s223:Class, sh:NodeShape ; rdfs:label "Pump" ; 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." ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "The non-electrical ConnectionPoints of a Pump must have compatible Media." ; + sh:property [ rdfs:comment "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant." ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:or ( [ sh:property [ sh:class s223:Medium-Water ; + sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Refrigerant ; + sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Oil ; + sh:path s223:hasMedium ] ] ) ] ] ], + [ rdfs:comment "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant." ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:or ( [ sh:property [ sh:class s223:Medium-Water ; + sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Refrigerant ; + sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Oil ; + sh:path s223:hasMedium ] ] ) ] ] ], + [ rdfs:comment "The non-electrical ConnectionPoints of a Pump must have compatible Media." ; sh:path s223:hasConnectionPoint ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "The non-electrical ConnectionPoints of a Pump must have compatible Media." ; @@ -9092,25 +9110,7 @@

Details

FILTER (NOT EXISTS {?mediumb a/rdfs:subClassOf* ?mediuma}) . FILTER (NOT EXISTS {?mediuma a/rdfs:subClassOf* ?mediumb}) . } -""" ] ], - [ rdfs:comment "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant." ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:or ( [ sh:property [ sh:class s223:Medium-Water ; - sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Refrigerant ; - sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Oil ; - sh:path s223:hasMedium ] ] ) ] ] ], - [ rdfs:comment "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant." ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; - sh:node [ sh:or ( [ sh:property [ sh:class s223:Medium-Water ; - sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Refrigerant ; - sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Oil ; - sh:path s223:hasMedium ] ] ) ] ] ] . +""" ] ] . s223:Medium-Electricity a s223:Class, s223:Medium-Electricity, @@ -9956,10 +9956,7 @@

Outlet rdfs:label "Outlet Connection Point" ; rdfs:comment "An OutletConnectionPoint indicates that a substance must flow out of the domain space 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" ; @@ -9975,7 +9972,10 @@

Outlet 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 ] . @@ -10006,7 +10006,13 @@

Details

rdfs:label "Heat exchanger" ; rdfs:comment "A component intended to transfer heat from one medium to another while keeping the two media separate" ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points." ; + sh:property [ rdfs:comment "A heat exchanger shall have at least 4 connection points." ; + sh:minCount 4 ; + sh:path s223:hasConnectionPoint ], + [ rdfs:comment "If the relation hasRole is present it must associate the HeatExchanger with a EnumerationKind-Role." ; + sh:class s223:EnumerationKind-Role ; + sh:path s223:hasRole ], + [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points." ; sh:path s223:hasConnectionPoint ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; @@ -10042,13 +10048,7 @@

Details

} FILTER (?incount != ?outcount) } -""" ] ], - [ rdfs:comment "A heat exchanger shall have at least 4 connection points." ; - sh:minCount 4 ; - sh:path s223:hasConnectionPoint ], - [ rdfs:comment "If the relation hasRole is present it must associate the HeatExchanger with a EnumerationKind-Role." ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ] . +""" ] ] . s223:Connection a s223:Class, sh:NodeShape ; @@ -10059,37 +10059,7 @@

Details

![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) """ ; rdfs:subClassOf s223:Concept ; - 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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; - sh:class s223:EnumerationKind-Phase ; - sh:maxCount 1 ; - sh:path s223:hasPhase ], - [ 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 "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" ; @@ -10139,7 +10109,37 @@

Details

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 "A Connection can be associated with an EnumerationKind-Phase using the relation hasPhase." ; + sh:class s223:EnumerationKind-Phase ; + sh:maxCount 1 ; + sh:path s223:hasPhase ], + [ 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 "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 relationship" ; sh:construct """ @@ -10188,12 +10188,12 @@

Details

rdfs:label "Outlet Connection Point" ; rdfs:comment "An OutletConnectionPoint indicates that a substance must flow out of the domain space 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 [ ] ] . + sh:sparql [ ] ], + [ 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:Connectable a s223:Class, sh:NodeShape ; @@ -10201,29 +10201,7 @@

Details

s223:abstract true ; rdfs:comment "Connectable is an abstract class representing a thing (Equipment or DomainSpace) 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" ; @@ -10247,7 +10225,29 @@

Details

$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 relationship for BiDirectional connections" ; sh:construct """ @@ -10868,7 +10868,25 @@

Pump

rdfs:label "Pump" ; 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." ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "The non-electrical ConnectionPoints of a Pump must have compatible Media." ; + sh:property [ rdfs:comment "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant." ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:or ( [ sh:property [ sh:class s223:Medium-Water ; + sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Refrigerant ; + sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Oil ; + sh:path s223:hasMedium ] ] ) ] ] ], + [ rdfs:comment "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant." ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:or ( [ sh:property [ sh:class s223:Medium-Water ; + sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Refrigerant ; + sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Oil ; + sh:path s223:hasMedium ] ] ) ] ] ], + [ rdfs:comment "The non-electrical ConnectionPoints of a Pump must have compatible Media." ; sh:path s223:hasConnectionPoint ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "The non-electrical ConnectionPoints of a Pump must have compatible Media." ; @@ -10888,25 +10906,7 @@

Pump

FILTER (NOT EXISTS {?mediumb a/rdfs:subClassOf* ?mediuma}) . FILTER (NOT EXISTS {?mediuma a/rdfs:subClassOf* ?mediumb}) . } -""" ] ], - [ rdfs:comment "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant." ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:or ( [ sh:property [ sh:class s223:Medium-Water ; - sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Refrigerant ; - sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Oil ; - sh:path s223:hasMedium ] ] ) ] ] ], - [ rdfs:comment "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant." ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; - sh:node [ sh:or ( [ sh:property [ sh:class s223:Medium-Water ; - sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Refrigerant ; - sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Medium-Oil ; - sh:path s223:hasMedium ] ] ) ] ] ] . +""" ] ] . @@ -10925,10 +10925,7 @@

Details

rdfs:label "Pump" ; 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." ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "The non-electrical ConnectionPoints of a Pump must have compatible Media." ; - sh:path s223:hasConnectionPoint ; - sh:sparql [ ] ], - [ rdfs:comment "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant." ; + sh:property [ rdfs:comment "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant." ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -10937,7 +10934,10 @@

Details

sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ ] ] . + sh:qualifiedValueShape [ ] ], + [ rdfs:comment "The non-electrical ConnectionPoints of a Pump must have compatible Media." ; + sh:path s223:hasConnectionPoint ; + sh:sparql [ ] ] . @@ -11096,22 +11096,7 @@

Quantifi 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, <http://qudt.org/schema/qudt/Quantity> ; - sh:property [ rdfs:comment "If the relation hasSetpoint is present it must associate the QuantifiableProperty with a Setpoint." ; - sh:class s223:Setpoint ; - sh:path s223:hasSetpoint ], - [ 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 <http://qudt.org/schema/qudt/QuantityKind> ; - sh:minCount 1 ; - sh:path <http://qudt.org/schema/qudt/hasQuantityKind> ], - [ rdfs:comment "A QuantifiableProperty must be associated with at least one Unit using the relation hasUnit." ; - sh:class <http://qudt.org/schema/qudt/Unit> ; - sh:minCount 1 ; - sh:path <http://qudt.org/schema/qudt/hasUnit> ; - sh:severity sh:Info ], - [ rdfs:comment "This QuantifiableProperty and the Setpoint associated with it have non-commensurate QuantityKinds" ; + sh:property [ rdfs:comment "This QuantifiableProperty and the Setpoint associated with it have non-commensurate QuantityKinds" ; sh:path <http://qudt.org/schema/qudt/hasQuantityKind> ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "This QuantifiableProperty and the Setpoint associated with it have non-commensurate QuantityKinds" ; @@ -11165,7 +11150,22 @@

Quantifi FILTER (?punit != ?sunit) . FILTER (?pdv = ?sdv) . } -""" ] ] ; +""" ] ], + [ rdfs:comment "If the relation hasSetpoint is present it must associate the QuantifiableProperty with a Setpoint." ; + sh:class s223:Setpoint ; + sh:path s223:hasSetpoint ], + [ 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 <http://qudt.org/schema/qudt/QuantityKind> ; + sh:minCount 1 ; + sh:path <http://qudt.org/schema/qudt/hasQuantityKind> ], + [ rdfs:comment "A QuantifiableProperty must be associated with at least one Unit using the relation hasUnit." ; + sh:class <http://qudt.org/schema/qudt/Unit> ; + sh:minCount 1 ; + sh:path <http://qudt.org/schema/qudt/hasUnit> ; + sh:severity sh:Info ] ; sh:rule [ a sh:SPARQLRule ; rdfs:comment "Infer the hasQuantityKind relationship if it is unambiguous" ; sh:construct """ @@ -11274,7 +11274,17 @@

Details

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, ns1:Quantity ; - sh:property [ rdfs:comment "If the relation hasSetpoint is present it must associate the QuantifiableProperty with a Setpoint." ; + sh:property [ rdfs:comment "This QuantifiableProperty and the Setpoint associated with it have non-commensurate QuantityKinds" ; + sh:path ns1:hasQuantityKind ; + sh:sparql [ ] ], + [ rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units" ; + sh:path ns1:hasUnit ; + sh:sparql [ ] ], + [ rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it" ; + sh:path ns1:hasUnit ; + sh:severity sh:Info ; + sh:sparql [ ] ], + [ rdfs:comment "If the relation hasSetpoint is present it must associate the QuantifiableProperty with a Setpoint." ; sh:class s223:Setpoint ; sh:path s223:hasSetpoint ], [ rdfs:comment "A QuantifiableProperty can be associated with a decimal value using the relation hasValue" ; @@ -11288,17 +11298,7 @@

Details

sh:class ns1:Unit ; sh:minCount 1 ; sh:path ns1:hasUnit ; - sh:severity sh:Info ], - [ rdfs:comment "This QuantifiableProperty and the Setpoint associated with it have non-commensurate QuantityKinds" ; - sh:path ns1:hasQuantityKind ; - sh:sparql [ ] ], - [ rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units" ; - sh:path ns1:hasUnit ; - sh:sparql [ ] ], - [ rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it" ; - sh:path ns1:hasUnit ; - sh:severity sh:Info ; - sh:sparql [ ] ] ; + sh:severity sh:Info ] ; sh:rule [ ] ; sh:sparql [ ] . @@ -12680,16 +12680,7 @@

Zone

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." ; @@ -12704,7 +12695,16 @@

Zone

?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 ) ] ; @@ -12741,7 +12741,10 @@

Details

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: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 [ ] ], + [ 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 ; @@ -12749,10 +12752,7 @@

Details

[ 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:path s223:hasDomain ; - sh:sparql [ ] ] ; + sh:path s223:hasDomainSpace ] ; sh:rule [ ], [ ] . @@ -18600,6 +18600,353 @@

+

Node Shape

+ + +

URI: http://www.w3.org/1999/02/22-rdf-syntax-ns#Property

+ +

+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix sh: <http://www.w3.org/ns/shacl#> .
+
+rdf:Property a sh:NodeShape ;
+    sh:property [ rdfs:comment "This Property must have a label" ;
+            sh:path rdfs:label ;
+            sh:sparql [ a sh:SPARQLConstraint ;
+                    sh:message "{$this} must have an rdfs:label" ;
+                    sh:prefixes <http://data.ashrae.org/standard223/1.0/validation/schema> ;
+                    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}) .
+}
+""" ] ],
+        [ rdfs:comment "This Property must have a comment" ;
+            sh:path rdfs:comment ;
+            sh:sparql [ a sh:SPARQLConstraint ;
+                    sh:message "{$this} must have an rdfs:comment" ;
+                    sh:prefixes <http://data.ashrae.org/standard223/1.0/validation/schema> ;
+                    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}) .
+}
+""" ] ] .
+
+
+        
+

+ +
+

Class

+ + +

URI: http://data.ashrae.org/standard223#Class

+ +

+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix s223: <http://data.ashrae.org/standard223#> .
+@prefix sh: <http://www.w3.org/ns/shacl#> .
+
+s223:Class a rdfs:Class,
+        sh:NodeShape ;
+    rdfs:label "Class" ;
+    rdfs:comment "This is a modeling construct. All classes defined in the 223 standard are instances of s223:Class rather than owl:Class." ;
+    rdfs:subClassOf rdfs:Class .
+
+
+        
+
+ +
+

Node Shape

+ + +

URI: http://data.ashrae.org/standard223#ClosedWorldShape

+ +

+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix s223: <http://data.ashrae.org/standard223#> .
+@prefix sh: <http://www.w3.org/ns/shacl#> .
+
+s223:ClosedWorldShape a sh:NodeShape ;
+    sh:severity sh:Info ;
+    sh:sparql [ a sh:SPARQLConstraint ;
+            rdfs:comment "Ensure that all instances of a class use only the properties defined for that class." ;
+            sh:message "Predicate {?p} is not defined for instance {$this}." ;
+            sh:prefixes <http://data.ashrae.org/standard223/1.0/validation/model> ;
+            sh:select """
+SELECT $this ?p ?o
+WHERE {
+$this a/rdfs:subClassOf* s223:Concept .
+$this ?p ?o .
+FILTER(STRSTARTS (str(?p), "http://data.ashrae.org/standard223") || STRSTARTS (str(?p), "http://qudt.org/schema/qudt"))
+FILTER NOT EXISTS {$this a sh:NodeShape}
+FILTER NOT EXISTS {$this a/rdfs:subClassOf* ?class .
+			?class sh:property/sh:path ?p .
+}
+FILTER NOT EXISTS {$this a/rdfs:subClassOf* ?class .
+?class sh:xone/rdf:rest*/rdf:first/sh:property/sh:path ?p .
+}
+FILTER NOT EXISTS {$this a/rdfs:subClassOf* ?class .
+?class sh:or/rdf:rest*/rdf:first/sh:property/sh:path ?p .
+}
+}
+""" ] ;
+    sh:targetClass s223:Concept .
+
+
+        
+
+ +
+

Equipment that executes a FunctionBlock must have a s223:hasRole relation to s223:Role-Controller.

+ + +

URI: http://data.ashrae.org/standard223#ControllerRoleShape

+ +

+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix s223: <http://data.ashrae.org/standard223#> .
+@prefix sh: <http://www.w3.org/ns/shacl#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+s223:ControllerRoleShape a sh:NodeShape ;
+    rdfs:comment "Equipment that executes a FunctionBlock must have a s223:hasRole relation to s223:Role-Controller." ;
+    sh:property [ a sh:PropertyShape ;
+            sh:hasValue s223:Role-Controller ;
+            sh:message "Equipment that executes a FunctionBlock must have a s223:hasRole relation to s223:Role-Controller." ;
+            sh:minCount 1 ;
+            sh:path s223:hasRole ] ;
+    sh:targetSubjectsOf s223:executes .
+
+
+        
+
+ +
+

Node Shape

+ + +

URI: http://data.ashrae.org/standard223#InversePropertyShape

+ +

+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix s223: <http://data.ashrae.org/standard223#> .
+@prefix sh: <http://www.w3.org/ns/shacl#> .
+
+s223:InversePropertyShape a sh:NodeShape ;
+    sh:rule [ a sh:SPARQLRule ;
+            rdfs:comment "Declare the inverse triples for relations that have defined inverse relations" ;
+            sh:construct """
+CONSTRUCT {
+?o ?invP $this .
+}
+WHERE {
+  $this ?p ?o .
+  ?p s223:inverseOf ?invP .
+}
+			""" ;
+            sh:prefixes <http://data.ashrae.org/standard223/1.0/inference/owl-subset> ] ;
+    sh:targetClass s223:Concept .
+
+
+        
+
+ +
+

Associate the object of hasObservationLocation directly with the observed Property.

+ + +

URI: http://data.ashrae.org/standard223#MeasuredPropertyRule

+ +

+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix s223: <http://data.ashrae.org/standard223#> .
+@prefix sh: <http://www.w3.org/ns/shacl#> .
+
+s223:MeasuredPropertyRule a sh:NodeShape ;
+    rdfs:comment "Associate the object of hasObservationLocation directly with the observed Property." ;
+    sh:rule [ a sh:TripleRule ;
+            rdfs:comment "Associate the object of hasObservationLocation directly with the observed Property." ;
+            sh:object [ sh:path ( [ sh:inversePath s223:hasObservationLocation ] s223:observes ) ] ;
+            sh:predicate s223:hasProperty ;
+            sh:subject sh:this ] ;
+    sh:targetClass s223:Concept .
+
+
+        
+
+ +
+

Node Shape

+ + +

URI: http://data.ashrae.org/standard223#RequiredCommentsShape

+ +

+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix s223: <http://data.ashrae.org/standard223#> .
+@prefix sh: <http://www.w3.org/ns/shacl#> .
+
+s223:RequiredCommentsShape a sh:NodeShape ;
+    sh:severity sh:Info ;
+    sh:sparql [ a sh:SPARQLConstraint ;
+            rdfs:comment "Ensure that any instance of s223:Class is also a rdfs:subClassOf* s223:Concept." ;
+            sh:message "Class {$this} must be within the rdfs:subClassOf hierarchy under s223:Concept." ;
+            sh:prefixes <http://data.ashrae.org/standard223/1.0/validation/model> ;
+            sh:select """
+SELECT $this
+WHERE {
+FILTER NOT EXISTS {$this rdfs:subClassOf* rdf:Property} .
+FILTER NOT EXISTS {$this rdfs:subClassOf* s223:Concept} .
+}
+""" ],
+        [ a sh:SPARQLConstraint ;
+            rdfs:comment "Ensure that any instance of s223:Class is also an instance of sh:NodeShape." ;
+            sh:message "Class {$this} must be declared as an instance of sh:NodeShape." ;
+            sh:prefixes <http://data.ashrae.org/standard223/1.0/validation/model> ;
+            sh:select """
+SELECT $this
+WHERE {
+FILTER NOT EXISTS {$this a sh:NodeShape} .
+}
+""" ],
+        [ a sh:SPARQLConstraint ;
+            rdfs:comment "Ensure that any instance of s223:Class must have an rdfs:comment." ;
+            sh:message "Class {$this} must have an rdfs:comment." ;
+            sh:prefixes <http://data.ashrae.org/standard223/1.0/validation/model> ;
+            sh:select """
+SELECT $this
+WHERE {
+FILTER NOT EXISTS {$this rdfs:comment ?comment} .
+}
+""" ],
+        [ a sh:SPARQLConstraint ;
+            rdfs:comment "Ensure that any property shape must have an rdfs:comment." ;
+            sh:message "The SPARQLConstraint for path {?path} for Class {$this} must have an rdfs:comment." ;
+            sh:prefixes <http://data.ashrae.org/standard223/1.0/validation/model> ;
+            sh:select """
+SELECT $this ?path
+WHERE {
+$this sh:property ?propshape .
+?propshape sh:sparql ?sparqlconstraint .
+?propshape sh:path ?path .
+FILTER NOT EXISTS {?sparqlconstraint rdfs:comment ?comment} .
+}
+""" ],
+        [ a sh:SPARQLConstraint ;
+            rdfs:comment "Ensure that any property shape must have an rdfs:comment." ;
+            sh:message "The property shape with path {?path} for Class {$this} must have an rdfs:comment." ;
+            sh:prefixes <http://data.ashrae.org/standard223/1.0/validation/model> ;
+            sh:select """
+SELECT $this ?path
+WHERE {
+$this sh:property ?propshape .
+?propshape sh:path ?path .
+FILTER NOT EXISTS {?propshape rdfs:comment ?comment} .
+}
+""" ],
+        [ a sh:SPARQLConstraint ;
+            rdfs:comment "Every Class must have a label." ;
+            sh:message "{$this} must have an rdfs:label" ;
+            sh:prefixes <http://data.ashrae.org/standard223/1.0/validation/schema> ;
+            sh:select """
+SELECT $this
+WHERE {
+FILTER (NOT EXISTS {$this rdfs:label ?something}) .
+}
+""" ],
+        [ a sh:SPARQLConstraint ;
+            rdfs:comment "Ensure that every TripleRule must have an rdfs:comment." ;
+            sh:message "The TripleRule inferring {?pred} for Class {$this} must have an rdfs:comment." ;
+            sh:prefixes <http://data.ashrae.org/standard223/1.0/validation/schema> ;
+            sh:select """
+SELECT $this ?pred
+WHERE {
+$this sh:rule ?rule .
+?rule a sh:TripleRule .
+?rule sh:predicate ?pred .
+FILTER NOT EXISTS {?rule rdfs:comment ?comment} .
+}
+""" ],
+        [ a sh:SPARQLConstraint ;
+            rdfs:comment "Ensure that every SPARQLRule must have an rdfs:comment." ;
+            sh:message "Every SPARQLRule for Class {$this} must have an rdfs:comment." ;
+            sh:prefixes <http://data.ashrae.org/standard223/1.0/validation/schema> ;
+            sh:select """
+SELECT $this
+WHERE {
+$this sh:rule ?rule .
+?rule a sh:SPARQLRule .
+FILTER NOT EXISTS {?rule rdfs:comment ?comment} .
+}
+""" ] ;
+    sh:targetClass s223:Class .
+
+
+        
+
+ +
+

Symmetric property

+ + +

URI: http://data.ashrae.org/standard223#SymmetricProperty

+ +

+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix s223: <http://data.ashrae.org/standard223#> .
+@prefix sh: <http://www.w3.org/ns/shacl#> .
+
+s223:SymmetricProperty a rdfs:Class,
+        sh:NodeShape ;
+    rdfs:label "Symmetric property" ;
+    rdfs:comment "A SymmetricProperty is modeling construct used to define symmetric behavior for certain properties in the standard such as cnx and connected." ;
+    rdfs:subClassOf rdf:Property .
+
+
+        
+
+ +
+

Node Shape

+ + +

URI: http://data.ashrae.org/standard223#SymmetricPropertyShape

+ +

+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix s223: <http://data.ashrae.org/standard223#> .
+@prefix sh: <http://www.w3.org/ns/shacl#> .
+
+s223:SymmetricPropertyShape a sh:NodeShape ;
+    sh:rule [ a sh:SPARQLRule ;
+            rdfs:comment "Declare the inverse triples for symmetric relations" ;
+            sh:construct """
+CONSTRUCT {
+?o ?p $this .
+}
+WHERE {
+  $this ?p ?o .
+  ?p a s223:SymmetricProperty .
+}
+			""" ;
+            sh:prefixes <http://data.ashrae.org/standard223/1.0/inference/owl-subset> ] ;
+    sh:targetClass s223:Concept .
+
+
+        
+
+