Part 8 compliance

latest update 2022-11-06 

Introduction

It has been debated whether the implementation of ISO 15926-8, as set forth in the Topics on this website, is in line with same Part 8. In this topic the code at both sides will be compared. It will show that the code in these Topics is compliant. It also has been tested with the Manchester OWL Validator and proved to be in the profile of OWL2.

Where there are differences these are being discussed and justified.

Map

The following diagram shows the relationships between the various ontologies.

Code comparison

The following codes are being compared:

Declarations

In Part 8 declarations can only found in the normative file 'Part8_sample_instances.owl', attached to the standard, with code such as:

    <owl:Thing rdf:about="#1-WG-002">
        <rdf:type rdf:resource="&RDL;PipingNetworkSystem"/>
        <rdfs:label>1-WG-002</rdfs:label>
    </owl:Thing>

This, however, is not enough, because it does not define whether 1-WG-002 is either a PhysicalObject, or wether or not it is a WholeLifeIndividual and/or whether it is an ActualIndividual or a NonActualIndividual.

In ISO 15926 declaring objects means that the objects are typed with one or more applicable ISO 15926-2 entity types, thus firmly typing these objects. The above Part 8 declaration has been made more precise:

	:fe521d6a-dd6f-4f48-9980-4e45c84beb81
		rdf:type dmlPhysicalObject, dm:WholeLifeIndividual, lci:NonActualIndividual, rdl:RDS270359  ; # PIPING NETWORK SYSTEM
		rdfs:label "1-WG-002" ;
    		meta:valEffectiveDate "2015-06-24T21:36:00Z"^^xsd:dateTime .

Justification of differences

Since identifiers may change and the dm:Thing.ID shall be immutable, the object with its UUID is declared as instance of one or more Part 2 entity types and then that object then gets some label, such as a tag number.
For further details see the Topic Declaring a Tag, a Stream, and a Commodity Product

Template definitions in OWL

In the normative file Part8_sample_tpl.owl, attached to Part 8, the following example of an OWL listing defining one template can be found:

    <owl:Class rdf:about="#ClassifiedAssemblyOfIndividual">
        <rdfs:subClassOf rdf:resource="&p7tm;BaseTemplateStatement"/>
        <rdfs:subClassOf>
            <owl:Class>
                <owl:intersectionOf rdf:parseType="Collection">
                    <owl:Restriction>
                        <owl:onProperty rdf:resource="#hasAssemblyType"/>
                        <owl:allValuesFrom rdf:resource="&dm;ClassOfAssemblyOfIndividual"/>
                    </owl:Restriction>
                    <owl:Restriction>
                        <owl:onProperty rdf:resource="#hasAssemblyType"/>
                        <owl:onClass rdf:resource="&dm;ClassOfAssemblyOfIndividual"/>
                        <owl:qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:qualifiedCardinality>
                    </owl:Restriction>
                </owl:intersectionOf>
            </owl:Class>
        </rdfs:subClassOf>
        <rdfs:subClassOf>
            <owl:Class>
                <owl:intersectionOf rdf:parseType="Collection">
                    <owl:Restriction>
                        <owl:onProperty rdf:resource="&p7tpl;hasWhole"/>
                        <owl:allValuesFrom rdf:resource="&dm;ArrangedIndividual"/>
                    </owl:Restriction>
                    <owl:Restriction>
                        <owl:onProperty rdf:resource="&p7tpl;hasWhole"/>
                        <owl:onClass rdf:resource="&dm;ArrangedIndividual"/>
                        <owl:qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:qualifiedCardinality>
                    </owl:Restriction>
                </owl:intersectionOf>
            </owl:Class>
        </rdfs:subClassOf>
        <rdfs:subClassOf>
            <owl:Class>
                <owl:intersectionOf rdf:parseType="Collection">
                    <owl:Restriction>
                        <owl:onProperty rdf:resource="&p7tpl;hasPart"/>
                        <owl:allValuesFrom rdf:resource="&dm;PossibleIndividual"/>
                    </owl:Restriction>
                    <owl:Restriction>
                        <owl:onProperty rdf:resource="&p7tpl;hasPart"/>
                        <owl:onClass rdf:resource="&dm;PossibleIndividual"/>
                        <owl:qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:qualifiedCardinality>
                    </owl:Restriction>
                </owl:intersectionOf>
            </owl:Class>
        </rdfs:subClassOf>
        <rdfs:comment>This template is set up to match the pattern of ClassifiedIdentification, as defined in P7.
            Signature for ClassifiedAssemblyOfIndividual:
            | 1 | Part    | dm:PossibleIndividual       |
            | 2 | Whole   | dm:ArrangedIndividual       |
            | 3 | Context | dm:ClassOfAssemblyOfIndividual |
        </rdfs:comment>
        <rdfs:comment>Template axiom:
            ClassifiedAssemblyOfIndividual( x1, x2, x3 ) <->
            PossibleIndividual( x1 ) &
            ArrangedIndividual( x2 ) &
            ClassOfAssemblyOfIndividual( x3 ) &
            exists y ( AssemblyOfIndividualTriple( y, x1, x2 ) &
            ClassificationOfRelationship( y, x3 ) .
        </rdfs:comment>
    </owl:Class>
    <owl:Thing rdf:about="#TemplateDescription_of_ClassifiedAssemblyOfIndividual">
        <rdf:type rdf:resource="&p7tm;TemplateDescription"/>
        <rdfs:label>TemplateDescription_of_ClassifiedAssemblyOfIndividual</rdfs:label>
    <p7tm:valNumberOfRoles rdf:datatype="&xsd;integer">3</p7tm:valNumberOfRoles>
    <p7tm:hasTemplate rdf:resource="#ClassifiedAssemblyOfIndividual"/>
    </owl:Thing>
    <owl:Thing rdf:about="#TemplateRoleDescription_of_ClassifiedAssemblyOfIndividual_1">
        <rdf:type rdf:resource="p7tm:TemplateRoleDescription"/>
        <rdfs:label>TemplateRoleDescription_of_ClassifiedAssemblyOfIndividual_1</rdfs:label>
    <p7tm:valRoleIndex rdf:datatype="&xsd;integer">1</p7tm:valRoleIndex>
    <p7tm:hasRoleFillerType rdf:resource="&dm;PossibleIndividual"/>
    <p7tm:hasTemplate rdf:resource="#ClassifiedAssemblyOfIndividual"/>
    <p7tm:hasRole rdf:resource="&p7tpl;hasPart"/>
    </p7tm:TemplateRoleDescription>
    <owl:Thing rdf:about="#TemplateRoleDescription_of_ClassifiedAssemblyOfIndividual_2">
        <rdf:type rdf:resource="&p7tm;TemplateRoleDescription"/>
        <rdfs:label>TemplateRoleDescription_of_ClassifiedAssemblyOfIndividual_2</rdfs:label>
    <p7tm:valRoleIndex rdf:datatype="&xsd;integer">2</p7tm:valRoleIndex>
    <p7tm:hasRoleFillerType rdf:resource="&dm;ClassOfIndividual"/>
    <p7tm:hasTemplate rdf:resource="#ClassifiedAssemblyOfIndividual"/>
    <p7tm:hasRole rdf:resource="&p7tpl;hasWhole"/>
    </owl:Thing>
    <owl:Thing rdf:about="#TemplateRoleDescription_of_ClassifiedAssemblyOfIndividual_3">
        <rdf:type rdf:resource="&p7tm;TemplateRoleDescription"/>
        <rdfs:label>TemplateRoleDescription_of_ClassifiedAssemblyOfIndividual_3</rdfs:label>
    <p7tm:valRoleIndex rdf:datatype="&xsd;integer">3</p7tm:valRoleIndex>
    <p7tm:hasRoleFillerType rdf:resource="&dm;ClassOfAssemblyOfIndividual"/>
    <p7tm:hasTemplate rdf:resource="#ClassifiedAssemblyOfIndividual"/>
    <p7tm:hasRole rdf:resource="#hasAssemblyType"/>
    </owl:Thing>

At present the templates have been defined in Template Specifications and are, based on these human-readable specifications automatically represented in OWL such as in the following code (non-used meta data fields are omitted here):

:ClassifiedAssemblyOfIndividual rdf:type :TemplateForStructureOfIndividual, owl:Class ;
    owl:equivalentClass tm:TM_ClassifiedAssemblyOfIndividual ;
    rdfs:label "ClassifiedAssemblyOfIndividual"@en ;
    rdfs:isDefinedBy  ;
    skos:definition "PossibleIndividual [hasWhole] has PossibleIndividual [hasPart] as a part in an assembly, and this assembly is of the type [hasAssemblyType]."@en ;
    dc:description "A temporal part of an instance of PossibleIndividual is a 'part' in an assembly with a temporal part of another instance of PossibleIndividual as the 'whole', 
			and that assembly is validated against an instance of ClassOfAssemblyOfIndividual."@en ;
    skos:example "myImpeller is a part of myPump, and that is validated against the instance of ClassOfAssemblyOfIndividual that defines that centrifugal pumps have one or more impellers."@en ;
    :valFOLCode """ClassifiedAssemblyOfIndividual(x1, x2, x3) <->
        PossibleIndividual(x1) &
        PossibleIndividual(x2) &
        ClassOfAssemblyOfIndividual(x3) &
        exists u1 exists u2 exists u3 exists u4 exists u5(
              TemporalWholePartTemplate(u1,x1) &
              PossibleIndividual(u1) &
              TemporalWholePartTemplate(u3, x2) &
              PossibleIndividual(u3) &
              ClassificationTemplate(u2, x3) &
              AssemblyOfIndividualTriple(u2, u3, u1) &
              BeginningTemplate(u4, u1) &
              BeginningTemplate(u4, u3) &
              PointInTime(u4) &
              ClassOfIdentificationTemplate(u5, u4) &
              RepresentationOfGregorianDateAndUtcTime(u5)) ."""@en
        owl:versionInfo "MMT APPROVED"@en ;
        meta:valEffectiveDate "2016-07-25T18:55:49+00:00"^^xsd:dateTime ;
        :defaultID "R655F88D49A254262BE773EF3EDA61CEF" ;
        skos:note "At instantiation of this template it is mandatory to add meta:valEffectiveDate with the dateTime that the represented information became effective." ;
        skos:scopeNote "At time of mapping to OWL the value of meta:valEffectiveDate shall be given, as xsd:dateTime, to the RepresentationOfGregorianDateAndUtcTime in an on-the-fly 
			created instance of the template ActivityCausesTwoRelatedBegunIndividuals that is subsequently linked to the temporal part PossibleIndividual(u1) and 
			PossibleIndividual(u2) in this template."@en ;
    # The code below shall only be used when applicable
    #   rdfs:subclassOf :XXXXX ; # Name of superclass template, only for specializations
    #   skos:altLabel "[for synonyms and for translations]"@en ;
    #   meta:hasRule "[code of applicable rule]" ;
    #   meta:hasAccessCode "[applicable access code]" ;
    #   meta:hasStatus "[use ISO codes]" ;
    #   meta:valDeprecationDate ""^^xsd:dateTime ;
    #   skos:exactMatch  ;
    #   meta:hasUnresolvedIssues "[description of issue]" ;
    #   skos:editorialNote "[used to be Admin Note]" ;
    #   meta:valChangeDate "[dateTime]"^^xsd:dateTime ;
    #   skos:changeNote ""@en ;
    # down to here.
    # PROPERTY RESTRICTIONS
        rdfs:subClassOf
            [ a owl:Restriction ;
                owl:onProperty :hasWhole ;
                owl:allValuesFrom dm:PossibleIndividual ],
            [ a owl:Restriction ;
                owl:onProperty :hasWhole ;
                owl:Cardinality "1"^^xsd:nonNegativeInteger ],
            [ a owl:Restriction ;
                owl:onProperty :hasPart ;
                owl:allValuesFrom dm:PossibleIndividual ],
            [ a owl:Restriction ;
                owl:onProperty :hasPart ;
                owl:Cardinality "1"^^xsd:nonNegativeInteger ],
            [ a owl:Restriction ;
                owl:onProperty :hasAssemblyType ;
                owl:allValuesFrom dm:ClassOfAssemblyOfIndividual ],
            [ a owl:Restriction ;
                owl:onProperty :hasAssemblyType ;
                owl:Cardinality "1"^^xsd:nonNegativeInteger ].
    # META TEMPLATES TO ISO 15926-8
    :TemplateDescription_of_ClassifiedAssemblyOfIndividual
        rdf:type tm:TemplateDescription, owl:Thing ;
        rdfs:label "TemplateDescription_of_ClassifiedAssemblyOfIndividual" ;
        tm:valNumberOfRoles 3 ;
        tm:hasTemplate :ClassifiedAssemblyOfIndividual .
    :TemplateRoleDescription_of_ClassifiedAssemblyOfIndividual_1
        rdf:type tm:TemplateRoleDescription, owl:Thing ;
        rdfs:label "(1) hasWhole " ;
        tm:valRoleIndex 1 ;
        tm:hasRole :hasWhole ;
        tm:hasRoleFillerType dm:PossibleIndividual ;
        tm:hasTemplate :ClassifiedAssemblyOfIndividual .
    :TemplateRoleDescription_of_ClassifiedAssemblyOfIndividual_2
        rdf:type tm:TemplateRoleDescription, owl:Thing ;
        rdfs:label "(2) hasPart " ;
        tm:valRoleIndex 2 ;
        tm:hasRole :hasPart ;
        tm:hasRoleFillerType dm:PossibleIndividual ;
        tm:hasTemplate :ClassifiedAssemblyOfIndividual .
    :TemplateRoleDescription_of_ClassifiedAssemblyOfIndividual_3
        rdf:type tm:TemplateRoleDescription, owl:Thing ;
        rdfs:label "(3) hasAssemblyType " ;
        tm:valRoleIndex 3 ;
        tm:hasRole :hasAssemblyType ;
        tm:hasRoleFillerType dm:ClassOfAssemblyOfIndividual ;
        tm:hasTemplate :ClassifiedAssemblyOfIndividual .

Justification of differences

The OWL code defines the signature of the lowered template. In both cases it is, in essence, identical.

Template definitions in FOL

Embedded in above template definition Part 8 represents this as follows:

      ClassifiedAssemblyOfIndividual( x1, x2, x3 ) <->
      PossibleIndividual( x1 ) &
      ArrangedIndividual( x2 ) &
      ClassOfAssemblyOfIndividual( x3 ) &
      exists y ( AssemblyOfIndividualTriple( y, x1, x2 ) &
      ClassificationOfRelationship( y, x3 ) .

In the present template specifications this is:In the present template specifications this is:

	ClassifiedAssemblyOfIndividual(hasWhole, hasPart, hasAssemblyType) <->
	PossibleIndividual(hasWhole) &
	PossibleIndividual(hasPart) &
	ClassOfAssemblyOfIndividual(hasAssemblyType) &
	exists u1 exists u2 exists u3 exists u4 exists u5(
	      TemporalWholePartTemplate(u1,hasWhole) &
	      PossibleIndividual(u1) &
	      TemporalWholePartTemplate(u3, hasPart) &
	      PossibleIndividual(u3) &
	      ClassificationTemplate(u2, hasAssemblyType) &
	      AssemblyOfIndividualTriple(u2, u3, u1) &
	      BeginningTemplate(u4, u1) &
	      BeginningTemplate(u4, u3) &
	      PointInTime(u4) &
	      ClassOfIdentificationTemplate(u5, u4) &
	      RepresentationOfGregorianDateAndUtcTime(u5)) .

Justification of differences

There are two main differences:

  1. In the present templates for PossibleIndividual include temporal parts, as is prescribed by Part 7; it then has been decided to leave the valStartTime role out of the signature and replace that with meta:valEffectiveDate with a method to include that startTime again in the lifted template. Reason for that decision was the problem that the software suppliers had with temporal parts, and that all declared objects and all declared template instances have the same method of placing them in time, which makes SPARQL queries simpler.
  2. The Part 8 FOL listings, like this one, often are a concatenation of smaller templates, and thus depended on subsequent expanding, where the present FOL listings are already expanded, except for the prototemplates.

Template instances in RDF

In the normative file Part8_sample_instances.owl, attached to Part 8, the following example can be found for a template for Class:

    <tpl:AssemblyRelation rdf:about="#sample_statement_AssemblyRelation_PipingSegment">
        <rdf:type rdf:resource="&owl;Thing"/>
        <rdfs:label>PipingSegment_statement</rdfs:label>
        <tpl:valMinimumCardinalityOfPart rdf:datatype="&xsd;double">1</tpl:valMinimumCardinalityOfPart>
        <tpl:valMinimumCardinalityOfWhole rdf:datatype="&xsd;double">1</tpl:valMinimumCardinalityOfWhole>
        <tpl:valMaximumCardinalityOfWhole rdf:datatype="&xsd;double">1</tpl:valMaximumCardinalityOfWhole>
        <tpl:valMaximumCardinalityOfPart rdf:datatype="&xsd;double">INF</tpl:valMaximumCardinalityOfPart>
        <p7tpl:hasClassOfPart rdf:resource="&RDL;PipingNetworkSegment"/>
        <p7tpl:hasClassOfWhole rdf:resource="&RDL;PipingNetworkSystem"/>
        <tpl:hasAssemblyType rdf:resource="&RDL;PipingNetworkSystemHasSegment"/>
    </tpl:AssemblyRelation>

There is no counterpart for this at present, since above listing is incorrect as far as the modeling is concerned unless &RDL;PipingNetworkSystemHasSegment would be at ClassOfClass level, which is not the case, because in the file Part8_sample_RDL.owl is stated:

    <owl:Class rdf:about="#PipingNetworkSystemHasSegment">
        <meta:annUniqueName>PipingNetworkSystemHasSegment</meta:annUniqueName>
        <rdfs:subClassOf rdf:resource="&dm;AssemblyOfIndividual"/>
        <rdfs:comment>Sample class for AssemblyRelation example.</rdfs:comment>
    </owl:Class>

At present this "Assembly Type" would be represented in the RDL as an instance of dm:ClassOfAssemblyOfIndividual:

ex:9fc22f6a-93f4-4187-897d-766569d08d87
      rdf:type tpl:ClassOfAssemblyDefinition ;
      rdfs:label "[ONE TO ONE] member(s) of [FLUID SYSTEM] class [PIPING NETWORK SYSTEM] have [ZERO TO MANY] member(s) of [FLUID CONDUCTOR] class [PIPING NETWORK SEGMENT] 
		as parts in an assembly"@en ;
      tpl:hasClassOfWhole rdl:RDS270359 ; # PIPING NETWORK SYSTEM
      tpl:hasClassOfPart rdl:RDS267704  ; # PIPING NETWORK SEGMENT
      tpl:hasDefined ex:1692afae-275d-4d7b-93c0-6d6fce30a6b6 ; # for classification of AssemblyOfIndividual
      tpl:hasCardinalityOfWhole rdl:RDS222625 ; # ONE TO ONE
      tpl:hasCardinalityOfPart rdl:RDS999900700 ; # ZERO TO MANY
      meta:valEffectiveDate "2021-12-13T11:18:00Z"^^dateTime .

At the level of PossibleIndividual the template in Part 8 looks like:

    <tpl:PipingNetworkSystemHasSegment rdf:about="#sample_statement_PipingNetworkHasSegment_006">
        <rdf:type rdf:resource="&owl;Thing"/>
        <rdfs:label>sample_statement_PipingNetworkHasSegments_006</rdfs:label>
        <rdfs:comment>Example taken from AssemblyRelation.ppt, slide 10.</rdfs:comment>
        <p7tpl:hasWhole rdf:resource="#1-WG-002"/>
        <p7tpl:hasPart rdf:resource="#1-WG-002-01"/>
        <tpl:hasAssemblyType rdf:resource="&RDL;PipingNetworkSystemHasSegment"/>
    </tpl:PipingNetworkSystemHasSegment>

and at present:

ex:e70e5fea-f44e-4d02-8f89-23c743c7eb40
      rdf:type tpl:AssemblyOfAnIndividual ;
      rdfs:label "[FLUID SYSTEM] individual [1-WG-002] has [FLUID CONDUCTOR] individual [1-WG-002-01] as a part in an assembly"@en ;
      tpl:hasWhole ex:ab63e420-d1df-4543-8514-619e839d734b ; # 1-WG-002
      tpl:hasPart ex:1617015f-69dd-4262-a762-47ed5574d27e ; # 1-WG-002-01
      meta:valEffectiveDate "2021-01-14T17:26:00Z"^^xsd:dateTime .

Justification of differences

The three main differences are:

  1. in the Part 8 example there is no indication about the effectivity, where at present there is;
  2. in Part 8 the instances of dm:Cardinality have been expanded to its two attributes end_1_cardinality and end-2_cardinality in the RDF code, where at present simply a reference is made to the applicable instance of dm:Cardinality.
  3. Where in Part 8 a template has been used for "Piping Network System has Segment", at present the applicable subtype of dm:ClassOfRelationship is being instantiated (refer to above RDS4873922 rdf:type dm:ClassOfAssemblyOfIndividual, owl:Class ; ).

Reference Data Library - declarations

In the normative file Part8_sample_RDL.owl, attached to Part 8, the following declaration can be found:

    <owl:Class rdf:about="#PipingNetworkSegment">
        <meta:annUniqueName>PipingNetworkSegment</meta:annUniqueName>
        <rdfs:subClassOf rdf:resource="&dm;PossibleIndividual"/>
    </owl:Class>

In the present RDL this is::

    :RDS267704 rdf:type dm:ClassOfInanimatePhysicalObject ;
        rdfs:subclassOf :RDS13016965, RDS778336331 ; # SEGMENT, FLUID CONDUCTOR
        rdfs:label "PIPING NETWORK SEGMENT" ;
	 skos:definition "A  is a  and a  of a  that is piping limited by a Node and a Break, Node and Connector, two Nodes, two Breaks, two Connectors 
		or a Break and a Connector. The last five providing there are no Breaks or Connectors in between. In the last three cases the Segment will coincide with a Piping Branch"@en ;
        meta:valEffectiveDate "2015-06-24T21:36:00Z"^^xsd:dateTime .

Justification of differences

Since Part 8 was published the development of the RDL progressed. The Part 8 code is not incorrect, but less precise (it was not meant to be that precise, but only declared for use in an example). Refer to the Topic "How does pump P-101 fit in?".

Reference Data Library - templates

In Annex H of Part 8 the following example of a template, as used in the RDL, can be found:

    <rdl:IdentificationOfPhysicalObject-processplant rdf:ID="#t100101">
        <meta:annUniqueName rdf:datatype="&xsd;string">pcs125425 identified by process plant B14 since 2009-12-16T14:28:00Z</meta:annUniqueName>
        <meta:annRule rdf:datatype="&xsd;string">#com1_26539436548</meta:annRule>
        <meta:annAccessCode rdf:datatype="&xsd;string">#com1_836379</meta:annAccessCode>
        <p7tpl:hasWhole rdf:resource="#pcs125425"/>
        <p7tpl:hasPart rdf:resource="#pcs125789"/>
        <p7tpl:valStartTime rdf:datatype="&xsd;dateTime">2009-12-16T14:28:00Z</p7tpl:valStartTime>
        <p7tpl:hasContext rdf:resource="&rdl;ProcessPlantName"/>
        <p7tpl:valIdentifier rdf:datatype="&xsd;string">B14</p7tpl:valIdentifier>
    </rdl:IdentificationOfPhysicalObject-processplant>

At present this template does not exist, but if it could, if required

Lifecycle Information in RDF

The lifecycle information is following the same rules as above. A composite example of the Part 8 representation and the present representation is shown below.

In Part 8:

    <owl:Thing rdf:about="#1-WG-002">
        <rdf:type rdf:resource="&RDL;PipingNetworkSystem"/>
        <rdfs:label>1-WG-002</rdfs:label>
    </owl:Thing>

    <owl:Thing rdf:about="#1-WG-002-01">
        <rdf:type rdf:resource="&RDL;PipingNetworkSystem"/>
        <rdfs:label>1-WG-002-01</rdfs:label>
    </owl:Thing>

    <tpl:PipingNetworkSystemHasSegment rdf:about="#sample_statement_PipingNetworkHasSegment_006">
        <rdf:type rdf:resource="&owl;Thing"/>
        <rdfs:label>sample_statement_PipingNetworkHasSegments_006</rdfs:label>
        <rdfs:comment>Example taken from AssemblyRelation.ppt, slide 10.</rdfs:comment>
        <p7tpl:hasWhole rdf:resource="#1-WG-002"/>
        <p7tpl:hasPart rdf:resource="#1-WG-002-01"/>
        <tpl:hasAssemblyType rdf:resource="&RDL;PipingNetworkSystemHasSegment"/>
    </tpl:PipingNetworkSystemHasSegment>

and at present:

# Declaring a Piping Network System
: rdf:type dm:FunctionalPhysicalObject, dm:WholeLifeIndividual, dm:ArrangedIndividual, owl:Thing, rdl:RDS270359  ; # PIPING NETWORK SYSTEM
    rdfs:label "1-WG-002" ;
    meta:valEffectiveDate "2015-06-24T21:36:00Z"^^xsd:dateTime .

# Declaring a Piping Network Segment 
: rdf:type dm:FunctionalPhysicalObject, dm:WholeLifeIndividual, dm:ArrangedIndividual, owl:Thing,  rdl:RDS267704  ; # PIPING NETWORK SYSTEM
    rdfs:label "1-WG-002-01" ;
    meta:valEffectiveDate "2015-06-24T21:36:00Z"^^xsd:dateTime .

# Representing the information that our Piping Network Segment  is a part of the Piping Network System

ex:e70e5fea-f44e-4d02-8f89-23c743c7eb40
      rdf:type tpl:AssemblyOfAnIndividual ;
      rdfs:label "[FLUID SYSTEM] individual [1-WG-002] has [FLUID CONDUCTOR] individual [1-WG-002-01] as a part in an assembly"@en ;
      tpl:hasWhole ex:ab63e420-d1df-4543-8514-619e839d734b ; # 1-WG-002
      tpl:hasPart ex:1617015f-69dd-4262-a762-47ed5574d27e ; # 1-WG-002-01
      meta:valEffectiveDate "2021-01-14T17:26:00Z"^^xsd:dateTime .

Lifecycle Information in OWL

In case there is the need to apply OWL reasoning to a subset of the lifecycle information that subset is generated by means of (a) SPARQL quer(y)ies. This has not been addressed as such in Part 8 and hence is outside the scope of this Topic.