Mapping CFIHOS data


latest update: 2020-10-01


Introduction

The source of most life-cycle data is either a relational data base or spreadsheets.
A method for mapping an instance of the CFIHOS relational data model to the format defined in ISO 15926-7/8 is given here.
This method consists of four phases:
  1. mapping to RDF, storing in a triple store, validating the data, and generating a hand-over file in Turtle, JSON, XML, CSV or TSV
  2. mapping the RDF data to instances to ISO 15926-7 templates in ISO 15926-8 format;
  3. mapping functional diagrams (e.g. P&ID, One-line Diagram, Loop Diagram) to place the results of the second phase in the plant topology;
  4. mapping data at the source to ISO 15926-7/8

Phase 1

The CFIHOS V1.4 data model has been mapped to ISO 15926-ish structures, as detailed in the topic CFIHOS Data Model and Reference Data . This has mainly been done in order to make the contents of all CSV files easily accessible. Where possible the RDL data have been typed with ISO 15926-2 entity types.

The next step a complete RDF rendering by representing all attributes of the data model as either owl:ObjectProperty or owl:DatatypeProperty, where in general:
  • the Primary Keys are DatatypeProperties and owl:HasKey, the latter to indicate the unique identification of the object
  • the Foreign Keys are made an ObjectProperty
  • the rest, with a Literal as range, are made a DatatypeProperty
As an example the SITE, PLANT and AREA table will be mapped. First a summary of the attributes:

TABLE TABLE ID ATTRIBUTE CFIHOS CODE DEFINITION
SITE cfihos:00000001 Site code cfihos:10000003 A code that uniquely identifies the site
SITE cfihos:00000001 Measurement system code(FK) cfihos:00000001.10000240 The default measurement system that is used by a site
SITE cfihos:00000001 Site name cfihos:10000004 A unique name to identify a geographical location.





PLANT cfihos:00000031 Plant code cfihos:10000005 A code that uniquely identifies the plant
PLANT cfihos:00000031 ISO language code(FK) cfihos:00000031.10000147 The language that should be used by default for all exchange of information related to that plant
PLANT cfihos:00000031 Measurement system code(FK) cfihos:00000031.10000240 The default measurement system that is used by a plant
PLANT cfihos:00000031 Site code(FK) cfihos:00000031.10000003 The site at which the plant is located
PLANT cfihos:00000031 Plant name cfihos:10000006 The full name of the plant





AREA cfihos:00000003 Area concatcode cfihos:10100001 A unique and complete identifier of the Area that is a concatenation of the Plant code and the Area code.
AREA cfihos:00000003 Plant code(FK) cfihos:00000003.10000005 The plant the area is a part of
AREA cfihos:00000003 Area code cfihos:10000001 A code that uniquely identifies the area within the plant
AREA cfihos:00000003 Area name cfihos:10000002 A name describing the location of an area within the plant.

The next step is to define the applicable owl:Properties with their rdfs:domain (always the table) and rdfs:range, as well as a more human-readable property label. That looks like this:

DOMAIN PREDICATE RANGE PREDICATE LABEL *)
PROPERTY TYPE KEY
sw:Site sw:sitecode xsd:string sitecode owl:DatatypeProperty owl:HasKey
sw:Site sw:measurementSystemCode001 sw:MeasurementSystem defaultMeasurementSystemCode001 owl:ObjectProperty  
sw:Site sw:siteName xsd:string siteName owl:DatatypeProperty  

 
 

sw:Plant sw:plantCode xsd:string plantCode owl:DatatypeProperty owl:HasKey
sw:Plant sw:isoLanguageCode031 sw:IsoLanguage defaultIsoLanguageCode031 owl:ObjectProperty  
sw:Plant sw:measurementSystemCode031 sw:MeasurementSystem defaultMeasurementSystemCode031 owl:ObjectProperty  
sw:Plant sw:siteCode031 sw:Site locatedOnSiteWithCode031 owl:ObjectProperty  
sw:Plant sw:plantName xsd:string plantName owl:DatatypeProperty  

 
 

sw:Area sw:areaConcatcode xsd:string areaConcatcode owl:DatatypeProperty owl:HasKey
sw:Area sw:plantCode003 sw:Plant plantCode003 owl:ObjectProperty  
sw:Area sw:areaCode xsd:string areaCode owl:DatatypeProperty  
sw:Area sw:areaName xsd:string areaName owl:DatatypeProperty  
*) The predicate labels are the same as their names

The predicates are related to the CFIHOS data model attributes with an rdfs:isDefinedBy the applicable CFIHOS unique code.
The addition of a three-digit code (e.g. 031) is to make attributes that occur multiple times unique by adding the last three digits of the CFIHOS unique code of the table. That is necessary for the definition of each owl:Property, such as that for above sw:plantCode003:
sw:plantCode003 rdf:type owl:ObjectProperty ;
      rdfs:isDefinedBy cfihos:00000003.10000005 ;
      skos:definition "The plant the area is a part of" ;
      rdfs:label  "plantCode003"^^xsd:string ;
      rdfs:domain  sw:Area ;
      rdfs:range  sw:Plant .
Note the addition of the areaConcatcode. CFIHOS uses composite keys, but these are not recommended in RDF, so we turned areaCode into a DatatypeProperty and created a PlantCode-AreaCode concatenated Code. Per project the concatenation rules must be set because there is no consensus about identifier formats. The component values of that concatcode remain available in the data.

The next step is to turn the above into infosets:

ROW UUID PREDICATE RANGE PREDICATE LABEL
:ANY-UUID-001 rdf:type sw:Site  
:ANY-UUID-001 sw:sitecode xsd:string sitecode
:ANY-UUID-001 sw:measurementSystemCode001 xsd:string [labelOf sw:MeasurementSystem] defaultMeasurementSystemCode001
:ANY-UUID-001 sw:siteName xsd:string siteName

 
 
:ANY-UUID-031 rdf:type sw:Plant  
:ANY-UUID-031 sw:plantCode xsd:string plantCode
:ANY-UUID-031 sw:isoLanguageCode031 xsd:string  [labelOfsw:IsoLanguage\ isoLanguageCode031
:ANY-UUID-031 sw:measurementSystemCode031 xsd:string [labelOf sw:MeasurementSystem] measurementSystemCode031
:ANY-UUID-031 sw:siteCode031 xsd:string [labelOf sw:Site] siteCode031
:ANY-UUID-031 sw:plantName xsd:string plantName

 
 
:ANY-UUID-003 rdf:type sw:Area  
:ANY-UUID-003 sw:areaConcatcode xsd:string areaConcatcode
:ANY-UUID-003 sw:plantCode003 xsd:string [labelOf sw:Plant] plantCode003
:ANY-UUID-003 sw:areaCode xsd:string areaCode
:ANY-UUID-003 sw:areaName xsd:string areaName

That :ANY-UUID-xxx in the first column indicates that when an instance is created that :ANY-UUID-xxx must be replaced with a random, hitherto unused, UUID. Actually this is a globally unique identifier for a row in the database table.
It should be noted that the CFIHOS hand-over data contain the labels of the ObjectProperty instances rather than the referred object.
For each instance the applicable UUID needs to be fetched and inserted.
The labels in the last column don't play a role in the information representation, but can be used in a User Interface or report. Variations or translations in other natural languages are possible.

EXAMPLE
Assume, as an example, the following excerpt of hand-over data about:
  • siteCode 'KAS'
  • plantCode '6000'
  • areaCode '14'
  • defaultMeasurementSystemCode  'SI'
  • defaultIsoLanguageCode  'en'
then the following instatiated table rows apply:

:58acea04-8cfd-4898-8933-5131fa039c79 rdf:type sw:Site
:58acea04-8cfd-4898-8933-5131fa039c79 sw:sitecode "KAS"^^xsd:string
:58acea04-8cfd-4898-8933-5131fa039c79 sw:measurementSystemCode001 cfihos:60001649
:58acea04-8cfd-4898-8933-5131fa039c79 sw:siteName "Kashagan field"^^xsd:string



:b2232870-7950-449a-bc6a-b7f5b14a7c0e rdf:type sw:Plant
:b2232870-7950-449a-bc6a-b7f5b14a7c0e sw:plantCode "6000"^^xsd:string
:b2232870-7950-449a-bc6a-b7f5b14a7c0e sw:isoLanguageCode031 cfihos:60000443
:b2232870-7950-449a-bc6a-b7f5b14a7c0e sw:measurementSystemCode031 cfihos:60001649
:b2232870-7950-449a-bc6a-b7f5b14a7c0e sw:siteCode031 :58acea04-8cfd-4898-8933-5131fa039c79
:b2232870-7950-449a-bc6a-b7f5b14a7c0e sw:plantName "Onshore Processing Facility (OPF)"^^xsd:string



:7286dcc6-c71a-42ff-818e-cb94778dd96d rdf:type sw:Area
:7286dcc6-c71a-42ff-818e-cb94778dd96d sw:areaConcatcode "6000-14"^^xsd:string
:7286dcc6-c71a-42ff-818e-cb94778dd96d sw:plantCode003 :b2232870-7950-449a-bc6a-b7f5b14a7c0e
:7286dcc6-c71a-42ff-818e-cb94778dd96d sw:areaCode "14"^^xsd:string
:7286dcc6-c71a-42ff-818e-cb94778dd96d sw:areaName "Utility area"^^xsd:string
where the labels of the ObjectProperties have been replaced with their RDL identifier or UUID.

This results in the following code in the Turtle format:

@prefix : <http://www.p1234.xyz-corp.com/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdl: <http://data.15926.org/rdl/> .
@prefix cfihos: <http://data.15926.org/cfihos/> . # local RDL extension
@prefix sw: <http://data.15926.org/sw/> .

:58acea04-8cfd-4898-8933-5131fa039c79  rdf:type  sw:Site ;
    sw:siteCode  "KAS" ;
    sw:measurementSystemCode001  cfihos:60001649 ;
    sw:siteName  "Kashagan field" .

:b2232870-7950-449a-bc6a-b7f5b14a7c0e  rdf:type  sw:Plant ;
    sw:plantCode    "6000" ;
    sw:isoLanguageCode031    cfihos:60001692 ;
    sw:measurementSystemCode031  cfihos:60001649 ;
    sw:siteCode031  :58acea04-8cfd-4898-8933-5131fa039c79 ;
    sw:plantName  "Onshore Processing Facility (OPF)" .

:7286dcc6-c71a-42ff-818e-cb94778dd96d  rdf:type  sw:Area ;
sw:areaConcatcode  "6000-14" ;
sw:plantCode003  :b2232870-7950-449a-bc6a-b7f5b14a7c0e ;
sw:areaCode "14" ;
sw:areaName "Utility area" .

and this will result in the following triples:

<http://www.p1234.xyz-corp.com/58acea04-8cfd-4898-8933-5131fa039c79> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.15926.org/sw/Site> .
<http://www.p1234.xyz-corp.com/58acea04-8cfd-4898-8933-5131fa039c79> <http://data.15926.org/sw/siteCode> "KAS" .
<http://www.p1234.xyz-corp.com/58acea04-8cfd-4898-8933-5131fa039c79> <http://data.15926.org/sw/measurementSystemCode001> <http://data.15926.org/cfihos/60001649> .
<http://www.p1234.xyz-corp.com/58acea04-8cfd-4898-8933-5131fa039c79> <http://data.15926.org/sw/siteName> "Kashagan field" .

<http://www.p1234.xyz-corp.com/b2232870-7950-449a-bc6a-b7f5b14a7c0e> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.15926.org/sw/Plant> .
<http://www.p1234.xyz-corp.com/b2232870-7950-449a-bc6a-b7f5b14a7c0e> <http://data.15926.org/sw/plantCode> "6000" .
<http://www.p1234.xyz-corp.com/b2232870-7950-449a-bc6a-b7f5b14a7c0e> <http://data.15926.org/sw/isoLanguageCode031> <http://data.15926.org/cfihos/60001692> .
<http://www.p1234.xyz-corp.com/b2232870-7950-449a-bc6a-b7f5b14a7c0e> <http://data.15926.org/sw/measurementSystemCode031> <http://data.15926.org/cfihos/60001649> .
<http://www.p1234.xyz-corp.com/b2232870-7950-449a-bc6a-b7f5b14a7c0e> <http://data.15926.org/sw/siteCode031> <http://www.p1234.xyz-corp.com/58acea04-8cfd-4898-8933-5131fa039c79> .
<http://www.p1234.xyz-corp.com/b2232870-7950-449a-bc6a-b7f5b14a7c0e> <http://data.15926.org/sw/plantName> "Onshore Processing Facility (OPF)" .

<http://www.p1234.xyz-corp.com/7286dcc6-c71a-42ff-818e-cb94778dd96d> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.15926.org/sw/Area> .
<http://www.p1234.xyz-corp.com/7286dcc6-c71a-42ff-818e-cb94778dd96d> <http://data.15926.org/sw/areaConcatcode> "6000-14" .
<http://www.p1234.xyz-corp.com/7286dcc6-c71a-42ff-818e-cb94778dd96d> <http://data.15926.org/sw/plantCode003> <http://www.p1234.xyz-corp.com/b2232870-7950-449a-bc6a-b7f5b14a7c0e> .
<http://www.p1234.xyz-corp.com/7286dcc6-c71a-42ff-818e-cb94778dd96d> <http://data.15926.org/sw/areaCode> "14" .
<http://www.p1234.xyz-corp.com/7286dcc6-c71a-42ff-818e-cb94778dd96d> <http://data.15926.org/sw/areaName> "Utility area" .

This is represented in the following graph:



The above triples are stored in a triple store and can be queried with SPARQL. If in this example, the value for plantCode003 in the Area table had been 5900 and there is no such plantCode, an error message results.
Note that this isn't ISO 15926 but vanilla RDF.

Mapping a many-to-many table

The mapping of many-ro-many relationships follows the same morphing pattern as above. In short the same sequence of tables/images is shown for one example: the DOCUMENT REVISION PLANT AREA REFERENCE table:

TABLE TABLE ID ATTRIBUTE CFIHOS CODE DEFINITION
DOCUMENT REVISION PLANT AREA REFERENCE cfihos:00000081 Area concatcode (FK) cfihos:00000081.10100001 A unique and complete identifier of the referred Area that is a concatenation of the Plant code and the Area code.
DOCUMENT REVISION PLANT AREA REFERENCE cfihos:00000081 Document revision concatnumber (FK) cfihos:00000081.10100162 A unique and complete identifier of the referring Document revision that is a concatenation of the Document number of the Document master and the Document revision code

DOMAIN PREDICATE RANGE PREDICATE LABEL PROPERTY TYPE KEY
sw:DocumentRevisionPlantAreaReference sw:areaConcatcode081 sw:Area referencedAreaConcatcode owl:ObjectProperty  
sw:DocumentRevisionPlantAreaReference sw:referringDocumentRevisionConcatnumber081 sw:DocumentRevision referringDocumentRevisionConcatnumber owl:ObjectProperty  

ROW UUID PREDICATE RANGE PREDICATE LABEL
:ANY-UUID-081 rdf:type sw:DocumentRevisionPlantAreaReference  
:ANY-UUID-081 sw:areaConcatcode081 xsd:string [labelOf sw:Area] referencedAreaConcatcode
:ANY-UUID-081 sw:referringDocumentRevisionConcatnumber081 xsd:string [labelOf sw:DocumentRevision] referringDocumentRevisionConcatnumber

An instance:
:b684d9a2-c49c-477f-b28a-ec05993eb9e1 rdf:type sw:DocumentRevisionPlantAreaReference
:b684d9a2-c49c-477f-b28a-ec05993eb9e1 sw:areaConcatcode081 "6000-14"^^xsd:string
:b684d9a2-c49c-477f-b28a-ec05993eb9e1 sw:referringDocumentRevisionConcatnumber081 "BM-4387-rev2"^^xsd:string

@prefix : <http://www.p1234.xyz-corp.com/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdl: <http://data.15926.org/rdl/> .
@prefix cfihos: <http://data.15926.org/cfihos/> . # local RDL extension
@prefix sw: <http://data.15926.org/sw/> .

:b684d9a2-c49c-477f-b28a-ec05993eb9e1  rdf:type  sw:DocumentRevisionPlantAreaReference ;
    sw:areaConcatcode081   :7286dcc6-c71a-42ff-818e-cb94778dd96d ; # the Area UUID of above example
    sw:referringDocumentRevisionConcatnumber081  :33ac7350-7366-4fba-b375-05dfaf7a6d36 . # the UUID of
BM-4387-rev2

<http://www.p1234.xyz-corp.com/b684d9a2-c49c-477f-b28a-ec05993eb9e1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.15926.org/sw/DocumentRevisionPlantAreaReference> .
<http://www.p1234.xyz-corp.com/b684d9a2-c49c-477f-b28a-ec05993eb9e1> <http://data.15926.org/sw/areaConcatcode081> <http://www.p1234.xyz-corp.com/7286dcc6-c71a-42ff-818e-cb94778dd96d> .
<http://www.p1234.xyz-corp.com/b684d9a2-c49c-477f-b28a-ec05993eb9e1> <http://data.15926.org/sw/referringDocumentRevisionConcatnumber081> <http://www.p1234.xyz-corp.com/33ac7350-7366-4fba-b375-05dfaf7a6d36> .




Phase 2

In Phase 2 all 367 data model attributes + 630 RDL properties = 997 CFIHOS properties are to be mapped to ISO 15926-7/8 templates/specialized templates.
To a large extent this has been done in a preparational mode, and the formal code is being prepared, and this topic will be extended with the results.

Many of the CFIHOS attributes and properties are conflated and result in the same template(s) with one or two fixed variables, so the real number mappings is lower.

The input for Phase 2 is made by data model table. For example like the spreadsheet below. In the top, as a reminder, the predicates per table row, and then a representation with an ISO 15926-7 template for each predicate (occasionaly, in case the predicate has a Literal as range, that may be used inside a template for another predicate).

The lefthand column shows the signature of the applicable TIP, the second column, as a reminder, the signature of the applicable declaration or template, the third column a proposed label for a SPARQL script, and the last column the applicable range.

UUID OF TABLE ROW PREDICATE RANGE LABEL OF DECLARED PREDICATE
:ANY-UUID-003 rdf:type sw:Area
:ANY-UUID-003 sw:areaConcatcode xsd:string areaConcatcode
:ANY-UUID-003 sw:plantCode003 xsd:string [labelOf [sw:Plant]
plantCode003
:ANY-UUID-003 sw:areaCode xsd:string areaCode
:ANY-UUID-003 sw:areaName
xsd:string areaName




IND-wholeLifeIndividualDeclaration Declaration of WholeLifeIndividual tip:CFIHOS-IND-AREA-areaDeclaration
TIP DECLARATION PREDICATES   SCRIPT RANGE
http://data.15926.org/tip/IND-wholeLifeIndividualDeclaration_var_Label rdfs:label uuidOf "areaConcatcode"^^xsd:string
http://data.15926.org/tip/IND-wholeLifeIndividualDeclaration_var_EntityType rdf:type fixed dm:SpatialLocation
http://data.15926.org/tip/IND-wholeLifeIndividualDeclaration_var_WorldType rdf:type select lci:NonActualIndividual | dm:ActualIndividual
http://data.15926.org/tip/IND-wholeLifeIndividualDeclaration_var_EssentialType rdf:type fixed rdl:RDS282689
http://data.15926.org/tip/IND-wholeLifeIndividualDeclaration_var_LifecycleActivity meta:hasLifecycleActivity memberOf cfihos:50000121
http://data.15926.org/tip/IND-wholeLifeIndividualDeclaration_var_EffectiveDate meta:valEffectiveDate effDate "valEffectiveDate"^^xsd:dateTime




IND-isLocatedRelativeTo tpl:RelativeLocationOfIndividual tip:CFIHOS-IND-AREA-plantCode
TIP SIGNATURE PREDICATES   SCRIPT RANGE
http://data.15926.org/tip/IND-isLocatedRelativeTo_label [EssentialType] individual [hasLocated] is located [hasRelativeLocationType] [EssentialType] individual [hasLocator] replace "[PLANT AREA] individual  [areaConcatcode] is located [INSIDE] [PLANT] individual [partOfPlantWithCode]"@en
http://data.15926.org/tip/IND-isLocatedRelativeTo_var_Label-1 tpl:hasLocated uuidOf "areaConcatcode"^^xsd:string
http://data.15926.org/tip/IND-isLocatedRelativeTo_var_Label-2 tpl:hasLocator uuidOf "plantCode003"^^xsd:string
http://data.15926.org/tip/IND-isLocatedRelativeTo_var_Label-3 tpl:hasRelativeLocationType fixed rdl:RDS2229920
http://data.15926.org/tip/IND-isLocatedRelativeTo_var_LifecycleActivity meta:hasLifecycleActivity memberOf cfihos:50000121
http://data.15926.org/tip/IND-isLocatedRelativeTo_var_EffectiveDate meta:valEffectiveDate effDate "valEffectiveDate"^^xsd:dateTime




IND-isIdentifiedWithString tpl:ClassifiedIdentificationOfIndividual tip:CFIHOS-IND-AREA-areaCode
TIP SIGNATURE PREDICATES   SCRIPT RANGE
http://data.15926.org/tip/IND-isIdentifiedWithString_label [EssentialType] individual [hasIdentified] has an [hasIdentificationType] [valIdentifier] replace "[PLANT AREA] individual [areaConcatcode] has an [IDENTIFICATION BY PLANT AREA NAME] [areaCode]"@en
http://data.15926.org/tip/IND-isIdentifiedWithString_var_Label-1 tpl:hasIdentified uuidOf "areaConcatcode"^^xsd:string
http://data.15926.org/tip/IND-isIdentifiedWithString_var_Value-1 tpl:valIdentifier replace "areaCode"^^xsd:string
http://data.15926.org/tip/IND-isIdentifiedWithString_var_Label-2 tpl:hasIdentificationType fixed rdl:RDS2226641
http://data.15926.org/tip/IND-isIdentifiedWithString_var_LifecycleActivity meta:hasLifecycleActivity memberOf cfihos:50000121
http://data.15926.org/tip/IND-isIdentifiedWithString_var_EffectiveDate meta:valEffectiveDate effDate "valEffectiveDate"^^xsd:dateTime




IND-isIdentifiedWithString tpl:ClassifiedIdentificationOfIndividual tip:CFIHOS-IND-AREA-areaName
TIP SIGNATURE PREDICATES   SCRIPT RANGE
http://data.15926.org/tip/IND-isIdentifiedWithString_label [EssentialType] individual [hasIdentified] has an [hasIdentificationType] [valIdentifier] replace "[PLANT AREA] individual [areaConcatcode] has an [IDENTIFICATION BY PLANT AREA NAME] [areaName]"@en
http://data.15926.org/tip/IND-isIdentifiedWithString_var_Label-1 tpl:hasIdentified uuidOf "areaConcatcode"^^xsd:string
http://data.15926.org/tip/IND-isIdentifiedWithString_var_Value-1 tpl:valIdentifier replace "areaName"^^xsd:string
http://data.15926.org/tip/IND-isIdentifiedWithString_var_Label-2 tpl:hasIdentificationType fixed rdl:RDS2227020
http://data.15926.org/tip/IND-isIdentifiedWithString_var_LifecycleActivity meta:hasLifecycleActivity memberOf cfihos:50000121
http://data.15926.org/tip/IND-isIdentifiedWithString_var_EffectiveDate meta:valEffectiveDate effDate "valEffectiveDate"^^xsd:dateTime

The link between a predicate at both sides is made with owl:equivalentProperty, like in:
sw:siteCode031  owl:equivalentProperty tip:IND-CFIHOS-AREA-plantCode_var_Label-2 .

The complete set of declarations and template instances for the above Example:

:58acea04-8cfd-4898-8933-5131fa039c79 rdf:type sw:Site
:58acea04-8cfd-4898-8933-5131fa039c79 sw:sitecode "KAS"^^xsd:string
:58acea04-8cfd-4898-8933-5131fa039c79 sw:measurementSystemCode001 cfihos:60001649
:58acea04-8cfd-4898-8933-5131fa039c79 sw:siteName "Kashagan field"^^xsd:string



:b2232870-7950-449a-bc6a-b7f5b14a7c0e rdf:type sw:Plant
:b2232870-7950-449a-bc6a-b7f5b14a7c0e sw:plantCode "6000"^^xsd:string
:b2232870-7950-449a-bc6a-b7f5b14a7c0e sw:isoLanguageCode031 cfihos:60000443
:b2232870-7950-449a-bc6a-b7f5b14a7c0e sw:measurementSystemCode031 cfihos:60001649
:b2232870-7950-449a-bc6a-b7f5b14a7c0e sw:siteCode031 :58acea04-8cfd-4898-8933-5131fa039c79
:b2232870-7950-449a-bc6a-b7f5b14a7c0e sw:plantName "Onshore Processing Facility (OPF)"^^xsd:string



:7286dcc6-c71a-42ff-818e-cb94778dd96d rdf:type sw:Area
:7286dcc6-c71a-42ff-818e-cb94778dd96d sw:areaConcatcode "6000-14"^^xsd:string
:7286dcc6-c71a-42ff-818e-cb94778dd96d sw:plantCode003 :b2232870-7950-449a-bc6a-b7f5b14a7c0e
:7286dcc6-c71a-42ff-818e-cb94778dd96d sw:areaCode "14"^^xsd:string
:7286dcc6-c71a-42ff-818e-cb94778dd96d sw:areaName "Utility area"^^xsd:string
is:
@prefix : <http://www.p1234.xyz-corp.com/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix dm: <http://data.15926.org/dm/> .
@prefix lci: <http://data.15926.org/lci/> .
@prefix meta: <http://data.15926.org/meta/> .
@prefix tpl: <http://data.15926.org/tpl/> .
@prefix rdl: <http://data.15926.org/rdl/> .
@prefix cfihos: <http://data.15926.org/cfihos/> . # local RDL extension
@prefix sw: <http://data.15926.org/sw/> .

# Site 'KAS'
# Declaration - sw:sitecode

:58acea04-8cfd-4898-8933-5131fa039c79 rdf:type dm:SpatialLocation, dm:WholeLifeIndividual, dm:ActualIndividual, rdl:RDS2229881 ;
    rdfs:label "KAS" ;
    meta:hasLifecycleActivity cfihos:60001657 ;
    meta:valEffectiveDate "2019-04-23T00:00:00Z"^^xsd:dateTime .

# sw:measurementSystemCode001
:ffd121e4-ee92-48f9-8f7e-845e4c287c26  rdf:type tpl:ClassificationOfIndividual ;
    rdfs:label "[PLANT SITE] individual [KAS] is classified with [Measurement System] class [SI]"@en ;
    tpl:hasClassified  :58acea04-8cfd-4898-8933-5131fa039c79 ;
    tpl:hasClassifier  cfihos:60001649 ;
    meta:hasLifecycleActivity
cfihos:60001657 ;
    meta:valEffectiveDate "2019-04-23T00:00:00Z"^^xsd:dateTime .

# sw:siteName
:ab2485f6-2462-4689-b56e-2f5f173018b6 rdf:type tpl:ClassifiedIdentificationOfIndividual ;
    rdfs:label "[PLANT SITE] individual [KAS] has an [IDENTIFICATION BY SITE NAME] [Kashagan field]"@en ;
    tpl:hasIdentified  :
58acea04-8cfd-4898-8933-5131fa039c79 ;
    tpl:valIdentifier  "Kashagan field" ;
    tpl:hasIdentificationType  rdl:RDS2226620 ;
    meta:hasLifecycleActivity
cfihos:60001657 ;
    meta:valEffectiveDate "2019-04-23T00:00:00Z"^^xsd:dateTime .

# Plant 6000
#
Declaration - sw:plantCode
:b2232870-7950-449a-bc6a-b7f5b14a7c0e  rdf:type lci:InanimatePhysicalObject, dm:WholeLifeIndividual, dm:ActualIndividual, rdl:RDS7151797 ;
    rdfs:label "6000" ;
    meta:hasLifecycleActivity
cfihos:60001657 ;
    meta:valEffectiveDate "2019-04-23T00:00:00Z"^^xsd:dateTime .

# sw:isoLanguageCode031
:eb4caa20-a3b0-4536-a07d-ec3aa58b73fb rdf:type  tpl:InformationRepresentationOfIndividualInLanguage ;
    rdfs:label "[PLANT] individual [6000] is classified with [Language] class [en]"@en ;
    tpl:hasRepresented  
:b2232870-7950-449a-bc6a-b7f5b14a7c0e ;
    tpl:hasLanguage  cfihos:60000443 ;
    meta:hasLifecycleActivity
cfihos:60001657 ;
    meta:valEffectiveDate "2019-04-23T00:00:00Z"^^xsd:dateTime .

# sw:measurementSystemCode031
:1b98f50b-26ab-475c-bc78-10b7da08c661 rdf:type
tpl:ClassificationOfIndividual ;
    rdfs:label "[PLANT} individual [6000] is classified with [Measurement System] class [SI]"@en ;
    tpl:hasClassified  
:b2232870-7950-449a-bc6a-b7f5b14a7c0e ;
    tpl:hasClassifier  cfihos:60001649 ;
    meta:hasLifecycleActivity
cfihos:60001657 ;
    meta:valEffectiveDate "2019-04-23T00:00:00Z"^^xsd:dateTime .

# sw:siteCode031
:5bcbe778-5a75-4f47-863c-ba9cce6b8c7f rdf:type tpl:RelativeLocationOfIndividual ;
    rdfs:label "[PLANT] individual [6000] is located [INSIDE] [PLANT SITE] individual [KAS]"@en ;
    tpl:hasLocated  
:b2232870-7950-449a-bc6a-b7f5b14a7c0e ;
    tpl:hasLocator
:58acea04-8cfd-4898-8933-5131fa039c799 ;
    tpl:hasRelativeLocationType  rdl:RDS2229920 ;
    meta:hasLifecycleActivity
cfihos:60001657 ;
    meta:valEffectiveDate "2019-04-23T00:00:00Z"^^xsd:dateTime .

# sw:plantName
:7352efd9-04e7-4fac-8087-7f12ebdd5789 rdf:type
tpl:ClassifiedIdentificationOfIndividual ;
    rdfs:label "[PLANT] individual [6000] has an [IDENTIFICATION BY PLANT NAME] [Onshore Processing Facility (OPF)]"@en ;
    tpl:hasIdentified 
:b2232870-7950-449a-bc6a-b7f5b14a7c0e ;
    tpl:valIdentifier  "Onshore Processing Facility (OPF)" ;
    tpl:hasIdentificationType  rdl:RDS2226621 ;
    meta:hasLifecycleActivity
cfihos:60001657 ;
    meta:valEffectiveDate "2019-04-23T00:00:00Z"^^xsd:dateTime .

# Area '14'
# Declaration - sw:areaConcatcode
:7286dcc6-c71a-42ff-818e-cb94778dd96d rdf:type dm:SpatialLocation, dm:WholeLifeIndividual, dm:ActualIndividual, rdl:RDS282689  ;
    rdfs:label "6000-14" ;
    meta:hasLifecycleActivity
cfihos:60001657 ;
    meta:valEffectiveDate "2019-04-23T00:00:00Z"^^xsd:dateTime .

# sw:plantCode003
:ad77c06c-b6a5-475f-a4e2-76c299378e04  rdf:type 
tpl:RelativeLocationOfIndividual ;
    rdfs:label "[PLANT AREA] individual  [6000-14] is located [INSIDE] [PLANT] individual [6000]"@en ;
    tpl:hasLocated  :7286dcc6-c71a-42ff-818e-cb94778dd96d ;
    tpl:hasLocator :b2232870-7950-449a-bc6a-b7f5b14a7c0e ;
    tpl:hasRelativeLocationType 
rdl:RDS2229920 ;
    meta:hasLifecycleActivity
cfihos:60001657 ;
    meta:valEffectiveDate "2019-04-23T00:00:00Z"^^xsd:dateTime .

# sw:areaCode
:3e694767-8a7f-4aa3-a1ee-75e92446a223  rdf:type
tpl:ClassifiedIdentificationOfIndividual ;
    rdfs:label "[PLANT AREA] individual [6000-14] has an [IDENTIFICATION BY PLANT AREA CODE] [14]"@en ;
    tpl:hasIdentified  :
7286dcc6-c71a-42ff-818e-cb94778dd96d ;
    tpl:valIdentifier  "14" ;
    tpl:hasIdentificationType  rdl:RDS222
6641 ;
    meta:hasLifecycleActivity
cfihos:60001657 ;
    meta:valEffectiveDate "2019-04-23T00:00:00Z"^^xsd:dateTime .

# sw:areaName
:f36a3be5-9c57-471d-95b6-d38a457645a2  rdf:type
tpl:ClassifiedIdentificationOfIndividual ;
    rdfs:label "[PLANT AREA] individual [6000-14] has an [IDENTIFICATION BY PLANT AREA NAME] [
Utility area]"@en ;
    tpl:hasIdentified  :
7286dcc6-c71a-42ff-818e-cb94778dd96dd ;
    tpl:valIdentifier  "Utility area" ;
    tpl:hasIdentificationType  rdl:RDS2227020 ;
    meta:hasLifecycleActivity
cfihos:60001657 ;
    meta:valEffectiveDate "2019-04-23T00:00:00Z"^^xsd:dateTime .

This is represented in the following graph, where the metadata are left out for space reasons.
At the lefthand side the declared items are shown and at the righthand side the templates that represent the information about these declared objects.
The circles denote an instance with a UUID as globally unique identifier. The green objects are the template definitions, the blue ones are in some reference data library.
Finally the white objects are for XML Schema Literals.

Note the existence of templates for interrelationship between two declared objects.



The plant information is one large fabric of declared objects and declared templates, referring to these objects and template instances, and to reference data (which are declared objects as well, but you don't have to declare them yourself).

The W3C standard query language SPARQL can be used to fetch exactly that information that you are interested in. Since every declaration and every template instance has an effective date as metadata, older information is not being physically replaced by newer one, but all information stays in storage infinitively. Compare that with sedimentation of clay in a river, or layers of snow in the ice cap of Antarctica. It is possible to find the information that was valid at a particular date-time in the past, or find time series of events through a given period in time.

Since each declaration and each template is autonomous the use of blockchains is considered.

Phase 2 mapping of CFIHOS Properties

So far we have mapped the data base tables and their attributes. This is, for the most, including cross-referencing objects, relating them to RDL items, and identifying/describing them with strings or Booleans.
But there is still a large swath of mappings to be done, relating to quantitative and qualitative properties, of which the latters often are just some essentially unstructured texts in a spreadsheet.

Quantitative properties

Let us begin with the quantitative properties. These are what they seem to be, and there is a set of templates for them. But a complicating aspect of many of the CFIHOS quantitative properties is that they a conflated, i.e. semantically they include other information, mostly of compositional nature. Elsewhere one of the notorious examples has been given:
"normal operating outlet steam pressure auxiliary driver"
for which the following decomposition applies:
where the following instances will have to be declared:
  • the property possessing device, assume here: PUMP SYSTEM
  • AUXILIARY DRIVER 
  • OUTLET
  • (Stream of) STEAM
Mind you, this is a horrible example, but it illustrates the problem: we need four declarations and six templates to explicitly represent that information. This property is attributed to a pump class and it leaves out information because it assumes that the user knows what is meant. But computers aren't that smart, and besides that you have to ask yourself what happens with the integration of information when later it appears to be necessary to put other information about that implied driver and/or outlet and/or stream on record.

It is understood that CFIHOS considers the creation of composition structures for plant items, and that would be recommendable. But it will take a long time, so for now we have to do analyses like the above on the basis of the properties to be mapped and of common sense.

It might be of interest to see the graph of above decomposition:




Quantitative properties

The qualitative properties have "values" that are collected in a pick-list. In most (not all) cases a mapping can be made per pick-list, with specializations of that mapping for each 'value'.
A complete list of all mappings from qualitative property value to ISO 15926-7 templates is in preparation and will be posted here a.s.a.p.. Some 75% will be tpl:SpecializationOfClassOfIndividual in case the property possessor is a Class or tpl:ClassificationOfIndividual in case it is an Individual.
Whenever the Properties per Class have been published in V1.5 specializations of these templates will be created and published.

To give an example, assume that the pump class of the previous example has a qualitative property called 'explosion protection gas group' with a value 'IIA'. In ISO 15926 terms this means that the pump system has been designed as a GROUP IIA APPARATUS that is suitable for all places with an explosive gas atmosphere as defined for CENELEC Group IIA combusion material, as defined in IEC 60079-0.
The graph then looks like this:



The cfihos:60000631 is, in the CFIHOS RDL, marked as subClassOf the IEC class iec:RDS1084229 . Note that the pump system CO-28-P-101 already existed since the previous example and does not have to be declared again but simply referred to. The software shall check whether the possessor already exists.

Planned End-result

The plan is to create a mapping engine that accepts the CFIHOS hand-over data and converts these to a full ISO 15926-7/8 exchange file.

Phase 1 and Phase 2 compared

As explained elsewhere in this website the differences and (dis)advantages of the Phase 1 results vs Phase 2 results are:

Phase 1 results Phase 2 results
Relatively low effort, accepts data as they are made input (but validated)
More preparational work, also to clear up many semantic vaguenesses
No meta data possible (e.g. status, rules, reliabiltiy, etc)
Any number of meta data possible
For batch snapshot purposes only
Supports integration of life-cycle information
Difficult to change or extend the scope
Fully extendable, for example to human and process activities