Mapping CFIHOS data

latest update: 2020-03-10  

Introduction

CFIHOS, the Capital Facilities Information HandOver Specification project of USPI, taken over by IOGP - International Association of Oil and Gas Producers - has defined a data model and reference data.

In this topic an approach for mapping these data to the format of ISO 15926-7/8 is presented.

Data Model

The CFIHOS data model is an Entity-Relationship model. It has a good data dictionary. The model as such is not yet available in the public domain.

This topic focusses on the mapping of what CFIHOS calls "properties", which are, for the most, better qualified as "attributes". These attributes have, from an ISO 15926 point of view, a wide variety of semantics , which calls for mapping these to the applicable templates.

The model is extended with reference data by means of a set of spreadsheets. These contain Class definitions, attribute definitions, pick-lists for attribute values, attributes for Classes, document types per discipline, etc.

A data model table, like this one:

                                                                                                                                              
CORROSION LOOP
 (courtesy CFIHOS)

is, in terms of ISO 15926, an instance of dm:ClassOfClassOfInformationRepresentation. It is a container of information, such as here:

Corrosion loop code     Plant Code (FKI)   xsd:anyURI .
Corrosion loop code     Corrosion loop name    xsd:string .
Corrosion loop code     Corrosion loop description    xsd:string .
Corrosion loop code     Corrosion loop type code (FK)   xsd:anyURI .
Corrosion loop code     Process description    xsd:string .
Corrosion loop code     Corrosion type description    xsd:string .
or in an RDF syntax:

cfihos:00000010 rdf:type dm:
ClassOfClassOfInformationRepresentation ;
       rdfs:label "CORROSION LOOP table" ;
       skos:definition "A grouping of tags with similar operating conditions, e.g. pipe, equipment, .. (i.e., made of similar materials of construction, sharing similar corrosion/degradation rate)."@en ;
       cfihos:plantCode  ""^^xsd:anyURI ; # the FK
       cfihos:corrosionLoopCode  ""^^xsd:string ;
       cfihos:corrosionLoopName  ""^^xsd:string ;
       cfihos:corrosionLoopDescription  ""^^xsd:string ;
       cfihos:corrosionLoopTypeCode  ""^^xsd:anyURI ; # the FK
       cfihos:processDescription  ""^^xsd:string ;
       cfihos:corrosionTypeDescription  ""^^xsd:string .

Now each of those rdf:properties must be defined as autonomous entities:

cfihos:
plantCode rdf:type owl:ObjectProperty ;
        rdfs:label "Plant code"@en ;
        skos:definition "The plant where the equipment is or will be installed"@en ;
        cfihos:cfihosUniqueCode  cfihos:10000005 ;
        rdfs:domain  lci:InanimatePhysicalobject ; # any member of CORROSION LOOP
        rdfs:range  cfihos:00000031.plantCode ;  # this means the plantCode attribute of cfihos:00000031 (= PLANT(table) )
        cfihos:valEffectiveDate :2020-03-01T00:00:00Z"^^xsd:dateTime .

cfihos:corrosionLoopCode rdf:type owl:ObjectProperty ;
        rdfs:label "Corrosion loop code"@en ;
        skos:definition "A code that uniquely identifies the corrosion loop at a plant"@en ;
        cfihos:cfihosUniqueCode  cfihos:10000018 ;
        rdfs:domain  lci:InanimatePhysicalobject ; # any member of CORROSION LOOP
        rdfs:range  ""xsd:string ;
        cfihos:valEffectiveDate :2020-03-01T00:00:00Z"^^xsd:dateTime .

cfihos:corrosionLoopName rdf:type owl:ObjectProperty ;
        rdfs:label "Corrosion loop name"@en ;
        skos:definition "The name by which the corrosion loop is usually designated"@en ;
        cfihos:cfihosUniqueCode  cfihos:10000019 ;
        rdfs:domain  lci:InanimatePhysicalobject ; # any member of CORROSION LOOP
        rdfs:range  ""xsd:string ;
        cfihos:valEffectiveDate :2020-03-01T00:00:00Z"^^xsd:dateTime .

cfihos:corrosionLoopDescription rdf:type owl:ObjectProperty ;
        rdfs:label "Corrosion loop description"@en ;
        skos:definition "A description of what the corrosion loop entails"@en ;
        cfihos:cfihosUniqueCode  cfihos:10000020 ;
        rdfs:domain  lci:InanimatePhysicalobject ; # any member of CORROSION LOOP
        rdfs:range  ""xsd:string ;
        cfihos:valEffectiveDate :2020-03-01T00:00:00Z"^^xsd:dateTime .

cfihos:corrosionLoopTypeCode rdf:type owl:ObjectProperty ;
        rdfs:label "Corrosion loop type code"@en ;
        skos:definition "The type of corrosion loop that classifies this corrosion loop"@en ;
        cfihos:cfihosUniqueCode  cfihos:10000023 ;
        rdfs:domain  lci:InanimatePhysicalobject ; # any member of CORROSION LOOP
        rdfs:range  rdl:RDS2224606 ; # a classifying specialization of CORROSION LOOP from the ISO RDL (not cfihos:00000010 since that is a table, so the information container about Corrosion Loop, not the thing itself)
        cfihos:valEffectiveDate :2020-03-01T00:00:00Z"^^xsd:dateTime .

cfihos:processDescription rdf:type owl:ObjectProperty ;
        rdfs:label "Process description"@en ;
        skos:definition "A description of the process performed by the elements of the corrosion loop"@en ;
        cfihos:cfihosUniqueCode  cfihos:10000021 ;
        rdfs:domain  lci:InanimatePhysicalobject ; # any member of CORROSION LOOP
        rdfs:range  ""xsd:string ;
        cfihos:valEffectiveDate :2020-03-01T00:00:00Z"^^xsd:dateTime .

cfihos:corrosionTypeDescription rdf:type owl:ObjectProperty ;
        rdfs:label "Corrosion type description"@en ;
        skos:definition "A description of the expected effects of the corrosion"@en ;
        cfihos:cfihosUniqueCode  cfihos:10000022 ;
        rdfs:domain  lci:InanimatePhysicalobject ; # any member of CORROSION LOOP (this is conflated information: the Corrosion Loop is subjected to a corrosion Activity, and the latter has a description
        rdfs:range  ""xsd:string ;
        cfihos:valEffectiveDate :2020-03-01T00:00:00Z"^^xsd:dateTime .

Note that the table as such doesn't play any role other than container of information elements, that can easily be generated from the above code by forming triples:
domain   property   range

rdl:RDS7151797  cfihos:plantCode  ""xsd:string .
rdl:RDS2224606  cfihos:corrosionLoopCode  ""xsd:string .
rdl:RDS2224606  cfihos:corrosionLoopName  ""xsd:string .
rdl:RDS2224606  cfihos:corrosionLoopDescription  ""xsd:string .
rdl:RDS2224606  cfihos:corrosionLoopTypeCode  rdl:RDS2224606 .
rdl:RDS2224606  cfihos:processDescription ""xsd:string .
rdl:RDS2224606  cfihos:corrosionTypeDescription ""xsd:string .

This is not the real data but an ontology that defines how the real data shall be formatted.
Those real data are members of the above. For example, using the CFIHOS data dictionary examples:

xyz:40576695-c886-48be-8463-8debc35b6a41  
cfihos:plantCode  "6000" .
xyz:40576695-c886-48be-8463-8debc35b6a41   cfihos:corrosionLoopCode "CL1101" .
xyz:40576695-c886-48be-8463-8debc35b6a41   cfihos:corrosionLoopName  "Absorber circuit"@en .
xyz:40576695-c886-48be-8463-8debc35b6a41   cfihos:corrosionLoopDescription "V301 separator vessel below demister. Condensate liquid outlet piping to BL."@en .
xyz:40576695-c886-48be-8463-8debc35b6a41   cfihos:corrosionLoopTypeCode  rdl:RDS2227769 .  # WET CO2 CORROSION
xyz:40576695-c886-48be-8463-8debc35b6a41  cfihos:processDescription "V301 separates the 15 barg gas stream into dry saturated gas and condensate containing hydrocarbons, free sour water (CO2 and H2S) and inhibitor."@en .
xyz:40576695-c886-48be-8463-8debc35b6a41  cfihos:corrosionTypeDescription  "Vessel is made of 15mm PWHT carbon steel including 3mm corrosion allowance. Normal operation Wet CO2 corrosion. Special operating conditions Un-inhibited the corrosion rate is 1.1mm/yr. Inhibiter injection should be monitored and alarmed."@en .

where
xyz:40576695-c886-48be-8463-8debc35b6a41  rdf:type  rdl:RDS2224606 .  (and rdl:RDS2227769  is a subClassOf rdl:RDS2224606).

The above are triples that can be stored in a triple store and queried with SPARQL.

However, it is not ISO 15926. The difference between the two representations is that:

  • the above can be used for hand-over. It is a snapshot, valid at the dateTime of that hand-over;
  • the ISO 15926 representation is for the integration of life-cycle plant information, formally declaring each object and representing relationships with templates. In most cases one above triple will result in one template, but there are exceptions where two triples result in one template or one triple results in two or more templates.
There is one situation where representation with one triple always has been problematic: a quantitative property with a value on a scale. The solution we use is, for example:
xyz:0477a585-4a19-4ccc-aaa6-b057e3962abe.40000512  cfihos:propertyValueInBarGauge "14.7"^^xsd:decimal .
where xyz:0477a585-4a19-4ccc-aaa6-b057e3962abe.40000512 means the aspect 40000512 (= Normal operating pressure) of xyz:0477a585-4a19-4ccc-aaa6-b057e3962abe.
Then the property must be somewhat denormalized from propertyValue to propertyValueInBarGauge, but that is bearable.

Advantages and limitation of CFIHOS triples

The CFIHOS triples, as discussed above, allow for storage all handover data in a triple store. This gives the possibility to validate those data before handing over.
As described it also allows for a predefined mapping of those handover data into the ISO 15926-7/8 format.

The limitations are:
  • They can only be exchanged with parties that have adopted CFIHOS
  • It is impossible, or at least cumbersome, to add provenance data ; (these are not in the CFIHOS handover data anyway)
  • It is impossible to integrate the data with other life-cycle information during the life of the plant, unless that further mapping to the ISO 15926-7/8 format is done, as shown below.
See https://www.slideshare.net/marianomx/10-r2-rmlpart-1 for a method to generate triples from a data base.

Mapping procedure

Now we move into the ISO 15926 domain. For each of the above owl:ObjectProperty's the applicable template(s) is(are) determined.

For all CFIHOS data model table attributes and all CFIHOS reference data and all CFIHOS pick-list values a mapping is being prepared. In most cases that is being done in the form of pseudocode where the attribute and property names must be replaced with their values. This will be published on this website, initially based on V1.4 .

The pseudocode for above table attributes is:

plantCode Corrosion loop is located inside the given Plant
:ANY-UUID rdf:type tpl:RelativeLocationOfIndividual ;
       rdfs:label "[
CORROSION-LOOP] individual [label of CORROSION-LOOP-UUID] is located [INSIDE] [PLANT] individual [label of PLANT-UUID]"@en ;
       tpl:hasLocated :CORROSION-LOOP-UUID ;
       tpl:hasLocator :PLANT-UUID ; # derive from plantCode (that Plant is assumed to have been declared).
       tpl:hasRelativeLocationType rdl:RDS2229920 ; # INSIDE
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate "xsd:dateTime"^^xsd:dateTime .
corrosionLoopCode Corrosion loop is identified with a code
# This is a typical declaration of a corrosion loop
:CORROSION-LOOP-UUID rdf:type lci:InanimatePhysicalObject, dm:WholeLifeIndividual, dm:ActualIndividual, rdl:RDS2224606 ;
      rdfs:label "corrosionLoopCode"  ;
      meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
      meta:valEffectiveDate "xsd:dateTime"^^xsd:dateTime .
corrosionLoopName Corrosion loop is identified with a name
:ANY-UUID rdf:type tpl:ClassifiedIdentificationOfIndividual ;
       rdfs:label "
[CORROSION-LOOP] individual [hasIdentified] is identified with an [hasIdentificationType] [valIdentifier]"@en ;
       tpl:hasIdentified :CORROSION-LOOP-UUID ;
       tpl:valIdentifier "corrosionLoopName"
@en ;
       tpl:hasIdentificationType rdl:RDS2226628 ;  # IDENTIFICATION BY CORROSION LOOP NAME
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate "xsd:dateTime"^^xsd:dateTime .
corrosionLoopDescription Corrosion loop is described :ANY-UUID rdf:type tpl:ClassifiedDescriptionOfIndividual ;
       rdfs:label "
[CORROSION-LOOP] individual [hasDescribed] is described with a [hasDescriptionType] [valDescriptor]"@en ;
       tpl:hasDescribed :CORROSION-LOOP-UUID ;
       tpl:valDescriptor "corrosionLoopDescription"
@en ;
       tpl:hasDescriptionType rdl:RDS2226633 ; # DESCRIPTION WITH FREE FORMAT TEXT
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate "xsd:dateTime"^^xsd:dateTime .
corrosionLoopTypeCode Classification of the Corrosion Loop with a
Corrosion Loop Type from the RDL
:ANY-UUID rdf:type tpl:ClassificationOfIndividual ;
       rdfs:label "
[CORROSION-LOOP] individual [hasClassified] is classified with [hasClassifier]"@en ;
       tpl:hasClassified :CORROSION-LOOP-UUID ;
       tpl:hasClassifier rdl:RDS2224606 ; # select applicable subclass if available to cover
corrosionLoopTypeCode
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate "xsd:dateTime"^^xsd:dateTime .
processDescription Corrosion process is described

NOTE - This is conflated information,
because actually there is a Corrosion Activity
of a certain type, and that Corrosion Activity
is described

:CORROSION-UUID rdf:type dm:Activity, dm:ActualIndividual, rdl:RDS9684692 ; # define exact corrosion type later
       rdfs:label "" ;
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate ""^^xsd:dateTime .

:ANY-UUID rdf:type tpl:ClassificationOfIndividual ;
       rdfs:label "[CORROSION] individual [label of CORROSION-UUID] is classified with [label of CORROSION-TYPE-ID]"@en ; # in RDL
       tpl:hasClassified  :CORROSION-UUID ;
       tpl:hasClassifier  :CORROSION-TYPE-UUID ;
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate ""^^xsd:dateTime .


:ANY-UUID rdf:type tpl:ClassifiedDescriptionOfIndividual ;
       rdfs:label "
[CORROSION-LOOP] individual [hasDescribed] is described with a [hasDescriptionType] [valDescriptor]"@en ;
       tpl:hasDescribed :CORROSION-LOOP-UUID ;
       tpl:valDescriptor "processDescription"
@en ;
       tpl:hasDescriptionType rdl:RDS2229220 ; # DESCRIPTION OF CORROSION CAUSING PROCESS
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate "xsd:dateTime"^^xsd:dateTime .
corrosionTypeDescription The type of corrosion is described

NOTE - This is conflated information,
because actually there is a Corrosion Activity
of a certain type, e.g.  Wet CO2 Corrosion,
that is described, and the Corrosion Loop is
subjected to that Corrosion Activity.
:ANY-UUID rdf:type tpl:ParticipationOfIndividualInActivity ;
       rdfs:label "[CORROSION-LOOP] individual [label of CORROSION-LOOP-UUID] participates in [CORROSION] activity [label of CORROSION-UUID] in a [SUBJECT] Role"@en ;
       tpl:hasActivity  :CORROSION-UUID ;
       tpl:hasParticipant  :CORROSION-LOOP-UUID ;
       tpl:hasParticipantRole  rdl:RDS222362 ; # SUBJECT
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate ""^^xsd:dateTime .

:ANY-UUID rdf:type tpl:ClassifiedDescriptionOfClassOfIndividual ;
       rdfs:label "
[EssentialType] class [hasDescribed] is described with a [hasDescriptionType] [valDescriptor]"@en ;
       tpl:hasDescribed :CORROSION-TYPE-UUID ; # select via applicable specialization of rdl:RDS9684692
       tpl:valDescriptor "corrosionTypeDescription" ;
       tpl:hasDescriptionType rdl:RDS2229221 ; # DESCRIPTION OF CORROSION TYPE
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate "xsd:dateTime"^^xsd:dateTime .

The rest is, for the most, straightforward ETL.

Example mapping result


CFIHOS property
Narrative
example applicable template(s)
plantCode Corrosion loop is located inside the Plant
:4379d2a7-2e1c-43e8-9d32-779aa7d2f3cb rdf:type tpl:RelativeLocationOfIndividual ;
       rdfs:label "[CORROSION LOOP] individual [CL-1101] is located [INSIDE] [PLANT]  [6000]"@en ;
       tpl:hasLocated :a9e54c91-5e6a-4760-97bb-854fe71bdd5a ; # the corrosion loop CL-1101, see next row
       tpl:hasLocator :d5a14b57-6dc5-4b3f-931a-ed22f99e7d8d   ; # Plant 6000, already declared earlier
       tpl:hasRelativeLocationType rdl:RDS2229920 ; # INSIDE
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate "2019-09-01T00:00:00Z"^^xsd:dateTime .

corrosionLoopCode Corrosion loop is identified with a code
# This is a declaration of corrosion loop CL-1101
:a9e54c91-5e6a-4760-97bb-854fe71bdd5a rdf:type lci:InanimatePhysicalObject, dm:WholeLifeIndividual, dm:ActualIndividual, rdl:RDS2224606 ;
      rdfs:label "CL-1101"  ;
      meta:hasLifecycleActivity rdl:RDS2227511 ;
      meta:valEffectiveDate "2019-09-01T00:00:00Z"^^xsd:dateTime .
corrosionLoopName Corrosion loop is identified with a name
:18453835-46c7-440d-a566-2a48dbcc10a5 rdf:type tpl:ClassifiedIdentificationOfIndividual ;
       rdfs:label "[CORROSION LOOP] individual [CL-1101] is identified with an [IDENTIFICATION BY CORROSION LOOP NAME] [Absorber circuit]"
@en ;
       tpl:hasIdentified :a9e54c91-5e6a-4760-97bb-854fe71bdd5a ;
       tpl:valIdentifier "Absorber circuit"@en ;
       tpl:hasIdentificationType rdl:RDS2226628 ; # IDENTIFICATION BY CORROSION LOOP NAME
       meta:hasLifecycleActivity rdl:RDS2227511 ;
       meta:valEffectiveDate "2019-09-01T00:00:00Z"^^xsd:dateTime .

corrosionLoopDescription Corrosion loop is described
:470658c3-05bb-469b-a25c-ffb48d8df975 rdf:type tpl:ClassifiedDescriptionOfIndividual ;
       rdfs:label "[CORROSION LOOP] individual [CL-1101] is described with a [DESCRIPTION WITH FREE FORMAT TEXT] [V301 separator vessel below demister. Condensate liquid outlet piping to BL]"@en ;
       tpl:hasDescribed
:a9e54c91-5e6a-4760-97bb-854fe71bdd5a ;
       tpl:valDescriptor "V301 separator vessel below demister. Condensate liquid outlet piping to BL"@en ;
       tpl:hasDescriptionType rdl:RDS2226633 ; # DESCRIPTION WITH FREE FORMAT TEXT

       meta:hasLifecycleActivity rdl:RDS2227511 ;
       meta:valEffectiveDate "2019-09-01T00:00:00Z"^^xsd:dateTime .

corrosionLoopTypeCode Classification of the Corrosion Loop with a Corrosion Loop Type from the RDL
:144da1ac-efbb-46dd-8c48-ed97f1ab8980 rdf:type tpl:ClassificationOfIndividual ;
       rdfs:label "[CORROSION LOOP] individual [CL-1101] is classified with [CORROSION LOOP] [FLUID CORROSION LOOP]"
@en ;
       tpl:hasClassified
:a9e54c91-5e6a-4760-97bb-854fe71bdd5a ;
       tpl:hasClassifier rdl:RDS2227832 ; # FLUID CORROSION LOOP
       meta:hasLifecycleActivity rdl:RDS2227511 ;
       meta:valEffectiveDate "2019-09-01T00:00:00Z"^^xsd:dateTime .

processDescription Corrosion process is described

NOTE - This is conflated information, because actually there is a Corrosion Activity of a certain type, and that Corrosion Activity is described
:3377d74d-a210-42b6-85d4-e2c4ebf730aa rdf:type dm:Activity, dm:ActualIndividual, rdl:RDS9684692 ; # define exact corrosion type later
       rdfs:label "ACT2003-43843" ; # Activity labels are user-defined
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate ""^^xsd:dateTime .


:
984dd83d-7c2d-4c5f-b925-b51a88e3be7f rdf:type tpl:ClassificationOfIndividual ;
       rdfs:label "[CORROSION] individual [
ACT20200310-43843] is classified with [WET CO2 CORROSION]"@en ; # in RDL
       tpl:hasClassified 
:3377d74d-a210-42b6-85d4-e2c4ebf730aa ; # UUID of ACT2003-43843
       tpl:hasClassifier  :a467d89c-e862-457b-afe0-d0fed9dcbd52 ; # a specialization of WET CO2 CORROSION
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate ""^^xsd:dateTime .


:876c8467-ffba-4e9f-8e22-473f8095348c rdf:type tpl:
ClassifiedDescriptionOfIndividual ;
       rdfs:label "[CORROSION LOOP] individual [CL-1101] is described with a [DESCRIPTION OF CORROSION CAUSING PROCESS] [V301 separates the 15 barg gas stream into dry saturated gas and condensate containing hydrocarbons, free sour water (CO2 and H2S) and inhibitor]"
@en ;
       tpl:hasDescribed :3377d74d-a210-42b6-85d4-e2c4ebf730aa ;
       tpl:valDescriptor "V301 separates the 15 barg gas stream into dry saturated gas and condensate containing hydrocarbons, free sour water (CO2 and H2S) and inhibitor."@en ;
       tpl:hasDescriptionType rdl:RDS2229220 ; # DESCRIPTION OF CORROSION CAUSING PROCESS
       meta:hasLifecycleActivity rdl:RDS2227511 ;
       meta:valEffectiveDate "2019-09-01T00:00:00Z"^^xsd:dateTime .

corrosionTypeDescription The type of corrosion is described

NOTE - This is conflated information, because actually there is a Corrosion Activity of a certain type, e.g.  Wet CO2 Corrosion, that is described, and the Corrosion Loop is subjected to that Corrosion Activity.
:eb940427-efef-46be-ba09-dab55bfd381b rdf:type tpl:ParticipationOfIndividualInActivity ;
       rdfs:label "[CORROSION-LOOP] individual [
CL-1101] participates in [CORROSION] activity [ACT20200310-43843] in a [SUBJECT] Role"@en ;
       tpl:hasActivity 
:3377d74d-a210-42b6-85d4-e2c4ebf730aa ; # UUID of ACT2003-43843
       tpl:hasParticipant  :a9e54c91-5e6a-4760-97bb-854fe71bdd5a ; # UUID of Corrosion Loop
       tpl:hasParticipantRole  rdl:RDS222362 ; # SUBJECT
       meta:hasLifecycleActivity rdl:RDS2227511 ; # MAINTENANCE
       meta:valEffectiveDate ""^^xsd:dateTime .


:647165ae-e18e-4388-be85-af6e15b99c73 rdf:type tpl:ClassifiedDescriptionOfClassOfIndividual ;
       rdfs:label "[CORRODING] class [WET CO2 CORROSION] is described with a [DESCRIPTION OF CORROSION TYPE] [Vessel is made of 15mm PWHT carbon steel including 3mm corrosion allowance. Normal operation Wet CO2 corrosion. Special operating conditions Un-inhibited the corrosion rate is 1.1mm/yr. Inhibiter injection should be monitored and alarmed.]"
@en ;
       tpl:hasDescribed :a467d89c-e862-457b-afe0-d0fed9dcbd52 ; # a specialization of WET CO2 CORROSION
       tpl:valDescriptor "Vessel is made of 15mm PWHT carbon steel including 3mm corrosion allowance. Normal operation Wet CO2 corrosion. Special operating conditions Un-inhibited the corrosion rate is 1.1mm/yr. Inhibiter injection should be monitored and alarmed."
@en ;
       tpl:hasDescriptionType rdl:RDS2229255 ; # DESCRIPTION OF CORROSION TYPE
       meta:hasLifecycleActivity rdl:RDS2227511 ;
       meta:valEffectiveDate "2019-09-01T00:00:00Z"^^xsd:dateTime .


The IdentificationTYpe and DescriptionType give the possibility to prescribe how shall be identified or described, in terms of language and/or content.

All this looks complex but follows the same patterns over and over again. It is more elaborate than a filled database table because data bases and documents have a tendency to imply information.
ISO 15926 makes that implied information explicit, which is essential for information integration purposes.

Note that greyed rdfs:label, meta:hasLifecycleActivity, and meta:valEffectiveDate are meta data. It is recommended to use these at all times.