TIPs - Templates of Information Pattern

latest update: 2018-04-03       

Introduction

Definition

A TIP (Template of Information Pattern) is a statement with two or more variables that, when instantiated, expands into the declaration of zero to many things and/or the declaration of one or more specialized ISO 15926-7 template instances.

Application

TIPs form a bridge between engineering language, often with its shortcuts, and the semantically equivalent set of ISO 15926-7/8 lowered template predicates.

The TIP "signature" is filled out and the mapping software does the rest.

Any TIP is the top of its iceberg. TIPs are there to provide a link between an engineer with his software that has a lot of implicit information, and the world of explicit integrated lifecycle information, which at times is rather verbose.

TIPs are usually applicable for individual data elements, but it is possible to build larger constructs.

 

Input

Each TIP has a "signature" with "variables". The values of the variables are to be fetched from the source document or file.

Output

After completion of the TIP signature and making a selection of the pick-list(s) an ISO 15926-7/8 compliant code listing in Turtle (N3) format is being generated and made output.

 

Procedure

1-Information Model

The data analyst first composes a small information model, like this one:

This makes visible what the, often hidden, information structure is.

2-Declare missing objects

Normally information is, directly or indirectly, related to something that is already known to the observer (if not, the information may be rather meaningless). In this example the pressure rated artefact, such as a pressure vessel, is known, because the "test pressure" is information about it, be it indirectly as we can see from the information model.

So the activity HYDROSTATIC TESTING and the fluid used for that testing shall be declared here.

These declared objects get, in most cases, a subtag of the main object that was already known, unless the source application already has made them explicit.

3-Represent interrelations

Using the applicable templates, selected from here, the relations between the objects in the above information model are being represented.

Class or Individual

When writing the CONSTRUCT statement it is important to properly decide on the question whether this information applies to an Individual thing or to a Class of Individuals

Without implying that further study on this is unimportant, it is possible to give a few rules of thumb:

  1. All information related to Engineering & Design is at Class level, with the exception of topological information found on functional diagrams (e.g. P&IDs) or in 3D models
  2. All information related to Procurement, Manufacturing, Logistics, Construction, Operations and Maintenance is at (actual) Individual level, except for procedures, rules and regulations.

Typical TIPs

Given the fact that there are many thousands data fields passing by during the life of a plant, it isn't very wise to try to build a TIP for each and every such data. Due to the generic character of the ISO 15926 data model, a TIP can be re-used multiple times, with only one or a few variations in the input of the signature. That is why the name is about "information patterns".

Pick-lists

At places in the TIP signature where multiple values are possible (and one has to be selected) use can be made of pick-lists. Constructing those, if so required company-defined, pick-lists also limit the chances of incorrect choices or misspellings.

TIP names

Tip names shall be informative for an engineer, and that applies as well to the names of the variables. The TIP name is the ID of that TIP type. For example:

   :710F6CC1777346C18230A7EBD3505655 rdf:type tip:DocumentRefersToClassOfIndividual ; # for example: pump specification BR-43805 rev. 2 is referred to on Purchase Order Xp-54043

For Individuals distinction shall be made between designed Individuals (those in a topology, see above) and actual Individuals (those who exist in the real world). One example for each:

   :A4BF55C8E36A406D976F6A49AAC619C3 rdf:type tip:DocumentRefersToDesignedIndividual ; # for example: pump P-101 is referred to on P&ID P12345-rev.1

   :74FBB77E5D38403AB618DC98B770F9E0 rdf:type tip:DocumentRefersToActualIndividual ; # for example: pump with serial number RU-43983 is referred to on Test Report T84427

Accessibility

TIP definitions are accessible here. NOTE - This is Work In Progress!! They can be freely copied, changed, and used.

"Old" TIPs

In recent years industry and software representatives in the USA and Great Britain have put together an extensive list of 406 TIPs. This list can be found here.

These "old" TIPs will be, over time, mapped to the TIPs defined in this topic.

Heading

Each output file starts with a heading like this one:

    @prefix : <http://data.xyz.org/p1234/> . # just a fantasy URI for project p1234 of the XYZ inc.

    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . # defines Literals (text, dateTimes, numbers, etc)

    @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#> . # defines metadata

    @prefix meta: <http://data.15926.org/meta/> . # defines ISO 15926-specific metadata

    @prefix dm: <http://data.15926.org/dm/> . # defines the ISO 15926-2 data model

    @prefix edm: <http://data.15926.org/lci/> . # defines an extension of the ISO 15926-2 data model

    @prefix tpl: <http://data.15926.org/tpl/> . # defines the ISO 15926-7 templates

    @prefix rdl: <http://data.15926.org/rdl/> . # defines the ISO 15926-4 reference data

    @prefix xyzrdl: <http://data.xyz.org/rdl/> . # just a fantasy URI for an RDL extension of the XYZ inc. (if any)

The user-defined URIs can be inputted by the user.


Mapping

As explained above, each TIP has, like the templates, a "signature", so a number of fields that have to be filled (the yellow part). By the way, there is also a TIP variant of each template.

Nowadays it is fashionable to have a "Data Lake", but in essence that is a collection of "data pools", one per application. It helps to make data access easier.

One can map the necessary data from, for example, a name in the data lake to an RDL Class in the signature, or a dateTime from an internal format to the XML Schema format used in the Semantic Web world.

As explained below, for each TIP a Generic Code is stored, in which the yellow fields, as shown in above diagram, are then populated. That results in a Part 8 file.

This file is passed through a SHACL validator (Part 10) and, if correct, uploaded to a triple store that stores the integrated life-cycle information of the plant or a part thereof.

Querying

In order to obtain application-specific reference data, one or more SPARQL queries can be fired to that triple store, and the query results are then imported, after mapping, into the application for which the query results were intended.

Every application that is used in the life cycle of the plant can, with the proper access rights, retrieve exactly the data that it needs, and when it needs it, through such queries.


Detailed description of a use case

Hydrostatic Test Fluid

In the normal work process first the type of fluid for hydrostatic testing is defined. This is represented with the TIP HydrostaticTestFluidOfClassOfInanimatePhysicalObject.

INFORMATION MODEL

SIGNATURE

Variable

Description of Variable

Example of value

var_Type

tip:HydrostaticTestFluidOfClassOfInanimatePhysicalObject

N/A

var_TestedObjectTag

Tag number of the instance of ClassOfInanimatePhysicalObject whose members shall be tested

CO_B14-P-101

var_ActivityTagSuffix

User-defined suffix for the creation of a subtag for the declared instance of ClassOfActivity

-HYA

var_LiquidTagSuffix

User-defined suffix for the creation of a subtag for the declared instance of ClassOfCompound

-HYF

var_LiquidClass

The RDL-number of the applicable fluid type, as derived and taken from a pick-list

:AF0B1EB363944B4AAB4FF8CCA66B804A

var_EffectiveDateValue

The effectivity xsd:dateTime of the information represented here

2017-09-10T14:57:00Z

in which we see a pick-list for the acceptable compound types (water or oil) for the test fluid. This pick-list is defined as follows:

    :AF0B1EB363944B4AAB4FF8CCA66B804A var_Type tip:DeclarationOfEnumeratedSetOfClass ;

        var_EntityType dm:EnumeratedSetOfClass ;

        var_Label "POSSIBLE TEST FLUIDS" ;

        var_EffectiveDate "2017-09-10T14:57:00Z"^^xsd:dateTime .

     

    :D20FACFFAE3B47F3B9A55966613E4079 var_Type tip:EnumerationOfClass ;

        var_Set :AF0B1EB363944B4AAB4FF8CCA66B804A

        var_Member  rdl:RDS1012769 ; # WATER

        var_EffectiveDate  "2017-09-10T14:57:00Z"^^xsd:dateTime .

     

    :A84476E4761D4753AF55EA9CEE0339E5 var_Type tip:EnumerationOfClass ; 

        var_Set :AF0B1EB363944B4AAB4FF8CCA66B804A

        var_Member  rdl:RDS8641857 ; # OIL

        var_EffectiveDate  "2017-09-10T14:57:00Z"^^xsd:dateTime .

The above TIP signature is mapped (once only) to the following generic code in the ISO 15926-8 style:

# DECLARED OBJECTS (NOTE - It is assumed that the tested object has already been declared)

 

# Declaration of testing activity class

  

id({var_TestedObjectTag}{var_ActivityTagSuffix}) rdf:type dm:ClassOfActivity ;

    var_SubClassOf rdl:RDS9706787 ; # HYDROSTATIC TESTING

    var_Label "{var_TestedObjectTag}{var_ActivityTagSuffix}" ;

    var_EffectiveDate "var_EffectiveDateValue"^^xsd:dateTime .

 

# Declaration of test liquid class

  

id({var_TestedObjectTag}{var_LiquidTagSuffix}) rdf:type dm:ClassOfCompound ;

    var_SubClassOf rdl:RDS427094 ; # LIQUID COMPOUND

    var_Label "{var_TestedObjectTag}{var_LiquidTagSuffix"} ;

    var_EffectiveDate "var_EffectiveDateValue"^^xsd:dateTime .

  

# Declaration of Templates

  

# Participation of tested object in hydrostatic testing activity

  

id() rdf:type tip:ClassOfParticipationDefinition ;

    var_ActivityType id({var_TestedObjectTag}{var_ActivityTagSuffix}) ; # declared hydrostatic testing activity class

    var_ParticipantType id(var_TestedObjectTag) ; # declared tested object class

    var_ParticipantRole rdl:RDS2221130 ; # TESTED OBJECT

    var_CardinalityOfActivity rdl:RDS222625 ; # 1:1

    var_CardinalityOfParticipant rdl:RDS222625 ; # 1:1

    var_EffectiveDate "var_EffectiveDateValue"^^xsd:dateTime .

  

# Participation of test liquid in hydrostatic testing activity

  

id() rdf:type tip:ClassOfParticipationDefinition ;

    var_ActivityType id({var_TestedObjectTag}{var_ActivityTagSuffix}); # declared hydrostatic testing activity class

    var_ParticipantType id({var_TestedObjectTag}{var_LiquidTagSuffix}) ; ; # declared test liquid class

    var_ParticipantRole rdl:RDS2221131 ; # TEST FLUID

    var_CardinalityOfActivity rdl:RDS222624 ; # 0:1

    var_CardinalityOfParticipant rdl:RDS222625 ; # 1:1

    var_EffectiveDate "var_EffectiveDateValue"^^xsd:dateTime .

  

# Defining the type of test liquid

  

id() rdf:type tip:SpecializationByCompoundType ;

    var_SubClass id({var_TestedObjectTag}{var_LiquidTagSuffix}) ; # declared test liquid class

    var_SuperClass id(var_LiquidClassName) ;

    var_EffectiveDate "var_EffectiveDateValue"^^xsd:dateTime .

 

and the TIP signature with the shown population then is converted to:

# Declaration of hydrostatic testing activity class

 

:AE09F7317D6C43D29BEC846F33054FCC rdf:type dm:ClassOfActivity ;

    rdfs:subClassOf rdl:RDS9706787 ; # HYDROSTATIC TESTING

    rdfs:label "CO_B14-P-101-HYA" ;

    meta:valEffectiveDate "2017-09-10T14:57:00Z"^^xsd:dateTime .

 

# Declaration of test liquid class

  

:4B739063FBB04922A40D89A440F018C8 rdf:type dm:ClassOfCompound ;

    rdfs:subClassOf rdl:RDS427094 ; # LIQUID COMPOUND

    rdfs:label "CO_B14-P-101-HYF" ;

    meta:valEffectiveDate "2017-09-10T14:57:00Z"^^xsd:dateTime .

  

# Declaration of Templates

  

# Participation of tested object in hydrostatic testing activity

  

:78F5B30CF8D34D53B77A6B52DDB148A4 rdf:type tpl:ClassOfParticipationDefinition ;

    tpl:hasActivityType :AE09F7317D6C43D29BEC846F33054FCC ; # declared hydrostatic testing activity class

    tpl:hasParticipantType :2E06E4C1C33948AF9981B9DC83C63BDE ; # tested object class,

    tpl:hasParticipantRole rdl:RDS2221130 ; # TESTED OBJECT

    tpl:hasCardinalityOfActivity rdl:RDS222625 ; # 1:1

    tpl:hasCardinalityOfParticipant rdl:RDS222625 ; # 1:1

    meta:valEffectiveDate "2017-09-10T14:57:00Z"^^xsd:dateTime .

  

# Participation of test liquid in hydrostatic testing activity

  

:2FA3EDCDE9684D63AF013D7714A06FF3 rdf:type tpl:ClassOfParticipationDefinition ;

    tpl:hasActivityType :AE09F7317D6C43D29BEC846F33054FCC ; # declared hydrostatic testing activity class

    tpl:hasParticipantType :4B739063FBB04922A40D89A440F018C8 ; ; # declared test liquid class

    tpl:hasParticipantRole rdl:RDS2221131 ; # TEST FLUID

    tpl:hasCardinalityOfActivity rdl:RDS222624 ; # 0:1

    tpl:hasCardinalityOfParticipant rdl:RDS222625 ; # 1:1

    meta:valEffectiveDate "2017-09-10T14:57:00Z"^^xsd:dateTime .

  

# Defining the type of test liquid

  

:9C08C24EC53442E8BB9E21666EC5C2BD rdf:type tpl:SpecializationByCompoundType ;

    tpl:hasSubClass :4B739063FBB04922A40D89A440F018C8 ; # declared test liquid class

    tpl:hasSuperClass rdl:RDS1012769 ; # WATER

    meta:valEffectiveDate "2017-09-10T14:57:00Z"^^xsd:dateTime .

 


Hydrostatic Test Pressure

Then follows the definition of the test pressure, using the TIP HydrostaticTestPressureOfClassOfInanimatePhysicalObject

INFORMATION MODEL

SIGNATURE

Role Variable

Description of Variable

Example of value

var_Type

tip:HydrostaticTestPressureOfClassOfInanimatePhysicalObject

N/A

var_TestedObjectTag

Tag number of the instance of ClassOfInanimatePhysicalObject whose members shall be hydrostaticallytested

CO_B14-P-101

var_LiquidTagSuffix

Suffix for the creation of a subtag for the instance of ClassOfCompound

-HYF

var_PressureValue

Value of the required test pressure, quantified against var_ScaleName

100

var_ScaleId

Scale from RDL, for quantifying the test pressure

:07A8F9AFD1D9451785D621188D81B7ED

var_EffectiveDateValue

The effectivity xsd:dateTime of the information represented here

2017-09-10T14:57:00Z

in which we see a pick-list for the acceptable Scales for the test pressure. This pick-list is defined as follows:

    :07A8F9AFD1D9451785D621188D81B7ED var_Type tip:DeclarationOfEnumeratedSetOfClass    

        var_EntityType  dm:EnumeratedSetOfClass ;

        var_Label   "SCALE FOR TEST PRESSURE"   ;

        var_EffectiveDate  "2017-09-10T14:57:00Z"^^xsd:dateTime .

     

    :D20FACFFAE3B47F3B9A55966613E4079 var_Type tip:EnumerationOfClass ;

        var_Set :07A8F9AFD1D9451785D621188D81B7ED

        var_Member  rdl:RDS2226609  ; # kPa

        var_EffectiveDate  "2017-09-10T14:57:00Z"^^xsd:dateTime .

     

    :A84476E4761D4753AF55EA9CEE0339E5 var_Type tip:EnumerationOfClass ; 

        var_Set :07A8F9AFD1D9451785D621188D81B7ED

        var_Member  rdl:RDS1348874 ; # barg

        var_EffectiveDate  "2017-09-10T14:57:00Z"^^xsd:dateTime .

     

    :28C6AFFC652B4A1285562FCB99D99A79 var_Type tip:EnumerationOfClass ; 

        var_Set :07A8F9AFD1D9451785D621188D81B7ED

        var_Member  rdl:RDS1341899 ; # psig

        var_EffectiveDate  "var_EffectiveDateValue"^^xsd:dateTime .

The above TIP signature is mapped (once only) to the following generic code in the ISO 15926-8 style:

# Declaration of test liquid class (first check if it already exists, if so ignore this declaration)

  

id({var_TestedObjectTag}{var_LiquidTagSuffix}) rdf:type dm:ClassOfCompound ;

    var_SubClassOf rdl:RDS427094 ; # LIQUID COMPOUND (fixed value)

    var_Label "{var_TestedObjectTag}{var_LiquidTagSuffix"} ;

    var_EffectiveDate "var_EffectiveDateValue"^^xsd:dateTime .

# Declaration of template for the test pressure

  

id() rdf:type tip:ClassOfIndividualHasPropertyWithValue ;

    var_PossessorType :id({var_TestedObjectTag}{var_LiquidTagSuffix}) ;

    var_PropertyType rdl:RDS7345161 ; # GAUGE PRESSURE (fixed value)

    var_PropertyValue "var_PressureValue"^^xsd:decimal ;

    var_Scale :id(var_ScaleId) ;

    var_EffectiveDate "var_EffectiveDateValue"^^xsd:dateTime .

 

and the TIP signature with the shown population (and assuming the test fluid has already been declared) is then converted to:

:C0C94D2B08834F959DF85579D898DF5E rdf:type tpl:ClassOfIndividualHasPropertyWithValue ;

    tpl:hasPossessorType :4B739063FBB04922A40D89A440F018C8 ; # the declared Test Liquid in above use case, ID found via above :id({var_TestedObjectTag}{var_LiquidTagSuffix})

    tpl:hasPropertyType rdl:RDS7345161 ; # GAUGE PRESSURE (fixed value)

    tpl:valPropertyValue "100"^^xsd:decimal ;

    tpl:hasScale rdl:RDS1330559 ; # BAR GAUGE

    meta:valEffectiveDate "2017-09-10T14:57:00Z"^^xsd:dateTime .