diff --git a/ontologies/223p.ttl b/ontologies/223p.ttl index 8bba02d..16fdb97 100644 --- a/ontologies/223p.ttl +++ b/ontologies/223p.ttl @@ -53,26 +53,26 @@ s223:SymmetricProperty a rdfs:Class, sh:path s223:hasProperty ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:QuantifiableActuatableProperty ; - sh:node [ sh:property [ sh:hasValue ; + sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Position ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path ns1:hasQuantityKind ], - [ sh:hasValue s223:EnumerationKind-Position ; + sh:path s223:hasAspect ], + [ sh:hasValue ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasAspect ] ] ] ] ] [ sh:property [ rdfs:comment "A ChilledWaterValve shall have at least one analog valve command property or at least two binary valve command properties using the relation hasProperty."^^xsd:string ; + sh:path ns1:hasQuantityKind ] ] ] ] ] [ sh:property [ rdfs:comment "A ChilledWaterValve shall have at least one analog valve command property or at least two binary valve command properties using the relation hasProperty."^^xsd:string ; sh:minCount 2 ; sh:path s223:hasProperty ; sh:qualifiedMinCount 2 ; sh:qualifiedValueShape [ sh:class s223:EnumeratedActuatableProperty ; - sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Position ; + sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Binary ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasAspect ], - [ sh:hasValue s223:EnumerationKind-Binary ; + sh:path s223:hasEnumerationKind ], + [ sh:hasValue s223:EnumerationKind-Position ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasEnumerationKind ] ] ] ] ] ) ; + sh:path s223:hasAspect ] ] ] ] ] ) ; sh:targetClass . a s223:Class, @@ -119,7 +119,7 @@ s223:SymmetricProperty a rdfs:Class, sh:NodeShape ; rdfs:label "Electric Heating Coil"^^xsd:string ; rdfs:comment "A heating element that forms into a helical or serpentine shape and uses electricity to perform heating."^^xsd:string ; - rdfs:subClassOf s223:ResistanceHeater ; + rdfs:subClassOf s223:ElectricResistanceElement ; sh:property [ rdfs:comment "An electric heating coil shall have at least one analog heating command property using a relation hasProperty."^^xsd:string ; sh:message "g36: An electric heating coil shall have at least one analog heating command property using a relation hasProperty."^^xsd:string ; sh:minCount 1 ; @@ -160,14 +160,14 @@ s223:SymmetricProperty a rdfs:Class, sh:path s223:hasProperty ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:QuantifiableActuatableProperty ; - sh:node [ sh:property [ sh:hasValue s223:EnumerationKind-Speed ; + sh:node [ sh:property [ sh:hasValue ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path s223:hasAspect ], - [ sh:hasValue ; + sh:path ns1:hasQuantityKind ], + [ sh:hasValue s223:EnumerationKind-Speed ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path ns1:hasQuantityKind ] ] ] ] . + sh:path s223:hasAspect ] ] ] ] . a s223:Class, rdfs:Class, @@ -248,23 +248,7 @@ s223:SymmetricProperty a rdfs:Class, rdfs:label "Zone"^^xsd:string ; rdfs:comment "A Zone is a generic thermal zone, with the points required for Guideline 36 controls. It is a collection of s223:DomainSpace instances."^^xsd:string ; rdfs:subClassOf s223:Zone ; - sh:property [ rdfs:comment "A Zone shall have a zone temperature setpoint adjustment property using the relation hasProperty, if applicable."^^xsd:string ; - sh:message "g36: A Zone shall have a zone temperature setpoint adjustment property using the relation hasProperty, if applicable."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasProperty ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:QuantifiableObservableProperty ; - sh:node [ sh:property [ sh:hasValue s223:Dimensioned-Delta ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:hasAspect ], - [ sh:hasValue ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path ns1:hasQuantityKind ] ] ] ; - sh:qualifiedValueShapesDisjoint true ; - sh:severity sh:Info ], - [ rdfs:comment "A Zone shall have at least one binary zone occupancy property using the relation hasProperty"^^xsd:string ; + sh:property [ rdfs:comment "A Zone shall have at least one binary zone occupancy property using the relation hasProperty"^^xsd:string ; sh:message "g36: A Zone shall have at least one binary zone occupancy property using the relation hasProperty"^^xsd:string ; sh:minCount 1 ; sh:path s223:hasProperty ; @@ -289,6 +273,22 @@ s223:SymmetricProperty a rdfs:Class, sh:minCount 1 ; sh:path s223:hasEnumerationKind ] ] ] ; sh:severity sh:Info ], + [ rdfs:comment "A Zone shall have a zone temperature setpoint adjustment property using the relation hasProperty, if applicable."^^xsd:string ; + sh:message "g36: A Zone shall have a zone temperature setpoint adjustment property using the relation hasProperty, if applicable."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasProperty ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:QuantifiableObservableProperty ; + sh:node [ sh:property [ sh:hasValue s223:Dimensioned-Delta ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path s223:hasAspect ], + [ sh:hasValue ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path ns1:hasQuantityKind ] ] ] ; + sh:qualifiedValueShapesDisjoint true ; + sh:severity sh:Info ], [ rdfs:comment "A Zone shall have at least a zone CO2 concentration property using the relation hasProperty, if applicable control is used."^^xsd:string ; sh:message "g36: A Zone shall have at least a zone CO2 concentration property using the relation hasProperty, if applicable control is used."^^xsd:string ; sh:minCount 1 ; @@ -355,8 +355,8 @@ ns1:BaseDimensionMagnitude a rdfs:Class, rdfs:label "Base Dimension Magnitude"^^xsd:string ; ns1:informativeReference "http://en.wikipedia.org/wiki/Dimensional_analysis"^^xsd:anyURI, "http://web.mit.edu/2.25/www/pdf/DA_unified.pdf"^^xsd:anyURI ; - rdfs:comment """

A Dimension expresses a magnitude for a base quantiy kind such as mass, length and time.

-

DEPRECATED - each exponent is expressed as a property. Keep until a validaiton of this has been done."""^^rdf:HTML ; + rdfs:comment """

A Dimension expresses a magnitude for a base quantiy kind such as mass, length and time.

+

DEPRECATED - each exponent is expressed as a property. Keep until a validaiton of this has been done.

"""^^rdf:HTML ; rdfs:isDefinedBy ; rdfs:subClassOf ns1:Concept ; sh:property ns1:BaseDimensionMagnitude-hasBaseQuantityKind, @@ -491,7 +491,7 @@ ns1:CurrencyUnit a rdfs:Class, ns1:DataEncoding a rdfs:Class, sh:NodeShape ; rdfs:label "Data Encoding"^^xsd:string ; - rdfs:comment "

Data Encoding expresses the properties that specify how data is represented at the bit and byte level. These properties are applicable to describing raw data."^^rdf:HTML ; + rdfs:comment "

Data Encoding expresses the properties that specify how data is represented at the bit and byte level. These properties are applicable to describing raw data.

"^^rdf:HTML ; rdfs:isDefinedBy ; rdfs:subClassOf ns1:Aspect ; sh:property ns1:DataEncoding-bitOrder, @@ -598,7 +598,7 @@ ns1:EnumeratedValue a rdfs:Class,

An enumeration is a set of literals from which a single value is selected. Each literal can have a tag as an integer within a standard encoding appropriate to the range of integer values. Consistency of enumeration types will allow them, and the enumerated values, to be referred to unambiguously either through symbolic name or encoding. Enumerated values are also controlled vocabularies and as such need to be standardized. Without this consistency enumeration literals can be stated differently and result in data conflicts and misinterpretations.

-

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

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

"""^^rdf:HTML ; ns1:informativeReference "http://en.wikipedia.org/wiki/Enumeration"^^xsd:anyURI ; rdfs:isDefinedBy ; rdfs:subClassOf ns1:Concept, @@ -616,7 +616,7 @@ ns1:Enumeration a rdfs:Class, "http://en.wikipedia.org/wiki/Enumeration"^^xsd:anyURI ; rdfs:comment """

An enumeration is a set of literals from which a single value is selected. Each literal can have a tag as an integer within a standard encoding appropriate to the range of integer values. Consistency of enumeration types will allow them, and the enumerated values, to be referred to unambiguously either through symbolic name or encoding. Enumerated values are also controlled vocabularies and as such need to be standardized. Without this consistency enumeration literals can be stated differently and result in data conflicts and misinterpretations.

-

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

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

"""^^rdf:HTML ; rdfs:isDefinedBy ; rdfs:subClassOf ns1:Concept, ns3:Enumeration ; @@ -671,7 +671,7 @@ ns1:IntervalScale a rdfs:Class, rdfs:label "Interval scale"^^xsd:string ; ns1:informativeReference "https://en.wikipedia.org/wiki/Level_of_measurement"^^xsd:anyURI ; rdfs:comment """

The interval type allows for the degree of difference between items, but not the ratio between them. Examples include temperature with the Celsius scale, which has two defined points (the freezing and boiling point of water at specific conditions) and then separated into 100 intervals, date when measured from an arbitrary epoch (such as AD), percentage such as a percentage return on a stock,[16] location in Cartesian coordinates, and direction measured in degrees from true or magnetic north. Ratios are not meaningful since 20 °C cannot be said to be "twice as hot" as 10 °C, nor can multiplication/division be carried out between any two dates directly. However, ratios of differences can be expressed; for example, one difference can be twice another. Interval type variables are sometimes also called "scaled variables", but the formal mathematical term is an affine space (in this case an affine line).

-

Characteristics: median, percentile & Monotonic increasing (order (<) & totally ordered set"""^^rdf:HTML ; +

Characteristics: median, percentile & Monotonic increasing (order (<) & totally ordered set

"""^^rdf:HTML ; rdfs:isDefinedBy ; rdfs:seeAlso ns1:NominalScale, ns1:OrdinalScale, @@ -786,7 +786,7 @@ ns1:Prefix a rdfs:Class, ns1:Quantifiable a rdfs:Class, sh:NodeShape ; rdfs:label "Quantifiable"^^xsd:string ; - rdfs:comment "

Quantifiable ascribes to some thing the capability of being measured, observed, or counted."^^rdf:HTML ; + rdfs:comment "

Quantifiable ascribes to some thing the capability of being measured, observed, or counted.

"^^rdf:HTML ; rdfs:isDefinedBy ; rdfs:subClassOf ns1:Aspect ; sh:property ns1:Quantifiable-dataEncoding, @@ -803,19 +803,19 @@ ns1:Quantity a rdfs:Class, sh:NodeShape ; rdfs:label "Quantity"^^xsd:string ; ns1:dbpediaMatch "http://dbpedia.org/resource/Quantity"^^xsd:anyURI ; - rdfs:comment """

A quantity is the measurement of an observable property of a particular object, event, or physical system. + rdfs:comment """

A quantity is the measurement of an observable property of a particular object, event, or physical system. A quantity is always associated with the context of measurement (i.e. the thing measured, the measured value, the accuracy of measurement, etc.) whereas the underlying quantity kind is independent of any particular measurement. Thus, length is a quantity kind while the height of a rocket is a specific quantity of length; its magnitude that may be expressed in meters, feet, inches, etc. Examples of physical quantities include physical constants, such as the speed of light in a vacuum, Planck's constant, the electric permittivity of free space, and the fine structure constant.

-

In other words, quantities are quantifiable aspects of the world, such as the duration of a movie, the distance between two points, +

In other words, quantities are quantifiable aspects of the world, such as the duration of a movie, the distance between two points, velocity of a car, the pressure of the atmosphere, and a person's weight; and units are used to describe their numerical measure.

-

Many quantity kinds are related to each other by various physical laws, and as a result, the associated units of some quantity +

Many quantity kinds are related to each other by various physical laws, and as a result, the associated units of some quantity kinds can be expressed as products (or ratios) of powers of other quantity kinds (e.g., momentum is mass times velocity and velocity is defined as distance divided by time). In this way, some quantities can be calculated from other measured quantities using their associations to the quantity kinds in these expressions. These quantity kind relationships are also discussed in dimensional analysis. Those that cannot be so expressed can be regarded as "fundamental" in this sense.

-

A quantity is distinguished from a "quantity kind" in that the former carries a value and the latter is a type specifier."""^^rdf:HTML ; +

A quantity is distinguished from a "quantity kind" in that the former carries a value and the latter is a type specifier.

"""^^rdf:HTML ; rdfs:isDefinedBy ; rdfs:subClassOf ns1:Concept, ns1:Quantifiable ; @@ -1154,30 +1154,56 @@ s223:Actuator a s223:Class, rdfs:label "Actuator"^^xsd:string ; rdfs:comment "A piece of equipment, either electrically, pneumatically, or hydraulically operated, that makes a change in the physical world, such as the position of a valve or damper."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "An Actuator must be associated with at least one ActuatableProperty using the relation actuatedByProperty."^^xsd:string ; + sh:property [ rdfs:comment "If the relation actuates is present it must associate the Actuator with a Equipment."^^xsd:string ; + sh:class s223:Equipment ; + sh:message "s223: If the relation actuates is present it must associate the Actuator with a Equipment."^^xsd:string ; + sh:path s223:actuates ], + [ rdfs:comment "An Actuator must be associated with at least one ActuatableProperty using the relation actuatedByProperty."^^xsd:string ; sh:class s223:ActuatableProperty ; + sh:message "s223: An Actuator must be associated with at least one ActuatableProperty using the relation actuatedByProperty."^^xsd:string ; sh:minCount 1 ; - sh:path s223:actuatedByProperty ], - [ rdfs:comment "If the relation actuates is present it must associate the Actuator with a Equipment."^^xsd:string ; - sh:class s223:Equipment ; - sh:path s223:actuates ] . + sh:path s223:actuatedByProperty ] . s223:AirHandlingUnit a s223:Class, sh:NodeShape ; rdfs:label "Air handling unit"^^xsd:string ; rdfs:comment "An assembly consisting of a fan or fans and other necessary equipment to perform one or more of the following functions: circulating, filtration, heating, cooling, heat recovery, humidifying, dehumidifying, and mixing of air."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "An AirHandlingUnit shall have at least one outlet using the medium Air."^^xsd:string ; + sh:property [ rdfs:comment "An AirHandlingUnit shall have at least one inlet using the medium Air."^^xsd:string ; + sh:message "s223: An AirHandlingUnit shall have at least one inlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "An AirHandlingUnit shall have at least one inlet using the medium Air."^^xsd:string ; + [ rdfs:comment "An AirHandlingUnit shall have at least one outlet using the medium Air."^^xsd:string ; + sh:message "s223: An AirHandlingUnit shall have at least one outlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Air ; + sh:path s223:hasMedium ] ] ] ] . + +s223:AirSourceHeatPump a s223:Class, + sh:NodeShape ; + rdfs:label "Air source heat pump"^^xsd:string ; + rdfs:comment "A subclass of HeatPump that can heat or cool by transferring thermal energy to and from outside air."^^xsd:string ; + rdfs:subClassOf s223:HeatPump ; + sh:property [ rdfs:comment "An AirSourceHeatPump shall have at least two outlets using the medium Air."^^xsd:string ; + sh:message "s223: An AirSourceHeatPump shall have at least two outlets using the medium Air."^^xsd:string ; + sh:minCount 2 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 2 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Air ; + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "An AirSourceHeatPump shall have at least two inlets using the medium Air."^^xsd:string ; + sh:message "s223: An AirSourceHeatPump shall have at least two inlets using the medium Air."^^xsd:string ; + sh:minCount 2 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 2 ; sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ] . @@ -1188,6 +1214,18 @@ s223:BACnetExternalReference a s223:Class, rdfs:comment "BACnetExternalReference is a subclass of ExternalReference that contains BACnet protocol parameter values necessary to associate a property with a value."^^xsd:string ; rdfs:subClassOf s223:ExternalReference ; sh:property [ a sh:PropertyShape ; + rdfs:comment "If the relation property-identifier is present it is either a decimal number or exactly equal to the ASHRAE 135-2020 Clause 21 identifier text of BACnetPropertyIdentifier. If it is omitted, it defaults to \"present-value\" except for BACnet File objects, where absence of property-identifier refers to the entire content of the file accessed with Stream Access."^^xsd:string ; + sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path ], + [ a sh:PropertyShape ; + rdfs:comment "If the relation device-name is present it associates the external reference with a BACnet device having the specific device name."^^xsd:string ; + sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path ], + [ a sh:PropertyShape ; rdfs:comment "If the relation object-identifier is present it associates the external reference with the BACnet object having the specific object identifier."^^xsd:string ; sh:datatype xsd:string ; sh:maxCount 1 ; @@ -1206,18 +1244,6 @@ s223:BACnetExternalReference a s223:Class, sh:maxCount 1 ; sh:minCount 0 ; sh:path ], - [ a sh:PropertyShape ; - rdfs:comment "If the relation property-identifier is present it is either a decimal number or exactly equal to the ASHRAE 135-2020 Clause 21 identifier text of BACnetPropertyIdentifier. If it is omitted, it defaults to \"present-value\" except for BACnet File objects, where absence of property-identifier refers to the entire content of the file accessed with Stream Access."^^xsd:string ; - sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path ], - [ a sh:PropertyShape ; - rdfs:comment "If the relation device-name is present it associates the external reference with a BACnet device having the specific device name."^^xsd:string ; - sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path ], [ a sh:PropertyShape ; rdfs:comment "If the relation object-name is present it associates the external reference with the BACnet object having the specific object name."^^xsd:string ; sh:datatype xsd:string ; @@ -1257,43 +1283,20 @@ s223:Boiler a s223:Class, rdfs:label "Boiler"^^xsd:string ; rdfs:comment "A closed, pressure vessel that uses fuel or electricity for heating water or other fluids to supply steam or hot water for heating, humidification, or other applications."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Boiler shall have at least one outlet using the medium Water."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Fluid-Water ; - sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A Boiler shall have at least one inlet using the medium Water."^^xsd:string ; + sh:property [ rdfs:comment "A Boiler shall have at least one inlet using the medium Water."^^xsd:string ; + sh:message "s223: A Boiler shall have at least one inlet using the medium Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Fluid-Water ; - sh:path s223:hasMedium ] ] ] ] . - -s223:ChilledBeam a s223:Class, - sh:NodeShape ; - rdfs:label "Chilled beam"^^xsd:string ; - rdfs:comment "A structure with a colder surface temperature where air passes through, and air movement is induced in the room to achieve cooling. Cooling medium is generally water."^^xsd:string ; - rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A ChilledBeam shall have at least one outlet using the medium Water."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Water ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A ChilledBeam must be associated with the Role-Cooling using the relation hasRole"^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasRole ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:Role-Cooling ] ], - [ rdfs:comment "A ChilledBeam shall have at least one inlet using the medium Water."^^xsd:string ; + [ rdfs:comment "A Boiler shall have at least one outlet using the medium Water."^^xsd:string ; + sh:message "s223: A Boiler shall have at least one outlet using the medium Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Water ; sh:path s223:hasMedium ] ] ] ] . @@ -1302,18 +1305,20 @@ s223:Chiller a s223:Class, rdfs:label "Chiller"^^xsd:string ; rdfs:comment "A refrigerating machine used to transfer heat from fluids."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Chiller shall have at least one inlet using the medium Water."^^xsd:string ; + sh:property [ rdfs:comment "A Chiller shall have at least one outlet using the medium Water."^^xsd:string ; + sh:message "s223: A Chiller shall have at least one outlet using the medium Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Water ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A Chiller shall have at least one outlet using the medium Water."^^xsd:string ; + [ rdfs:comment "A Chiller shall have at least one inlet using the medium Water."^^xsd:string ; + sh:message "s223: A Chiller shall have at least one inlet using the medium Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Water ; sh:path s223:hasMedium ] ] ] ] . @@ -1350,11 +1355,13 @@ s223:Compressor a s223:Class, rdfs:comment "A device for mechanically increasing the pressure of a gas."^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "A Compressor shall have at least one outlet."^^xsd:string ; + sh:message "s223: A Compressor shall have at least one outlet."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ], [ rdfs:comment "A Compressor shall have at least one inlet."^^xsd:string ; + sh:message "s223: A Compressor shall have at least one inlet."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -1403,6 +1410,7 @@ s223:Controller a s223:Class, rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "If the relation executes is present it must associate the Controller with a Function."^^xsd:string ; sh:class s223:Function ; + sh:message "s223: If the relation executes is present it must associate the Controller with a Function."^^xsd:string ; sh:path s223:executes ] ; sh:rule [ a sh:TripleRule ; rdfs:comment "Infer the hasRole s223:Role-Controller relation for every instance of Controller"^^xsd:string ; @@ -1426,6 +1434,7 @@ s223:CoolingTower a s223:Class, rdfs:comment "A heat transfer device in which atmospheric air cools warm water, generally by direct contact via evaporation."^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "A CoolingTower shall have at least one outlet using the medium Water."^^xsd:string ; + sh:message "s223: A CoolingTower shall have at least one outlet using the medium Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -1433,6 +1442,7 @@ s223:CoolingTower a s223:Class, sh:node [ sh:property [ sh:class s223:Fluid-Water ; sh:path s223:hasMedium ] ] ] ], [ rdfs:comment "A CoolingTower shall have at least one inlet using the medium Water."^^xsd:string ; + sh:message "s223: A CoolingTower shall have at least one inlet using the medium Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -1459,6 +1469,7 @@ s223:Door a s223:Class, rdfs:comment "A hinged, sliding, or revolving barrier at the entrance to a building or room."^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "A Door shall have at least two bidirectional connection points using the medium Air."^^xsd:string ; + sh:message "s223: A Door shall have at least two bidirectional connection points using the medium Air."^^xsd:string ; sh:minCount 2 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 2 ; @@ -1473,6 +1484,7 @@ s223:DualDuctTerminal a s223:Class, rdfs:seeAlso s223:TerminalUnit ; rdfs:subClassOf s223:TerminalUnit ; sh:property [ rdfs:comment "A DualDuctTerminal shall have at least two inlets using the medium Air."^^xsd:string ; + sh:message "s223: A DualDuctTerminal shall have at least two inlets using the medium Air."^^xsd:string ; sh:minCount 2 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 2 ; @@ -1505,6 +1517,7 @@ s223:ElectricBreaker a s223:Class, rdfs:comment "A piece of equipment designed to open the circuit automatically at a predetermined overcurrent without damage to itself (when properly applied within its rating)."^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "An ElectricBreaker shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:message "s223: An ElectricBreaker shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -1524,6 +1537,7 @@ s223:ElectricOutlet a s223:Class, rdfs:comment "A device to which a piece of electrical equipment can be connected in order to provide it with electricity"^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "An ElectricOutlet shall have exactly one inlet using the medium Electricity."^^xsd:string ; + sh:message "s223: An ElectricOutlet shall have exactly one inlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMaxCount 1 ; @@ -1532,6 +1546,7 @@ s223:ElectricOutlet a s223:Class, sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ] ], [ rdfs:comment "An ElectricOutlet shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:message "s223: An ElectricOutlet shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -1544,18 +1559,20 @@ s223:ElectricTransformer a s223:Class, rdfs:label "Electric transformer"^^xsd:string ; rdfs:comment "A piece of electrical equipment used to convert alternative current (AC) electric power from one voltage to another voltage."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "An ElectricTransformer shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:property [ rdfs:comment "An ElectricTransformer shall have at least one inlet using the medium Electricity."^^xsd:string ; + sh:message "s223: An ElectricTransformer shall have at least one inlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "An ElectricTransformer shall have at least one inlet using the medium Electricity."^^xsd:string ; + [ rdfs:comment "An ElectricTransformer shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:message "s223: An ElectricTransformer shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ] ] . @@ -1564,46 +1581,52 @@ s223:ElectricWire a s223:Class, rdfs:label "Electric wire"^^xsd:string ; rdfs:comment "An ElectricWire is a subclass of Connection, that represents one or more flexible conductors used to convey electricity."^^xsd:string ; rdfs:subClassOf s223:Connection ; - sh:property [ rdfs:comment "If the relation hasElectricalPhase is present it must associate the ElectricWire with an ElectricalPhaseIdentifier or ElectricalVoltagePhases."^^xsd:string ; - sh:or ( [ sh:class s223:Aspect-ElectricalPhaseIdentifier ] [ sh:class s223:Aspect-ElectricalVoltagePhases ] ) ; - sh:path s223:hasElectricalPhase ], - [ rdfs:comment "An ElectricWire must be associated with exactly one Constituent-Electricity using the relation hasMedium."^^xsd:string ; + sh:property [ rdfs:comment "An ElectricWire must be associated with exactly one Constituent-Electricity using the relation hasMedium."^^xsd:string ; sh:class s223:Constituent-Electricity ; sh:maxCount 1 ; sh:message "s223: An ElectricWire must be associated with exactly one Constituent-Electricity using the relation hasMedium."^^xsd:string ; sh:minCount 1 ; - sh:path s223:hasMedium ] . + sh:path s223:hasMedium ], + [ rdfs:comment "If the relation hasElectricalPhase is present it must associate the ElectricWire with an ElectricalPhaseIdentifier or ElectricalVoltagePhases."^^xsd:string ; + sh:message "s223: If the relation hasElectricalPhase is present it must associate the ElectricWire with an ElectricalPhaseIdentifier or ElectricalVoltagePhases."^^xsd:string ; + sh:or ( [ sh:class s223:Aspect-ElectricalPhaseIdentifier ] [ sh:class s223:Aspect-ElectricalVoltagePhases ] ) ; + sh:path s223:hasElectricalPhase ] . s223:FanCoilUnit a s223:Class, sh:NodeShape ; rdfs:label "Fan coil unit"^^xsd:string ; rdfs:comment "A device consisting of a heat exchanger (coil) and a fan to regulate the temperature of one or more spaces."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A FanCoilUnit shall have at least one outlet using the medium Air."^^xsd:string ; + sh:property [ rdfs:comment "A FanCoilUnit shall have at least one inlet using the medium Air."^^xsd:string ; + sh:message "s223: A FanCoilUnit shall have at least one inlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A FanCoilUnit must be associated with at least 1 Fan using the relation contains."^^xsd:string ; + [ rdfs:comment "A FanCoilUnit shall have at least one outlet using the medium Air."^^xsd:string ; + sh:message "s223: A FanCoilUnit shall have at least one outlet using the medium Air."^^xsd:string ; sh:minCount 1 ; - sh:path s223:contains ; + sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:Fan ] ], + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Air ; + sh:path s223:hasMedium ] ] ] ], [ rdfs:comment "A FanCoilUnit must be associated with at least 1 Coil using the relation contains."^^xsd:string ; + sh:message "s223: A FanCoilUnit must be associated with at least 1 Coil using the relation contains."^^xsd:string ; sh:minCount 1 ; sh:path s223:contains ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:Coil ] ], - [ rdfs:comment "A FanCoilUnit shall have at least one inlet using the medium Air."^^xsd:string ; + [ rdfs:comment "A FanCoilUnit must be associated with at least 1 Fan using the relation contains."^^xsd:string ; + sh:message "s223: A FanCoilUnit must be associated with at least 1 Fan using the relation contains."^^xsd:string ; sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; + sh:path s223:contains ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Fluid-Air ; - sh:path s223:hasMedium ] ] ] ], + sh:qualifiedValueShape [ sh:class s223:Fan ] ], [ rdfs:comment "A FanCoilUnit must at least have the role Role-Heating or Role-Cooling."^^xsd:string ; + sh:message "s223: A FanCoilUnit must at least have the role Role-Heating or Role-Cooling."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasRole ; sh:qualifiedMinCount 1 ; @@ -1615,6 +1638,7 @@ s223:FanPoweredTerminal a s223:Class, rdfs:comment "An air terminal containing a fan. Airflow may pass through or be parallel to the fan. These units may also have supplemental heating or cooling."^^xsd:string ; rdfs:subClassOf s223:TerminalUnit ; sh:property [ rdfs:comment "A FanPoweredTerminal must be associated with at least one Fan by using the relation contains."^^xsd:string ; + sh:message "s223: A FanPoweredTerminal must be associated with at least one Fan by using the relation contains."^^xsd:string ; sh:minCount 1 ; sh:path s223:contains ; sh:qualifiedMinCount 1 ; @@ -1626,32 +1650,11 @@ s223:Filter a s223:Class, rdfs:comment "A device that removes contaminants from gases or liquids."^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "A Filter shall have at least one inlet ConnectionPoint."^^xsd:string ; + sh:message "s223: A Filter shall have at least one inlet ConnectionPoint."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ], - [ rdfs:comment "Ensure that the filter inlet and outlet have compatible mediums."^^xsd:string ; - sh:path s223:hasConnectionPoint ; - sh:severity sh:Warning ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 1: Two pure mediums."^^xsd:string ; - sh:message "s223: {$this} with inlet medium {?m2} is incompatible with outlet medium {?m1}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?m2 ?m1 -WHERE { -$this s223:cnx ?cp1, ?cp2 . -?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . -?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . -FILTER (?cp1 != ?cp2) . -?cp1 s223:hasMedium ?m1 . -?cp2 s223:hasMedium ?m2 . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS {?m2 s223:composedOf ?c2} -FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . -FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . -} -"""^^xsd:string ] ], [ rdfs:comment "A filter should have one common constituent between the inlet and outlet"^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:severity sh:Warning ; @@ -1683,10 +1686,33 @@ WHERE { } """^^xsd:string ] ], [ rdfs:comment "A Filter shall have at least one outlet."^^xsd:string ; + sh:message "s223: A Filter shall have at least one outlet."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ], + [ rdfs:comment "Ensure that the filter inlet and outlet have compatible mediums."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:severity sh:Warning ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 1: Two pure mediums."^^xsd:string ; + sh:message "s223: {$this} with inlet medium {?m2} is incompatible with outlet medium {?m1}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?m2 ?m1 +WHERE { +$this s223:cnx ?cp1, ?cp2 . +?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . +?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . +FILTER (?cp1 != ?cp2) . +?cp1 s223:hasMedium ?m1 . +?cp2 s223:hasMedium ?m2 . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS {?m2 s223:composedOf ?c2} +FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . +FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . +} +"""^^xsd:string ] ], [ rdfs:comment "A filter should have one common constituent between the inlet and outlet"^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:severity sh:Warning ; @@ -1724,6 +1750,7 @@ s223:FumeHood a s223:Class, rdfs:comment "A fume-collection device mounted over a work space, table, or shelf and serving to conduct unwanted gases away from an area."^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "A FumeHood shall have at least one inlet using the medium Air."^^xsd:string ; + sh:message "s223: A FumeHood shall have at least one inlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -1731,6 +1758,7 @@ s223:FumeHood a s223:Class, sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ], [ rdfs:comment "A FumeHood shall have at least one outlet using the medium Air."^^xsd:string ; + sh:message "s223: A FumeHood shall have at least one outlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -1757,18 +1785,20 @@ s223:Furnace a s223:Class, rdfs:label "Furnace"^^xsd:string ; rdfs:comment "An enclosed chamber or structure in which heat is produced, as by burning fuel or by converting electrical energy. "^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Furnace shall have at least one outlet using the medium Air."^^xsd:string ; + sh:property [ rdfs:comment "A Furnace shall have at least one inlet using the medium Air."^^xsd:string ; + sh:message "s223: A Furnace shall have at least one inlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A Furnace shall have at least one inlet using the medium Air."^^xsd:string ; + [ rdfs:comment "A Furnace shall have at least one outlet using the medium Air."^^xsd:string ; + sh:message "s223: A Furnace shall have at least one outlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ] . @@ -1783,7 +1813,7 @@ s223:GaugePressureSensor a s223:Class, sh:value ], [ rdfs:comment "A GaugePressureSensor must always observe a Property that has a value of true for qudt:isDeltaQuantity."^^xsd:string ; sh:maxCount 1 ; - sh:message "A GaugePressureSensor must always observe a Property that has a value of true for qudt:isDeltaQuantity."^^xsd:string ; + sh:message "s223: A GaugePressureSensor must always observe a Property that has a value of true for qudt:isDeltaQuantity."^^xsd:string ; sh:minCount 1 ; sh:path ( s223:observes ns1:isDeltaQuantity ) ; sh:value true ] . @@ -1793,35 +1823,43 @@ s223:Generator a s223:Class, rdfs:label "Generator"^^xsd:string ; rdfs:comment "An energy transducer that transforms non-electric energy into electric energy."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Generator must be associated with at least one ConnectionPoint using the relation hasConnectionPoint."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ], - [ rdfs:comment "A Generator shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:property [ rdfs:comment "A Generator shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:class s223:OutletConnectionPoint ; + sh:message "s223: A Generator shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ; + sh:path s223:hasConnectionPoint ], + [ rdfs:comment "A Generator must be associated with at least one ConnectionPoint using the relation hasConnectionPoint."^^xsd:string ; + sh:message "s223: A Generator must be associated with at least one ConnectionPoint using the relation hasConnectionPoint."^^xsd:string ; + sh:minCount 1 ; sh:path s223:hasConnectionPoint ] . -s223:HeatPump a s223:Class, +s223:GroundSourceHeatPump a s223:Class, sh:NodeShape ; - rdfs:label "HeatPump"^^xsd:string ; - rdfs:comment "A device that can heat or cool by transferring thermal energy using a reversible refrigeration cycle."^^xsd:string ; - rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A HeatPump shall have at least one inlet using the medium Air."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Fluid-Air ; - sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A HeatPump shall have at least one outlet using the medium Air."^^xsd:string ; + rdfs:label "Ground source heat pump"^^xsd:string ; + rdfs:comment "A subclass of HeatPump that can heat or cool by transferring thermal energy to and from the ground."^^xsd:string ; + rdfs:subClassOf s223:HeatPump ; + sh:property [ rdfs:comment "A GroundSourceHeatPump shall have at least one BidirectionalConnectionPoint using the medium Ground."^^xsd:string ; + sh:class s223:BidirectionalConnectionPoint ; + sh:message "s223: A GroundSourceHeatPump shall have at least one BidirectionalConnectionPoint using the medium Ground."^^xsd:string ; sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Fluid-Air ; - sh:path s223:hasMedium ] ] ] ] . + sh:node [ sh:property [ sh:class s223:Mix-ThermalContact ; + sh:path s223:hasMedium ] ] ; + sh:path s223:hasConnectionPoint ] . + +s223:HeatTransferRole sh:rule [ a sh:TripleRule ; + rdfs:comment "Infer the hasRole s223:Role-HeatTransfer relation for every instance of the listed targetClass values."^^xsd:string ; + sh:object s223:Role-HeatTransfer ; + sh:predicate s223:hasRole ; + sh:subject sh:this ] ; + sh:targetClass s223:AirHeatExchanger, + s223:ChilledBeam, + s223:Coil, + s223:ElectricResistanceElement, + s223:HydronicHeatExchanger, + s223:RadiantHeater, + s223:Radiator . s223:Humidifier a s223:Class, sh:NodeShape ; @@ -1842,7 +1880,7 @@ s223:HumiditySensor a s223:Class, rdfs:subClassOf s223:Sensor ; sh:property [ rdfs:comment "A HumiditySensor must be defined in terms of the QuantityKind that is being measured, which must be either RelativeHumidity or AbsoluteHumidity."^^xsd:string ; sh:class s223:QuantifiableObservableProperty ; - sh:message "A HumiditySensor must observe a QuantifiableObservableProperty that hasQuantityKind of either RelativeHumidity or AbsoluteHumidity."^^xsd:string ; + sh:message "s223: A HumiditySensor must observe a QuantifiableObservableProperty that hasQuantityKind of either RelativeHumidity or AbsoluteHumidity."^^xsd:string ; sh:node [ sh:property [ sh:or ( [ sh:hasValue ] [ sh:hasValue ] ) ; sh:path ns1:hasQuantityKind ] ] ; sh:path s223:observes ] . @@ -1880,19 +1918,21 @@ s223:Inverter a s223:Class, rdfs:label "Inverter"^^xsd:string ; rdfs:comment "An electric energy converter that changes direct electric current to alternating current."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "An Inverter shall have at least one outlet using the medium Electricity-AC."^^xsd:string ; + sh:property [ rdfs:comment "An Inverter shall have at least one inlet using the medium Electricity-DC."^^xsd:string ; + sh:message "s223: An Inverter shall have at least one inlet using the medium Electricity-DC."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Electricity-AC ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Electricity-DC ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "An Inverter shall have at least one inlet using the medium Electricity-DC."^^xsd:string ; + [ rdfs:comment "An Inverter shall have at least one outlet using the medium Electricity-AC."^^xsd:string ; + sh:message "s223: An Inverter shall have at least one outlet using the medium Electricity-AC."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Electricity-DC ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Electricity-AC ; sh:path s223:hasMedium ] ] ] ] . s223:JunctionCPShape a sh:NodeShape ; @@ -1919,12 +1959,38 @@ s223:JunctionCPShape a sh:NodeShape ; sh:severity sh:Warning ; sh:targetClass s223:Junction . +s223:JunctionUsageWarning a sh:NodeShape ; + rdfs:label "JunctionUsageWarning"^^xsd:string ; + rdfs:comment "This Junction is not used to model significant details of a branching point in a connection, and may not be required."^^xsd:string ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "This Junction is not used to model significant details of a branching point in a connection, and may not be required."^^xsd:string ; + sh:message "This Junction {$this} is not used to model significant details of a branching point in a connection, and may not be required."^^xsd:string ; + sh:prefixes ; + sh:select """ + SELECT $this + WHERE { + $this s223:hasConnectionPoint? | s223:connectedThrough? ?junc_cp_conn . + + FILTER NOT EXISTS { + # Connection has a relation that is not in the structural or required relationships + { ?junc_cp_conn ?p ?o . } UNION {?o ?p ?junc_cp_conn . } + FILTER (?p NOT IN ( + s223:connected, s223:connectedTo, s223:connectedThrough, s223:hasConnectionPoint, + s223:connectsAt, s223:isConnectionPointOf, s223:cnx, rdf:type, rdfs:label, rdfs:comment + )) + } . + } + """^^xsd:string ; + sh:severity sh:Warning ] ; + sh:targetClass s223:Junction . + s223:Luminaire a s223:Class, sh:NodeShape ; rdfs:label "Luminaire"^^xsd:string ; rdfs:comment "A complete lighting unit consisting of a light source(s) and ballast(s) or driver(s) (when applicable), together with the parts designed to distribute the light, to position and protect the light source(s), and to connect the light source(s) to the power supply. Also known as a light fixture."^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "A Luminaire shall have at least one outlet using the medium EM-Light."^^xsd:string ; + sh:message "s223: A Luminaire shall have at least one outlet using the medium EM-Light."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -1932,6 +1998,7 @@ s223:Luminaire a s223:Class, sh:node [ sh:property [ sh:class s223:EM-Light ; sh:path s223:hasMedium ] ] ] ], [ rdfs:comment "A Luminaire shall have at least one inlet using the medium Electricity."^^xsd:string ; + sh:message "s223: A Luminaire shall have at least one inlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -1945,6 +2012,7 @@ s223:Motor a s223:Class, rdfs:comment "A machine in which power is applied to do work by the conversion of various forms of energy into mechanical force and motion."^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "A Motor shall have at least one inlet using the medium Electricity."^^xsd:string ; + sh:message "s223: A Motor shall have at least one inlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -2018,6 +2086,7 @@ Explicitly declaring the quantity kind of a sensor's output is preferable to rel rdfs:subClassOf s223:Sensor ; sh:property [ rdfs:comment "If the relation ofSubstance is present it must associate the ParticulateSensor with a Substance-Particulate."^^xsd:string ; sh:class s223:Substance-Particulate ; + sh:message "s223: If the relation ofSubstance is present it must associate the ParticulateSensor with a Substance-Particulate."^^xsd:string ; sh:path s223:ofSubstance ] . s223:PhotovoltaicModule a s223:Class, @@ -2025,19 +2094,21 @@ s223:PhotovoltaicModule a s223:Class, rdfs:label "Photovoltaic module"^^xsd:string ; rdfs:comment "A piece of equipment that converts sunlight into electricity."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "An PhotovoltaicModule must have at least one inlet using the medium EM-Light."^^xsd:string ; + sh:property [ rdfs:comment "An PhotovoltaicModule shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:message "s223: An PhotovoltaicModule shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:EM-Light ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "An PhotovoltaicModule shall have at least one outlet using the medium Electricity."^^xsd:string ; + [ rdfs:comment "An PhotovoltaicModule must have at least one inlet using the medium EM-Light."^^xsd:string ; + sh:message "s223: An PhotovoltaicModule must have at least one inlet using the medium EM-Light."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:EM-Light ; sh:path s223:hasMedium ] ] ] ] . s223:Pipe a s223:Class, @@ -2051,17 +2122,19 @@ s223:PowerOverEthernetSwitch a s223:Class, rdfs:label "Power Over Ethernet Switch"^^xsd:string ; rdfs:comment "A type of network hardware that connects and is capable of powering cabled devices, such as computers and Wi-Fi access points, in an Ethernet LAN so they can communicate with each other and to the internet."^^xsd:string ; rdfs:subClassOf s223:EthernetSwitch ; - sh:property [ rdfs:comment "A PowerOverEthernetSwitch shall have at least one BidirectionalConnectionPoint using the medium PowerAndSignal-PoE."^^xsd:string ; + sh:property [ rdfs:comment "A PowerOverEthernetSwitch shall have at least one inlet using the medium Electricity."^^xsd:string ; + sh:message "s223: A PowerOverEthernetSwitch shall have at least one inlet using the medium Electricity."^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ; - sh:node [ sh:property [ sh:class s223:PowerAndSignal-PoE ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A PowerOverEthernetSwitch shall have at least one inlet using the medium Electricity."^^xsd:string ; + [ rdfs:comment "A PowerOverEthernetSwitch shall have at least one BidirectionalConnectionPoint using the medium PowerAndSignal-PoE."^^xsd:string ; + sh:message "s223: A PowerOverEthernetSwitch shall have at least one BidirectionalConnectionPoint using the medium PowerAndSignal-PoE."^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; + sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ; + sh:node [ sh:property [ sh:class s223:PowerAndSignal-PoE ; sh:path s223:hasMedium ] ] ] ] . s223:Pump a s223:Class, @@ -2069,90 +2142,88 @@ s223:Pump a s223:Class, rdfs:label "Pump"^^xsd:string ; rdfs:comment "A machine for imparting energy to a fluid, drawing a fluid into itself through an entrance port, and forcing the fluid out through an exhaust port."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "The non-electrical ConnectionPoints of a Pump must have compatible Media."^^xsd:string ; - sh:path s223:hasConnectionPoint ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "The non-electrical ConnectionPoints of a Pump must have compatible Media."^^xsd:string ; - sh:message "s223: {?cpa} and {?cpb} on the Pump {$this} have incompatible Media {$mediuma} and {$mediumb}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?cpa ?cpb ?mediuma ?mediumb -WHERE { - $this s223:hasConnectionPoint ?cpa . - $this s223:hasConnectionPoint ?cpb . - FILTER (?cpa != ?cpb) . - ?cpa s223:hasMedium ?mediuma . - FILTER (NOT EXISTS {?mediuma a/rdfs:subClassOf* s223:Constituent-Electricity}) . - ?cpb s223:hasMedium ?mediumb . - FILTER (NOT EXISTS {?mediumb a/rdfs:subClassOf* s223:Constituent-Electricity}) . - FILTER (?mediuma != ?mediumb) . - FILTER (NOT EXISTS {?mediumb a/rdfs:subClassOf* ?mediuma}) . - FILTER (NOT EXISTS {?mediuma a/rdfs:subClassOf* ?mediumb}) . -} -"""^^xsd:string ] ], - [ rdfs:comment "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant."^^xsd:string ; + sh:property [ rdfs:comment "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant."^^xsd:string ; + sh:message "s223: A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ rdfs:comment "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant."^^xsd:string ; - sh:message "A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant."^^xsd:string ; + sh:message "s223: A Pump shall have at least one inlet using the medium Water, Oil or Refrigerant."^^xsd:string ; sh:or ( [ sh:property [ sh:class s223:Fluid-Water ; sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Refrigerant ; sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Oil ; sh:path s223:hasMedium ] ] ) ; sh:severity sh:Warning ] ] ], [ rdfs:comment "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant."^^xsd:string ; + sh:message "s223: A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ rdfs:comment "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant."^^xsd:string ; - sh:message "A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant."^^xsd:string ; + sh:message "s223: A Pump shall have at least one outlet using the medium Water, Oil or Refrigerant."^^xsd:string ; sh:or ( [ sh:property [ sh:class s223:Fluid-Water ; sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Refrigerant ; sh:path s223:hasMedium ] ] [ sh:property [ sh:class s223:Fluid-Oil ; sh:path s223:hasMedium ] ] ) ; - sh:severity sh:Warning ] ] ] . + sh:severity sh:Warning ] ] ], + [ rdfs:comment "The non-electrical ConnectionPoints of a Pump must have compatible Media."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "The non-electrical ConnectionPoints of a Pump must have compatible Media."^^xsd:string ; + sh:message "s223: {?cpa} and {?cpb} on the Pump {$this} have incompatible Media {$mediuma} and {$mediumb}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?cpa ?cpb ?mediuma ?mediumb +WHERE { + $this s223:hasConnectionPoint ?cpa . + $this s223:hasConnectionPoint ?cpb . + FILTER (?cpa != ?cpb) . + ?cpa s223:hasMedium ?mediuma . + FILTER (NOT EXISTS {?mediuma a/rdfs:subClassOf* s223:Constituent-Electricity}) . + ?cpb s223:hasMedium ?mediumb . + FILTER (NOT EXISTS {?mediumb a/rdfs:subClassOf* s223:Constituent-Electricity}) . + FILTER (?mediuma != ?mediumb) . + FILTER (NOT EXISTS {?mediumb a/rdfs:subClassOf* ?mediuma}) . + FILTER (NOT EXISTS {?mediuma a/rdfs:subClassOf* ?mediumb}) . +} +"""^^xsd:string ] ] . -s223:RadiantPanelInletShape a sh:NodeShape ; - rdfs:label "Radiant panel inlet shape"^^xsd:string ; - rdfs:comment "A radiant panel shall have at least one inlet using the medium Electricity, NaturalGas, or inlet and outlet of Water."^^xsd:string ; - sh:message "s223: A radiant panel shall have at least one inlet using the medium Electricity, NaturalGas, or inlet and outlet of Water."^^xsd:string ; - sh:or ( [ sh:property [ rdfs:comment "A radiant panel shall have at least one inlet using the medium Electricity, NaturalGas, or inlet and outlet of Water."^^xsd:string ; +s223:RadiantHeaterInletShape a sh:NodeShape ; + rdfs:label "Radiant heater inlet shape"^^xsd:string ; + rdfs:comment "A radiant heater shall have exactly one inlet using the medium Electricity, NaturalGas, or inlet and outlet of Water."^^xsd:string ; + sh:message "s223: A radiant heater shall have exactly one inlet using the medium Electricity, NaturalGas, or inlet and outlet of Water."^^xsd:string ; + sh:severity sh:Warning ; + sh:targetClass s223:RadiantHeater ; + sh:xone ( [ sh:property [ rdfs:comment "A radiant heater shall have at least one inlet using the medium Electricity, NaturalGas, or inlet and outlet of Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; - sh:path s223:hasMedium ] ] ] ] ] [ sh:property [ rdfs:comment "A radiant panel shall have at least one inlet using the medium Electricity, NaturalGas, or inlet and outlet of Water."^^xsd:string ; + sh:node [ sh:property [ sh:or ( [ sh:class s223:Constituent-Electricity ] [ sh:class s223:Fluid-NaturalGas ] ) ; + sh:path s223:hasMedium ] ] ] ] ] [ sh:property [ rdfs:comment "A radiant heater shall have at least one inlet using the medium Electricity, NaturalGas, or inlet and outlet of Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Fluid-NaturalGas ; - sh:path s223:hasMedium ] ] ] ] ] [ sh:property [ rdfs:comment "A radiant panel shall have at least one inlet using the medium Electricity, NaturalGas, or inlet and outlet of Water."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Water ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A radiant panel shall have at least one inlet using the medium Electricity, NaturalGas, or inlet and outlet of Water."^^xsd:string ; + [ rdfs:comment "A radiant heater shall have at least one inlet using the medium Electricity, NaturalGas, or inlet and outlet of Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Water ; - sh:path s223:hasMedium ] ] ] ] ] ) ; - sh:severity sh:Warning ; - sh:targetClass s223:RadiantPanel . + sh:path s223:hasMedium ] ] ] ] ] ) . s223:RadiatorInletShape a sh:NodeShape ; rdfs:label "Radiator"^^xsd:string ; rdfs:comment "A Radiator shall have at least one inlet using the medium Electricity or inlet and outlet of Water."^^xsd:string ; sh:message "s223: A Radiator shall have at least one inlet using the medium Electricity or inlet and outlet of Water."^^xsd:string ; - sh:or ( [ sh:property [ rdfs:comment "A Radiator shall have at least one inlet using the medium Electricity or inlet and outlet of Water."^^xsd:string ; + sh:severity sh:Warning ; + sh:targetClass s223:Radiator ; + sh:xone ( [ sh:property [ rdfs:comment "A Radiator shall have at least one inlet using the medium Electricity or inlet and outlet of Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -2171,9 +2242,7 @@ s223:RadiatorInletShape a sh:NodeShape ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Water ; - sh:path s223:hasMedium ] ] ] ] ] ) ; - sh:severity sh:Warning ; - sh:targetClass s223:Radiator . + sh:path s223:hasMedium ] ] ] ] ] ) . s223:RequiredCommentsShape1 a sh:NodeShape ; sh:severity sh:Info ; @@ -2340,6 +2409,7 @@ s223:SingleDuctTerminal a s223:Class, rdfs:comment "An air-terminal unit assembly having one ducted air inlet and a damper for regulating the airflow rate."^^xsd:string ; rdfs:subClassOf s223:TerminalUnit ; sh:property [ rdfs:comment "A SingleDuctTerminal must be associated with at least one Damper using the relation contains."^^xsd:string ; + sh:message "s223: A SingleDuctTerminal must be associated with at least one Damper using the relation contains."^^xsd:string ; sh:minCount 1 ; sh:path s223:contains ; sh:qualifiedMinCount 1 ; @@ -2351,6 +2421,7 @@ s223:SolarThermalCollector a s223:Class, rdfs:comment "A device that converts sunlight into thermal energy."^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "A SolarThermalCollector shall have at least one inlet using the medium EM-Light."^^xsd:string ; + sh:message "s223: A SolarThermalCollector shall have at least one inlet using the medium EM-Light."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -2358,6 +2429,7 @@ s223:SolarThermalCollector a s223:Class, sh:node [ sh:property [ sh:class s223:EM-Light ; sh:path s223:hasMedium ] ] ] ], [ rdfs:comment "A SolarThermalCollector shall have at least one outlet using the medium Water."^^xsd:string ; + sh:message "s223: A SolarThermalCollector shall have at least one outlet using the medium Water."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -2400,6 +2472,7 @@ s223:ThermalEnergyStorageUnit a s223:Class, rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "A Thermal Energy Storage Unit must have at least two connection points."^^xsd:string ; sh:class s223:ConnectionPoint ; + sh:message "s223: A Thermal Energy Storage Unit must have at least two connection points."^^xsd:string ; sh:minCount 2 ; sh:path s223:hasConnectionPoint ] . @@ -2415,6 +2488,7 @@ s223:ThreeWayValve a s223:Class, rdfs:comment "A Valve that can divert a fluid in one of three directions."^^xsd:string ; rdfs:subClassOf s223:Valve ; sh:property [ rdfs:comment "A ThreeWayValve must have at least three ConnectionPoints using the relation hasConnectionPoint."^^xsd:string ; + sh:message "s223: A ThreeWayValve must have at least three ConnectionPoints using the relation hasConnectionPoint."^^xsd:string ; sh:minCount 3 ; sh:path s223:hasConnectionPoint ] . @@ -2423,14 +2497,16 @@ s223:Turbine a s223:Class, rdfs:label "Turbine"^^xsd:string ; rdfs:comment "An energy transducer that converts mechanical energy into electric energy."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Turbine must be associated with at least one ConnectionPoint using the relation hasConnectionPoint."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ], - [ rdfs:comment "A Turbine shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:property [ rdfs:comment "A Turbine shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:class s223:OutletConnectionPoint ; + sh:message "s223: A Turbine shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; sh:path s223:hasMedium ] ] ; + sh:path s223:hasConnectionPoint ], + [ rdfs:comment "A Turbine must be associated with at least one ConnectionPoint using the relation hasConnectionPoint."^^xsd:string ; + sh:message "s223: A Turbine must be associated with at least one ConnectionPoint using the relation hasConnectionPoint."^^xsd:string ; + sh:minCount 1 ; sh:path s223:hasConnectionPoint ] . s223:TwoWayValve a s223:Class, @@ -2439,11 +2515,13 @@ s223:TwoWayValve a s223:Class, rdfs:comment "A Valve that can divert a fluid in one of two directions."^^xsd:string ; rdfs:subClassOf s223:Valve ; sh:property [ rdfs:comment "A TwoWayValve shall have at least one inlet."^^xsd:string ; + sh:message "s223: A TwoWayValve shall have at least one inlet."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ], [ rdfs:comment "A TwoWayValve shall have at least one outlet."^^xsd:string ; + sh:message "s223: A TwoWayValve shall have at least one outlet."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -2457,13 +2535,13 @@ s223:ValveCPShape a sh:NodeShape ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ; sh:qualifiedValueShapesDisjoint true ], [ rdfs:comment "A Valve shall have at least one inlet and one outlet or two bidirectional connection points."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ] ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ] ; sh:qualifiedValueShapesDisjoint true ] ] [ sh:property [ rdfs:comment "A Valve shall have at least one inlet and one outlet or two bidirectional connection points."^^xsd:string ; sh:minCount 2 ; sh:path s223:hasConnectionPoint ; @@ -2479,6 +2557,7 @@ s223:VariableFrequencyDrive a s223:Class, rdfs:comment "An electronic device that varies its output frequency to vary the rotating speed of a motor, given a fixed input frequency. Used with fans or pumps to vary the flow in the system as a function of a maintained pressure."^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "A VariableFrequencyDrive shall have at least one inlet using the medium Electricity."^^xsd:string ; + sh:message "s223: A VariableFrequencyDrive shall have at least one inlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -2487,6 +2566,7 @@ s223:VariableFrequencyDrive a s223:Class, sh:path s223:hasMedium ] ] ] ; sh:severity sh:Warning ], [ rdfs:comment "A VariableFrequencyDrive shall have at least one outlet using the medium Electricity."^^xsd:string ; + sh:message "s223: A VariableFrequencyDrive shall have at least one outlet using the medium Electricity."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -2495,8 +2575,31 @@ s223:VariableFrequencyDrive a s223:Class, sh:path s223:hasMedium ] ] ] ], [ rdfs:comment "If the relation connectedTo is present it must associate the VariableFrequencyDrive with a Equipment."^^xsd:string ; sh:class s223:Equipment ; + sh:message "s223: If the relation connectedTo is present it must associate the VariableFrequencyDrive with a Equipment."^^xsd:string ; sh:path s223:connectedTo ] . +s223:WaterSourceHeatPump a s223:Class, + sh:NodeShape ; + rdfs:label "Water source heat pump"^^xsd:string ; + rdfs:comment "A subclass of HeatPump that can heat or cool by transferring thermal energy to and from a body of water."^^xsd:string ; + rdfs:subClassOf s223:HeatPump ; + sh:property [ rdfs:comment "A WaterSourceHeatPump shall have at least one inlet using the medium Water."^^xsd:string ; + sh:message "s223: A WaterSourceHeatPump shall have at least one inlet using the medium Water."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Water ; + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "A WaterSourceHeatPump shall have at least one outlet using the medium Water"^^xsd:string ; + sh:message "s223: A WaterSourceHeatPump shall have at least one outlet using the medium Water."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Water ; + sh:path s223:hasMedium ] ] ] ] . + s223:WindowShade a s223:Class, sh:NodeShape ; rdfs:label "Window shade"^^xsd:string ; @@ -2543,12 +2646,12 @@ s223:inverseOf a rdf:Property ; a sh:NodeShape ; sh:rule [ a sh:TripleRule ; - rdfs:comment "If an instance of s223:ResistanceHeater matches the constraints defined by g36:ElectricHeatingCoil, it will be declared as an instance of that class."^^xsd:string ; + rdfs:comment "If an instance of s223:ElectricResistanceElement matches the constraints defined by g36:ElectricHeatingCoil, it will be declared as an instance of that class."^^xsd:string ; sh:condition ; sh:object ; sh:predicate rdf:type ; sh:subject sh:this ] ; - sh:targetClass s223:ResistanceHeater . + sh:targetClass s223:ElectricResistanceElement . a sh:NodeShape ; sh:rule [ a sh:TripleRule ; @@ -2618,7 +2721,7 @@ s223:inverseOf a rdf:Property ; owl:versionInfo "Created with TopBraid Composer"^^xsd:string . - owl:versionInfo "Created with TopBraid Composer"^^xsd:string . + owl:versionInfo "Created with TopBraid Composer"^^xsd:string . owl:versionInfo "Created with TopBraid Composer"^^xsd:string . @@ -16667,9 +16770,9 @@ $\\text{Magnetic Polarization}$ is a vector quantity equal to the product of the a ns1:QuantityKind ; rdfs:label "Reflectivity"@en ; - dcterms:description """

For homogeneous and semi-infinite materials, reflectivity is the same as reflectance. Reflectivity is the square of the magnitude of the Fresnel reflection coefficient, which is the ratio of the reflected to incident electric field; as such the reflection coefficient can be expressed as a complex number as determined by the Fresnel equations for a single layer, whereas the reflectance is always a positive real number.

+ dcterms:description """

For homogeneous and semi-infinite materials, reflectivity is the same as reflectance. Reflectivity is the square of the magnitude of the Fresnel reflection coefficient, which is the ratio of the reflected to incident electric field; as such the reflection coefficient can be expressed as a complex number as determined by the Fresnel equations for a single layer, whereas the reflectance is always a positive real number.

-

For layered and finite media, according to the CIE, reflectivity is distinguished from reflectance by the fact that reflectivity is a value that applies to thick reflecting objects. When reflection occurs from thin layers of material, internal reflection effects can cause the reflectance to vary with surface thickness. Reflectivity is the limit value of reflectance as the sample becomes thick; it is the intrinsic reflectance of the surface, hence irrespective of other parameters such as the reflectance of the rear surface. Another way to interpret this is that the reflectance is the fraction of electromagnetic power reflected from a specific sample, while reflectivity is a property of the material itself, which would be measured on a perfect machine if the material filled half of all space."""^^rdf:HTML ; +

For layered and finite media, according to the CIE, reflectivity is distinguished from reflectance by the fact that reflectivity is a value that applies to thick reflecting objects. When reflection occurs from thin layers of material, internal reflection effects can cause the reflectance to vary with surface thickness. Reflectivity is the limit value of reflectance as the sample becomes thick; it is the intrinsic reflectance of the surface, hence irrespective of other parameters such as the reflectance of the rear surface. Another way to interpret this is that the reflectance is the fraction of electromagnetic power reflected from a specific sample, while reflectivity is a property of the material itself, which would be measured on a perfect machine if the material filled half of all space.

"""^^rdf:HTML ; ns1:applicableUnit , , ; @@ -21461,6 +21564,45 @@ s223:AC-6600VLL-3Ph-60Hz a s223:AC-6600VLL-3Ph-60Hz, rdfs:comment "AC-6600VLL-3Ph-60Hz"^^xsd:string ; rdfs:subClassOf s223:Electricity-AC . +s223:AirHeatExchanger a s223:Class, + sh:NodeShape ; + rdfs:label "Air heat exchanger"^^xsd:string ; + rdfs:comment """A component intended to transfer heat from one air stream to another while keeping the two media separate. The + AirHeatExchanger class does not represent the physical characteristics of a heat exchanger design. It represents only the heat + transfer functionality."""^^xsd:string ; + rdfs:subClassOf s223:Equipment ; + sh:property [ rdfs:comment "An AirHeatExchanger shall have at least two air inlets, each paired with an outlet."^^xsd:string ; + sh:message "s223: An AirHeatExchanger shall have at least two air inlets, each paired with an outlet."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 2 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:OutletConnectionPoint ; + sh:minCount 1 ; + sh:path s223:pairedConnectionPoint ], + [ sh:class s223:Fluid-Air ; + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "An AirHeatExchanger shall have at least two air outlets, each paired with an inlet."^^xsd:string ; + sh:message "s223: An AirHeatExchanger shall have at least two air outlets, each paired with an inlet."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 2 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:InletConnectionPoint ; + sh:minCount 1 ; + sh:path s223:pairedConnectionPoint ], + [ sh:class s223:Fluid-Air ; + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "An AirHeatExchanger shall have no BidirectionalConnectionPoints."^^xsd:string ; + sh:message "s223: An AirHeatExchanger shall have no BidirectionalConnectionPoints."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ; + sh:message "s223: An AirHeatExchanger shall have no BidirectionalConnectionPoints."^^xsd:string ; + sh:qualifiedMaxCount 0 ] ], + [ rdfs:comment "An AirHeatExchanger shall have a role of Role-HeatTransfer."^^xsd:string ; + sh:message "s223: An AirHeatExchanger shall have a role of Role-HeatTransfer."^^xsd:string ; + sh:path s223:hasRole ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:Role-HeatTransfer ] ] . + s223:Aspect-Alarm a s223:Aspect-Alarm, s223:Class, sh:NodeShape ; @@ -21719,6 +21861,47 @@ s223:Binary-Unknown a s223:Binary-Unknown, rdfs:comment "Binary Unknown"^^xsd:string ; rdfs:subClassOf s223:EnumerationKind-Binary . +s223:ChilledBeam a s223:Class, + sh:NodeShape ; + rdfs:label "Chilled beam"^^xsd:string ; + rdfs:comment "A structure with a colder surface temperature where air passes through, and air movement is induced in the room to achieve cooling. Cooling medium is generally water."^^xsd:string ; + rdfs:subClassOf s223:Equipment ; + sh:property [ rdfs:comment "A ChilledBeam must be associated with the Role-Cooling using the relation hasRole"^^xsd:string ; + sh:message "s223: A ChilledBeam must be associated with the Role-Cooling using the relation hasRole"^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasRole ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:Role-Cooling ] ], + [ rdfs:comment "A ChilledBeam shall have at least one inlet using the medium Water."^^xsd:string ; + sh:message "s223: A ChilledBeam shall have at least one inlet using the medium Water."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Water ; + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "A ChilledBeam shall have at least one bidirectional connection point using the medium Air."^^xsd:string ; + sh:message "s223: A ChilledBeam shall have at least one bidirectional connection point using the medium Air."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Air ; + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "A ChilledBeam shall have at least one outlet using the medium Water."^^xsd:string ; + sh:message "s223: A ChilledBeam shall have at least one outlet using the medium Water."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Water ; + sh:path s223:hasMedium ] ] ] ] ; + sh:rule [ a sh:TripleRule ; + rdfs:comment "A Chilled Beam will always have the role Role-Cooling"^^xsd:string ; + sh:object s223:Role-Cooling ; + sh:predicate s223:hasRole ; + sh:subject sh:this ] . + s223:Constituent-CO a s223:Class, s223:Constituent-CO, sh:NodeShape ; @@ -21943,12 +22126,14 @@ s223:EthernetSwitch a s223:Class, rdfs:comment "A type of network hardware that connects cabled devices, such as computers and Wi-Fi access points, in an Ethernet LAN so they can communicate with each other and to the internet."^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "An EthernetSwitch shall have at least two BidirectionalConnectionPoints using the medium Signal-Ethernet."^^xsd:string ; + sh:message "s223: An EthernetSwitch shall have at least two BidirectionalConnectionPoints using the medium Signal-Ethernet."^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 2 ; sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ; sh:node [ sh:property [ sh:class s223:Signal-Ethernet ; sh:path s223:hasMedium ] ] ] ], [ rdfs:comment "An EthernetSwitch shall have at least one inlet using the medium Electricity."^^xsd:string ; + sh:message "s223: An EthernetSwitch shall have at least one inlet using the medium Electricity."^^xsd:string ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; @@ -21967,16 +22152,16 @@ s223:GlycolSolution-15Percent a s223:Class, sh:NodeShape ; rdfs:label "GlycolSolution-15Percent"^^xsd:string ; s223:composedOf [ a s223:QuantifiableProperty ; - rdfs:label "Water conc"^^xsd:string ; - s223:hasValue 85.0 ; - s223:ofConstituent s223:Constituent-H2O ; - ns1:hasQuantityKind ; - ns1:hasUnit ], - [ a s223:QuantifiableProperty ; rdfs:label "Glycol conc"^^xsd:string ; s223:hasValue 15.0 ; s223:ofConstituent s223:Constituent-Glycol ; ns1:hasQuantityKind ; + ns1:hasUnit ], + [ a s223:QuantifiableProperty ; + rdfs:label "Water conc"^^xsd:string ; + s223:hasValue 85.0 ; + s223:ofConstituent s223:Constituent-H2O ; + ns1:hasQuantityKind ; ns1:hasUnit ] ; s223:hasFreezingPoint [ a s223:QuantifiableProperty ; rdfs:label "Freezing point"^^xsd:string ; @@ -21989,16 +22174,16 @@ s223:GlycolSolution-30Percent a s223:Class, sh:NodeShape ; rdfs:label "GlycolSolution-30Percent"^^xsd:string ; s223:composedOf [ a s223:QuantifiableProperty ; - rdfs:label "Water conc"^^xsd:string ; - s223:hasValue 70.0 ; - s223:ofConstituent s223:Constituent-H2O ; - ns1:hasQuantityKind ; - ns1:hasUnit ], - [ a s223:QuantifiableProperty ; rdfs:label "Glycol conc"^^xsd:string ; s223:hasValue 30.0 ; s223:ofConstituent s223:Constituent-Glycol ; ns1:hasQuantityKind ; + ns1:hasUnit ], + [ a s223:QuantifiableProperty ; + rdfs:label "Water conc"^^xsd:string ; + s223:hasValue 70.0 ; + s223:ofConstituent s223:Constituent-H2O ; + ns1:hasQuantityKind ; ns1:hasUnit ] ; s223:hasFreezingPoint [ a s223:QuantifiableProperty ; rdfs:label "Freezing point"^^xsd:string ; @@ -22076,61 +22261,51 @@ s223:HVACOperatingStatus-Ventilating a s223:Class, rdfs:comment "Ventilating"^^xsd:string ; rdfs:subClassOf s223:EnumerationKind-HVACOperatingStatus . -s223:HeatExchanger a s223:Class, +s223:HydronicHeatExchanger a s223:Class, sh:NodeShape ; - rdfs:label "Heat exchanger"^^xsd:string ; - rdfs:comment "A component intended to transfer heat from one medium to another while keeping the two media separate."^^xsd:string ; + rdfs:label "Hydronic heat exchanger"^^xsd:string ; + rdfs:comment """A component intended to transfer heat from one liquid stream to another while keeping the two media separate. The + HydronicHeatExchanger class does not represent the physical characteristics of a hydronic heat exchanger design. It represents only the heat + transfer functionality."""^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points."^^xsd:string ; + sh:property [ rdfs:comment "A HydronicHeatExchanger shall have at least two liquid outlets, each paired with an inlet."^^xsd:string ; + sh:message "s223: A HydronicHeatExchanger shall have at least two liquid outlets, each paired with an inlet."^^xsd:string ; sh:path s223:hasConnectionPoint ; - sh:severity sh:Warning ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Heat Exchangers should have the same number of non-electrical inlet and outlet connection points."^^xsd:string ; - sh:message "s223: Number of inlets {?incount} are not equivalent with number of outlets {?outcount}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT DISTINCT $this ?incount ?outcount -WHERE { -{ -SELECT $this (COUNT (?cpin) AS ?incount) -WHERE { -?cpin a/rdfs:subClassOf* s223:InletConnectionPoint . -$this s223:hasConnectionPoint ?cpin . -?cpin s223:hasMedium ?inmedium . -FILTER NOT EXISTS { - ?inmedium a/rdfs:subClassOf* s223:Constituent-Electricity . - } -} -GROUP BY $this -} -{ -SELECT $this (COUNT (?cpout) AS ?outcount) -WHERE { -?cpout a/rdfs:subClassOf* s223:OutletConnectionPoint . -$this s223:hasConnectionPoint ?cpout . -?cpout s223:hasMedium ?outmedium . -FILTER NOT EXISTS { - ?outmedium a/rdfs:subClassOf* s223:Constituent-Electricity . - } -} -GROUP BY $this -} -FILTER (?incount != ?outcount) -} -"""^^xsd:string ] ], - [ rdfs:comment "A heat exchanger shall have at least 4 connection points."^^xsd:string ; - sh:minCount 4 ; - sh:path s223:hasConnectionPoint ], - [ rdfs:comment "If the relation hasRole is present it must associate the HeatExchanger with a EnumerationKind-Role."^^xsd:string ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ] . - -s223:Light-Infrared a s223:Class, - s223:Light-Infrared, - sh:NodeShape ; - rdfs:label "Light-Infrared"^^xsd:string ; - rdfs:comment "Light-Infrared"^^xsd:string ; - rdfs:subClassOf s223:EM-Light . + sh:qualifiedMinCount 2 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Mix-Fluid ; + sh:path s223:hasMedium ], + [ sh:class s223:InletConnectionPoint ; + sh:minCount 1 ; + sh:path s223:pairedConnectionPoint ] ] ] ], + [ rdfs:comment "A HydronicHeatExchanger shall have no ConnectionPoints using the medium Air."^^xsd:string ; + sh:class s223:ConnectionPoint ; + sh:message "s223: A HydronicHeatExchanger shall have no ConnectionPoints using the medium Air."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 0 ; + sh:qualifiedValueShape [ sh:property [ sh:class s223:Fluid-Air ; + sh:path s223:hasMedium ] ] ], + [ rdfs:comment "A HydronicHeatExchanger shall have no BidirectionalConnectionPoints."^^xsd:string ; + sh:message "s223: A HydronicHeatExchanger shall have no BidirectionalConnectionPoints."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ; + sh:message "s223: A HydronicHeatExchanger shall have no BidirectionalConnectionPoints."^^xsd:string ; + sh:qualifiedMaxCount 0 ] ], + [ rdfs:comment "A HydronicHeatExchanger shall have a role of Role-HeatTransfer."^^xsd:string ; + sh:message "s223: A HydronicHeatExchanger shall have a role of Role-HeatTransfer."^^xsd:string ; + sh:path s223:hasRole ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:Role-HeatTransfer ] ], + [ rdfs:comment "A HydronicHeatExchanger shall have at least two liquid inlets, each paired with an outlet."^^xsd:string ; + sh:message "s223: A HydronicHeatExchanger shall have at least two liquid inlets, each paired with an outlet."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 2 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:OutletConnectionPoint ; + sh:minCount 1 ; + sh:path s223:pairedConnectionPoint ], + [ sh:class s223:Mix-Fluid ; + sh:path s223:hasMedium ] ] ] ] . s223:Light-Ultraviolet a s223:Class, s223:Light-Ultraviolet, @@ -22331,28 +22506,6 @@ Case 3. "A PressureSensor is a specialization of a Sensor that observes a QuantifiableObservableProperty that represents a pressure measurement."^^xsd:string ; rdfs:subClassOf s223:Sensor . -s223:RadiantPanel a s223:Class, - sh:NodeShape ; - rdfs:label "Radiant panel"^^xsd:string ; - rdfs:comment "A heating or cooling surface that delivers 50% or more of its heat transfer by radiation."^^xsd:string ; - rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A radiant panel must hasRole Role-Heating."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasRole ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:Role-Heating ] ] . - -s223:Radiator a s223:Class, - sh:NodeShape ; - rdfs:label "Radiator"^^xsd:string ; - rdfs:comment "A radiator provides heating to a room using electricity, steam or water (e.g., electric baseboard heaters)."^^xsd:string ; - rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "Radiators must have the role Role-Heating."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasRole ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:Role-Heating ] ] . - s223:Refrigerant-R-22 a s223:Class, s223:Refrigerant-R-22, sh:NodeShape ; @@ -22578,28 +22731,43 @@ s223:System a s223:Class, rdfs:label "System"^^xsd:string ; rdfs:comment "A System is a logical grouping (collection) of Equipment for some functional purpose. Examples of possible systems iclude an air distribution system, or a hot water system. Systems can contain other Systems. A System does not participate in Connections."^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "A System may be defined with a number of ConnectionPoints that are the \"boundary\" of the equipment. The hasBoundryConnectionPoint relation is used to reference those connection points of its equipment that must be connected, but in the context of validating the a model with the system by itself, the \"dangling ConnectionPoint\" should not generate a validation error."^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:path s223:hasBoundaryConnectionPoint ], - [ rdfs:comment "If the relation hasRole is present, it must associate the System with an EnumerationKind-Role."^^xsd:string ; + sh:property [ rdfs:comment "If the relation hasRole is present, it must associate the System with an EnumerationKind-Role."^^xsd:string ; sh:class s223:EnumerationKind-Role ; + sh:message "s223: If the relation hasRole is present, it must associate the System with an EnumerationKind-Role."^^xsd:string ; sh:path s223:hasRole ], + [ rdfs:comment "A System may be defined with a number of ConnectionPoints that are the \"boundary\" of the equipment. The hasBoundaryConnectionPoint relation is used to reference those connection points of its equipment that must be connected, but in the context of validating the a model with the system by itself, the \"dangling ConnectionPoint\" should not generate a validation error."^^xsd:string ; + sh:class s223:ConnectionPoint ; + sh:message "s223: A System may be defined with a number of ConnectionPoints that are the \"boundary\" of the equipment. The hasBoundaryConnectionPoint relation is used to reference those connection points of its equipment that must be connected, but in the context of validating the a model with the system by itself, the \"dangling ConnectionPoint\" should not generate a validation error."^^xsd:string ; + sh:path s223:hasBoundaryConnectionPoint ], + [ rdfs:comment "A System may be defined with a number of ConnectionPoints that are the \"boundary\" of the equipment. The hasOptionalConnectionPoint relation is used to reference those connection points of its equipment that may not be connected, the \"dangling ConnectionPoint\" should not generate a validation error."^^xsd:string ; + sh:class s223:ConnectionPoint ; + sh:message "s223: A System may be defined with a number of ConnectionPoints that are the \"boundary\" of the equipment. The hasOptionalConnectionPoint relation is used to reference those connection points of its equipment that may not be connected, the \"dangling ConnectionPoint\" should not generate a validation error."^^xsd:string ; + sh:path s223:hasOptionalConnectionPoint ], [ a sh:PropertyShape ; rdfs:comment "A System should be associated with at least one instance of Equipment or System using the relation hasMember"^^xsd:string ; sh:message "s223: A System should be associated with at least one instance of Equipment or System using the relation hasMember"^^xsd:string ; sh:minCount 1 ; sh:or ( [ sh:class s223:Equipment ] [ sh:class s223:System ] ) ; sh:path s223:hasMember ; - sh:severity sh:Warning ], - [ rdfs:comment "A System may be defined with a number of ConnectionPoints that are the \"boundary\" of the equipment. The hasOptionalConnectionPoint relation is used to reference those connection points of its equipment that may not be connected, the \"dangling ConnectionPoint\" should not generate a validation error."^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:path s223:hasOptionalConnectionPoint ] ; + sh:severity sh:Warning ] ; sh:rule [ a sh:TripleRule ; rdfs:comment "Infer the hasBoundaryConnectionPoint relation using hasOptionalConnectionPoint."^^xsd:string ; sh:name "InferredSystemToBoundaryConnectionPointFromOptional"^^xsd:string ; sh:object [ sh:path s223:hasOptionalConnectionPoint ] ; sh:predicate s223:hasBoundaryConnectionPoint ; - sh:subject sh:this ] . + sh:subject sh:this ] ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Ensure that the Boundary CPs of a System belong to only members of that System"^^xsd:string ; + sh:message "s223: System {$this} hasBoundaryConnectionPoint {?cp}, belonging to {?con} that is not a member of {?this}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?cp ?con +WHERE { +$this s223:hasBoundaryConnectionPoint ?cp . +?cp s223:isConnectionPointOf ?con . +FILTER NOT EXISTS {$this s223:hasMember+ ?con} +} +"""^^xsd:string ] . s223:Water-ChilledWater a s223:Class, s223:Water-ChilledWater, @@ -22691,18 +22859,20 @@ s223:Window a s223:Class, rdfs:label "Window"^^xsd:string ; rdfs:comment "A daylight opening on a vertical or nearly vertical area of a room envelope."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Window shall have at least one inlet using the medium Light."^^xsd:string ; + sh:property [ rdfs:comment "A Window shall have at least one outlet using the medium Light."^^xsd:string ; + sh:message "s223: A Window shall have at least one outlet using the medium Light."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:EM-Light ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A Window shall have at least one outlet using the medium Light."^^xsd:string ; + [ rdfs:comment "A Window shall have at least one inlet using the medium Light."^^xsd:string ; + sh:message "s223: A Window shall have at least one inlet using the medium Light."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:EM-Light ; sh:path s223:hasMedium ] ] ] ] . @@ -23227,7 +23397,7 @@ ns1:LongUnsignedIntegerEncoding a ns1:IntegerEncodingType ; ns1:Narratable a ns1:AspectClass, sh:NodeShape ; rdfs:label "Narratable"^^xsd:string ; - rdfs:comment "

Narratable specifies properties that provide for documentation and references."^^rdf:HTML ; + rdfs:comment "

Narratable specifies properties that provide for documentation and references.

"^^rdf:HTML ; rdfs:isDefinedBy ; rdfs:subClassOf ns1:Aspect . @@ -36240,7 +36410,7 @@ the quotient of rms voltage and rms electric current; it is often denoted by $Z$ a ns1:DerivedUnit, ns1:Unit ; rdfs:label "Darcy"@en ; - dcterms:description "

The $darcy$ (d) is a unit of permeability named after Henry Darcy. It is not an SI unit, but it is widely used in petroleum engineering and geology. The unit has also been used in biophysics and biomechanics, where the flow of fluids such as blood through capillary beds and cerebrospinal fluid through the brain interstitial space is being examined. A darcy has dimensional units of length2."^^rdf:HTML ; + dcterms:description "

The $darcy$ (d) is a unit of permeability named after Henry Darcy. It is not an SI unit, but it is widely used in petroleum engineering and geology. The unit has also been used in biophysics and biomechanics, where the flow of fluids such as blood through capillary beds and cerebrospinal fluid through the brain interstitial space is being examined. A darcy has dimensional units of length2.

"^^rdf:HTML ; ns1:applicableSystem , ; ns1:conversionMultiplier 0.0000000000009869233 ; @@ -38926,7 +39096,7 @@ The magnitude of one $IU/L$ depends on the material, so there is no single conve dcterms:description """

International Unit per milligramme. The magnitude of one $IU/L$ depends on the material, so there is no single conversion multiplier. -"""^^rdf:HTML ; +

"""^^rdf:HTML ; ns1:conversionMultiplier 0.000001 ; ns1:conversionMultiplierSN 1e-06 ; ns1:conversionOffset 0.0 ; @@ -39229,7 +39399,7 @@ The magnitude of one $IU/L$ depends on the material, so there is no single conve rdfs:label "Kelvin je Watt"@de, "kelvin per watt"@en, "kelvin al watt"@it ; - dcterms:description "

Thermal resistance is a heat property and a measure of a temperature difference by which an object or material resists a heat flow (heat per time unit or thermal resistance). Thermal resistance is the reciprocal thermal conductance. Absolute thermal resistance is the temperature difference across a structure when a unit of heat energy flows through it in unit time. It is the reciprocal of thermal conductance. The SI units of thermal resistance are kelvins per watt or the equivalent degrees Celsius per watt (the two are the same since as intervals)."^^rdf:HTML ; + dcterms:description "

Thermal resistance is a heat property and a measure of a temperature difference by which an object or material resists a heat flow (heat per time unit or thermal resistance). Thermal resistance is the reciprocal thermal conductance. Absolute thermal resistance is the temperature difference across a structure when a unit of heat energy flows through it in unit time. It is the reciprocal of thermal conductance. The SI units of thermal resistance are kelvins per watt or the equivalent degrees Celsius per watt (the two are the same since as intervals).

"^^rdf:HTML ; ns1:applicableSystem ; ns1:conversionMultiplier 1.0 ; ns1:conversionMultiplierSN 1e+00 ; @@ -51355,11 +51525,11 @@ ns2:GMD_SHACLQUDT-SCHEMA a ns2:GraphMetaData ; "Steve Ray"^^xsd:string ; dcterms:created "2011-04-20"^^xsd:date ; dcterms:creator "Ralph Hodgson"^^xsd:string ; - dcterms:description """

The QUDT, or "Quantity, Unit, Dimension and Type" schema defines the base classes properties, and restrictions used for modeling physical quantities, units of measure, and their dimensions in various measurement systems. The goal of the QUDT ontology is to provide a unified model of, measurable quantities, units for measuring different kinds of quantities, the numerical values of quantities in different units of measure and the data structures and data types used to store and manipulate these objects in software.

+ dcterms:description """

The QUDT, or "Quantity, Unit, Dimension and Type" schema defines the base classes properties, and restrictions used for modeling physical quantities, units of measure, and their dimensions in various measurement systems. The goal of the QUDT ontology is to provide a unified model of, measurable quantities, units for measuring different kinds of quantities, the numerical values of quantities in different units of measure and the data structures and data types used to store and manipulate these objects in software.

-

Except for unit prefixes, all units are specified in separate vocabularies. Descriptions are provided in both HTML and LaTeX formats. A quantity is a measure of an observable phenomenon, that, when associated with something, becomes a property of that thing; a particular object, event, or physical system.

+

Except for unit prefixes, all units are specified in separate vocabularies. Descriptions are provided in both HTML and LaTeX formats. A quantity is a measure of an observable phenomenon, that, when associated with something, becomes a property of that thing; a particular object, event, or physical system.

-

A quantity has meaning in the context of a measurement (i.e. the thing measured, the measured value, the accuracy of measurement, etc.) whereas the underlying quantity kind is independent of any particular measurement. Thus, length is a quantity kind while the height of a rocket is a specific quantity of length; its magnitude that may be expressed in meters, feet, inches, etc. Or, as stated at Wikipedia, in the language of measurement, quantities are quantifiable aspects of the world, such as time, distance, velocity, mass, momentum, energy, and weight, and units are used to describe their measure. Many of these quantities are related to each other by various physical laws, and as a result the units of some of the quantities can be expressed as products (or ratios) of powers of other units (e.g., momentum is mass times velocity and velocity is measured in distance divided by time)."""^^rdf:HTML ; +

A quantity has meaning in the context of a measurement (i.e. the thing measured, the measured value, the accuracy of measurement, etc.) whereas the underlying quantity kind is independent of any particular measurement. Thus, length is a quantity kind while the height of a rocket is a specific quantity of length; its magnitude that may be expressed in meters, feet, inches, etc. Or, as stated at Wikipedia, in the language of measurement, quantities are quantifiable aspects of the world, such as time, distance, velocity, mass, momentum, energy, and weight, and units are used to describe their measure. Many of these quantities are related to each other by various physical laws, and as a result the units of some of the quantities can be expressed as products (or ratios) of powers of other units (e.g., momentum is mass times velocity and velocity is measured in distance divided by time).

"""^^rdf:HTML ; dcterms:modified "2024-07-23T08:31:36.883000-04:00"^^xsd:dateTime ; dcterms:rights """ This product includes all or a portion of the UCUM table, UCUM codes, and UCUM definitions or is derived from it, subject to a license from Regenstrief Institute, Inc. and The UCUM Organization. Your use of the UCUM table, UCUM codes, UCUM definitions also is subject to this license, a copy of which is available at ​http://unitsofmeasure.org. The current complete UCUM table, UCUM Specification are available for download at ​http://unitsofmeasure.org. The UCUM table and UCUM codes are copyright © 1995-2009, Regenstrief Institute, Inc. and the Unified Codes for Units of Measures (UCUM) Organization. All rights reserved. @@ -51408,7 +51578,7 @@ ns2:GMD_SHACLQUDTOVERLAY-SCHEMA a ns2:GraphMetaData ; dcterms:contributor "Steve Ray"^^xsd:string ; dcterms:created "2020-04-20"^^xsd:date ; dcterms:creator "Ralph Hodgson"^^xsd:string ; - dcterms:description "

The QUDT, or \"Quantity, Unit, Dimension and Type\" schema defines the base classes properties, and restrictions used for modeling physical quantities, units of measure, and their dimensions in various measurement systems. This overlay graph provides additional properties that affect the display of entities in a user interface, as well as some SHACL rules."^^rdf:HTML ; + dcterms:description "

The QUDT, or \"Quantity, Unit, Dimension and Type\" schema defines the base classes properties, and restrictions used for modeling physical quantities, units of measure, and their dimensions in various measurement systems. This overlay graph provides additional properties that affect the display of entities in a user interface, as well as some SHACL rules.

"^^rdf:HTML ; dcterms:modified "2024-07-23T08:32:09.436000-04:00"^^xsd:dateTime ; dcterms:rights """ This product includes all or a portion of the UCUM table, UCUM codes, and UCUM definitions or is derived from it, subject to a license from Regenstrief Institute, Inc. and The UCUM Organization. Your use of the UCUM table, UCUM codes, UCUM definitions also is subject to this license, a copy of which is available at ​http://unitsofmeasure.org. The current complete UCUM table, UCUM Specification are available for download at ​http://unitsofmeasure.org. The UCUM table and UCUM codes are copyright © 1995-2009, Regenstrief Institute, Inc. and the Unified Codes for Units of Measures (UCUM) Organization. All rights reserved. @@ -51464,10 +51634,11 @@ s223:Constituent-CO2 a s223:Class, s223:CoolingCoil a s223:Class, sh:NodeShape ; rdfs:label "Cooling coil"^^xsd:string ; - rdfs:comment "A coil that provides cooling."^^xsd:string ; + rdfs:comment "A subclass of Coil that is specifically used for coolinig air. "^^xsd:string ; rdfs:subClassOf s223:Coil ; sh:property [ rdfs:comment "A cooling coil must be related to the role 'Role-Cooling' using the relation 'hasRole'."^^xsd:string ; sh:hasValue s223:Role-Cooling ; + sh:message "s223: A cooling coil must be related to the role 'Role-Cooling' using the relation 'hasRole'."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasRole ] ; sh:rule [ a sh:TripleRule ; @@ -51661,10 +51832,11 @@ s223:Fluid-NaturalGas a s223:Class, s223:HeatingCoil a s223:Class, sh:NodeShape ; rdfs:label "Heating coil"^^xsd:string ; - rdfs:comment "A coil that provides heating."^^xsd:string ; + rdfs:comment "A subclass of Coil that is used specifically for heating air. "^^xsd:string ; rdfs:subClassOf s223:Coil ; sh:property [ rdfs:comment "A heating coil must be related to the role 'Role-Heating' using the relation 'hasRole'."^^xsd:string ; sh:hasValue s223:Role-Heating ; + sh:message "s223: A heating coil must be related to the role 'Role-Heating' using the relation 'hasRole'."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasRole ] ; sh:rule [ a sh:TripleRule ; @@ -51673,192 +51845,12 @@ s223:HeatingCoil a s223:Class, sh:predicate s223:hasRole ; sh:subject sh:this ] . -s223:Junction a s223:Class, +s223:Light-Infrared a s223:Class, + s223:Light-Infrared, sh:NodeShape ; - rdfs:label "Junction"^^xsd:string ; - rdfs:comment """A Junction is a modeling construct used when a branching point within a Connection (see `s223:Connection`) is of significance, -such as specifying the observation location of a Sensor. When a Junction is used, what might have been modeled as a single, branched Connection -is separated into three or more separate Connections, all tied together with the Junction and its associated ConnectionPoints. -Junction is a subClassOf Connectable, which gives it the ability to have connection points, but unlike Equipment (and like Connection) -it is not allowed to change the Medium that passes through it. This is why Junction is a sibling class to Equipment and not a subclass."""^^xsd:string ; - rdfs:subClassOf s223:Connectable ; - sh:property [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 2: Two ConnectionPoints with a medium with constituents and a pure Medium."^^xsd:string ; - sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?cp1 ?m1 ?cp2 ?m2 -WHERE { -$this s223:cnx ?cp1 . -?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . -?cp1 s223:hasMedium ?m1 . -$this s223:cnx ?cp2 . -?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . -?cp2 s223:hasMedium ?m2 . -?m2 s223:composedOf/s223:ofConstituent ?s2 . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS { - ?m2 s223:composedOf/s223:ofConstituent ?s12 . - {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . -} -} -"""^^xsd:string ] ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 4: Junction with constituents and an associated ConnectionPoint with constituents."^^xsd:string ; - sh:message "s223: Junction {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?m2 ?cp ?m1 -WHERE { -$this s223:cnx ?cp . -?cp a/rdfs:subClassOf* s223:ConnectionPoint . -?cp s223:hasMedium ?m1 . -$this s223:hasMedium ?m2 . - ?m1 s223:composedOf/s223:ofConstituent ?s1 . - ?m2 s223:composedOf/s223:ofConstituent ?s2 . - FILTER NOT EXISTS { - ?m1 s223:composedOf/s223:ofConstituent ?s11 . - ?m2 s223:composedOf/s223:ofConstituent ?s12 . - FILTER (?s11 = ?s12) . - } - FILTER NOT EXISTS { - ?m1 s223:composedOf/s223:ofConstituent ?s21 . - ?m2 s223:composedOf/s223:ofConstituent ?s22 . - {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} . - } -} -"""^^xsd:string ] ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 3: Junction with a pure medium and an associated ConnectionPoint with constituents."^^xsd:string ; - sh:message "s223: Junction {$this} with Medium {?m1} is incompatible with {?cp} with Medium {?m2}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?m2 ?cp ?m1 -WHERE { -$this s223:cnx ?cp . -?cp a/rdfs:subClassOf* s223:ConnectionPoint . -?cp s223:hasMedium ?m2 . -$this s223:hasMedium ?m1 . -?m2 s223:composedOf/s223:ofConstituent ?s2 . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS { - ?m2 s223:composedOf/s223:ofConstituent ?s12 . - {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . -} -} -"""^^xsd:string ] ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 2: A Junction with constituents and an associated ConnectionPoint with a pure Medium."^^xsd:string ; - sh:message "s223: Junction {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?m2 ?cp ?m1 -WHERE { -$this s223:cnx ?cp . -?cp a/rdfs:subClassOf* s223:ConnectionPoint . -?cp s223:hasMedium ?m1 . -$this s223:hasMedium ?m2 . -?m2 s223:composedOf/s223:ofConstituent ?s2 . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS { - ?m2 s223:composedOf/s223:ofConstituent ?s12 . - {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . -} -} -"""^^xsd:string ] ], - [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 3: Two ConnectionPoints with mediums with constituents."^^xsd:string ; - sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?cp1 ?m1 ?cp2 ?m2 -WHERE { -$this s223:cnx ?cp1 . -?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . -?cp1 s223:hasMedium ?m1 . -$this s223:cnx ?cp2 . -?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . -?cp2 s223:hasMedium ?m2 . - ?m1 s223:composedOf/s223:ofConstituent ?s1 . - ?m2 s223:composedOf/s223:ofConstituent ?s2 . - FILTER NOT EXISTS { - ?m1 s223:composedOf/s223:ofConstituent ?s11 . - ?m2 s223:composedOf/s223:ofConstituent ?s12 . - FILTER (?s11 = ?s12) . - } - FILTER NOT EXISTS { - ?m1 s223:composedOf/s223:ofConstituent ?s21 . - ?m2 s223:composedOf/s223:ofConstituent ?s22 . - {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} . - } -} -"""^^xsd:string ] ], - [ rdfs:comment "A Junction must be associated with exactly one EnumerationKind-Medium using the relation hasMedium."^^xsd:string ; - sh:class s223:Substance-Medium ; - sh:maxCount 1 ; - sh:message "s223: A Junction must be associated with exactly one EnumerationKind-Medium using the relation hasMedium."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasMedium ], - [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 1: Two ConnectionPoints with pure mediums."^^xsd:string ; - sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?cp1 ?m1 ?cp2 ?m2 -WHERE { -$this s223:cnx ?cp1 . -?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . -?cp1 s223:hasMedium ?m1 . -$this s223:cnx ?cp2 . -?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . -FILTER (?cp1 != ?cp2 ) . -?cp2 s223:hasMedium ?m2 . -FILTER (?m1 != ?m2 ) . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS {?m2 s223:composedOf ?c2} -FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . -FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . -} -"""^^xsd:string ] ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 1: Two pure mediums."^^xsd:string ; - sh:message "s223: Junction {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?m2 ?cp ?m1 -WHERE { -$this s223:cnx ?cp . -?cp a/rdfs:subClassOf* s223:ConnectionPoint . -?cp s223:hasMedium ?m1 . -$this s223:hasMedium ?m2 . -FILTER (?m1 != ?m2 ) . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS {?m2 s223:composedOf ?c2} -FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . -FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . -} -"""^^xsd:string ] ] . + rdfs:label "Light-Infrared"^^xsd:string ; + rdfs:comment "Light-Infrared"^^xsd:string ; + rdfs:subClassOf s223:EM-Light . s223:Mix-PowerAndSignal a s223:Class, s223:Mix-PowerAndSignal, @@ -51887,19 +51879,16 @@ s223:PowerAndSignal-PoE a s223:Class, rdfs:label "Power over Ethernet"^^xsd:string ; s223:composedOf [ a s223:Property ; rdfs:label "Unspecified"^^xsd:string ; - s223:ofConstituent s223:Electricity-DC ], + s223:ofConstituent s223:Signal-Ethernet ], [ a s223:Property ; rdfs:label "Unspecified"^^xsd:string ; - s223:ofConstituent s223:Signal-Ethernet ] ; + s223:ofConstituent s223:Electricity-DC ] ; rdfs:comment "This class has enumerated subclasses of Power over Ethernet."^^xsd:string ; rdfs:subClassOf s223:Mix-PowerAndSignal ; - sh:property [ rdfs:comment "One of the constituents of PoE must be Ethernet."^^xsd:string ; - sh:path s223:composedOf ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:Property ; - sh:node [ sh:property [ rdfs:comment "One of the constituents of PoE must be Ethernet."^^xsd:string ; - sh:class s223:Signal-Ethernet ; - sh:path s223:ofConstituent ] ] ] ], + sh:property [ rdfs:comment "There must be at least two Properties that characterize the constituents of Power over Ethernet."^^xsd:string ; + sh:class s223:Property ; + sh:minCount 2 ; + sh:path s223:composedOf ], [ rdfs:comment "One of the constituents of PoE must be DC electrical power."^^xsd:string ; sh:path s223:composedOf ; sh:qualifiedMinCount 1 ; @@ -51907,27 +51896,62 @@ s223:PowerAndSignal-PoE a s223:Class, sh:node [ sh:property [ rdfs:comment "One of the constituents of PoE must be DC electrical power."^^xsd:string ; sh:class s223:Electricity-DC ; sh:path s223:ofConstituent ] ] ] ], - [ rdfs:comment "There must be at least two Properties that characterize the constituents of Power over Ethernet."^^xsd:string ; - sh:class s223:Property ; - sh:minCount 2 ; - sh:path s223:composedOf ] . + [ rdfs:comment "One of the constituents of PoE must be Ethernet."^^xsd:string ; + sh:path s223:composedOf ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:Property ; + sh:node [ sh:property [ rdfs:comment "One of the constituents of PoE must be Ethernet."^^xsd:string ; + sh:class s223:Signal-Ethernet ; + sh:path s223:ofConstituent ] ] ] ] . + +s223:RadiantHeater a s223:Class, + sh:NodeShape ; + rdfs:label "Radiant heater"^^xsd:string ; + rdfs:comment """A heating or cooling surface that delivers 50% or more of its heat transfer by radiation. + A RadiantHeater must: +- Have the role Role-Heating. +- Have at least one outlet connection point using the medium Light-Infrared. +- Conform to exactly one of the following patterns: + **Pattern 1:** + - Exactly one inlet connection point using the medium Constituent-Electricity or Fluid-NaturalGas. + **Pattern 2:** + - Exactly one inlet connection point using the medium Fluid-Water. + - Exactly one outlet connection point using the medium Fluid-Water. + """^^xsd:string ; + rdfs:subClassOf s223:Equipment ; + sh:message "s223: A RadiantHeater must conform to exactly one of the two patterns: Pattern 1: Exactly one inlet using the medium Constituent-Electricity or Fluid-NaturalGas. Pattern 2: Exactly one inlet and one outlet using the medium Fluid-Water."^^xsd:string ; + sh:property [ rdfs:comment "A RadiantHeater shall have at least one outlet connection point using the medium Infrared."^^xsd:string ; + sh:message "s223: A RadiantHeater shall have at least one outlet connection point using the medium Infrared."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Light-Infrared ; + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "A radiant heater must hasRole Role-Heating."^^xsd:string ; + sh:message "s223: A radiant heater must hasRole Role-Heating."^^xsd:string ; + sh:path s223:hasRole ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:Role-Heating ] ] . -s223:ResistanceHeater a s223:Class, +s223:Radiator a s223:Class, sh:NodeShape ; - rdfs:label "Electrical resistance heater"^^xsd:string ; - rdfs:comment "Resistance heaters provide electrical resistance heating, for example an electric heating coil within a Fan Coil Unit."^^xsd:string ; + rdfs:label "Radiator"^^xsd:string ; + rdfs:comment """A radiator provides primarily convective heating to a room using electricity, steam or water + (e.g., electric baseboard heaters, heated floors, or traditional radiators)."""^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "ResistanceHeaters must have the role Role-Heating."^^xsd:string ; + sh:property [ rdfs:comment "Radiators must have the role Role-Heating."^^xsd:string ; + sh:message "s223: Radiators must have the role Role-Heating."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasRole ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:Role-Heating ] ], - [ rdfs:comment "A ResistanceHeater shall have at least one inlet using the medium Electricity."^^xsd:string ; + [ rdfs:comment "A Radiator shall have at least one bidirectional connection point using the medium Air."^^xsd:string ; + sh:message "s223: A Radiator shall have at least one bidirectional connection point using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; + sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ] . s223:Voltage-0V a s223:Class, @@ -52228,7 +52252,7 @@ s223:encloses a rdf:Property ; inside a physical space (see `s223:PhysicalSpace`). """^^xsd:string . s223:hasBoundaryConnectionPoint a rdf:Property ; - rdfs:label "has Boundry Connection Point"^^xsd:string ; + rdfs:label "has Boundary Connection Point"^^xsd:string ; rdfs:comment "The hasBoundaryConnectionPoint relation means the ConnectionPoint represents the boundary of a s223:System (`see s223:System`) defined by the modeler, such as a model fragment provided by the vendor of a collection of equipment intended for integration with another model. The presence of this relation is used to indicate that such a \"dangling ConnectionPoint\" should not generate a validation error in a non-integrated context but should generate an error in a integrated context."^^xsd:string . s223:hasElectricalPhase a rdf:Property ; @@ -59669,26 +59693,6 @@ s223:Aspect-DayOfWeek a s223:Aspect-DayOfWeek, rdfs:comment "This class has enumerated subclasses of Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday. The Weekend and Weekday EnumerationKinds define subsets of this EnumerationKind for Mon-Fri and Sat,Sun, respectively"^^xsd:string ; rdfs:subClassOf s223:EnumerationKind-Aspect . -s223:Coil a s223:Class, - sh:NodeShape ; - rdfs:label "Coil"^^xsd:string ; - rdfs:comment "A cooling or heating element made of pipe or tube that may or may not be finned and formed into helical or serpentine shape."^^xsd:string ; - rdfs:subClassOf s223:HeatExchanger ; - sh:property [ rdfs:comment "A Coil shall have at least one outlet using the medium Air."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Fluid-Air ; - sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A Coil shall have at least one inlet using the medium Air."^^xsd:string ; - sh:minCount 1 ; - sh:path s223:hasConnectionPoint ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; - sh:node [ sh:property [ sh:class s223:Fluid-Air ; - sh:path s223:hasMedium ] ] ] ] . - s223:DCNegativeVoltage-12.0V a s223:Class, s223:DCNegativeVoltage-12.0V, sh:NodeShape ; @@ -59764,6 +59768,49 @@ s223:Domain-HVAC a s223:Class, rdfs:comment "The domain HVAC represents equipment used to provide space conditioning and ventilation within a building. Example equipment that might fall within an HVAC domain include fans, pumps, air-handling units, and variable air volume boxes. "^^xsd:string ; rdfs:subClassOf s223:EnumerationKind-Domain . +s223:ElectricResistanceElement a s223:Class, + sh:NodeShape ; + rdfs:label "Electric Resistance Element"^^xsd:string ; + rdfs:comment "Electric resistance elements provide electrical resistance heating, for example an electric heating coil within a Fan Coil Unit. It shall have one electricity InletConnectionPoint, plus fit one of the following two patterns: Pattern 1: An ElectricResistanceElement shall have exactly one Bidirectional ConnectionPoint using the medium Fluid. Pattern 2: An ElectricResistanceElement shall have one inlet and one outlet using the medium Fluid."^^xsd:string ; + rdfs:subClassOf s223:Equipment ; + sh:message "s223: An ElectricResistanceElement shall have one electricity InletConnectionPoint, plus fit one of the following two patterns: Pattern 1: An ElectricResistanceElement shall have exactly one Bidirectional ConnectionPoint using the medium Fluid. Pattern 2: An ElectricResistanceElement shall have one inlet and one outlet using the medium Fluid."^^xsd:string ; + sh:property [ rdfs:comment "An ElectricResistanceElement shall have the role Role-Heating."^^xsd:string ; + sh:message "s223: An ElectricResistanceElement shall have the role Role-Heating."^^xsd:string ; + sh:path s223:hasRole ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:Role-Heating ] ], + [ rdfs:comment "An ElectricResistanceElement shall have at least one inlet using the medium Electricity."^^xsd:string ; + sh:message "s223: An ElectricResistanceElement shall have at least one inlet using the medium Electricity."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Constituent-Electricity ; + sh:path s223:hasMedium ] ] ] ] ; + sh:xone ( [ sh:property [ rdfs:comment "Pattern 1: An ElectricResistanceElement shall have exactly one Bidirectional ConnectionPoint using the medium Fluid."^^xsd:string ; + sh:message "s223: Pattern 1: An ElectricResistanceElement requires exactly one BidirectionalConnectionPoint using the medium Fluid."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 1 ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Mix-Fluid ; + sh:path s223:hasMedium ] ] ] ; + sh:qualifiedValueShapesDisjoint true ] ] [ sh:property [ rdfs:comment "Pattern 2: An ElectricResistanceElement shall have one outlet using the medium Fluid."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 1 ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Mix-Fluid ; + sh:path s223:hasMedium ] ] ] ; + sh:qualifiedValueShapesDisjoint true ], + [ rdfs:comment "Pattern 2: An ElectricResistanceElement shall have one inlet using the medium Fluid."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 1 ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Mix-Fluid ; + sh:path s223:hasMedium ] ] ] ; + sh:qualifiedValueShapesDisjoint true ] ] ) . + s223:Fluid-Oil a s223:Class, s223:Fluid-Oil, sh:NodeShape ; @@ -59771,6 +59818,215 @@ s223:Fluid-Oil a s223:Class, rdfs:comment "This class has enumerated subclasses of oil."^^xsd:string ; rdfs:subClassOf s223:Mix-Fluid . +s223:HeatPump a s223:Class, + sh:NodeShape ; + rdfs:label "HeatPump"^^xsd:string ; + rdfs:comment "A device that can heat or cool by transferring thermal energy using a reversible refrigeration cycle."^^xsd:string ; + rdfs:subClassOf s223:Equipment ; + sh:property [ rdfs:comment "A HeatPump shall have at least one outlet using the medium Air."^^xsd:string ; + sh:message "s223: A HeatPump shall have at least one outlet using the medium Air."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Air ; + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "A HeatPump shall have at least one inlet using the medium Air."^^xsd:string ; + sh:message "s223: A HeatPump shall have at least one inlet using the medium Air."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Air ; + sh:path s223:hasMedium ] ] ] ] . + +s223:Junction a s223:Class, + sh:NodeShape ; + rdfs:label "Junction"^^xsd:string ; + rdfs:comment """A Junction is a modeling construct used when a branching point within a Connection (see `s223:Connection`) is of significance, +such as specifying the observation location of a Sensor. When a Junction is used, what might have been modeled as a single, branched Connection +is separated into three or more separate Connections, all tied together with the Junction and its associated ConnectionPoints. +Junction is a subClassOf Connectable, which gives it the ability to have connection points, but unlike Equipment (and like Connection) +it is not allowed to change the Medium that passes through it. This is why Junction is a sibling class to Equipment and not a subclass."""^^xsd:string ; + rdfs:subClassOf s223:Connectable ; + sh:property [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 3: Two ConnectionPoints with mediums with constituents."^^xsd:string ; + sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?cp1 ?m1 ?cp2 ?m2 +WHERE { +$this s223:cnx ?cp1 . +?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . +?cp1 s223:hasMedium ?m1 . +$this s223:cnx ?cp2 . +?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . +?cp2 s223:hasMedium ?m2 . + ?m1 s223:composedOf/s223:ofConstituent ?s1 . + ?m2 s223:composedOf/s223:ofConstituent ?s2 . + FILTER NOT EXISTS { + ?m1 s223:composedOf/s223:ofConstituent ?s11 . + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + FILTER (?s11 = ?s12) . + } + FILTER NOT EXISTS { + ?m1 s223:composedOf/s223:ofConstituent ?s21 . + ?m2 s223:composedOf/s223:ofConstituent ?s22 . + {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} . + } +} +"""^^xsd:string ] ], + [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 1: Two ConnectionPoints with pure mediums."^^xsd:string ; + sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?cp1 ?m1 ?cp2 ?m2 +WHERE { +$this s223:cnx ?cp1 . +?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . +?cp1 s223:hasMedium ?m1 . +$this s223:cnx ?cp2 . +?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . +FILTER (?cp1 != ?cp2 ) . +?cp2 s223:hasMedium ?m2 . +FILTER (?m1 != ?m2 ) . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS {?m2 s223:composedOf ?c2} +FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . +FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . +} +"""^^xsd:string ] ], + [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 2: Two ConnectionPoints with a medium with constituents and a pure Medium."^^xsd:string ; + sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?cp1 ?m1 ?cp2 ?m2 +WHERE { +$this s223:cnx ?cp1 . +?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . +?cp1 s223:hasMedium ?m1 . +$this s223:cnx ?cp2 . +?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . +?cp2 s223:hasMedium ?m2 . +?m2 s223:composedOf/s223:ofConstituent ?s2 . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS { + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . +} +} +"""^^xsd:string ] ], + [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 1: Two pure mediums."^^xsd:string ; + sh:message "s223: Junction {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?m2 ?cp ?m1 +WHERE { +$this s223:cnx ?cp . +?cp a/rdfs:subClassOf* s223:ConnectionPoint . +?cp s223:hasMedium ?m1 . +$this s223:hasMedium ?m2 . +FILTER (?m1 != ?m2 ) . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS {?m2 s223:composedOf ?c2} +FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . +FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . +} +"""^^xsd:string ] ], + [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 2: A Junction with constituents and an associated ConnectionPoint with a pure Medium."^^xsd:string ; + sh:message "s223: Junction {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?m2 ?cp ?m1 +WHERE { +$this s223:cnx ?cp . +?cp a/rdfs:subClassOf* s223:ConnectionPoint . +?cp s223:hasMedium ?m1 . +$this s223:hasMedium ?m2 . +?m2 s223:composedOf/s223:ofConstituent ?s2 . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS { + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . +} +} +"""^^xsd:string ] ], + [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Junction."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 4: Junction with constituents and an associated ConnectionPoint with constituents."^^xsd:string ; + sh:message "s223: Junction {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?m2 ?cp ?m1 +WHERE { +$this s223:cnx ?cp . +?cp a/rdfs:subClassOf* s223:ConnectionPoint . +?cp s223:hasMedium ?m1 . +$this s223:hasMedium ?m2 . + ?m1 s223:composedOf/s223:ofConstituent ?s1 . + ?m2 s223:composedOf/s223:ofConstituent ?s2 . + FILTER NOT EXISTS { + ?m1 s223:composedOf/s223:ofConstituent ?s11 . + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + FILTER (?s11 = ?s12) . + } + FILTER NOT EXISTS { + ?m1 s223:composedOf/s223:ofConstituent ?s21 . + ?m2 s223:composedOf/s223:ofConstituent ?s22 . + {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} . + } +} +"""^^xsd:string ] ], + [ rdfs:comment "A Junction must be associated with exactly one EnumerationKind-Medium using the relation hasMedium."^^xsd:string ; + sh:class s223:Substance-Medium ; + sh:maxCount 1 ; + sh:message "s223: A Junction must be associated with exactly one EnumerationKind-Medium using the relation hasMedium."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:hasMedium ], + [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 3: Junction with a pure medium and an associated ConnectionPoint with constituents."^^xsd:string ; + sh:message "s223: Junction {$this} with Medium {?m1} is incompatible with {?cp} with Medium {?m2}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?m2 ?cp ?m1 +WHERE { +$this s223:cnx ?cp . +?cp a/rdfs:subClassOf* s223:ConnectionPoint . +?cp s223:hasMedium ?m2 . +$this s223:hasMedium ?m1 . +?m2 s223:composedOf/s223:ofConstituent ?s2 . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS { + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . +} +} +"""^^xsd:string ] ] . + s223:LightSensor a s223:Class, sh:NodeShape ; rdfs:label "Light sensor"^^xsd:string ; @@ -59794,6 +60050,13 @@ s223:Medium-Mix a s223:Class, rdfs:comment "Medium-Mix"^^xsd:string ; rdfs:subClassOf s223:Substance-Medium . +s223:Medium-ThermalContact a s223:Class, + s223:Medium-ThermalContact, + sh:NodeShape ; + rdfs:label "Medium-ThermalContact"^^xsd:string ; + rdfs:comment "Medium-ThermalContact"^^xsd:string ; + rdfs:subClassOf s223:Substance-Medium . + s223:ObservableProperty a s223:Class, sh:NodeShape ; rdfs:label "Observable Property"^^xsd:string ; @@ -59812,12 +60075,14 @@ s223:PhysicalSpace a s223:Class, rdfs:label "Physical Space"^^xsd:string ; rdfs:comment "A PhysicalSpace is an architectural concept representing a room, a collection of rooms such as a floor, a part of a room, or any physical space that might not even be thought of as a room, such as a patio space or a roof."^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "If the relation encloses is present it must associate the PhysicalSpace with a DomainSpace."^^xsd:string ; - sh:class s223:DomainSpace ; - sh:path s223:encloses ], - [ rdfs:comment "If the relation contains is present it must associate the PhysicalSpace with a PhysicalSpace."^^xsd:string ; + sh:property [ rdfs:comment "If the relation contains is present it must associate the PhysicalSpace with a PhysicalSpace."^^xsd:string ; sh:class s223:PhysicalSpace ; - sh:path s223:contains ] . + sh:message "s223: If the relation contains is present it must associate the PhysicalSpace with a PhysicalSpace."^^xsd:string ; + sh:path s223:contains ], + [ rdfs:comment "If the relation encloses is present it must associate the PhysicalSpace with a DomainSpace."^^xsd:string ; + sh:class s223:DomainSpace ; + sh:message "s223: If the relation encloses is present it must associate the PhysicalSpace with a DomainSpace."^^xsd:string ; + sh:path s223:encloses ] . s223:Role-Controller a s223:Class, s223:Role-Controller, @@ -59879,12 +60144,12 @@ s223:Water-GlycolSolution a s223:Class, rdfs:label "Water-GlycolSolution"^^xsd:string ; s223:composedOf [ a s223:QuantifiableProperty ; rdfs:label "Unspecified"^^xsd:string ; - s223:ofConstituent s223:Constituent-H2O ; + s223:ofConstituent s223:Constituent-Glycol ; ns1:hasQuantityKind ; ns1:hasUnit ], [ a s223:QuantifiableProperty ; rdfs:label "Unspecified"^^xsd:string ; - s223:ofConstituent s223:Constituent-Glycol ; + s223:ofConstituent s223:Constituent-H2O ; ns1:hasQuantityKind ; ns1:hasUnit ] ; s223:hasFreezingPoint [ a s223:QuantifiableProperty ; @@ -59892,30 +60157,30 @@ s223:Water-GlycolSolution a s223:Class, ns1:hasQuantityKind ] ; rdfs:comment "This class has enumerated subclasses of water-glycol solutions in various concentrations."^^xsd:string ; rdfs:subClassOf s223:Fluid-Water ; - sh:property [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-H2O."^^xsd:string ; + sh:property [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-Glycol."^^xsd:string ; sh:path s223:composedOf ; sh:qualifiedMinCount 1 ; sh:qualifiedValueShape [ sh:class s223:QuantifiableProperty ; - sh:node [ sh:property [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-H2O."^^xsd:string ; - sh:hasValue s223:Constituent-H2O ; - sh:path s223:ofConstituent ], - [ rdfs:comment "The quantity kind of the constituent must be VolumeFraction."^^xsd:string ; + sh:node [ sh:property [ rdfs:comment "The quantity kind of the constituent must be VolumeFraction."^^xsd:string ; sh:hasValue ; - sh:path ns1:hasQuantityKind ] ] ] ], - [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-Glycol."^^xsd:string ; - sh:path s223:composedOf ; - sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:QuantifiableProperty ; - sh:node [ sh:property [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-Glycol."^^xsd:string ; + sh:path ns1:hasQuantityKind ], + [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-Glycol."^^xsd:string ; sh:hasValue s223:Constituent-Glycol ; - sh:path s223:ofConstituent ], - [ rdfs:comment "The quantity kind of the constituent must be VolumeFraction."^^xsd:string ; - sh:hasValue ; - sh:path ns1:hasQuantityKind ] ] ] ], + sh:path s223:ofConstituent ] ] ] ], [ rdfs:comment "There must be at least two QuantifiableProperties that characterize the constituents of a Water-GlycolSolution."^^xsd:string ; sh:class s223:QuantifiableProperty ; sh:minCount 2 ; sh:path s223:composedOf ], + [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-H2O."^^xsd:string ; + sh:path s223:composedOf ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:QuantifiableProperty ; + sh:node [ sh:property [ rdfs:comment "The quantity kind of the constituent must be VolumeFraction."^^xsd:string ; + sh:hasValue ; + sh:path ns1:hasQuantityKind ], + [ rdfs:comment "One of the constituents of a Water-GlycolSolution must be Constituent-H2O."^^xsd:string ; + sh:hasValue s223:Constituent-H2O ; + sh:path s223:ofConstituent ] ] ] ], [ rdfs:comment "If the relation hasFreezingPoint is used, the object must be a QuantifiableProperty with a quantity kind of Temperature."^^xsd:string ; sh:class s223:QuantifiableProperty ; sh:message "The object must be a QuantifiableProperty with a quantity kind of Temperature."^^xsd:string ; @@ -59928,11 +60193,12 @@ s223:Zone a s223:Class, rdfs:label "Zone"^^xsd:string ; rdfs:comment "A Zone is a logical grouping (collection) of domain spaces for some functional or system reason, to identify a domain of control, such as a Lighting Zone, or a heating zone"^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "A Zone must be associated with at least one DomainSpace using the relation hasDomainSpace."^^xsd:string ; - sh:class s223:DomainSpace ; - sh:message "s223: A Zone must be associated with at least one DomainSpace using the relation hasDomainSpace."^^xsd:string ; + sh:property [ rdfs:comment "A Zone must be associated with exactly one EnumerationKind-Domain using the relation hasDomain."^^xsd:string ; + sh:class s223:EnumerationKind-Domain ; + sh:maxCount 1 ; + sh:message "s223: A Zone must be associated with exactly one EnumerationKind-Domain using the relation hasDomain."^^xsd:string ; sh:minCount 1 ; - sh:path s223:hasDomainSpace ], + sh:path s223:hasDomain ], [ rdfs:comment "The associated Domain of a Zone and the Domain of the DomainSpaces it contains must be the same."^^xsd:string ; sh:path s223:hasDomain ; sh:sparql [ a sh:SPARQLConstraint ; @@ -59949,12 +60215,11 @@ $this s223:contains ?ds . FILTER (?domain != ?dsdomain) } """^^xsd:string ] ], - [ rdfs:comment "A Zone must be associated with exactly one EnumerationKind-Domain using the relation hasDomain."^^xsd:string ; - sh:class s223:EnumerationKind-Domain ; - sh:maxCount 1 ; - sh:message "s223: A Zone must be associated with exactly one EnumerationKind-Domain using the relation hasDomain."^^xsd:string ; + [ rdfs:comment "A Zone must be associated with at least one DomainSpace using the relation hasDomainSpace."^^xsd:string ; + sh:class s223:DomainSpace ; + sh:message "s223: A Zone must be associated with at least one DomainSpace using the relation hasDomainSpace."^^xsd:string ; sh:minCount 1 ; - sh:path s223:hasDomain ] ; + sh:path s223:hasDomainSpace ] ; sh:rule [ a sh:TripleRule ; rdfs:comment "Infer a hasDomain relation by checking any enclosed DomainSpaces to determine the domain."^^xsd:string ; sh:object [ sh:path ( s223:hasDomainSpace s223:hasDomain ) ] ; @@ -61408,7 +61673,7 @@ That is, given a point P on a smooth curve C, the curvature of C at P is defined a ns1:QuantityKind ; rdfs:label "Specific Modulus"@en ; - dcterms:description "

Specific modulus is a materials property consisting of the elastic modulus per mass density of a material. It is also known as the stiffness to weight ratio or specific stiffness. High specific modulus materials find wide application in aerospace applications where minimum structural weight is required. The dimensional analysis yields units of distance squared per time squared."^^rdf:HTML ; + dcterms:description "

Specific modulus is a materials property consisting of the elastic modulus per mass density of a material. It is also known as the stiffness to weight ratio or specific stiffness. High specific modulus materials find wide application in aerospace applications where minimum structural weight is required. The dimensional analysis yields units of distance squared per time squared.

"^^rdf:HTML ; ns1:applicableUnit , , ; @@ -67702,6 +67967,87 @@ s223:ActuatableProperty a s223:Class, rdfs:comment "This class describes non-numeric properties of which real-time value can be modified by a user or a machine outside of the model."^^xsd:string ; rdfs:subClassOf s223:Property . +s223:Coil a s223:Class, + sh:NodeShape ; + rdfs:label "Coil"^^xsd:string ; + rdfs:comment """ + A Coil is a component that represents a cooling or heating element made of a pipe or tube + that may or may not be finned and formed into a helical or serpentine shape. The physical + characteristics of the coil are not captured in the model. + + A Coil must conform to exactly one of the following patterns: + + **Pattern 1:** + - The Coil has exactly two inlet connection points using the medium `Mix-Fluid`, with exactly one being `Fluid-Air`. + - The Coil has exactly two outlet connection points using the medium `Mix-Fluid`, with exactly one being `Fluid-Air`. + + **Pattern 2:** + - The Coil has exactly one inlet connection point using the medium `Mix-Fluid`. + - The Coil has exactly one outlet connection point using the medium `Mix-Fluid`. + - The Coil has one or two bidirectional connection points using the medium `Mix-Fluid` or `Medium-ThermalContact`. + + **Pattern 3:** + - The Coil has exactly three bidirectional connection points using the medium `Mix-Fluid` or `Medium-ThermalContact`. + """^^xsd:string ; + rdfs:subClassOf s223:Equipment ; + sh:message "s223: A Coil shall fit one of the following patterns of ConnectionPoints: 1: Two inlets and two outlets using the medium Mix-Fluid. 2: One inlet and one outlet using the medium Mix-Fluid, and one or two bidirectionals using the medium Mix-Fluid or Medium-ThermalContact. 3: Three bidirectionals using the medium Mix-Fluid or Medium-ThermalContact."^^xsd:string ; + sh:xone ( [ sh:property [ rdfs:comment "Pattern 1: A Coil shall have two inlets using the medium Fluid."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 2 ; + sh:qualifiedMinCount 2 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Mix-Fluid ; + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "Pattern 1: For one of the two outlets the Fluid is Air."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 1 ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Air ; + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "Pattern 1: A Coil shall have two outlets using the medium Fluid."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 2 ; + sh:qualifiedMinCount 2 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Mix-Fluid ; + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "Pattern 1: For one of the two inlets the Fluid is Air."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 1 ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Fluid-Air ; + sh:path s223:hasMedium ] ] ] ] ] [ sh:property [ rdfs:comment "Pattern 2: A Coil shall have one or two bidirectionals using the medium Fluid or ThermalContact."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 2 ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ; + sh:node [ sh:property [ sh:or ( [ sh:class s223:Mix-Fluid ] [ sh:class s223:Medium-ThermalContact ] ) ; + sh:path s223:hasMedium ] ] ] ; + sh:qualifiedValueShapesDisjoint true ], + [ rdfs:comment "Pattern 2: A Coil shall have one outlet using the medium Fluid."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 1 ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Mix-Fluid ; + sh:path s223:hasMedium ] ] ] ], + [ rdfs:comment "Pattern 2: A Coil shall have one inlet using the medium Fluid."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 1 ; + sh:qualifiedMinCount 1 ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:node [ sh:property [ sh:class s223:Mix-Fluid ; + sh:path s223:hasMedium ] ] ] ] ] [ sh:property [ rdfs:comment "Pattern 3: A Coil shall have three bidirectionals using the medium Fluid or ThermalContact."^^xsd:string ; + sh:path s223:hasConnectionPoint ; + sh:qualifiedMaxCount 3 ; + sh:qualifiedMinCount 3 ; + sh:qualifiedValueShape [ sh:class s223:BidirectionalConnectionPoint ; + sh:node [ sh:property [ sh:or ( [ sh:class s223:Mix-Fluid ] [ sh:class s223:Medium-ThermalContact ] ) ; + sh:path s223:hasMedium ] ] ] ; + sh:qualifiedValueShapesDisjoint true ] ] ) . + s223:Constituent-EM a s223:Class, s223:Constituent-EM, sh:NodeShape ; @@ -67782,12 +68128,14 @@ s223:Function a s223:Class, rdfs:label "Function"^^xsd:string ; rdfs:comment "A Function is used to model transfer and/or transformation of information (i.e. Property). It has relations to input Properties and output Properties. The actual algorithms that perform the transformations are described in CDL and are out of scope of the 223 standard."^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "If the relation hasOutput is present it must associate a Function with a Property."^^xsd:string ; + sh:property [ rdfs:comment "If the relation hasInput is present it must associate a Function with a Property."^^xsd:string ; sh:class s223:Property ; - sh:path s223:hasOutput ], - [ rdfs:comment "If the relation hasInput is present it must associate a Function with a Property."^^xsd:string ; + sh:message "s223: If the relation hasInput is present it must associate a Function with a Property."^^xsd:string ; + sh:path s223:hasInput ], + [ rdfs:comment "If the relation hasOutput is present it must associate a Function with a Property."^^xsd:string ; sh:class s223:Property ; - sh:path s223:hasInput ] . + sh:message "s223: If the relation hasOutput is present it must associate a Function with a Property."^^xsd:string ; + sh:path s223:hasOutput ] . s223:LineNeutralVoltage-110V a s223:Class, s223:LineNeutralVoltage-110V, @@ -67953,6 +68301,13 @@ s223:Occupancy-Presence a s223:Class, rdfs:comment "This class has enumerated subclasses indicating whether physical presence is detected or not."^^xsd:string ; rdfs:subClassOf s223:EnumerationKind-Occupancy . +s223:Role-HeatTransfer a s223:Class, + s223:Role-HeatTransfer, + sh:NodeShape ; + rdfs:label "Heat Transfer"^^xsd:string ; + rdfs:comment "Heat Transfer"^^xsd:string ; + rdfs:subClassOf s223:EnumerationKind-Role . + s223:Signal-Ethernet a s223:Class, s223:Signal-Ethernet, sh:NodeShape ; @@ -67966,6 +68321,7 @@ s223:TerminalUnit a s223:Class, rdfs:comment "An air terminal that modulates the volume of air delivered to a space."^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "A TerminalUnit shall have at least one outlet ConnectionPoint using the medium Air."^^xsd:string ; + sh:message "s223: A TerminalUnit shall have at least one outlet ConnectionPoint using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -67973,6 +68329,7 @@ s223:TerminalUnit a s223:Class, sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ], [ rdfs:comment "A TerminalUnit shall have at least one inlet ConnectionPoint using the medium Air."^^xsd:string ; + sh:message "s223: A TerminalUnit shall have at least one inlet ConnectionPoint using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -70823,19 +71180,20 @@ s223:Damper a s223:Class, rdfs:label "Damper"^^xsd:string ; rdfs:comment "An element inserted into an air-distribution system or element of an air-distribution system permitting modification of the air resistance of the system and consequently changing the airflow rate or shutting off the airflow."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "A Damper shall have at least one outlet using the medium Air."^^xsd:string ; + sh:property [ rdfs:comment "A Damper shall have at least one inlet using the medium Air."^^xsd:string ; + sh:message "s223: A Damper shall have at least one inlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ], - [ rdfs:comment "A Damper shall have at least one inlet using the medium Air."^^xsd:string, - "Does this need to allow bidirectional connection points?"^^xsd:string ; + [ rdfs:comment "A Damper shall have at least one outlet using the medium Air."^^xsd:string ; + sh:message "s223: A Damper shall have at least one outlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; - sh:qualifiedValueShape [ sh:class s223:InletConnectionPoint ; + sh:qualifiedValueShape [ sh:class s223:OutletConnectionPoint ; sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ] . @@ -70859,7 +71217,13 @@ s223:EnumerationKind-Substance a s223:Class, rdfs:label "Substance"^^xsd:string ; rdfs:comment "This class has enumerated subclasses of the substances that are consumed, produced, transported, sensed, controlled or otherwise interacted with (e.g. water, air, etc.)."^^xsd:string ; rdfs:subClassOf s223:EnumerationKind ; - sh:property [ rdfs:comment "A substance may only have atomic constituents, it may not have a constituent that also composed ofs."^^xsd:string ; + sh:property [ rdfs:comment """If the relation composedOf is present, it must associate an EnumerationKind-Substance with one or more Properties that +identify and characterize its constituents. The Property identifies the constituent using the relation ofConstituent. If appropriate, a +QuantifiableProperty may be used to also specify the amount of the constituent using the relations qudt:hasQuantityKind, qudt:hasUnit, and s223:hasValue. +For example, see `s223:GlycolSolution-15Percent`."""^^xsd:string ; + sh:class s223:Property ; + sh:path s223:composedOf ], + [ rdfs:comment "A substance may only have atomic constituents, it may not have a constituent that also composed ofs."^^xsd:string ; sh:path s223:composedOf ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "If a substance has a constituent, that constituent may not itself have constituents."^^xsd:string ; @@ -70871,13 +71235,7 @@ WHERE { $this s223:composedOf ?constituent . ?constituent s223:ofConstituent/s223:composedOf ?nextConstituent . } -"""^^xsd:string ] ], - [ rdfs:comment """If the relation composedOf is present, it must associate an EnumerationKind-Substance with one or more Properties that -identify and characterize its constituents. The Property identifies the constituent using the relation ofConstituent. If appropriate, a -QuantifiableProperty may be used to also specify the amount of the constituent using the relations qudt:hasQuantityKind, qudt:hasUnit, and s223:hasValue. -For example, see `s223:GlycolSolution-15Percent`."""^^xsd:string ; - sh:class s223:Property ; - sh:path s223:composedOf ] . +"""^^xsd:string ] ] . s223:Fan a s223:Class, sh:NodeShape ; @@ -70885,6 +71243,7 @@ s223:Fan a s223:Class, rdfs:comment "A machine used to create flow within a gas such as air. "^^xsd:string ; rdfs:subClassOf s223:Equipment ; sh:property [ rdfs:comment "A Fan shall have at least one outlet using the medium Air."^^xsd:string ; + sh:message "s223: A Fan shall have at least one outlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -70892,6 +71251,7 @@ s223:Fan a s223:Class, sh:node [ sh:property [ sh:class s223:Fluid-Air ; sh:path s223:hasMedium ] ] ] ], [ rdfs:comment "A Fan shall have at least one inlet using the medium Air."^^xsd:string ; + sh:message "s223: A Fan shall have at least one inlet using the medium Air."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasConnectionPoint ; sh:qualifiedMinCount 1 ; @@ -71092,15 +71452,9 @@ s223:QuantifiableObservableProperty a s223:Class, s223:QuantifiableProperty ; sh:property [ rdfs:comment "A QuantifiableObservableProperty can be associated with zero or more QuantifiableActuatableProperty(s) indicating the desired value(s) which the control process is trying to maintain using the relation hasSetpoint."^^xsd:string ; sh:class s223:QuantifiableActuatableProperty ; + sh:message "s223: A QuantifiableObservableProperty can be associated with zero or more QuantifiableActuatableProperty(s) indicating the desired value(s) which the control process is trying to maintain using the relation hasSetpoint."^^xsd:string ; sh:path s223:hasSetpoint ] . -s223:Role-Cooling a s223:Class, - s223:Role-Cooling, - sh:NodeShape ; - rdfs:label "Role-Cooling"^^xsd:string ; - rdfs:comment "Role-Cooling"^^xsd:string ; - rdfs:subClassOf s223:EnumerationKind-Role . - s223:Substance-Particulate a s223:Class, s223:Substance-Particulate, sh:NodeShape ; @@ -71163,7 +71517,7 @@ ns1:symbol a rdf:Property ; ns1:ucumCode a rdf:Property ; rdfs:label "ucum code"^^xsd:string ; - dcterms:description "

ucumCode associates a QUDT unit with its UCUM code (case-sensitive).

In SHACL the values are derived from specific ucum properties using 'sh:values'."^^rdf:HTML ; + dcterms:description "

ucumCode associates a QUDT unit with its UCUM code (case-sensitive).

In SHACL the values are derived from specific ucum properties using 'sh:values'.

"^^rdf:HTML ; dcterms:source "https://ucum.org/ucum.html"^^xsd:anyURI ; rdfs:isDefinedBy ; rdfs:seeAlso ; @@ -73503,13 +73857,6 @@ s223:EnumerationKind-Speed a s223:Class, rdfs:comment "This class has enumerated subclasses of speed settings of High, Medium, Low (plus Off)."^^xsd:string ; rdfs:subClassOf s223:EnumerationKind . -s223:Mix-Fluid a s223:Class, - s223:Mix-Fluid, - sh:NodeShape ; - rdfs:label "Mix-Fluid"^^xsd:string ; - rdfs:comment "Mix-Fluid"^^xsd:string ; - rdfs:subClassOf s223:Medium-Mix . - s223:QuantifiableActuatableProperty a s223:Class, sh:NodeShape ; rdfs:label "Quantifiable Actuatable Property"^^xsd:string ; @@ -73517,6 +73864,13 @@ s223:QuantifiableActuatableProperty a s223:Class, rdfs:subClassOf s223:ActuatableProperty, s223:QuantifiableProperty . +s223:Role-Cooling a s223:Class, + s223:Role-Cooling, + sh:NodeShape ; + rdfs:label "Role-Cooling"^^xsd:string ; + rdfs:comment "Role-Cooling"^^xsd:string ; + rdfs:subClassOf s223:EnumerationKind-Role . + s223:hasValue a rdf:Property ; rdfs:label "hasValue"^^xsd:string ; rdfs:comment "hasValue is used to contain a fixed value that is part of a 223 model, rather than a computed, measured, or externally derived variable."^^xsd:string . @@ -73525,6 +73879,10 @@ s223:ofConstituent a rdf:Property ; rdfs:label "of constituent"^^xsd:string ; rdfs:comment "The relation ofConstituent is used to associate a Property that characterizes a medium mix with one of the constituents of that mix. (ex. Fluid-Water composedOf property ofConstituent Constituent-H2O."^^xsd:string . +s223:pairedConnectionPoint a s223:SymmetricProperty ; + rdfs:label "paired connection point"^^xsd:string ; + rdfs:comment "The pairedConnectionPoint relation is a symmetric property used to associate two ConnectionPoints where an InletConnectionPoint shares the same medium with an OutletConnectionPoint."^^xsd:string . + dcterms:abstract a rdf:Property ; rdfs:label "abstract"^^xsd:string ; rdfs:isDefinedBy . @@ -75785,14 +76143,14 @@ s223:EnumerationKind-Numerical a s223:Class, ns1:hasUnit ; rdfs:comment "Numerical enumeration kinds are used to support the definitions of the Electricity medium. The enumerations instances in these classes have names that are recognizable by humans but are just a string for a computer application. To avoid the need to parse strings, each of these enumeration kinds have properties associated with the enumeration that represent electrical phase, voltage, and frequency. The purpose of these properties is to enable a machine to query them and obtain the same information that a person would associate with the sting"^^xsd:string ; rdfs:subClassOf s223:EnumerationKind ; - sh:property [ rdfs:comment "An EnumerationKind-Numerical can be associated with a decimal value using the relation hasValue."^^xsd:string ; - sh:datatype xsd:decimal ; - sh:path s223:hasValue ], - [ rdfs:comment "An EnumerationKind-Numerical must be associated with at least one Unit using the relation hasUnit."^^xsd:string ; + sh:property [ rdfs:comment "An EnumerationKind-Numerical must be associated with at least one Unit using the relation hasUnit."^^xsd:string ; sh:class ns1:Unit ; sh:minCount 1 ; sh:path ns1:hasUnit ; sh:severity sh:Info ], + [ rdfs:comment "An EnumerationKind-Numerical can be associated with a decimal value using the relation hasValue."^^xsd:string ; + sh:datatype xsd:decimal ; + sh:path s223:hasValue ], [ rdfs:comment "An EnumerationKind-Numerical must be associated with at least one QuantityKind using the relation hasQuantityKind."^^xsd:string ; sh:class ns1:QuantityKind ; sh:minCount 1 ; @@ -75829,13 +76187,6 @@ s223:Role-Heating a s223:Class, rdfs:comment "Role-Heating"^^xsd:string ; rdfs:subClassOf s223:EnumerationKind-Role . -s223:Substance-Medium a s223:Class, - s223:Substance-Medium, - sh:NodeShape ; - rdfs:label "Medium"^^xsd:string ; - rdfs:comment "This class has enumerated subclasses of a physical substance or anything that allows for the transfer of energy or information."^^xsd:string ; - rdfs:subClassOf s223:EnumerationKind-Substance . - s223:Valve a s223:Class, sh:NodeShape ; rdfs:label "Valve"^^xsd:string ; @@ -77781,15 +78132,6 @@ Some substances expand when cooled, such as freezing water, so they have negativ "W.h/kg"^^ns1:UCUMcs ; rdfs:isDefinedBy . -s223:BidirectionalConnectionPoint a s223:Class, - sh:NodeShape ; - rdfs:label "Bidirectional Connection Point"^^xsd:string ; - rdfs:comment "A BidirectionalConnectionPoint is a ConnectionPoint for which a Medium is expected to flow either into or out of the associated Connectable."^^xsd:string ; - rdfs:subClassOf s223:ConnectionPoint ; - sh:property [ rdfs:comment "If the relation mapsTo is present it must associate the BidirectionalConnectionPoint with a BidirectionalConnectionPoint."^^xsd:string ; - sh:class s223:BidirectionalConnectionPoint ; - sh:path s223:mapsTo ] . - s223:EnumerationKind-Binary a s223:Class, s223:EnumerationKind-Binary, sh:NodeShape ; @@ -77797,6 +78139,13 @@ s223:EnumerationKind-Binary a s223:Class, rdfs:comment "This class has enumerated subclasses of True, False and Unknown used to describe the possible values of a binary property"^^xsd:string ; rdfs:subClassOf s223:EnumerationKind . +s223:Substance-Medium a s223:Class, + s223:Substance-Medium, + sh:NodeShape ; + rdfs:label "Medium"^^xsd:string ; + rdfs:comment "This class has enumerated subclasses of a physical substance or anything that allows for the transfer of energy or information."^^xsd:string ; + rdfs:subClassOf s223:EnumerationKind-Substance . + s223:composedOf a rdf:Property ; rdfs:label "composed of"^^xsd:string ; rdfs:comment "The relation composedOf is used to indicate what substances constitute a material. Allowable values are instances of Property that in turn identify constituents defined in Medium-Constituent (see `s223:Medium-Constituent`) via the relation ofConstituent."^^xsd:string . @@ -78767,31 +79116,12 @@ A Connection may contain branches or intersections. These may be modeled using J ![Graphical Depiction of Connection.](figures/Figure_5-3_Connection.svg) """^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 2: A medium with constituents and a pure Medium."^^xsd:string ; - sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?cp1 ?m1 ?cp2 ?m2 -WHERE { -$this s223:cnx ?cp1 . -?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . -?cp1 s223:hasMedium ?m1 . -$this s223:cnx ?cp2 . -?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . -FILTER (?cp1 != ?cp2 ) . -?cp2 s223:hasMedium ?m2 . -?m2 s223:composedOf/s223:ofConstituent ?s2 . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS { - ?m2 s223:composedOf/s223:ofConstituent ?s12 . - {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . -} -} -"""^^xsd:string ] ], + sh:property [ rdfs:comment "A Connection must have two or more connectsAt relations to ConnectionPoints"^^xsd:string ; + sh:class s223:ConnectionPoint ; + sh:message "s223: A Connection must have two or more connectsAt relations to ConnectionPoints"^^xsd:string ; + sh:minCount 2 ; + sh:path s223:connectsAt ; + sh:severity sh:Warning ], [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; sh:name "Test for compatible declared Medium"^^xsd:string ; sh:path s223:hasMedium ; @@ -78820,97 +79150,6 @@ $this s223:hasMedium ?m1 . } } """^^xsd:string ] ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 2: A Connection with constituents and an associated ConnectionPoint with a pure Medium."^^xsd:string ; - sh:message "s223: Connection {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?m2 ?cp ?m1 -WHERE { -$this s223:cnx ?cp . -?cp a/rdfs:subClassOf* s223:ConnectionPoint . -?cp s223:hasMedium ?m1 . -$this s223:hasMedium ?m2 . -?m2 s223:composedOf/s223:ofConstituent ?s2 . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS { - ?m2 s223:composedOf/s223:ofConstituent ?s12 . - {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . -} -} -"""^^xsd:string ] ], - [ rdfs:comment "A Connection must have two or more connectsAt relations to ConnectionPoints"^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:message "s223: A Connection must have two or more connectsAt relations to ConnectionPoints"^^xsd:string ; - sh:minCount 2 ; - sh:path s223:connectsAt ; - sh:severity sh:Warning ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 1: Two pure mediums."^^xsd:string ; - sh:message "s223: Connection {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?m2 ?cp ?m1 -WHERE { -$this s223:cnx ?cp . -?cp a/rdfs:subClassOf* s223:ConnectionPoint . -?cp s223:hasMedium ?m1 . -$this s223:hasMedium ?m2 . -FILTER (?m1 != ?m2 ) . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS {?m2 s223:composedOf ?c2} -FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . -FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . -} -"""^^xsd:string ] ], - [ rdfs:comment "A Connection must only have a cnx relation with a ConnectionPoint"^^xsd:string ; - sh:path s223:cnx ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "A Connection must only have a cnx relation with a ConnectionPoint"^^xsd:string ; - sh:message "s223: {$this} cannot have a s223:cnx relation to {?something}, because {?something} is not a ConnectionPoint."^^xsd:string ; - sh:prefixes ; - sh:select """SELECT $this ?something -WHERE { -$this s223:cnx ?something . -FILTER NOT EXISTS {?something a/rdfs:subClassOf* s223:ConnectionPoint} . -}"""^^xsd:string ] ], - [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 1: Two ConnectionPoints with pure mediums."^^xsd:string ; - sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?cp1 ?m1 ?cp2 ?m2 -WHERE { -$this s223:cnx ?cp1 . -?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . -?cp1 s223:hasMedium ?m1 . -$this s223:cnx ?cp2 . -?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . -?cp2 s223:hasMedium ?m2 . -FILTER (?m1 != ?m2 ) . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS {?m2 s223:composedOf ?c2} -FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . -FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . -} -"""^^xsd:string ] ], - [ rdfs:comment "If the relation hasThermodynamicPhase is present it must associate the Connection with at most one EnumerationKind-Phase."^^xsd:string ; - sh:class s223:EnumerationKind-Phase ; - sh:maxCount 1 ; - sh:message "s223: If the relation hasThermodynamicPhase is present it must associate the Connection with at most one EnumerationKind-Phase."^^xsd:string ; - sh:path s223:hasThermodynamicPhase ], - [ rdfs:comment "If the relation hasRole is present it must associate the Connection with an EnumerationKind-Role."^^xsd:string ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ], [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; sh:name "Test for compatible declared Medium"^^xsd:string ; sh:path s223:hasMedium ; @@ -78964,53 +79203,155 @@ FILTER (?cp1 != ?cp2 ) . } } """^^xsd:string ] ], + [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 2: A medium with constituents and a pure Medium."^^xsd:string ; + sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?cp1 ?m1 ?cp2 ?m2 +WHERE { +$this s223:cnx ?cp1 . +?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . +?cp1 s223:hasMedium ?m1 . +$this s223:cnx ?cp2 . +?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . +FILTER (?cp1 != ?cp2 ) . +?cp2 s223:hasMedium ?m2 . +?m2 s223:composedOf/s223:ofConstituent ?s2 . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS { + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . +} +} +"""^^xsd:string ] ], + [ rdfs:comment "If the relation hasThermodynamicPhase is present it must associate the Connection with at most one EnumerationKind-Phase."^^xsd:string ; + sh:class s223:EnumerationKind-Phase ; + sh:maxCount 1 ; + sh:message "s223: If the relation hasThermodynamicPhase is present it must associate the Connection with at most one EnumerationKind-Phase."^^xsd:string ; + sh:path s223:hasThermodynamicPhase ], + [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 1: Two pure mediums."^^xsd:string ; + sh:message "s223: Connection {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?m2 ?cp ?m1 +WHERE { +$this s223:cnx ?cp . +?cp a/rdfs:subClassOf* s223:ConnectionPoint . +?cp s223:hasMedium ?m1 . +$this s223:hasMedium ?m2 . +FILTER (?m1 != ?m2 ) . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS {?m2 s223:composedOf ?c2} +FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . +FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . +} +"""^^xsd:string ] ], + [ rdfs:comment "If the relation hasRole is present it must associate the Connection with an EnumerationKind-Role."^^xsd:string ; + sh:class s223:EnumerationKind-Role ; + sh:message "s223: If the relation hasRole is present it must associate the Connection with an EnumerationKind-Role."^^xsd:string ; + sh:path s223:hasRole ], [ rdfs:comment "If the relation connectsTo is present it must associate the Connection with a Connectable."^^xsd:string ; sh:class s223:Connectable ; + sh:message "s223: If the relation connectsTo is present it must associate the Connection with a Connectable."^^xsd:string ; sh:name "ConnectionToDownstreamConnectableShape"^^xsd:string ; sh:path s223:connectsTo ], - [ rdfs:comment "If the relation connectsFrom is present it must associate the Connection with a Connectable."^^xsd:string ; - sh:class s223:Connectable ; - sh:name "ConnectionToUpstreamConnectableShape"^^xsd:string ; - sh:path s223:connectsFrom ], [ rdfs:comment "A Connection must have two or more cnx relations to ConnectionPoints"^^xsd:string ; sh:class s223:ConnectionPoint ; + sh:message "s223: A Connection must have two or more cnx relations to ConnectionPoints"^^xsd:string ; sh:path s223:cnx ], + [ rdfs:comment "A Connection must only have a cnx relation with a ConnectionPoint"^^xsd:string ; + sh:path s223:cnx ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "A Connection must only have a cnx relation with a ConnectionPoint"^^xsd:string ; + sh:message "s223: {$this} cannot have a s223:cnx relation to {?something}, because {?something} is not a ConnectionPoint."^^xsd:string ; + sh:prefixes ; + sh:select """SELECT $this ?something +WHERE { +$this s223:cnx ?something . +FILTER NOT EXISTS {?something a/rdfs:subClassOf* s223:ConnectionPoint} . +}"""^^xsd:string ] ], + [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the associated Connection."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 2: A Connection with constituents and an associated ConnectionPoint with a pure Medium."^^xsd:string ; + sh:message "s223: Connection {$this} with Medium {?m2} is incompatible with {?cp} with Medium {?m1}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?m2 ?cp ?m1 +WHERE { +$this s223:cnx ?cp . +?cp a/rdfs:subClassOf* s223:ConnectionPoint . +?cp s223:hasMedium ?m1 . +$this s223:hasMedium ?m2 . +?m2 s223:composedOf/s223:ofConstituent ?s2 . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS { + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . +} +} +"""^^xsd:string ] ], [ rdfs:comment "A Connection must be associated with exactly one Substance-Medium using the relation hasMedium."^^xsd:string ; sh:class s223:Substance-Medium ; sh:maxCount 1 ; sh:message "s223: A Connection must be associated with exactly one Substance-Medium using the relation hasMedium."^^xsd:string ; sh:minCount 1 ; sh:name "Connection medium"^^xsd:string ; - sh:path s223:hasMedium ] ; - sh:rule [ a sh:SPARQLRule ; - rdfs:comment "Infer the connectsFrom relation using connectsAt"^^xsd:string ; - sh:construct """ -CONSTRUCT {$this s223:connectsFrom ?equipment .} + sh:path s223:hasMedium ], + [ rdfs:comment "Ensure that the Medium identified by all the associated ConnectionPoints via the s223:hasMedium relation are compatible with one another."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Inconsistent Medium. Case 1: Two ConnectionPoints with pure mediums."^^xsd:string ; + sh:message "s223: {?cp1} with Medium {?m1} is incompatible with {?cp2} with Medium {?m2}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?cp1 ?m1 ?cp2 ?m2 WHERE { -$this s223:connectsAt ?cp . -?cp a s223:OutletConnectionPoint . -?cp s223:isConnectionPointOf ?equipment . +$this s223:cnx ?cp1 . +?cp1 a/rdfs:subClassOf* s223:ConnectionPoint . +?cp1 s223:hasMedium ?m1 . +$this s223:cnx ?cp2 . +?cp2 a/rdfs:subClassOf* s223:ConnectionPoint . +?cp2 s223:hasMedium ?m2 . +FILTER (?m1 != ?m2 ) . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS {?m2 s223:composedOf ?c2} +FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . +FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . } -"""^^xsd:string ; - sh:name "InferredConnectionToUpstreamEquipmentProperty"^^xsd:string ; - sh:prefixes ], - [ a sh:TripleRule ; +"""^^xsd:string ] ], + [ rdfs:comment "If the relation connectsFrom is present it must associate the Connection with a Connectable."^^xsd:string ; + sh:class s223:Connectable ; + sh:message "s223: If the relation connectsFrom is present it must associate the Connection with a Connectable."^^xsd:string ; + sh:name "ConnectionToUpstreamConnectableShape"^^xsd:string ; + sh:path s223:connectsFrom ] ; + sh:rule [ a sh:TripleRule ; rdfs:comment "Infer cnx relation using connectsThrough"^^xsd:string, "InferredConnectionToConnectionPointBasePropertyFromInverse"^^xsd:string ; sh:object [ sh:path [ sh:inversePath s223:connectsThrough ] ] ; sh:predicate s223:cnx ; sh:subject sh:this ], [ a sh:SPARQLRule ; - rdfs:comment "Infer the connectsTo relation using connectsAt"^^xsd:string ; + rdfs:comment "Infer the connectsFrom relation using connectsAt"^^xsd:string ; sh:construct """ -CONSTRUCT {$this s223:connectsTo ?equipment .} +CONSTRUCT {$this s223:connectsFrom ?equipment .} WHERE { $this s223:connectsAt ?cp . -?cp a s223:InletConnectionPoint . +?cp a s223:OutletConnectionPoint . ?cp s223:isConnectionPointOf ?equipment . } """^^xsd:string ; - sh:name "InferredConnectionToDownstreamEquipmentProperty"^^xsd:string ; + sh:name "InferredConnectionToUpstreamEquipmentProperty"^^xsd:string ; sh:prefixes ], [ a sh:TripleRule ; rdfs:comment "Infer the connectsAt relation using cnx"^^xsd:string, @@ -79023,7 +79364,19 @@ $this s223:connectsAt ?cp . "InferredConnectionToConnectionPointBaseProperty"^^xsd:string ; sh:object [ sh:path s223:connectsAt ] ; sh:predicate s223:cnx ; - sh:subject sh:this ] . + sh:subject sh:this ], + [ a sh:SPARQLRule ; + rdfs:comment "Infer the connectsTo relation using connectsAt"^^xsd:string ; + sh:construct """ +CONSTRUCT {$this s223:connectsTo ?equipment .} +WHERE { +$this s223:connectsAt ?cp . +?cp a s223:InletConnectionPoint . +?cp s223:isConnectionPointOf ?equipment . +} +"""^^xsd:string ; + sh:name "InferredConnectionToDownstreamEquipmentProperty"^^xsd:string ; + sh:prefixes ] . s223:Constituent-H2O a s223:Class, s223:Constituent-H2O, @@ -80982,51 +81335,55 @@ s223:Sensor a s223:Class, rdfs:label "Sensor"^^xsd:string ; rdfs:comment "A Sensor observes an ObservableProperty (see `s223:ObservableProperty`) which may be quantifiable (see `s223:QuantifiableObservableProperty`), such as a temperature, flowrate, or concentration, or Enumerable (see `s223:EnumeratedObservableProperty`), such as an alarm state or occupancy state."^^xsd:string ; rdfs:subClassOf s223:Equipment ; - sh:property [ rdfs:comment "s223: If the hasReferenceLocation relation exists, the observed Property must have isDeltaQuantity true."^^xsd:string ; + sh:property [ rdfs:comment "s223: If the observed Property has isDeltaQuantity true, the Sensor must have a hasReferenceLocation relation."^^xsd:string ; sh:path s223:observes ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "s223: If the hasReferenceLocation relation exists, the observed Property must have isDeltaQuantity true."^^xsd:string ; - sh:message "s223: Sensor {$this} has a reference location, but its Property lacks isDeltaQuantity true."^^xsd:string ; + rdfs:comment "s223: If the observed Property has isDeltaQuantity true, the Sensor must have a hasReferenceLocation relation."^^xsd:string ; + sh:message "s223: Sensor {$this} has Property {?x} with isDeltaQuantity true, but the Sensor lacks a reference location."^^xsd:string ; sh:prefixes ; sh:select """ - SELECT $this + SELECT $this ?x WHERE { -$this s223:hasReferenceLocation ?y . +$this s223:observes/qudt:isDeltaQuantity true . $this s223:observes ?x . ?x a/rdfs:subClassOf* s223:QuantifiableProperty . -FILTER NOT EXISTS {$this s223:observes/qudt:isDeltaQuantity true} +FILTER NOT EXISTS {$this s223:hasReferenceLocation ?y} } """^^xsd:string ] ], [ rdfs:comment "A Sensor must be associated with exactly one location using the relation hasObservationLocation."^^xsd:string ; sh:maxCount 1 ; + sh:message "s223: A Sensor must be associated with exactly one location using the relation hasObservationLocation."^^xsd:string ; sh:minCount 1 ; sh:path s223:hasObservationLocation ], - [ rdfs:comment "s223: If the observed Property has isDeltaQuantity true, the Sensor must have a hasReferenceLocation relation."^^xsd:string ; + [ rdfs:comment "A Sensor must be associated with exactly one ObservableProperty using the relation observes."^^xsd:string ; + sh:class s223:ObservableProperty ; + sh:maxCount 1 ; + sh:message "s223: A Sensor must be associated with exactly one ObservableProperty using the relation observes."^^xsd:string ; + sh:minCount 1 ; + sh:path s223:observes ], + [ rdfs:comment "If the relation hasMeasurementResolution is present it must associate a Sensor with a QuantifiableProperty."^^xsd:string ; + sh:class s223:QuantifiableProperty ; + sh:message "s223: If the relation hasMeasurementResolution is present it must associate a Sensor with a QuantifiableProperty."^^xsd:string ; + sh:path s223:hasMeasurementResolution ], + [ rdfs:comment "s223: If the hasReferenceLocation relation exists, the observed Property must have isDeltaQuantity true."^^xsd:string ; sh:path s223:observes ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "s223: If the observed Property has isDeltaQuantity true, the Sensor must have a hasReferenceLocation relation."^^xsd:string ; - sh:message "s223: Sensor {$this} has Property {?x} with isDeltaQuantity true, but the Sensor lacks a reference location."^^xsd:string ; + rdfs:comment "s223: If the hasReferenceLocation relation exists, the observed Property must have isDeltaQuantity true."^^xsd:string ; + sh:message "s223: Sensor {$this} has a reference location, but its Property lacks isDeltaQuantity true."^^xsd:string ; sh:prefixes ; sh:select """ - SELECT $this ?x + SELECT $this WHERE { -$this s223:observes/qudt:isDeltaQuantity true . +$this s223:hasReferenceLocation ?y . $this s223:observes ?x . ?x a/rdfs:subClassOf* s223:QuantifiableProperty . -FILTER NOT EXISTS {$this s223:hasReferenceLocation ?y} +FILTER NOT EXISTS {$this s223:observes/qudt:isDeltaQuantity true} } """^^xsd:string ] ], [ rdfs:comment "If a Sensor measures a differential property, it must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasReferenceLocation."^^xsd:string ; sh:maxCount 1 ; - sh:path s223:hasReferenceLocation ], - [ rdfs:comment "A Sensor must be associated with exactly one ObservableProperty using the relation observes."^^xsd:string ; - sh:class s223:ObservableProperty ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path s223:observes ], - [ rdfs:comment "If the relation hasMeasurementResolution is present it must associate a Sensor with a QuantifiableProperty."^^xsd:string ; - sh:class s223:QuantifiableProperty ; - sh:path s223:hasMeasurementResolution ] ; + sh:message "s223: If a Sensor measures a differential property, it must be associated with exactly 1 of Connectable, Connection, or ConnectionPoint using the relation hasReferenceLocation."^^xsd:string ; + sh:path s223:hasReferenceLocation ] ; sh:rule [ a sh:SPARQLRule ; rdfs:comment "Infer the hasObservationLocation relation for a Sensor from the Property that it is observing, only if that property is associated with a single entity."^^xsd:string ; sh:construct """ @@ -81572,8 +81929,8 @@ $G = \\frac{1}{R}$, where $R$ is resistance."""^^ns1:LatexString ; ns1:conversionOffsetSN 2.7315e+02 ; ns1:dbpediaMatch "http://dbpedia.org/resource/Celsius"^^xsd:anyURI ; ns1:expression "$degC$"^^ns1:LatexString ; - ns1:guidance "

See NIST section SP811 section 4.2.1.1"^^rdf:HTML, - "

See NIST section SP811 section 6.2.8"^^rdf:HTML ; + ns1:guidance "

See NIST section SP811 section 4.2.1.1

"^^rdf:HTML, + "

See NIST section SP811 section 6.2.8

"^^rdf:HTML ; ns1:hasDimensionVector ; ns1:hasQuantityKind , , @@ -81806,7 +82163,7 @@ $G = \\frac{1}{R}$, where $R$ is resistance."""^^ns1:LatexString ; ; ns1:conversionMultiplier 0.000001 ; ns1:conversionMultiplierSN 1e-06 ; - ns1:guidance "

See NIST section SP811 section7.10"^^rdf:HTML ; + ns1:guidance "

See NIST section SP811 section7.10

"^^rdf:HTML ; ns1:hasDimensionVector ; ns1:hasQuantityKind , ; @@ -81843,8 +82200,8 @@ $G = \\frac{1}{R}$, where $R$ is resistance."""^^ns1:LatexString ; ns1:conversionOffset 273.15 ; ns1:conversionOffsetSN 2.7315e+02 ; ns1:dbpediaMatch "http://dbpedia.org/resource/Celsius"^^xsd:anyURI ; - ns1:guidance "

See NIST section SP811 section 4.2.1.1"^^rdf:HTML, - "

See NIST section SP811 section 6.2.8"^^rdf:HTML ; + ns1:guidance "

See NIST section SP811 section 4.2.1.1

"^^rdf:HTML, + "

See NIST section SP811 section 6.2.8

"^^rdf:HTML ; ns1:hasDimensionVector ; ns1:hasQuantityKind , , @@ -81865,7 +82222,7 @@ $G = \\frac{1}{R}$, where $R$ is resistance."""^^ns1:LatexString ; ; ns1:conversionMultiplier 0.001 ; ns1:conversionMultiplierSN 1e-03 ; - ns1:guidance "

See NIST section SP811 section7.10"^^rdf:HTML ; + ns1:guidance "

See NIST section SP811 section7.10

"^^rdf:HTML ; ns1:hasDimensionVector ; ns1:hasQuantityKind , ; @@ -82096,7 +82453,7 @@ $G = \\frac{1}{R}$, where $R$ is resistance."""^^ns1:LatexString ; ns1:conversionMultiplierSN 1e+00 ; ns1:dbpediaMatch "http://dbpedia.org/resource/Radian"^^xsd:anyURI ; ns1:definedUnitOfSystem ; - ns1:guidance "

See NIST section SP811 section7.10"^^rdf:HTML ; + ns1:guidance "

See NIST section SP811 section7.10

"^^rdf:HTML ; ns1:hasDimensionVector ; ns1:hasQuantityKind , ; @@ -82222,7 +82579,7 @@ $G = \\frac{1}{R}$, where $R$ is resistance."""^^ns1:LatexString ; a ns1:Unit ; rdfs:label "Tropical Year"@en ; - dcterms:description "

A tropical year (also known as a solar year), for general purposes, is the length of time that the Sun takes to return to the same position in the cycle of seasons, as seen from Earth; for example, the time from vernal equinox to vernal equinox, or from summer solstice to summer solstice. Because of the precession of the equinoxes, the seasonal cycle does not remain exactly synchronised with the position of the Earth in its orbit around the Sun. As a consequence, the tropical year is about 20 minutes shorter than the time it takes Earth to complete one full orbit around the Sun as measured with respect to the fixed stars. Since antiquity, astronomers have progressively refined the definition of the tropical year, and currently define it as the time required for the mean Sun's tropical longitude (longitudinal position along the ecliptic relative to its position at the vernal equinox) to increase by 360 degrees (that is, to complete one full seasonal circuit)."^^rdf:HTML ; + dcterms:description "

A tropical year (also known as a solar year), for general purposes, is the length of time that the Sun takes to return to the same position in the cycle of seasons, as seen from Earth; for example, the time from vernal equinox to vernal equinox, or from summer solstice to summer solstice. Because of the precession of the equinoxes, the seasonal cycle does not remain exactly synchronised with the position of the Earth in its orbit around the Sun. As a consequence, the tropical year is about 20 minutes shorter than the time it takes Earth to complete one full orbit around the Sun as measured with respect to the fixed stars. Since antiquity, astronomers have progressively refined the definition of the tropical year, and currently define it as the time required for the mean Sun's tropical longitude (longitudinal position along the ecliptic relative to its position at the vernal equinox) to increase by 360 degrees (that is, to complete one full seasonal circuit).

"^^rdf:HTML ; ns1:applicableSystem , , , @@ -82247,13 +82604,30 @@ s223:Connectable a s223:Class, s223:abstract true ; rdfs:comment "Connectable is an abstract class representing a thing such as, Equipment (see `s223:Equipment`), DomainSpace (see `s223:DomainSpace`), or Junction (see `s223:Junction`) that can be connected via ConnectionPoints and Connections."^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "If the relation connectedThrough is present it must associate the Connectable with a Connection."^^xsd:string ; + sh:property [ rdfs:comment "If the relation connectedFrom is present it must associate the Connectable with a Connectable."^^xsd:string ; + sh:class s223:Connectable ; + sh:message "s223: If the relation connectedFrom is present it must associate the Connectable with a Connectable."^^xsd:string ; + sh:path s223:connectedFrom ], + [ rdfs:comment "If the relation connectedThrough is present it must associate the Connectable with a Connection."^^xsd:string ; sh:class s223:Connection ; + sh:message "s223: If the relation connectedThrough is present it must associate the Connectable with a Connection."^^xsd:string ; sh:name "EquipmentToConnectionShape"^^xsd:string ; sh:path s223:connectedThrough ], - [ rdfs:comment "If the relation connectedFrom is present it must associate the Connectable with a Connectable."^^xsd:string ; + [ rdfs:comment "If the relation connectedTo is present it must associate the Connectable with a Connectable."^^xsd:string ; sh:class s223:Connectable ; - sh:path s223:connectedFrom ], + sh:message "s223: If the relation connectedTo is present it must associate the Connectable with a Connectable."^^xsd:string ; + sh:name "ConnectableToConnectableShape"^^xsd:string ; + sh:path s223:connectedTo ], + [ rdfs:comment "If the relation hasConnectionPoint is present it must associate the Connectable with a ConnectionPoint."^^xsd:string ; + sh:class s223:ConnectionPoint ; + sh:message "s223: If the relation hasConnectionPoint is present it must associate the Connectable with a ConnectionPoint."^^xsd:string ; + sh:name "EquipmentToConnectionPointShape"^^xsd:string ; + sh:path s223:hasConnectionPoint ], + [ rdfs:comment "If the relation connected is present it must associate the Connectable with a Connectable."^^xsd:string ; + sh:class s223:Connectable ; + sh:message "s223: If the relation connected is present it must associate the Connectable with a Connectable."^^xsd:string ; + sh:name "SymmetricConnectableToConnectableShape"^^xsd:string ; + sh:path s223:connected ], [ rdfs:comment "If a Connectable has s223:connected or s223:connectedTo (i.e. high-level connection specification), it must also have the supporting cnx relations (low-level connection specification)."^^xsd:string ; sh:path s223:cnx ; sh:severity sh:Warning ; @@ -82270,28 +82644,28 @@ FILTER NOT EXISTS {$this s223:cnx+ ?otherC} """^^xsd:string ] ], [ rdfs:comment "If the relation cnx is present it must associate the Connectable with a ConnectionPoint."^^xsd:string ; sh:class s223:ConnectionPoint ; - sh:path s223:cnx ], - [ rdfs:comment "If the relation hasConnectionPoint is present it must associate the Connectable with a ConnectionPoint."^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:name "EquipmentToConnectionPointShape"^^xsd:string ; - sh:path s223:hasConnectionPoint ], - [ rdfs:comment "If the relation connectedTo is present it must associate the Connectable with a Connectable."^^xsd:string ; - sh:class s223:Connectable ; - sh:name "ConnectableToConnectableShape"^^xsd:string ; - sh:path s223:connectedTo ], - [ rdfs:comment "If the relation connected is present it must associate the Connectable with a Connectable."^^xsd:string ; - sh:class s223:Connectable ; - sh:name "SymmetricConnectableToConnectableShape"^^xsd:string ; - sh:path s223:connected ] ; - sh:rule [ a sh:SPARQLRule ; - rdfs:comment "Infer the connected relation for BiDirectional connections"^^xsd:string ; + sh:message "s223: If the relation cnx is present it must associate the Connectable with a ConnectionPoint."^^xsd:string ; + sh:path s223:cnx ] ; + sh:rule [ a sh:TripleRule ; + rdfs:comment "Infer the cnx relationship using hasConnectionPoint."^^xsd:string ; + sh:name "InferredEquipmentToConnectionPointCnxProperty"^^xsd:string ; + sh:object [ sh:path s223:hasConnectionPoint ] ; + sh:predicate s223:cnx ; + sh:subject sh:this ], + [ a sh:TripleRule ; + rdfs:comment "Infer the hasConnectionPoint relation using cnx"^^xsd:string ; + sh:name "InferredEquipmentToConnectionPointProperty"^^xsd:string ; + sh:object [ sh:path s223:cnx ] ; + sh:predicate s223:hasConnectionPoint ; + sh:subject sh:this ], + [ a sh:SPARQLRule ; + rdfs:comment "Infer the connectedTo relation using connectsThrough and connectsTo."^^xsd:string ; sh:construct """ -CONSTRUCT {$this s223:connected ?d2 .} +CONSTRUCT {$this s223:connectedTo ?equipment .} WHERE { -$this s223:connectedThrough/^s223:connectedThrough ?d2 . -FILTER ($this != ?d2) . -FILTER NOT EXISTS {$this s223:contains* ?d2} . -FILTER NOT EXISTS {?d2 s223:contains* $this} . +$this s223:hasConnectionPoint ?cp . +?cp a s223:OutletConnectionPoint . +?cp s223:connectsThrough/s223:connectsTo ?equipment . } """^^xsd:string ; sh:name "InferredEquipmentToDownstreamEquipmentProperty"^^xsd:string ; @@ -82308,30 +82682,19 @@ $this s223:hasConnectionPoint ?cp . """^^xsd:string ; sh:name "InferredEquipmentToUpstreamEquipmentProperty"^^xsd:string ; sh:prefixes ], - [ a sh:TripleRule ; - rdfs:comment "Infer the connected relation using connectedFrom"^^xsd:string ; - sh:name "InferredEquipmentToEquipmentPropertyfromconnectedFrom"^^xsd:string ; - sh:object [ sh:path s223:connectedFrom ] ; - sh:predicate s223:connected ; - sh:subject sh:this ], [ a sh:SPARQLRule ; - rdfs:comment "Infer the connectedTo relation using connectsThrough and connectsTo."^^xsd:string ; + rdfs:comment "Infer the connected relation for BiDirectional connections"^^xsd:string ; sh:construct """ -CONSTRUCT {$this s223:connectedTo ?equipment .} +CONSTRUCT {$this s223:connected ?d2 .} WHERE { -$this s223:hasConnectionPoint ?cp . -?cp a s223:OutletConnectionPoint . -?cp s223:connectsThrough/s223:connectsTo ?equipment . +$this s223:connectedThrough/^s223:connectedThrough ?d2 . +FILTER ($this != ?d2) . +FILTER NOT EXISTS {$this s223:contains* ?d2} . +FILTER NOT EXISTS {?d2 s223:contains* $this} . } """^^xsd:string ; sh:name "InferredEquipmentToDownstreamEquipmentProperty"^^xsd:string ; sh:prefixes ], - [ a sh:TripleRule ; - rdfs:comment "Infer the cnx relationship using hasConnectionPoint."^^xsd:string ; - sh:name "InferredEquipmentToConnectionPointCnxProperty"^^xsd:string ; - sh:object [ sh:path s223:hasConnectionPoint ] ; - sh:predicate s223:cnx ; - sh:subject sh:this ], [ a sh:TripleRule ; rdfs:comment "Infer the cnx relation using isConnectionPointOf."^^xsd:string ; sh:name "InferredEquipmentToConnectionPointCnxPropertyFromInverse"^^xsd:string ; @@ -82339,9 +82702,9 @@ $this s223:hasConnectionPoint ?cp . sh:predicate s223:cnx ; sh:subject sh:this ], [ a sh:TripleRule ; - rdfs:comment "Infer the connected relation using connectedTo"^^xsd:string ; - sh:name "InferredEquipmentToEquipmentPropertyfromconnectedTo"^^xsd:string ; - sh:object [ sh:path s223:connectedTo ] ; + rdfs:comment "Infer the connected relation using connectedFrom"^^xsd:string ; + sh:name "InferredEquipmentToEquipmentPropertyfromconnectedFrom"^^xsd:string ; + sh:object [ sh:path s223:connectedFrom ] ; sh:predicate s223:connected ; sh:subject sh:this ], [ a sh:TripleRule ; @@ -82351,10 +82714,10 @@ $this s223:hasConnectionPoint ?cp . sh:predicate s223:connectedThrough ; sh:subject sh:this ], [ a sh:TripleRule ; - rdfs:comment "Infer the hasConnectionPoint relation using cnx"^^xsd:string ; - sh:name "InferredEquipmentToConnectionPointProperty"^^xsd:string ; - sh:object [ sh:path s223:cnx ] ; - sh:predicate s223:hasConnectionPoint ; + rdfs:comment "Infer the connected relation using connectedTo"^^xsd:string ; + sh:name "InferredEquipmentToEquipmentPropertyfromconnectedTo"^^xsd:string ; + sh:object [ sh:path s223:connectedTo ] ; + sh:predicate s223:connected ; sh:subject sh:this ] . s223:cnx a s223:SymmetricProperty ; @@ -83466,6 +83829,7 @@ s223:Concept a s223:Class, rdfs:subClassOf rdfs:Resource ; sh:property [ rdfs:comment "If the relation hasProperty is present, it must associate the concept with a Property."^^xsd:string ; sh:class s223:Property ; + sh:message "s223: If the relation hasProperty is present, it must associate the concept with a Property."^^xsd:string ; sh:path s223:hasProperty ], [ rdfs:comment "A Concept must be associated with at least one label using the relation label."^^xsd:string ; sh:message "s223: A Concept must be associated with at least one label using the relation label."^^xsd:string ; @@ -83486,7 +83850,7 @@ BIND(REPLACE(?localName, "-", " ", "i") AS ?newLabel) sh:name "AddLabelFromLocalName"^^xsd:string ; sh:prefixes ] ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 4: A medium with constituents and an associated property with constituents."^^xsd:string ; + rdfs:comment "Inconsistent Medium. Case 2: A pure medium and an associated property with constituents."^^xsd:string ; sh:message "s223: {$this} hasMedium of {?m1}, but is associated with property {?prop} that has ofMedium of {?m2}."^^xsd:string ; sh:prefixes ; sh:select """ @@ -83496,18 +83860,12 @@ $this s223:hasMedium ?m1 . $this ?p ?prop . ?prop a/rdfs:subClassOf* s223:Property . ?prop s223:ofMedium ?m2 . - ?m1 s223:composedOf/s223:ofConstituent ?s1 . - ?m2 s223:composedOf/s223:ofConstituent ?s2 . - FILTER NOT EXISTS { - ?m1 s223:composedOf/s223:ofConstituent ?s11 . - ?m2 s223:composedOf/s223:ofConstituent ?s12 . - FILTER (?s11 = ?s12) . - } - FILTER NOT EXISTS { - ?m1 s223:composedOf/s223:ofConstituent ?s21 . - ?m2 s223:composedOf/s223:ofConstituent ?s22 . - {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} . - } +?m2 s223:composedOf/s223:ofConstituent ?s2 . +FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . +FILTER NOT EXISTS { + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . +} } """^^xsd:string ], [ a sh:SPARQLConstraint ; @@ -83530,7 +83888,7 @@ FILTER NOT EXISTS { } """^^xsd:string ], [ a sh:SPARQLConstraint ; - rdfs:comment "Inconsistent Medium. Case 2: A pure medium and an associated property with constituents."^^xsd:string ; + rdfs:comment "Inconsistent Medium. Case 4: A medium with constituents and an associated property with constituents."^^xsd:string ; sh:message "s223: {$this} hasMedium of {?m1}, but is associated with property {?prop} that has ofMedium of {?m2}."^^xsd:string ; sh:prefixes ; sh:select """ @@ -83540,29 +83898,18 @@ $this s223:hasMedium ?m1 . $this ?p ?prop . ?prop a/rdfs:subClassOf* s223:Property . ?prop s223:ofMedium ?m2 . -?m2 s223:composedOf/s223:ofConstituent ?s2 . -FILTER NOT EXISTS {?m1 s223:composedOf ?c1} . -FILTER NOT EXISTS { - ?m2 s223:composedOf/s223:ofConstituent ?s12 . - {?s12 rdfs:subClassOf* ?m1} UNION {?m1 rdfs:subClassOf* ?s12} . -} -} -"""^^xsd:string ], - [ a sh:SPARQLConstraint ; - rdfs:comment "Ensure that any instance that is declared to be an instance of an abstract class must also be declared an instance of at least one subClass of that abstract class"^^xsd:string ; - sh:message "s223: {$this} cannot be declared an instance of only abstract class {?class}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT DISTINCT $this ?class -WHERE { -?class s223:abstract true . -$this a ?class . -OPTIONAL { -?otherClass rdfs:subClassOf+ ?class . -$this a ?otherClass . -FILTER (?class != ?otherClass) . -} -FILTER (!bound (?otherClass)) . + ?m1 s223:composedOf/s223:ofConstituent ?s1 . + ?m2 s223:composedOf/s223:ofConstituent ?s2 . + FILTER NOT EXISTS { + ?m1 s223:composedOf/s223:ofConstituent ?s11 . + ?m2 s223:composedOf/s223:ofConstituent ?s12 . + FILTER (?s11 = ?s12) . + } + FILTER NOT EXISTS { + ?m1 s223:composedOf/s223:ofConstituent ?s21 . + ?m2 s223:composedOf/s223:ofConstituent ?s22 . + {?s22 rdfs:subClassOf* ?s21} UNION {?s21 rdfs:subClassOf* ?s22} . + } } """^^xsd:string ], [ a sh:SPARQLConstraint ; @@ -83582,157 +83929,24 @@ FILTER NOT EXISTS {?m2 s223:composedOf ?c2} FILTER (NOT EXISTS {?m2 rdfs:subClassOf* ?m1}) . FILTER (NOT EXISTS {?m1 rdfs:subClassOf* ?m2}) . } -"""^^xsd:string ] . - -s223:ConnectionPoint a s223:Class, - sh:NodeShape ; - rdfs:label "ConnectionPoint"^^xsd:string ; - s223:abstract true ; - rdfs:comment """ -A ConnectionPoint is an abstract modeling construct used to represent the fact that one connectable thing can be connected to another connectable thing using a Connection. It is the abstract representation of the flange, wire terminal, or other physical feature where a connection is made. Equipment, DomainSpaces and Junctions can have one or more ConnectionPoints (see `s223:Connectable`). - -A ConnectionPoint is constrained to relate to a specific medium such as air, water, or electricity which determines what other things can be connected to it. For example, constraining a ConnectionPoint to be for air means it cannot be used for an electrical connection. - -A ConnectionPoint belongs to exactly one connectable thing (see `s223:Connectable'). - -ConnectionPoints are represented graphically in this standard by a triangle with the point indicating a direction of flow, or a diamond in the case of a bidirectional flow as shown in Figure 6-1. - -![Graphical Representation of a ConnectionPoint.](figures/Figure_5-2_Graphical_Depiciton_of_Connection_Points.svg) - - """^^xsd:string ; - rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "A ConnectionPoint can be associated with at most one other ConnectionPoint using the inverse of relation mapsTo"^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:maxCount 1 ; - sh:message "s223: A ConnectionPoint can be associated with at most one other ConnectionPoint using the inverse of relation mapsTo"^^xsd:string ; - sh:path [ sh:inversePath s223:mapsTo ] ], - [ rdfs:comment "If the relation hasRole is present it must associate the ConnectionPoint with an EnumerationKind-Role."^^xsd:string ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ], - [ rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, but is associated with a Junction or Equipment that is contained by an Equipment, then suggest that the ConnectionPoint might need a mapsTo relation to a ConnectionPoint of the containing Equipment."^^xsd:string ; - sh:path s223:mapsTo ; - sh:severity sh:Info ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, but is associated with a Junction or Equipment that is contained by an Equipment, then suggest that the ConnectionPoint might need a mapsTo relation to a ConnectionPoint of the containing Equipment."^^xsd:string ; - sh:message "s223: ConnectionPoint {$this} could be missing a mapsTo relation to a ConnectionPoint of {?containerEquipment} because it is associated with a Junction or Equipment that is contained by {?containerEquipment}."^^xsd:string ; - sh:prefixes ; - sh:select """ - SELECT $this ?containerEquipment - WHERE { - FILTER NOT EXISTS {$this s223:connectsThrough ?anything1} . - FILTER NOT EXISTS {$this s223:mapsTo ?anything2} . - $this s223:isConnectionPointOf ?equipment . - ?containerEquipment s223:contains ?equipment . - } - """^^xsd:string ] ], - [ rdfs:comment "A ConnectionPoint must be associated with exactly one Substance-Medium using the relation hasMedium."^^xsd:string ; - sh:class s223:Substance-Medium ; - sh:maxCount 1 ; - sh:message "s223: A ConnectionPoint must be associated with exactly one Substance-Medium using the relation hasMedium."^^xsd:string ; - sh:minCount 1 ; - sh:name "ConnectionPoint medium"^^xsd:string ; - sh:path s223:hasMedium ], - [ rdfs:comment "A ConnectionPoint must be associated with at most one Connection using the cnx relation"^^xsd:string ; - sh:message "s223: A ConnectionPoint must be associated with at most one Connection using the cnx relation"^^xsd:string ; - sh:path s223:cnx ; - sh:qualifiedMaxCount 1 ; - sh:qualifiedValueShape [ sh:class s223:Connection ] ; - sh:qualifiedValueShapesDisjoint true ], - [ rdfs:comment "A ConnectionPoint must not have both a mapsTo and a connectsThrough relation."^^xsd:string ; - sh:path s223:mapsTo ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "A ConnectionPoint must not have both a mapsTo and a connectsThrough relation."^^xsd:string ; - sh:message "s223: {$this} cannot have both a mapsTo {?uppercp} and a connectsThrough {?connection}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?uppercp ?connection -WHERE { -$this s223:mapsTo ?uppercp . -$this s223:connectsThrough ?connection . -?connection a/rdfs:subClassOf* s223:Connection . -} -"""^^xsd:string ] ], - [ rdfs:comment "If a ConnectionPoint mapsTo another ConnectionPoint, the respective Equipment should have a contains relation."^^xsd:string ; - sh:path s223:mapsTo ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "If a ConnectionPoint mapsTo another ConnectionPoint, the respective Equipment should have a contains relation."^^xsd:string ; - sh:message "s223: {?otherEquipment} should contain {?equipment} because ConnectionPoint {$this} has a mapsTo relation."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?equipment ?otherEquipment +"""^^xsd:string ], + [ a sh:SPARQLConstraint ; + rdfs:comment "Ensure that any instance that is declared to be an instance of an abstract class must also be declared an instance of at least one subClass of that abstract class"^^xsd:string ; + sh:message "s223: {$this} cannot be declared an instance of only abstract class {?class}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT DISTINCT $this ?class WHERE { -$this s223:mapsTo ?otherCP . -?equipment s223:hasConnectionPoint $this . -?otherEquipment s223:hasConnectionPoint ?otherCP . -FILTER NOT EXISTS {?otherEquipment s223:contains ?equipment} +?class s223:abstract true . +$this a ?class . +OPTIONAL { +?otherClass rdfs:subClassOf+ ?class . +$this a ?otherClass . +FILTER (?class != ?otherClass) . } -"""^^xsd:string ] ], - [ rdfs:comment "A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf."^^xsd:string ; - sh:class s223:Connectable ; - sh:maxCount 1 ; - sh:message "s223: A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf."^^xsd:string ; - sh:minCount 1 ; - sh:name "ConnectionPointToEquipmentShape"^^xsd:string ; - sh:path s223:isConnectionPointOf ], - [ rdfs:comment "A ConnectionPoint must be associated with at most one Connection using the relation connectsThrough."^^xsd:string ; - sh:class s223:Connection ; - sh:maxCount 1 ; - sh:message "s223: This ConnectionPoint must be associated with at most one Connection."^^xsd:string ; - sh:name "ConnectionPointToConnectionShape"^^xsd:string ; - sh:path s223:connectsThrough ; - sh:severity sh:Info ], - [ rdfs:comment "If the relation hasElectricalPhase is present it must associate the ConnectionPoint with an ElectricalPhaseIdentifier or ElectricalVoltagePhases."^^xsd:string ; - sh:or ( [ sh:class s223:Aspect-ElectricalPhaseIdentifier ] [ sh:class s223:Aspect-ElectricalVoltagePhases ] ) ; - sh:path s223:hasElectricalPhase ], - [ rdfs:comment "A ConnectionPoint can be associated with at most one other ConnectionPoint using the relation mapsTo"^^xsd:string ; - sh:class s223:ConnectionPoint ; - sh:maxCount 1 ; - sh:message "s223: A ConnectionPoint can be associated with at most one other ConnectionPoint using the relation mapsTo"^^xsd:string ; - sh:path s223:mapsTo ], - [ rdfs:comment "A ConnectionPoint must be associated with at most one Connectable using the cnx relation."^^xsd:string ; - sh:message "s223: A ConnectionPoint must be associated with at most one Connectable using the cnx relation."^^xsd:string ; - sh:path s223:cnx ; - sh:qualifiedMaxCount 1 ; - sh:qualifiedValueShape [ sh:class s223:Connectable ] ; - sh:qualifiedValueShapesDisjoint true ], - [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the entity identified by the mapsTo+ relation."^^xsd:string ; - sh:name "Test for compatible declared Medium"^^xsd:string ; - sh:path s223:hasMedium ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the entity identified by the mapsTo+ relation."^^xsd:string ; - sh:message "s223: {$this} declares a Medium of {?a}, but the Medium of {?b} is declared by {?target} pointed to by the mapsTo+ relation."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT DISTINCT $this ?a ?b ?target -WHERE { -$this s223:hasMedium ?a . -$this s223:mapsTo+ ?target . -?target s223:hasMedium ?b . -?a a/rdfs:subClassOf* s223:EnumerationKind-Medium . -?b a/rdfs:subClassOf* s223:EnumerationKind-Medium . -FILTER (?a != ?b ) . -FILTER (NOT EXISTS {?b a/rdfs:subClassOf* ?a}) . -FILTER (NOT EXISTS {?a a/rdfs:subClassOf* ?b}) . +FILTER (!bound (?otherClass)) . } -"""^^xsd:string ] ], - [ rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, and is not associated with a Junction or Equipment that is contained by an Equipment, then suggest that the ConnectionPoint probably needs an association with a Connection."^^xsd:string ; - sh:path s223:connectsThrough ; - sh:severity sh:Info ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, and is not associated with a Junction or Equipment that is contained by an Equipment, then suggest that the ConnectionPoint probably needs an association with a Connection."^^xsd:string ; - sh:message "s223: ConnectionPoint {$this} probably needs an association with a Connection, or use of hasOptionalConnectionPoint or hasBoundaryConnectionPoint qualifiers."^^xsd:string ; - sh:prefixes ; - sh:select """ - SELECT $this - WHERE { - FILTER NOT EXISTS {?sys1 s223:hasBoundaryConnectionPoint $this} . - FILTER NOT EXISTS {?sys2 s223:hasOptionalConnectionPoint $this} . - FILTER NOT EXISTS {$this s223:connectsThrough ?anything1} . - FILTER NOT EXISTS {$this s223:mapsTo ?anything2} . - $this s223:isConnectionPointOf ?equipment . - FILTER NOT EXISTS {?containerEquipment s223:contains ?equipment} . - } - """^^xsd:string ] ] . +"""^^xsd:string ] . s223:EnumerationKind-Domain a s223:Class, s223:EnumerationKind-Domain, @@ -84156,6 +84370,159 @@ s223:hasDomain a rdf:Property ; ns1:uneceCommonCode "YDK"^^xsd:string ; rdfs:isDefinedBy . +s223:ConnectionPoint a s223:Class, + sh:NodeShape ; + rdfs:label "ConnectionPoint"^^xsd:string ; + s223:abstract true ; + rdfs:comment """ +A ConnectionPoint is an abstract modeling construct used to represent the fact that one connectable thing can be connected to another connectable thing using a Connection. It is the abstract representation of the flange, wire terminal, or other physical feature where a connection is made. Equipment, DomainSpaces and Junctions can have one or more ConnectionPoints (see `s223:Connectable`). + +A ConnectionPoint is constrained to relate to a specific medium such as air, water, or electricity which determines what other things can be connected to it. For example, constraining a ConnectionPoint to be for air means it cannot be used for an electrical connection. + +A ConnectionPoint belongs to exactly one connectable thing (see `s223:Connectable'). + +ConnectionPoints are represented graphically in this standard by a triangle with the point indicating a direction of flow, or a diamond in the case of a bidirectional flow as shown in Figure 6-1. + +![Graphical Representation of a ConnectionPoint.](figures/Figure_5-2_Graphical_Depiciton_of_Connection_Points.svg) + + """^^xsd:string ; + rdfs:subClassOf s223:Concept ; + sh:property [ rdfs:comment "A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf."^^xsd:string ; + sh:class s223:Connectable ; + sh:maxCount 1 ; + sh:message "s223: A ConnectionPoint must be associated with exactly one Connectable using the relation isConnectionPointOf."^^xsd:string ; + sh:minCount 1 ; + sh:name "ConnectionPointToEquipmentShape"^^xsd:string ; + sh:path s223:isConnectionPointOf ], + [ rdfs:comment "A ConnectionPoint must be associated with at most one Connectable using the cnx relation."^^xsd:string ; + sh:message "s223: A ConnectionPoint must be associated with at most one Connectable using the cnx relation."^^xsd:string ; + sh:path s223:cnx ; + sh:qualifiedMaxCount 1 ; + sh:qualifiedValueShape [ sh:class s223:Connectable ] ; + sh:qualifiedValueShapesDisjoint true ], + [ rdfs:comment "If the relation hasElectricalPhase is present it must associate the ConnectionPoint with an ElectricalPhaseIdentifier or ElectricalVoltagePhases."^^xsd:string ; + sh:message "s223: If the relation hasElectricalPhase is present it must associate the ConnectionPoint with an ElectricalPhaseIdentifier or ElectricalVoltagePhases."^^xsd:string ; + sh:or ( [ sh:class s223:Aspect-ElectricalPhaseIdentifier ] [ sh:class s223:Aspect-ElectricalVoltagePhases ] ) ; + sh:path s223:hasElectricalPhase ], + [ rdfs:comment "A ConnectionPoint can be associated with at most one other ConnectionPoint using the relation mapsTo"^^xsd:string ; + sh:class s223:ConnectionPoint ; + sh:maxCount 1 ; + sh:message "s223: A ConnectionPoint can be associated with at most one other ConnectionPoint using the relation mapsTo"^^xsd:string ; + sh:path s223:mapsTo ], + [ rdfs:comment "If the relation hasRole is present it must associate the ConnectionPoint with an EnumerationKind-Role."^^xsd:string ; + sh:class s223:EnumerationKind-Role ; + sh:message "s223: If the relation hasRole is present it must associate the ConnectionPoint with an EnumerationKind-Role."^^xsd:string ; + sh:path s223:hasRole ], + [ rdfs:comment "A ConnectionPoint must be associated with exactly one Substance-Medium using the relation hasMedium."^^xsd:string ; + sh:class s223:Substance-Medium ; + sh:maxCount 1 ; + sh:message "s223: A ConnectionPoint must be associated with exactly one Substance-Medium using the relation hasMedium."^^xsd:string ; + sh:minCount 1 ; + sh:name "ConnectionPoint medium"^^xsd:string ; + sh:path s223:hasMedium ], + [ rdfs:comment "If a ConnectionPoint mapsTo another ConnectionPoint, the respective Equipment should have a contains relation."^^xsd:string ; + sh:path s223:mapsTo ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "If a ConnectionPoint mapsTo another ConnectionPoint, the respective Equipment should have a contains relation."^^xsd:string ; + sh:message "s223: {?otherEquipment} should contain {?equipment} because ConnectionPoint {$this} has a mapsTo relation."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?equipment ?otherEquipment +WHERE { +$this s223:mapsTo ?otherCP . +?equipment s223:hasConnectionPoint $this . +?otherEquipment s223:hasConnectionPoint ?otherCP . +FILTER NOT EXISTS {?otherEquipment s223:contains ?equipment} +} +"""^^xsd:string ] ], + [ rdfs:comment "A ConnectionPoint must be associated with at most one Connection using the relation connectsThrough."^^xsd:string ; + sh:class s223:Connection ; + sh:maxCount 1 ; + sh:message "s223: This ConnectionPoint must be associated with at most one Connection."^^xsd:string ; + sh:name "ConnectionPointToConnectionShape"^^xsd:string ; + sh:path s223:connectsThrough ; + sh:severity sh:Info ], + [ rdfs:comment "A ConnectionPoint must be associated with at most one Connection using the cnx relation"^^xsd:string ; + sh:message "s223: A ConnectionPoint must be associated with at most one Connection using the cnx relation"^^xsd:string ; + sh:path s223:cnx ; + sh:qualifiedMaxCount 1 ; + sh:qualifiedValueShape [ sh:class s223:Connection ] ; + sh:qualifiedValueShapesDisjoint true ], + [ rdfs:comment "A ConnectionPoint can be associated with at most one other ConnectionPoint using the inverse of relation mapsTo"^^xsd:string ; + sh:class s223:ConnectionPoint ; + sh:maxCount 1 ; + sh:message "s223: A ConnectionPoint can be associated with at most one other ConnectionPoint using the inverse of relation mapsTo"^^xsd:string ; + sh:path [ sh:inversePath s223:mapsTo ] ], + [ rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the entity identified by the mapsTo+ relation."^^xsd:string ; + sh:name "Test for compatible declared Medium"^^xsd:string ; + sh:path s223:hasMedium ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Ensure that the Medium identified by a ConnectionPoint via the s223:hasMedium relation is compatible with the Medium identified by the entity identified by the mapsTo+ relation."^^xsd:string ; + sh:message "s223: {$this} declares a Medium of {?a}, but the Medium of {?b} is declared by {?target} pointed to by the mapsTo+ relation."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT DISTINCT $this ?a ?b ?target +WHERE { +$this s223:hasMedium ?a . +$this s223:mapsTo+ ?target . +?target s223:hasMedium ?b . +?a a/rdfs:subClassOf* s223:EnumerationKind-Medium . +?b a/rdfs:subClassOf* s223:EnumerationKind-Medium . +FILTER (?a != ?b ) . +FILTER (NOT EXISTS {?b a/rdfs:subClassOf* ?a}) . +FILTER (NOT EXISTS {?a a/rdfs:subClassOf* ?b}) . +} +"""^^xsd:string ] ], + [ rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, and is not associated with a Junction or Equipment that is contained by an Equipment, then suggest that the ConnectionPoint probably needs an association with a Connection."^^xsd:string ; + sh:path s223:connectsThrough ; + sh:severity sh:Info ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, and is not associated with a Junction or Equipment that is contained by an Equipment, then suggest that the ConnectionPoint probably needs an association with a Connection."^^xsd:string ; + sh:message "s223: ConnectionPoint {$this} probably needs an association with a Connection, or use of hasOptionalConnectionPoint or hasBoundaryConnectionPoint qualifiers."^^xsd:string ; + sh:prefixes ; + sh:select """ + SELECT $this + WHERE { + FILTER NOT EXISTS {?sys1 s223:hasBoundaryConnectionPoint $this} . + FILTER NOT EXISTS {?sys2 s223:hasOptionalConnectionPoint $this} . + FILTER NOT EXISTS {$this s223:connectsThrough ?anything1} . + FILTER NOT EXISTS {$this s223:mapsTo ?anything2} . + $this s223:isConnectionPointOf ?equipment . + FILTER NOT EXISTS {?containerEquipment s223:contains ?equipment} . + } + """^^xsd:string ] ], + [ rdfs:comment "A ConnectionPoint must not have both a mapsTo and a connectsThrough relation."^^xsd:string ; + sh:path s223:mapsTo ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "A ConnectionPoint must not have both a mapsTo and a connectsThrough relation."^^xsd:string ; + sh:message "s223: {$this} cannot have both a mapsTo {?uppercp} and a connectsThrough {?connection}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?uppercp ?connection +WHERE { +$this s223:mapsTo ?uppercp . +$this s223:connectsThrough ?connection . +?connection a/rdfs:subClassOf* s223:Connection . +} +"""^^xsd:string ] ], + [ rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, but is associated with a Junction or Equipment that is contained by an Equipment, then suggest that the ConnectionPoint might need a mapsTo relation to a ConnectionPoint of the containing Equipment."^^xsd:string ; + sh:path s223:mapsTo ; + sh:severity sh:Info ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "If a ConnectionPoint lacks a connectsThrough and mapsTo relation, but is associated with a Junction or Equipment that is contained by an Equipment, then suggest that the ConnectionPoint might need a mapsTo relation to a ConnectionPoint of the containing Equipment."^^xsd:string ; + sh:message "s223: ConnectionPoint {$this} could be missing a mapsTo relation to a ConnectionPoint of {?containerEquipment} because it is associated with a Junction or Equipment that is contained by {?containerEquipment}."^^xsd:string ; + sh:prefixes ; + sh:select """ + SELECT $this ?containerEquipment + WHERE { + FILTER NOT EXISTS {$this s223:connectsThrough ?anything1} . + FILTER NOT EXISTS {$this s223:mapsTo ?anything2} . + FILTER NOT EXISTS {?anything3 s223:hasBoundaryConnectionPoint $this} . + $this s223:isConnectionPointOf ?equipment . + ?containerEquipment s223:contains ?equipment . + } + """^^xsd:string ] ] . + a ns1:QuantityKindDimensionVector_ISO, ns1:QuantityKindDimensionVector_Imperial, ns1:QuantityKindDimensionVector_SI ; @@ -84715,6 +85082,16 @@ s223:hasDomain a rdf:Property ; ns1:uneceCommonCode "MMK"^^xsd:string ; rdfs:isDefinedBy . +s223:BidirectionalConnectionPoint a s223:Class, + sh:NodeShape ; + rdfs:label "Bidirectional Connection Point"^^xsd:string ; + rdfs:comment "A BidirectionalConnectionPoint is a ConnectionPoint for which a Medium is expected to flow either into or out of the associated Connectable."^^xsd:string ; + rdfs:subClassOf s223:ConnectionPoint ; + sh:property [ rdfs:comment "If the relation mapsTo is present it must associate the BidirectionalConnectionPoint with a BidirectionalConnectionPoint."^^xsd:string ; + sh:class s223:BidirectionalConnectionPoint ; + sh:message "s223: If the relation mapsTo is present it must associate the BidirectionalConnectionPoint with a BidirectionalConnectionPoint."^^xsd:string ; + sh:path s223:mapsTo ] . + s223:Electricity-DC a s223:Class, s223:Electricity-DC, sh:NodeShape ; @@ -84731,10 +85108,6 @@ s223:hasProperty a rdf:Property ; rdfs:label "has Property"^^xsd:string ; rdfs:comment "The relation hasProperty associates any 223 Concept with a Property."^^xsd:string . -s223:hasRole a rdf:Property ; - rdfs:label "hasRole"^^xsd:string ; - rdfs:comment "The relation hasRole is used to indicate the role of an Equipment, Connection, ConnectionPoint, or System within a building (e.g., a heating coil will be associated with Role-Heating). Possible values are defined in EnumerationKind-Role (see `s223:EnumerationKind-Role`)."^^xsd:string . - a ns1:QuantityKindDimensionVector_ISO, ns1:QuantityKindDimensionVector_Imperial, ns1:QuantityKindDimensionVector_SI ; @@ -85148,6 +85521,13 @@ s223:hasRole a rdf:Property ; ns1:ucumCode "nm2"^^ns1:UCUMcs ; rdfs:isDefinedBy . +s223:Mix-Fluid a s223:Class, + s223:Mix-Fluid, + sh:NodeShape ; + rdfs:label "Mix-Fluid"^^xsd:string ; + rdfs:comment "Mix-Fluid"^^xsd:string ; + rdfs:subClassOf s223:Medium-Mix . + s223:Numerical-LineLineVoltage a s223:Class, s223:Numerical-LineLineVoltage, sh:NodeShape ; @@ -86096,6 +86476,10 @@ s223:Numerical-LineNeutralVoltage a s223:Class, sh:minCount 1 ; sh:path s223:hasVoltage ] . +s223:hasRole a rdf:Property ; + rdfs:label "hasRole"^^xsd:string ; + rdfs:comment "The relation hasRole is used to indicate the role of an Equipment, Connection, ConnectionPoint, or System within a building (e.g., a heating coil will be associated with Role-Heating). Possible values are defined in EnumerationKind-Role (see `s223:EnumerationKind-Role`)."^^xsd:string . + a ns1:QuantityKindDimensionVector_CGS, ns1:QuantityKindDimensionVector_ISO, ns1:QuantityKindDimensionVector_Imperial, @@ -86524,18 +86908,6 @@ s223:Numerical-LineNeutralVoltage a s223:Class, ns1:uneceCommonCode "B51"^^xsd:string ; rdfs:isDefinedBy . -s223:Fluid-Water a s223:Class, - s223:Fluid-Water, - sh:NodeShape ; - rdfs:label "Fluid-Water"^^xsd:string ; - s223:composedOf [ a s223:QuantifiableProperty ; - rdfs:label "Water conc"^^xsd:string ; - s223:ofConstituent s223:Constituent-H2O ; - ns1:hasQuantityKind ; - ns1:hasUnit ] ; - rdfs:comment "This class has enumerated subclasses of water and aqueous solutions in various states."^^xsd:string ; - rdfs:subClassOf s223:Mix-Fluid . - s223:Property a s223:Class, sh:NodeShape ; rdfs:label "Property"^^xsd:string ; @@ -86564,15 +86936,45 @@ A property that is not an instance of one of its subclasses is unconstrained with respect to its value. """^^xsd:string ; rdfs:subClassOf s223:Concept ; - sh:property [ rdfs:comment "If the relation hasInternalReference is present it must associate the Property with another Property."^^xsd:string ; - sh:class s223:Property ; - sh:path s223:hasInternalReference ], + sh:property [ rdfs:comment "A Property can be associated with at most one EnumerationKind-Substance using the relation ofSubstance."^^xsd:string ; + sh:class s223:EnumerationKind-Substance ; + sh:maxCount 1 ; + sh:message "s223: A Property can be associated with at most one EnumerationKind-Substance using the relation ofSubstance."^^xsd:string ; + sh:path s223:ofSubstance ], + [ rdfs:comment "A Property must not have both a hasInternalReference and a hasExternalReference relation."^^xsd:string ; + sh:path s223:hasInternalReference ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "A Property must not have both a hasInternalReference and a hasExternalReference relation."^^xsd:string ; + sh:message "s223: {$this} cannot have both a hasInternalReference and a hasExternalReference relation."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this +WHERE { +$this s223:hasInternalReference ?int . +$this s223:hasExternalReference ?ext . +} +"""^^xsd:string ] ], + [ rdfs:comment "A Property can be associated with at most one Function using the inverse relation hasOutput."^^xsd:string ; + sh:class s223:Function ; + sh:maxCount 1 ; + sh:message "s223: A Property can be associated with at most one Function using the inverse relation hasOutput."^^xsd:string ; + sh:path [ sh:inversePath s223:hasOutput ] ], + [ rdfs:comment "A Property can use at most one relation hasValue if it is required to provide a static value in the model. It is not meant for real-time value (see `s223:hasExternalReference`)."^^xsd:string ; + sh:maxCount 1 ; + sh:message "s223: A Property can use at most one relation hasValue if it is required to provide a static value in the model. It is not meant for real-time value (see `s223:hasExternalReference`)."^^xsd:string ; + sh:path s223:hasValue ], [ rdfs:comment "If the relation hasExternalReference is present it must associate the Property with an ExternalReference."^^xsd:string ; sh:class s223:ExternalReference ; + sh:message "s223: If the relation hasExternalReference is present it must associate the Property with an ExternalReference."^^xsd:string ; sh:path s223:hasExternalReference ], - [ rdfs:comment "If the relation hasAspect is present, it must associate the Property with an EnumerationKind."^^xsd:string ; - sh:class s223:EnumerationKind ; - sh:path s223:hasAspect ], + [ rdfs:comment "If the relation hasInternalReference is present it must associate the Property with another Property."^^xsd:string ; + sh:class s223:Property ; + sh:message "s223: If the relation hasInternalReference is present it must associate the Property with another Property."^^xsd:string ; + sh:path s223:hasInternalReference ], + [ rdfs:comment "An instance of s223:Property must not be observed (set) by more than one entity."^^xsd:string ; + sh:maxCount 1 ; + sh:message "s223: An instance of s223:Property must not be observed (set) by more than one entity."^^xsd:string ; + sh:path [ sh:inversePath s223:observes ] ], [ rdfs:comment "A Property must not have both a hasExternalReference and a hasValue relation."^^xsd:string ; sh:path s223:hasValue ; sh:sparql [ a sh:SPARQLConstraint ; @@ -86599,55 +87001,28 @@ WHERE { FILTER NOT EXISTS {$this s223:ofConstituent ?someSubstance} . } """^^xsd:string ] ], - [ rdfs:comment "An instance of s223:Property must not be observed (set) by more than one entity."^^xsd:string ; - sh:maxCount 1 ; - sh:message "s223: An instance of s223:Property must not be observed (set) by more than one entity."^^xsd:string ; - sh:path [ sh:inversePath s223:observes ] ], - [ rdfs:comment "A Property must not have both a hasInternalReference and a hasValue relation."^^xsd:string ; - sh:path s223:hasInternalReference ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "A Property must not have both a hasInternalReference and a hasValue relation."^^xsd:string ; - sh:message "s223: {$this} cannot have both a hasInternalReference and a hasValue relation."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this -WHERE { -$this s223:hasInternalReference ?int . -$this s223:hasValue ?val . -} -"""^^xsd:string ] ], - [ rdfs:comment "A Property can use at most one relation hasValue if it is required to provide a static value in the model. It is not meant for real-time value (see `s223:hasExternalReference`)."^^xsd:string ; - sh:maxCount 1 ; - sh:message "s223: A Property can use at most one relation hasValue if it is required to provide a static value in the model. It is not meant for real-time value (see `s223:hasExternalReference`)."^^xsd:string ; - sh:path s223:hasValue ], + [ rdfs:comment "If the relation hasAspect is present, it must associate the Property with an EnumerationKind."^^xsd:string ; + sh:class s223:EnumerationKind ; + sh:message "s223: If the relation hasAspect is present, it must associate the Property with an EnumerationKind."^^xsd:string ; + sh:path s223:hasAspect ], [ rdfs:comment "A Property can be associated with at most one EnumerationKind-Medium using the relation ofMedium."^^xsd:string ; sh:class s223:Substance-Medium ; sh:maxCount 1 ; sh:message "s223: A Property can be associated with at most one EnumerationKind-Medium using the relation ofMedium."^^xsd:string ; sh:path s223:ofMedium ], - [ rdfs:comment "A Property can be associated with at most one EnumerationKind-Substance using the relation ofSubstance."^^xsd:string ; - sh:class s223:EnumerationKind-Substance ; - sh:maxCount 1 ; - sh:message "s223: A Property can be associated with at most one EnumerationKind-Substance using the relation ofSubstance."^^xsd:string ; - sh:path s223:ofSubstance ], - [ rdfs:comment "A Property must not have both a hasInternalReference and a hasExternalReference relation."^^xsd:string ; + [ rdfs:comment "A Property must not have both a hasInternalReference and a hasValue relation."^^xsd:string ; sh:path s223:hasInternalReference ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "A Property must not have both a hasInternalReference and a hasExternalReference relation."^^xsd:string ; - sh:message "s223: {$this} cannot have both a hasInternalReference and a hasExternalReference relation."^^xsd:string ; + rdfs:comment "A Property must not have both a hasInternalReference and a hasValue relation."^^xsd:string ; + sh:message "s223: {$this} cannot have both a hasInternalReference and a hasValue relation."^^xsd:string ; sh:prefixes ; sh:select """ SELECT $this WHERE { $this s223:hasInternalReference ?int . -$this s223:hasExternalReference ?ext . +$this s223:hasValue ?val . } -"""^^xsd:string ] ], - [ rdfs:comment "A Property can be associated with at most one Function using the inverse relation hasOutput."^^xsd:string ; - sh:class s223:Function ; - sh:maxCount 1 ; - sh:message "s223: A Property can be associated with at most one Function using the inverse relation hasOutput."^^xsd:string ; - sh:path [ sh:inversePath s223:hasOutput ] ] ; +"""^^xsd:string ] ] ; sh:sparql [ a sh:SPARQLConstraint ; rdfs:comment "A Property instance cannot be declared an instance of both an ActuatableProperty and an ObservableProperty."^^xsd:string ; sh:message "s223: {$this} cannot be declared an instance of both an ActuatableProperty and an ObservableProperty."^^xsd:string ; @@ -86665,51 +87040,32 @@ s223:QuantifiableProperty a s223:Class, rdfs:label "Quantifiable Property"^^xsd:string ; rdfs:comment "This class is for quantifiable values that describe an object (System, Equipment, etc.) that are typically static (hasValue). That is, they are neither measured nor specified in the course of operations."^^xsd:string ; rdfs:subClassOf s223:Property ; - sh:property [ rdfs:comment "A QuantifiableProperty must be associated with a QuantityKind using the relation hasQuantityKind."^^xsd:string ; - sh:class ns1:QuantityKind ; - sh:maxCount 1 ; - sh:message "s223: A QuantifiableProperty must be associated with a QuantityKind using the relation hasQuantityKind."^^xsd:string ; - sh:minCount 1 ; - sh:path ns1:hasQuantityKind ], - [ rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it."^^xsd:string ; - sh:path ns1:hasUnit ; - sh:severity sh:Info ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it."^^xsd:string ; - sh:message "s223: {$this} uses Unit {?punit}, while Setpoint {?setpoint} uses Unit {?sunit}. Be careful."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?setpoint ?punit ?sunit -WHERE { -$this qudt:hasUnit ?punit . -$this s223:hasSetpoint ?setpoint . -?setpoint qudt:hasUnit ?sunit . -?punit qudt:hasDimensionVector ?pdv . -?sunit qudt:hasDimensionVector ?sdv . -FILTER (?punit != ?sunit) . -FILTER (?pdv = ?sdv) . -} -"""^^xsd:string ] ], - [ rdfs:comment "A QuantifiableProperty can be associated with at most one Unit using the relation hasUnit."^^xsd:string ; - sh:class ns1:Unit ; + sh:property [ rdfs:comment """A QuantifiableProperty can be associated with an optional Boolean flag using the relation isDeltaQuantity. +If the relation isDeltaQuantity has a value of true, the associated value should be interpreted as a difference reading, such as a +temperature difference. This is needed to distinguish between a temperature reading and a temperature difference reading, which +affects unit conversion calculations."""^^xsd:string ; + sh:datatype xsd:boolean ; sh:maxCount 1 ; - sh:message "s223: A QuantifiableProperty can be associated with at most one Unit using the relation hasUnit."^^xsd:string ; - sh:path ns1:hasUnit ], - [ rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units."^^xsd:string ; - sh:path ns1:hasUnit ; + sh:message """A QuantifiableProperty can be associated with an optional Boolean flag using the relation isDeltaQuantity. +If the relation isDeltaQuantity has a value of true, the associated value should be interpreted as a difference reading, such as a +temperature difference. This is needed to distinguish between a temperature reading and a temperature difference reading, which +affects unit conversion calculations."""^^xsd:string ; + sh:path ns1:isDeltaQuantity ], + [ rdfs:comment "This QuantifiableProperty and the Setpoint associated with it have non-commensurate QuantityKinds."^^xsd:string ; + sh:path ns1:hasQuantityKind ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units."^^xsd:string ; - sh:message "s223: {$this} uses Unit {?punit}, while Setpoint {?setpoint} uses Unit {?sunit}. These are non-commensurate."^^xsd:string ; + rdfs:comment "This QuantifiableProperty and the Setpoint associated with it have non-commensurate QuantityKinds."^^xsd:string ; + sh:message "s223: {$this} uses QuantityKind {?pqk} with DimensionVector {?pdv}, while Setpoint {?setpoint} uses QuantityKind {?sqk} with DimensionVector {?sdv}. These are non-commensurate"^^xsd:string ; sh:prefixes ; sh:select """ -SELECT $this ?setpoint ?punit ?sunit +SELECT $this ?setpoint ?pqk ?sqk ?pdv ?sdv WHERE { -$this qudt:hasUnit ?punit . +$this qudt:hasQuantityKind ?pqk . $this s223:hasSetpoint ?setpoint . -?setpoint qudt:hasUnit ?sunit . -?punit qudt:hasDimensionVector ?pdv . -?sunit qudt:hasDimensionVector ?sdv . -FILTER (?punit != ?sunit) . +?setpoint qudt:hasQuantityKind ?sqk . +?pqk qudt:hasDimensionVector ?pdv . +?sqk qudt:hasDimensionVector ?sdv . +FILTER (?pqk != ?sqk) . FILTER (?pdv != ?sdv) . } """^^xsd:string ] ], @@ -86727,6 +87083,10 @@ FILTER NOT EXISTS {$this qudt:hasUnit ?u} . ?subject ?p $this . } """^^xsd:string ] ], + [ rdfs:comment "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; + sh:maxCount 0 ; + sh:message "s223: A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; + sh:path ns1:value ], [ rdfs:comment "This QuantifiableProperty cannot have a value without a Unit."^^xsd:string ; sh:path s223:hasValue ; sh:sparql [ a sh:SPARQLConstraint ; @@ -86741,25 +87101,52 @@ FILTER NOT EXISTS {$this qudt:hasUnit ?u} . ?subject ?p $this . } """^^xsd:string ] ], - [ rdfs:comment """Normally, a QuantifiableProperty is associated with a static decimal value using s223:hasValue, along with a single -unit and quantity kind. However, in some cases, a QuantifiableProperty may instead be associated with a qudt:QuantityValue using the relation -qudt:quantityValue. This allows the qudt:QuantityValue to express multiple equivalent combinations of unit and value."""^^xsd:string ; - sh:class ns1:QuantityValue ; - sh:path ns1:quantityValue ], - [ rdfs:comment "This QuantifiableProperty with Aspect-Setpoint is not referenced by any Property using hasSetpoint."^^xsd:string ; - sh:path ns1:hasSetpoint ; + [ rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units."^^xsd:string ; + sh:path ns1:hasUnit ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "This QuantifiableProperty and the associated Setpoint use non-commensurate Units."^^xsd:string ; + sh:message "s223: {$this} uses Unit {?punit}, while Setpoint {?setpoint} uses Unit {?sunit}. These are non-commensurate."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?setpoint ?punit ?sunit +WHERE { +$this qudt:hasUnit ?punit . +$this s223:hasSetpoint ?setpoint . +?setpoint qudt:hasUnit ?sunit . +?punit qudt:hasDimensionVector ?pdv . +?sunit qudt:hasDimensionVector ?sdv . +FILTER (?punit != ?sunit) . +FILTER (?pdv != ?sdv) . +} +"""^^xsd:string ] ], + [ rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it."^^xsd:string ; + sh:path ns1:hasUnit ; sh:severity sh:Info ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "This QuantifiableProperty with Aspect-Setpoint is not referenced by any Property using hasSetpoint."^^xsd:string ; - sh:message "s223: {$this} has Aspect-Setpoint but is not referenced by any Property using hasSetpoint."^^xsd:string ; + rdfs:comment "This QuantifiableProperty uses a different Unit than the Setpoint associated with it."^^xsd:string ; + sh:message "s223: {$this} uses Unit {?punit}, while Setpoint {?setpoint} uses Unit {?sunit}. Be careful."^^xsd:string ; sh:prefixes ; sh:select """ -SELECT $this +SELECT $this ?setpoint ?punit ?sunit WHERE { -$this s223:hasAspect s223:Aspect-Setpoint . -FILTER NOT EXISTS {?anything s223:hasSetpoint $this} . +$this qudt:hasUnit ?punit . +$this s223:hasSetpoint ?setpoint . +?setpoint qudt:hasUnit ?sunit . +?punit qudt:hasDimensionVector ?pdv . +?sunit qudt:hasDimensionVector ?sdv . +FILTER (?punit != ?sunit) . +FILTER (?pdv = ?sdv) . } """^^xsd:string ] ], + [ rdfs:comment "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; + sh:maxCount 0 ; + sh:message "s223: A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; + sh:path ns1:value ], + [ rdfs:comment "A QuantifiableProperty can be associated with at most one Unit using the relation hasUnit."^^xsd:string ; + sh:class ns1:Unit ; + sh:maxCount 1 ; + sh:message "s223: A QuantifiableProperty can be associated with at most one Unit using the relation hasUnit."^^xsd:string ; + sh:path ns1:hasUnit ], [ rdfs:comment "This QuantifiableProperty uses hasSetpoint to reference a Property that lacks an Aspect of Aspect-Setpoint."^^xsd:string ; sh:path ns1:hasAspect ; sh:sparql [ a sh:SPARQLConstraint ; @@ -86773,39 +87160,34 @@ $this s223:hasSetpoint ?setpoint . FILTER NOT EXISTS {?setpoint s223:hasAspect s223:Aspect-Setpoint} . } """^^xsd:string ] ], - [ rdfs:comment "This QuantifiableProperty and the Setpoint associated with it have non-commensurate QuantityKinds."^^xsd:string ; - sh:path ns1:hasQuantityKind ; + [ rdfs:comment "This QuantifiableProperty with Aspect-Setpoint is not referenced by any Property using hasSetpoint."^^xsd:string ; + sh:path ns1:hasSetpoint ; + sh:severity sh:Info ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "This QuantifiableProperty and the Setpoint associated with it have non-commensurate QuantityKinds."^^xsd:string ; - sh:message "s223: {$this} uses QuantityKind {?pqk} with DimensionVector {?pdv}, while Setpoint {?setpoint} uses QuantityKind {?sqk} with DimensionVector {?sdv}. These are non-commensurate"^^xsd:string ; + rdfs:comment "This QuantifiableProperty with Aspect-Setpoint is not referenced by any Property using hasSetpoint."^^xsd:string ; + sh:message "s223: {$this} has Aspect-Setpoint but is not referenced by any Property using hasSetpoint."^^xsd:string ; sh:prefixes ; sh:select """ -SELECT $this ?setpoint ?pqk ?sqk ?pdv ?sdv +SELECT $this WHERE { -$this qudt:hasQuantityKind ?pqk . -$this s223:hasSetpoint ?setpoint . -?setpoint qudt:hasQuantityKind ?sqk . -?pqk qudt:hasDimensionVector ?pdv . -?sqk qudt:hasDimensionVector ?sdv . -FILTER (?pqk != ?sqk) . -FILTER (?pdv != ?sdv) . +$this s223:hasAspect s223:Aspect-Setpoint . +FILTER NOT EXISTS {?anything s223:hasSetpoint $this} . } """^^xsd:string ] ], - [ rdfs:comment "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; - sh:maxCount 0 ; - sh:message "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; - sh:path ns1:value ], - [ rdfs:comment "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; - sh:maxCount 0 ; - sh:message "A QuantifiableProperty should use s223:hasValue instead of qudt:value."^^xsd:string ; - sh:path ns1:value ], - [ rdfs:comment """A QuantifiableProperty can be associated with an optional Boolean flag using the relation isDeltaQuantity. -If the relation isDeltaQuantity has a value of true, the associated value should be interpreted as a difference reading, such as a -temperature difference. This is needed to distinguish between a temperature reading and a temperature difference reading, which -affects unit conversion calculations."""^^xsd:string ; - sh:datatype xsd:boolean ; + [ rdfs:comment """Normally, a QuantifiableProperty is associated with a static decimal value using s223:hasValue, along with a single +unit and quantity kind. However, in some cases, a QuantifiableProperty may instead be associated with a qudt:QuantityValue using the relation +qudt:quantityValue. This allows the qudt:QuantityValue to express multiple equivalent combinations of unit and value."""^^xsd:string ; + sh:class ns1:QuantityValue ; + sh:message """Normally, a QuantifiableProperty is associated with a static decimal value using s223:hasValue, along with a single +unit and quantity kind. However, in some cases, a QuantifiableProperty may instead be associated with a qudt:QuantityValue using the relation +qudt:quantityValue. This allows the qudt:QuantityValue to express multiple equivalent combinations of unit and value."""^^xsd:string ; + sh:path ns1:quantityValue ], + [ rdfs:comment "A QuantifiableProperty must be associated with a QuantityKind using the relation hasQuantityKind."^^xsd:string ; + sh:class ns1:QuantityKind ; sh:maxCount 1 ; - sh:path ns1:isDeltaQuantity ] ; + sh:message "s223: A QuantifiableProperty must be associated with a QuantityKind using the relation hasQuantityKind."^^xsd:string ; + sh:minCount 1 ; + sh:path ns1:hasQuantityKind ] ; sh:rule [ a sh:SPARQLRule ; rdfs:comment "Infer the hasQuantityKind relation if it is unambiguous."^^xsd:string ; sh:construct """ @@ -87109,13 +87491,6 @@ FILTER (?qkdv1 != ?qkdv2) . ns1:uneceCommonCode "NEW"^^xsd:string ; rdfs:isDefinedBy . -s223:Fluid-Air a s223:Class, - s223:Fluid-Air, - sh:NodeShape ; - rdfs:label "Fluid-Air"^^xsd:string ; - rdfs:comment "This class has enumerated subclasses of Air in various states."^^xsd:string ; - rdfs:subClassOf s223:Mix-Fluid . - ns1:PropertiesGroup a sh:PropertyGroup ; rdfs:label "Properties"^^xsd:string ; rdfs:isDefinedBy ; @@ -87305,6 +87680,18 @@ The official SI symbolic abbreviation is mu00b7s-1, or equivalently either m/s." ns1:uneceCommonCode "C92"^^xsd:string ; rdfs:isDefinedBy . +s223:Fluid-Water a s223:Class, + s223:Fluid-Water, + sh:NodeShape ; + rdfs:label "Fluid-Water"^^xsd:string ; + s223:composedOf [ a s223:QuantifiableProperty ; + rdfs:label "Water conc"^^xsd:string ; + s223:ofConstituent s223:Constituent-H2O ; + ns1:hasQuantityKind ; + ns1:hasUnit ] ; + rdfs:comment "This class has enumerated subclasses of water and aqueous solutions in various states."^^xsd:string ; + rdfs:subClassOf s223:Mix-Fluid . + a ns1:QuantityKind ; rdfs:label "Angle"@en ; dcterms:description "The abstract notion of angle. Narrow concepts include plane angle and solid angle. While both plane angle and solid angle are dimensionless, they are actually length/length and area/area respectively."^^ns1:LatexString ; @@ -88656,7 +89043,7 @@ s223:EnumerationKind-Role a s223:Class, a ns1:Unit ; rdfs:label "Torr"@en ; - dcterms:description "

The \\textit{torr} is a non-SI unit of pressure with the ratio of 760 to 1 standard atmosphere, chosen to be roughly equal to the fluid pressure exerted by a millimeter of mercury, i.e. , a pressure of 1 torr is approximately equal to one millimeter of mercury. Note that the symbol (Torr) is spelled exactly the same as the unit (torr), but the letter case differs. The unit is written lower-case, while the symbol of the unit (Torr) is capitalized (as upper-case), as is customary in metric units derived from names. Thus, it is correctly written either way, and is only incorrect when specification is first made that the word is being used as a unit, or else a symbol of the unit, and then the incorrect letter case for the specified use is employed."^^rdf:HTML ; + dcterms:description "

The \\textit{torr} is a non-SI unit of pressure with the ratio of 760 to 1 standard atmosphere, chosen to be roughly equal to the fluid pressure exerted by a millimeter of mercury, i.e. , a pressure of 1 torr is approximately equal to one millimeter of mercury. Note that the symbol (Torr) is spelled exactly the same as the unit (torr), but the letter case differs. The unit is written lower-case, while the symbol of the unit (Torr) is capitalized (as upper-case), as is customary in metric units derived from names. Thus, it is correctly written either way, and is only incorrect when specification is first made that the word is being used as a unit, or else a symbol of the unit, and then the incorrect letter case for the specified use is employed.

"^^rdf:HTML ; ns1:conversionMultiplier 133.322 ; ns1:conversionMultiplierSN 1.33322e+02 ; ns1:dbpediaMatch "http://dbpedia.org/resource/Torr"^^xsd:anyURI ; @@ -88760,7 +89147,7 @@ s223:Constituent-Electricity a s223:Class, a ns1:Unit ; rdfs:label "Barye"@en ; - dcterms:description "

The barye, or sometimes barad, barrie, bary, baryd, baryed, or barie, is the centimetre-gram-second (CGS) unit of pressure. It is equal to 1 dyne per square centimetre."^^rdf:HTML ; + dcterms:description "

The barye, or sometimes barad, barrie, bary, baryd, baryed, or barie, is the centimetre-gram-second (CGS) unit of pressure. It is equal to 1 dyne per square centimetre.

"^^rdf:HTML ; ns1:applicableSystem ; ns1:conversionMultiplier 0.1 ; ns1:conversionMultiplierSN 1e-01 ; @@ -89073,6 +89460,13 @@ ns1:IdentifiersAndDescriptionsPropertyGroup a sh:PropertyGroup ; ns1:uneceCommonCode "74"^^xsd:string ; rdfs:isDefinedBy . +s223:Fluid-Air a s223:Class, + s223:Fluid-Air, + sh:NodeShape ; + rdfs:label "Fluid-Air"^^xsd:string ; + rdfs:comment "This class has enumerated subclasses of Air in various states."^^xsd:string ; + rdfs:subClassOf s223:Mix-Fluid . + ns1:hasQuantityKind a rdf:Property ; rdfs:label "has quantity kind"^^xsd:string ; rdfs:comment "A reference to the QuantityKind of a QuantifiableProperty of interest, e.g. quantitykind:Temperature."^^xsd:string ; @@ -90138,7 +90532,7 @@ ns1:hasQuantityKind a rdf:Property ; a ns1:Unit ; rdfs:label "Long Ton"@en ; dcterms:description """

Long ton (weight ton or imperial ton) is the name for the unit called the "ton" in the avoirdupois or Imperial system of measurements, as used in the United Kingdom and several other Commonwealth countries. One long ton is equal to 2,240 pounds (1,016 kg), 1.12 times as much as a short ton, or 35 cubic feet (0.9911 m3) of salt water with a density of 64 lb/ft3 (1.025 g/ml).

-

It has some limited use in the United States, most commonly in measuring the displacement of ships, and was the unit prescribed for warships by the Washington Naval Treaty 1922-for example battleships were limited to a mass of 35,000 long tons (36,000 t; 39,000 short tons)."""^^rdf:HTML ; +

It has some limited use in the United States, most commonly in measuring the displacement of ships, and was the unit prescribed for warships by the Washington Naval Treaty 1922-for example battleships were limited to a mass of 35,000 long tons (36,000 t; 39,000 short tons).

"""^^rdf:HTML ; ns1:applicableSystem ; ns1:conversionMultiplier 1016.0469088 ; ns1:conversionMultiplierSN 1.016047e+03 ; @@ -90338,7 +90732,7 @@ ns1:hasQuantityKind a rdf:Property ; a ns1:Unit ; rdfs:label "Short Ton"@en ; - dcterms:description "

The short ton is a unit of mass equal to 2,000 pounds (907.18474 kg). In the United States it is often called simply ton without distinguishing it from the metric ton (tonne, 1,000 kilograms / 2,204.62262 pounds) or the long ton (2,240 pounds / 1,016.0469088 kilograms); rather, the other two are specifically noted. There are, however, some U.S. applications for which unspecified tons normally means long tons."^^rdf:HTML ; + dcterms:description "

The short ton is a unit of mass equal to 2,000 pounds (907.18474 kg). In the United States it is often called simply ton without distinguishing it from the metric ton (tonne, 1,000 kilograms / 2,204.62262 pounds) or the long ton (2,240 pounds / 1,016.0469088 kilograms); rather, the other two are specifically noted. There are, however, some U.S. applications for which unspecified tons normally means long tons.

"^^rdf:HTML ; ns1:applicableSystem , ; ns1:conversionMultiplier 907.18474 ; @@ -90736,7 +91130,7 @@ s223:NumberOfElectricalPhases-ThreePhase a s223:Class, a ns1:Unit ; rdfs:label "Megaton of Oil Equivalent"@en ; dcterms:description """

The tonne of oil equivalent (toe) is a unit of energy: the amount of energy released by burning one tonne of crude oil, approximately 42 GJ (as different crude oils have different calorific values, the exact value of the toe is defined by convention; unfortunately there are several slightly different definitions as discussed below). The toe is sometimes used for large amounts of energy, as it can be more intuitive to visualise, say, the energy released by burning 1000 tonnes of oil than 42,000 billion joules (the SI unit of energy).

-

Multiples of the toe are used, in particular the megatoe (Mtoe, one million toe) and the gigatoe (Gtoe, one billion toe)."""^^rdf:HTML ; +

Multiples of the toe are used, in particular the megatoe (Mtoe, one million toe) and the gigatoe (Gtoe, one billion toe).

"""^^rdf:HTML ; ns1:applicableSystem ; ns1:conversionMultiplier 41868000000000000.0 ; ns1:conversionMultiplierSN 4.1868e+16 ; @@ -90895,7 +91289,7 @@ s223:NumberOfElectricalPhases-ThreePhase a s223:Class, a ns1:Unit ; rdfs:label "Ton of Oil Equivalent"@en ; - dcterms:description "

The tonne of oil equivalent (toe) is a unit of energy: the amount of energy released by burning one tonne of crude oil, approximately 42 GJ (as different crude oils have different calorific values, the exact value of the toe is defined by convention; unfortunately there are several slightly different definitions as discussed below). The toe is sometimes used for large amounts of energy, as it can be more intuitive to visualise, say, the energy released by burning 1000 tonnes of oil than 42,000 billion joules (the SI unit of energy). Multiples of the toe are used, in particular the megatoe (Mtoe, one million toe) and the gigatoe (Gtoe, one billion toe)."^^rdf:HTML ; + dcterms:description "

The tonne of oil equivalent (toe) is a unit of energy: the amount of energy released by burning one tonne of crude oil, approximately 42 GJ (as different crude oils have different calorific values, the exact value of the toe is defined by convention; unfortunately there are several slightly different definitions as discussed below). The toe is sometimes used for large amounts of energy, as it can be more intuitive to visualise, say, the energy released by burning 1000 tonnes of oil than 42,000 billion joules (the SI unit of energy). Multiples of the toe are used, in particular the megatoe (Mtoe, one million toe) and the gigatoe (Gtoe, one billion toe).

"^^rdf:HTML ; ns1:applicableSystem ; ns1:conversionMultiplier 41868000000.0 ; ns1:conversionMultiplierSN 4.1868e+10 ; @@ -91066,31 +91460,6 @@ s223:NumberOfElectricalPhases-ThreePhase a s223:Class, ns1:uneceCommonCode "A85"^^xsd:string ; rdfs:isDefinedBy . -s223:OutletConnectionPoint a s223:Class, - sh:NodeShape ; - rdfs:label "Outlet Connection Point"^^xsd:string ; - rdfs:comment "An OutletConnectionPoint is a ConnectionPoint for which a Medium is expected to flow out of the associated Connectable."^^xsd:string ; - rdfs:subClassOf s223:ConnectionPoint ; - sh:property [ rdfs:comment "Ensure an OutletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; - sh:path s223:mapsTo ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Ensure an OutletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; - sh:message "s223: {$this} must have a mapsTo an OutletConnectionPoint of {?parentEquipment} and not an external Connection to {?destinationEquipment}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?parentEquipment ?destinationEquipment -WHERE { -?equipment s223:hasConnectionPoint $this . -?parentEquipment s223:contains ?equipment . -$this s223:connectsThrough/s223:connectsTo ?destinationEquipment . -FILTER NOT EXISTS {?parentEquipment s223:contains ?destinationEquipment} . -FILTER NOT EXISTS {$this s223:mapsTo ?anything} . -} -"""^^xsd:string ] ], - [ rdfs:comment "If the relation mapsTo is present it must associate the OutletConnectionPoint with an OutletConnectionPoint."^^xsd:string ; - sh:class s223:OutletConnectionPoint ; - sh:path s223:mapsTo ] . - a ns1:Unit ; rdfs:label "British Thermal Unit (International Definition)"@en ; dcterms:description """$\\textit{British Thermal Unit}$ (BTU or Btu) is a traditional unit of energy equal to about $1.0550558526 \\textit{ kilojoule}$. @@ -91429,31 +91798,6 @@ s223:EnumerationKind-Aspect a s223:Class, ns1:latexDefinition "$L^2 T^-3$"^^ns1:LatexString ; rdfs:isDefinedBy . -s223:InletConnectionPoint a s223:Class, - sh:NodeShape ; - rdfs:label "Inlet Connection Point"^^xsd:string ; - rdfs:comment "An InletConnectionPoint is a ConnectionPoint for which a Medium is expected to flow into the associated Connectable."^^xsd:string ; - rdfs:subClassOf s223:ConnectionPoint ; - sh:property [ rdfs:comment "If the relation mapsTo is present it must associate the InletConnectionPoint with an InletConnectionPoint."^^xsd:string ; - sh:class s223:InletConnectionPoint ; - sh:path s223:mapsTo ], - [ rdfs:comment "Ensure an InletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; - sh:path s223:mapsTo ; - sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Ensure an InletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; - sh:message "s223: {$this} must have a mapsTo an InletConnectionPoint of {?parentEquipment} and not an external Connection from {?sourceEquipment}."^^xsd:string ; - sh:prefixes ; - sh:select """ -SELECT $this ?parentEquipment ?sourceEquipment -WHERE { -?equipment s223:hasConnectionPoint $this . -?parentEquipment s223:contains ?equipment . -$this s223:connectsThrough/s223:connectsFrom ?sourceEquipment . -FILTER NOT EXISTS {?parentEquipment s223:contains ?sourceEquipment} . -FILTER NOT EXISTS {$this s223:mapsTo ?anything} . -} -"""^^xsd:string ] ] . - a ns1:QuantityKindDimensionVector_ISO, ns1:QuantityKindDimensionVector_Imperial, ns1:QuantityKindDimensionVector_SI ; @@ -91920,6 +92264,36 @@ $\\nu = 1/T$"""^^ns1:LatexString ; skos:altLabel "rapidez"@es, "वेग"@hi . +s223:OutletConnectionPoint a s223:Class, + sh:NodeShape ; + rdfs:label "Outlet Connection Point"^^xsd:string ; + rdfs:comment "An OutletConnectionPoint is a ConnectionPoint for which a Medium is expected to flow out of the associated Connectable."^^xsd:string ; + rdfs:subClassOf s223:ConnectionPoint ; + sh:property [ rdfs:comment "If the relation pairedConnectionPoint is present it must associate the OutletConnectionPoint with an InletConnectionPoint."^^xsd:string ; + sh:class s223:InletConnectionPoint ; + sh:message "s223: If the relation pairedConnectionPoint is present it must associate the OutletConnectionPoint with an InletConnectionPoint."^^xsd:string ; + sh:path s223:pairedConnectionPoint ], + [ rdfs:comment "Ensure an OutletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; + sh:path s223:mapsTo ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Ensure an OutletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; + sh:message "s223: {$this} must have a mapsTo an OutletConnectionPoint of {?parentEquipment} and not an external Connection to {?destinationEquipment}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?parentEquipment ?destinationEquipment +WHERE { +?equipment s223:hasConnectionPoint $this . +?parentEquipment s223:contains ?equipment . +$this s223:connectsThrough/s223:connectsTo ?destinationEquipment . +FILTER NOT EXISTS {?parentEquipment s223:contains ?destinationEquipment} . +FILTER NOT EXISTS {$this s223:mapsTo ?anything} . +} +"""^^xsd:string ] ], + [ rdfs:comment "If the relation mapsTo is present it must associate the OutletConnectionPoint with an OutletConnectionPoint."^^xsd:string ; + sh:class s223:OutletConnectionPoint ; + sh:message "s223: If the relation mapsTo is present it must associate the OutletConnectionPoint with an OutletConnectionPoint."^^xsd:string ; + sh:path s223:mapsTo ] . + a ns1:QuantityKindDimensionVector_CGS, ns1:QuantityKindDimensionVector_ISO, ns1:QuantityKindDimensionVector_Imperial, @@ -91954,6 +92328,36 @@ $\\nu = 1/T$"""^^ns1:LatexString ; ns1:latexDefinition "$L^2 T^-2$"^^ns1:LatexString ; rdfs:isDefinedBy . +s223:InletConnectionPoint a s223:Class, + sh:NodeShape ; + rdfs:label "Inlet Connection Point"^^xsd:string ; + rdfs:comment "An InletConnectionPoint is a ConnectionPoint for which a Medium is expected to flow into the associated Connectable."^^xsd:string ; + rdfs:subClassOf s223:ConnectionPoint ; + sh:property [ rdfs:comment "If the relation pairedConnectionPoint is present it must associate the InletConnectionPoint with an OutletConnectionPoint."^^xsd:string ; + sh:class s223:OutletConnectionPoint ; + sh:message "s223: If the relation pairedConnectionPoint is present it must associate the InletConnectionPoint with an OutletConnectionPoint."^^xsd:string ; + sh:path s223:pairedConnectionPoint ], + [ rdfs:comment "If the relation mapsTo is present it must associate the InletConnectionPoint with an InletConnectionPoint."^^xsd:string ; + sh:class s223:InletConnectionPoint ; + sh:message "s223: If the relation mapsTo is present it must associate the InletConnectionPoint with an InletConnectionPoint."^^xsd:string ; + sh:path s223:mapsTo ], + [ rdfs:comment "Ensure an InletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; + sh:path s223:mapsTo ; + sh:sparql [ a sh:SPARQLConstraint ; + rdfs:comment "Ensure an InletConnectionPoint has a mapsTo relation to its containing Equipment if it has an external Connection"^^xsd:string ; + sh:message "s223: {$this} must have a mapsTo an InletConnectionPoint of {?parentEquipment} and not an external Connection from {?sourceEquipment}."^^xsd:string ; + sh:prefixes ; + sh:select """ +SELECT $this ?parentEquipment ?sourceEquipment +WHERE { +?equipment s223:hasConnectionPoint $this . +?parentEquipment s223:contains ?equipment . +$this s223:connectsThrough/s223:connectsFrom ?sourceEquipment . +FILTER NOT EXISTS {?parentEquipment s223:contains ?sourceEquipment} . +FILTER NOT EXISTS {$this s223:mapsTo ?anything} . +} +"""^^xsd:string ] ] . + a ns1:Unit ; rdfs:label "Unified Atomic Mass Unit"@en ; dcterms:description "The unified atomic mass unit (symbol: $u$) or dalton (symbol: $Da$) is the standard unit that is used for indicating mass on an atomic or molecular scale (atomic mass). It is defined as one twelfth of the mass of an unbound neutral atom of carbon-12 in its nuclear and electronic ground state,[ and has a value of $1.660538921(73) \\times 10^{-27} kg$. One dalton is approximately equal to the mass of one nucleon; an equivalence of saying $1 g mol^{-1}$. The CIPM have categorised it as a 'non-SI unit' because units values in SI units must be obtained experimentally."^^ns1:LatexString ; @@ -91972,6 +92376,21 @@ $\\nu = 1/T$"""^^ns1:LatexString ; ns1:uneceCommonCode "D43"^^xsd:string ; rdfs:isDefinedBy . +s223:Numerical-Voltage a s223:Class, + s223:Numerical-Voltage, + sh:NodeShape ; + rdfs:label "Dimensioned Voltage"^^xsd:string ; + ns1:hasQuantityKind ; + ns1:hasUnit ; + rdfs:comment "This class has enumerated instances of common voltages."^^xsd:string ; + rdfs:subClassOf s223:EnumerationKind-Numerical ; + sh:property [ rdfs:comment "A Numerical-Voltage must have a unit of Volts"^^xsd:string ; + sh:hasValue ; + sh:path ns1:hasUnit ], + [ rdfs:comment "A Numerical-Voltage must have a Quantity Kind of Voltage"^^xsd:string ; + sh:hasValue ; + sh:path ns1:hasQuantityKind ] . + s223:Equipment a s223:Class, sh:NodeShape ; rdfs:label "Equipment"^^xsd:string ; @@ -91992,14 +92411,10 @@ The graphical depiction of Equipment used in this standard is a rounded cornered ![Graphical Depiction of Equipment.](figures/Figure_5-1Graphical_Depiciton_of_Equipment.svg) """^^xsd:string ; rdfs:subClassOf s223:Connectable ; - sh:property [ rdfs:comment "If the relation hasRole is present it must associate the Equipment with a EnumerationKind-Role."^^xsd:string ; - sh:class s223:EnumerationKind-Role ; - sh:path s223:hasRole ], - [ a sh:PropertyShape ; - rdfs:comment "If the relation contains is present it must associate the Equipment with either Equipment or Junction."^^xsd:string ; - sh:name "device contains shape"^^xsd:string ; - sh:or ( [ sh:class s223:Equipment ] [ sh:class s223:Junction ] ) ; - sh:path s223:contains ], + sh:property [ rdfs:comment "If the relation executes is present it must associate the Equipment with a Function."^^xsd:string ; + sh:class s223:Function ; + sh:message "s223: If the relation executes is present it must associate the Equipment with a Function."^^xsd:string ; + sh:path s223:executes ], [ rdfs:comment "Warning about a subClass of Equipment of type A containing something that is in the same subClass branch."^^xsd:string ; sh:path s223:contains ; sh:severity sh:Warning ; @@ -92026,17 +92441,28 @@ UNION """^^xsd:string ] ], [ rdfs:comment "If the relation hasPhysicalLocation is present it must associate the Equipment with a PhysicalSpace."^^xsd:string ; sh:class s223:PhysicalSpace ; + sh:message "s223: If the relation hasPhysicalLocation is present it must associate the Equipment with a PhysicalSpace."^^xsd:string ; sh:path s223:hasPhysicalLocation ], - [ rdfs:comment "Disallow contained equipment from having external outgoing connections."^^xsd:string ; - sh:path s223:connectedTo ; + [ rdfs:comment "If the relation hasRole is present it must associate the Equipment with a EnumerationKind-Role."^^xsd:string ; + sh:class s223:EnumerationKind-Role ; + sh:message "s223: If the relation hasRole is present it must associate the Equipment with a EnumerationKind-Role."^^xsd:string ; + sh:path s223:hasRole ], + [ a sh:PropertyShape ; + rdfs:comment "If the relation contains is present it must associate the Equipment with either Equipment or Junction."^^xsd:string ; + sh:message "s223: If the relation contains is present it must associate the Equipment with either Equipment or Junction."^^xsd:string ; + sh:name "device contains shape"^^xsd:string ; + sh:or ( [ sh:class s223:Equipment ] [ sh:class s223:Junction ] ) ; + sh:path s223:contains ], + [ rdfs:comment "Disallow contained equipment from having external incoming connections."^^xsd:string ; + sh:path s223:connectedFrom ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Disallow contained equipment from having external outgoing connections."^^xsd:string ; - sh:message "s223: {$this} should not have a connection to external equipment {?otherDev} because {?container} contains {$this}."^^xsd:string ; + rdfs:comment "Disallow contained equipment from having external incoming connections."^^xsd:string ; + sh:message "s223: {$this} should not have a connection from external equipment {?otherDev} because {?container} contains {$this}."^^xsd:string ; sh:prefixes ; sh:select """ SELECT $this ?container ?otherDev WHERE { -$this s223:connectedTo ?otherDev . +$this s223:connectedFrom ?otherDev . $this ^s223:contains ?container . ?container a/rdfs:subClassOf* s223:Equipment . FILTER NOT EXISTS {?container s223:contains ?otherDev .} @@ -92045,71 +92471,55 @@ FILTER NOT EXISTS {?container s223:contains ?otherDev .} [ rdfs:comment """If the relation actuatedByProperty is present it must associate the Equipment with a ActuatableProperty. Note that any Equipment may use this relation, not just Actuator."""^^xsd:string ; sh:class s223:ActuatableProperty ; + sh:message """If the relation actuatedByProperty is present it must associate the Equipment with a ActuatableProperty. +Note that any Equipment may use this relation, not just Actuator."""^^xsd:string ; sh:path s223:actuatedByProperty ], - [ rdfs:comment "Disallow contained equipment from having external incoming connections."^^xsd:string ; - sh:path s223:connectedFrom ; + [ rdfs:comment "Disallow contained equipment from having external outgoing connections."^^xsd:string ; + sh:path s223:connectedTo ; sh:sparql [ a sh:SPARQLConstraint ; - rdfs:comment "Disallow contained equipment from having external incoming connections."^^xsd:string ; - sh:message "s223: {$this} should not have a connection from external equipment {?otherDev} because {?container} contains {$this}."^^xsd:string ; + rdfs:comment "Disallow contained equipment from having external outgoing connections."^^xsd:string ; + sh:message "s223: {$this} should not have a connection to external equipment {?otherDev} because {?container} contains {$this}."^^xsd:string ; sh:prefixes ; sh:select """ SELECT $this ?container ?otherDev WHERE { -$this s223:connectedFrom ?otherDev . +$this s223:connectedTo ?otherDev . $this ^s223:contains ?container . ?container a/rdfs:subClassOf* s223:Equipment . FILTER NOT EXISTS {?container s223:contains ?otherDev .} } -"""^^xsd:string ] ], - [ rdfs:comment "If the relation executes is present it must associate the Equipment with a Function."^^xsd:string ; - sh:class s223:Function ; - sh:path s223:executes ] ; +"""^^xsd:string ] ] ; sh:rule [ a sh:SPARQLRule ; - rdfs:comment "For equipment containing another piece of equipment, use the mapsTo relation to infer a Medium from the contained equipment."^^xsd:string ; + rdfs:comment "For equipment contained within another piece of equipment use the mapsTo relation to infer a Medium from the containing equipment."^^xsd:string ; sh:construct """ CONSTRUCT { - ?parentCp s223:hasMedium ?medium . + ?childCp s223:hasMedium ?medium . } WHERE { $this s223:hasConnectionPoint ?cp . - ?cp s223:mapsTo ?parentCp . + ?childCp s223:mapsTo ?cp . ?cp s223:connectsThrough ?connection . ?cp s223:hasMedium ?medium . - FILTER NOT EXISTS {?parentCp s223:hasMedium ?something} . + FILTER NOT EXISTS {?childCp s223:hasMedium ?something} . } """^^xsd:string ; sh:prefixes ], [ a sh:SPARQLRule ; - rdfs:comment "For equipment contained within another piece of equipment use the mapsTo relation to infer a Medium from the containing equipment."^^xsd:string ; + rdfs:comment "For equipment containing another piece of equipment, use the mapsTo relation to infer a Medium from the contained equipment."^^xsd:string ; sh:construct """ CONSTRUCT { - ?childCp s223:hasMedium ?medium . + ?parentCp s223:hasMedium ?medium . } WHERE { $this s223:hasConnectionPoint ?cp . - ?childCp s223:mapsTo ?cp . + ?cp s223:mapsTo ?parentCp . ?cp s223:connectsThrough ?connection . ?cp s223:hasMedium ?medium . - FILTER NOT EXISTS {?childCp s223:hasMedium ?something} . + FILTER NOT EXISTS {?parentCp s223:hasMedium ?something} . } """^^xsd:string ; sh:prefixes ] . -s223:Numerical-Voltage a s223:Class, - s223:Numerical-Voltage, - sh:NodeShape ; - rdfs:label "Dimensioned Voltage"^^xsd:string ; - ns1:hasQuantityKind ; - ns1:hasUnit ; - rdfs:comment "This class has enumerated instances of common voltages."^^xsd:string ; - rdfs:subClassOf s223:EnumerationKind-Numerical ; - sh:property [ rdfs:comment "A Numerical-Voltage must have a unit of Volts"^^xsd:string ; - sh:hasValue ; - sh:path ns1:hasUnit ], - [ rdfs:comment "A Numerical-Voltage must have a Quantity Kind of Voltage"^^xsd:string ; - sh:hasValue ; - sh:path ns1:hasQuantityKind ] . - s223:NumberOfElectricalPhases-SinglePhase a s223:Class, s223:NumberOfElectricalPhases-SinglePhase, sh:NodeShape ; @@ -92449,7 +92859,7 @@ s223:NumberOfElectricalPhases-SinglePhase a s223:Class, a ns1:Unit ; rdfs:label "US Survey Foot"@en ; - dcterms:description "

The U.S. Survey Foot was officially deprecated on December 31, 2022. For more information see Federal Register (October 5, 2020, 85 FR 62698, p. 62698)"^^rdf:HTML ; + dcterms:description "

The U.S. Survey Foot was officially deprecated on December 31, 2022. For more information see Federal Register (October 5, 2020, 85 FR 62698, p. 62698)

"^^rdf:HTML ; ns1:applicableSystem ; ns1:conversionMultiplier 0.3048006 ; ns1:conversionMultiplierSN 3.048006e-01 ; @@ -93593,6 +94003,54 @@ s223:Frequency-60Hz a s223:Class, ns1:latexDefinition "$T$"^^ns1:LatexString ; rdfs:isDefinedBy . + a ns1:Unit ; + rdfs:label "متر"@ar, + "метър"@bg, + "metr"@cs, + "Meter"@de, + "μέτρο"@el, + "metre"@en, + "Meter"@en-us, + "metro"@es, + "متر"@fa, + "mètre"@fr, + "מטר"@he, + "मीटर"@hi, + "méter"@hu, + "metro"@it, + "メートル"@ja, + "metrum"@la, + "meter"@ms, + "metr"@pl, + "metro"@pt, + "metru"@ro, + "метр"@ru, + "meter"@sl, + "metre"@tr, + "米"@zh ; + dcterms:description "The metric and SI base unit of distance. The 17th General Conference on Weights and Measures in 1983 defined the meter as that distance that makes the speed of light in a vacuum equal to exactly 299 792 458 meters per second. The speed of light in a vacuum, $c$, is one of the fundamental constants of nature. The meter is equal to approximately 1.093 613 3 yards, 3.280 840 feet, or 39.370 079 inches."^^ns1:LatexString ; + ns1:applicableSystem , + , + , + ; + ns1:conversionMultiplier 1.0 ; + ns1:conversionMultiplierSN 1e+00 ; + ns1:dbpediaMatch "http://dbpedia.org/resource/Metre"^^xsd:anyURI ; + ns1:definedUnitOfSystem ; + ns1:hasDimensionVector ; + ns1:hasQuantityKind ; + ns1:iec61360Code "0112/2///62720#UAA726"^^xsd:string, + "0112/2///62720#UAD718"^^xsd:string ; + ns1:informativeReference "http://en.wikipedia.org/wiki/Metre?oldid=495145797"^^xsd:anyURI ; + ns1:omUnit ; + ns1:plainTextDescription "The metric and SI base unit of distance. The meter is equal to approximately 1.093 613 3 yards, 3.280 840 feet, or 39.370 079 inches."^^xsd:string ; + ns1:siExactMatch ; + ns1:symbol "m"^^xsd:string ; + ns1:ucumCode "m"^^ns1:UCUMcs ; + ns1:udunitsCode "m"^^xsd:string ; + ns1:uneceCommonCode "MTR"^^xsd:string ; + rdfs:isDefinedBy . + a owl:Ontology ; owl:imports , , @@ -93604,158 +94062,110 @@ s223:Frequency-60Hz a s223:Class, sh: ; owl:versionInfo "Created with TopBraid Composer", "Created with TopBraid Composer"^^xsd:string ; - sh:declare [ sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; - sh:prefix "rdf"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2001/XMLSchema#"^^xsd:anyURI ; - sh:prefix "xsd"^^xsd:string ], + sh:declare [ a sh:PrefixDeclaration ; + sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; + sh:prefix "quantitykind"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2002/07/owl#"^^xsd:anyURI ; - sh:prefix "owl"^^xsd:string ], + sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; + sh:prefix "skos"^^xsd:string ], [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; sh:prefix "rdfs"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; - sh:prefix "unit"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; - sh:prefix "quantitykind"^^xsd:string ], - [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; - sh:prefix "quantitykind"^^xsd:string ], + sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; + sh:prefix "dcterms"^^xsd:string ], + [ sh:namespace "http://data.ashrae.org/standard223/1.0/vocab/role#"^^xsd:anyURI ; + sh:prefix "role"^^xsd:string ], [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; sh:prefix "s223"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; - sh:prefix "sh"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; - sh:prefix "rdf"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; - sh:prefix "rdfs"^^xsd:string ], + sh:namespace "http://www.w3.org/2002/07/owl#"^^xsd:anyURI ; + sh:prefix "owl"^^xsd:string ], + [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:prefix "qudt"^^xsd:string ], + [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:prefix "qudt"^^xsd:string ], [ a sh:PrefixDeclaration ; sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; sh:prefix "quantitykind"^^xsd:string ], + [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223"^^xsd:string ], + [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; + sh:prefix "s223"^^xsd:string ], [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; sh:prefix "rdfs"^^xsd:string ], - [ sh:namespace "http://data.ashrae.org/standard223/1.0/vocab/role#"^^xsd:anyURI ; - sh:prefix "role"^^xsd:string ], - [ sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; - sh:prefix "rdf"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; - sh:prefix "qudt"^^xsd:string ], + sh:namespace "http://www.w3.org/2002/07/owl#"^^xsd:anyURI ; + sh:prefix "owl"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; - sh:prefix "skos"^^xsd:string ], + sh:namespace "http://qudt.org/vocab/dimensionvector/"^^xsd:anyURI ; + sh:prefix "qkdv"^^xsd:string ], [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; sh:prefix "sh"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; sh:prefix "rdfs"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; - sh:prefix "dcterms"^^xsd:string ], + sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; + sh:prefix "skos"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; - sh:prefix "rdf"^^xsd:string ], - [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; sh:prefix "qudt"^^xsd:string ], - [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; - sh:prefix "rdfs"^^xsd:string ], - [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; - sh:prefix "s223"^^xsd:string ], - [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; - sh:prefix "sh"^^xsd:string ], - [ sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; - sh:prefix "unit"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2002/07/owl#"^^xsd:anyURI ; - sh:prefix "owl"^^xsd:string ], + sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; + sh:prefix "rdf"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; - sh:prefix "unit"^^xsd:string ], + sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; + sh:prefix "dcterms"^^xsd:string ], [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; sh:prefix "s223"^^xsd:string ], [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; sh:prefix "s223"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; - sh:prefix "skos"^^xsd:string ], - [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; - sh:prefix "qudt"^^xsd:string ], + [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; + sh:prefix "qudtqk"^^xsd:string ], [ a sh:PrefixDeclaration ; sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; sh:prefix "qudt"^^xsd:string ], - [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; - sh:prefix "s223"^^xsd:string ], + [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; - sh:prefix "dcterms"^^xsd:string ], + sh:namespace "http://www.w3.org/2001/XMLSchema#"^^xsd:anyURI ; + sh:prefix "xsd"^^xsd:string ], [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; sh:prefix "qudt"^^xsd:string ], [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/dimensionvector/"^^xsd:anyURI ; - sh:prefix "qkdv"^^xsd:string ], - [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; sh:prefix "rdfs"^^xsd:string ], - [ a sh:PrefixDeclaration ; - sh:namespace "http://qudt.org/vocab/dimensionvector/"^^xsd:anyURI ; - sh:prefix "qkdv"^^xsd:string ], - [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; - sh:prefix "qudtqk"^^xsd:string ], [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; sh:prefix "qudt"^^xsd:string ], + [ sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; + sh:prefix "rdf"^^xsd:string ], + [ sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; + sh:prefix "unit"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; + sh:prefix "unit"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs"^^xsd:string ], + [ sh:namespace "http://qudt.org/vocab/quantitykind/"^^xsd:anyURI ; + sh:prefix "quantitykind"^^xsd:string ], + [ sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; + sh:prefix "rdf"^^xsd:string ], + [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; + sh:prefix "sh"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; + sh:prefix "rdf"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; + sh:prefix "sh"^^xsd:string ], [ sh:namespace "http://data.ashrae.org/standard223#"^^xsd:anyURI ; - sh:prefix "s223"^^xsd:string ] . - - a ns1:Unit ; - rdfs:label "متر"@ar, - "метър"@bg, - "metr"@cs, - "Meter"@de, - "μέτρο"@el, - "metre"@en, - "Meter"@en-us, - "metro"@es, - "متر"@fa, - "mètre"@fr, - "מטר"@he, - "मीटर"@hi, - "méter"@hu, - "metro"@it, - "メートル"@ja, - "metrum"@la, - "meter"@ms, - "metr"@pl, - "metro"@pt, - "metru"@ro, - "метр"@ru, - "meter"@sl, - "metre"@tr, - "米"@zh ; - dcterms:description "The metric and SI base unit of distance. The 17th General Conference on Weights and Measures in 1983 defined the meter as that distance that makes the speed of light in a vacuum equal to exactly 299 792 458 meters per second. The speed of light in a vacuum, $c$, is one of the fundamental constants of nature. The meter is equal to approximately 1.093 613 3 yards, 3.280 840 feet, or 39.370 079 inches."^^ns1:LatexString ; - ns1:applicableSystem , - , - , - ; - ns1:conversionMultiplier 1.0 ; - ns1:conversionMultiplierSN 1e+00 ; - ns1:dbpediaMatch "http://dbpedia.org/resource/Metre"^^xsd:anyURI ; - ns1:definedUnitOfSystem ; - ns1:hasDimensionVector ; - ns1:hasQuantityKind ; - ns1:iec61360Code "0112/2///62720#UAA726"^^xsd:string, - "0112/2///62720#UAD718"^^xsd:string ; - ns1:informativeReference "http://en.wikipedia.org/wiki/Metre?oldid=495145797"^^xsd:anyURI ; - ns1:omUnit ; - ns1:plainTextDescription "The metric and SI base unit of distance. The meter is equal to approximately 1.093 613 3 yards, 3.280 840 feet, or 39.370 079 inches."^^xsd:string ; - ns1:siExactMatch ; - ns1:symbol "m"^^xsd:string ; - ns1:ucumCode "m"^^ns1:UCUMcs ; - ns1:udunitsCode "m"^^xsd:string ; - ns1:uneceCommonCode "MTR"^^xsd:string ; - rdfs:isDefinedBy . + sh:prefix "s223"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://qudt.org/vocab/unit/"^^xsd:anyURI ; + sh:prefix "unit"^^xsd:string ], + [ a sh:PrefixDeclaration ; + sh:namespace "http://qudt.org/vocab/dimensionvector/"^^xsd:anyURI ; + sh:prefix "qkdv"^^xsd:string ] . a ns1:SystemOfUnits ; rdfs:label "CGS System of Units ESU"@en ; @@ -93809,32 +94219,23 @@ s223:Electricity-AC a s223:Class, s223:hasVoltage s223:Numerical-Voltage ; rdfs:comment "This class has enumerated instances of all AC forms of electricity."^^xsd:string ; rdfs:subClassOf s223:Constituent-Electricity ; - sh:property [ rdfs:comment "An electricity AC medium must have a number of electrical phases."^^xsd:string ; + sh:property [ rdfs:comment "An electricity AC medium must have a frequency"^^xsd:string ; + sh:class s223:Numerical-Frequency ; + sh:minCount 1 ; + sh:path s223:hasFrequency ], + [ rdfs:comment "An electricity AC medium must have a number of electrical phases."^^xsd:string ; sh:class s223:Numerical-NumberOfElectricalPhases ; sh:minCount 1 ; sh:path s223:hasNumberOfElectricalPhases ], [ rdfs:comment "An electricity AC medium must have a voltage."^^xsd:string ; sh:minCount 1 ; sh:or ( [ sh:class s223:Numerical-LineLineVoltage ] [ sh:class s223:Numerical-LineNeutralVoltage ] [ sh:class s223:Numerical-Voltage ] ) ; - sh:path s223:hasVoltage ], - [ rdfs:comment "An electricity AC medium must have a frequency"^^xsd:string ; - sh:class s223:Numerical-Frequency ; - sh:minCount 1 ; - sh:path s223:hasFrequency ] . - -s223:hasMedium a rdf:Property ; - rdfs:label "has Medium"^^xsd:string ; - rdfs:comment "The relation hasMedium is used to indicate what medium is flowing through the connection (e.g., air, water, electricity). The possible values are defined in EnumerationKind-Medium (see `s223:EnumerationKind-Medium`)."^^xsd:string . + sh:path s223:hasVoltage ] . rdfs:label "QUDT SHACL Schema Supplement Version 2.1.41"^^xsd:string ; ns2:hasGraphMetadata ns2:GMD_SHACLQUDTOVERLAY-SCHEMA ; rdfs:comment "Supplements the generated SHACL Schema with constructs not expressible in the QUDT OWL Ontology"^^xsd:string . -s223:hasConnectionPoint a rdf:Property ; - rdfs:label "has connection point"^^xsd:string ; - s223:inverseOf s223:isConnectionPointOf ; - rdfs:comment "The relation hasConnectionPoint is part of a pair of relations that bind a Connectable thing to a ConnectionPoint. It is the inverse of the relation isConnectionPointOf (see `s223:isConnectionPointOf`)."^^xsd:string . - a ns1:QuantityKind ; rdfs:label "Volume per Unit Time"@en ; ns1:applicableUnit , @@ -94134,6 +94535,10 @@ s223:hasConnectionPoint a rdf:Property ; ns1:latexDefinition "$L^-6 M T $"^^ns1:LatexString ; rdfs:isDefinedBy . +s223:hasMedium a rdf:Property ; + rdfs:label "has Medium"^^xsd:string ; + rdfs:comment "The relation hasMedium is used to indicate what medium is flowing through the connection (e.g., air, water, electricity). The possible values are defined in EnumerationKind-Medium (see `s223:EnumerationKind-Medium`)."^^xsd:string . + a ns1:QuantityKind ; rdfs:label "طول"@ar, "Дължина"@bg, @@ -94207,6 +94612,11 @@ s223:hasConnectionPoint a rdf:Property ; ns1:symbol "l"^^xsd:string ; rdfs:isDefinedBy . +s223:hasConnectionPoint a rdf:Property ; + rdfs:label "has connection point"^^xsd:string ; + s223:inverseOf s223:isConnectionPointOf ; + rdfs:comment "The relation hasConnectionPoint is part of a pair of relations that bind a Connectable thing to a ConnectionPoint. It is the inverse of the relation isConnectionPointOf (see `s223:isConnectionPointOf`)."^^xsd:string . + a ns1:QuantityKindDimensionVector_CGS, ns1:QuantityKindDimensionVector_ISO, ns1:QuantityKindDimensionVector_Imperial, @@ -95412,7 +95822,7 @@ FILTER (NOT EXISTS {$this rdfs:comment ?something}) . a ns1:SystemOfUnits ; rdfs:label "CGS System of Units"@en ; - dcterms:description "

The centimetre-gram-second system (abbreviated CGS or cgs) is a variant of the metric system of physical units based on centimetre as the unit of length, gram as a unit of mass, and second as a unit of time. All CGS mechanical units are unambiguously derived from these three base units, but there are several different ways of extending the CGS system to cover electromagnetism. The CGS system has been largely supplanted by the MKS system, based on metre, kilogram, and second. Note that the term cgs is ambiguous, since there are several variants with conflicting definitions of electromagnetic quantities and units. The unqualified term is generally associated with the Gaussian system of units, so this more precise URI is preferred."^^rdf:HTML ; + dcterms:description "

The centimetre-gram-second system (abbreviated CGS or cgs) is a variant of the metric system of physical units based on centimetre as the unit of length, gram as a unit of mass, and second as a unit of time. All CGS mechanical units are unambiguously derived from these three base units, but there are several different ways of extending the CGS system to cover electromagnetism. The CGS system has been largely supplanted by the MKS system, based on metre, kilogram, and second. Note that the term cgs is ambiguous, since there are several variants with conflicting definitions of electromagnetic quantities and units. The unqualified term is generally associated with the Gaussian system of units, so this more precise URI is preferred.

"^^rdf:HTML ; ns1:abbreviation "CGS"^^xsd:string ; ns1:dbpediaMatch "http://dbpedia.org/resource/Centimetre_gram_second_system_of_units"^^xsd:anyURI ; ns1:hasBaseUnit ,