Mapping of structured documents

latest update: 2017-09-12    

Introduction

A "document" in this context is structured such a spreadsheet, a set of tables, a P&ID, etc.

This topic explains a way to model such a document in ISO 15926-8 format.

Procedure

Mapping is done in four steps:

1. Find all placeholders of information in the document and declare those (see topic "Declaring an object");

2. Draft an information model, in which all placeholders are interrelated, thus forming one integrated network;

3. Map those relations to ISO 15926-7 templates (see "Template Specifications");

4. Attribute all information in the document to its placeholder, also using ISO 15926-7 templates or TIPs.

 

Example Information Model

Below is an example information model of a part of a pump data sheet.

 

CASING SPLIT AXIAL

RADIAL

 
CASING TYPE SINGLE VOLUTE DOUBLE VOLUTE DIFFUSER  
CASING PRESSURE kg/cm2 g MAX. ALLOWABBLE @ PT 145 HYDRO 235 @ 38 C

 

On the data sheet the following data are being attributed to the pump casing:

  • CASING SPLIT: ONEOF[AXIAL, RADIAL]
  • CASING TYPE: ONEOF[SINGLE VOLUTE, DOUBLE VOLUTE, DIFFUSER]
  • CASING PRESS (kg/cmg): MAX ALLOW@PT (PT = Pumping Temperature)
  • CASING PRESS (kg/cmg) - HYDRO @ 38 C

This translates to the following template types:

using the following identifiers from the RDL:

  • CASING SPLIT: ONEOF[ rdl:RDS881279  , rdl:RDS881324 ]
  • CASING TYPE: ONEOF[ rdl:RDS1013264  , rdl:RDS1013219  , rdl:RDS881414 ]
  • CASING PRESS (kg/cmg) - MAX ALLOW@PT : rdl:RDS2227071  
  • CASING PRESS (kg/cmg) - HYDRO @ 38 C  : rdl:RDS361349

 

Example Code Listing

#DECLARATION OF INFORMATION PLACEHOLDERS (marked red and purple)

 

#Declaration of PUMP REQUIREMENTS CLASS

:3B7C59BF63BA42C79BB973727EB55D50 rdf:type dm:ClassOfInanimatePhysicalObject ;

    rdfs:subClassOf rdl:RDS327239 ;

    rdfs:label "P-101" ;

    meta:valEffectivedate "2015-07-24T00:00:00Z"^^xsd:dateTime .

 

#Declaration of PUMP CASING CLASS

:BEED18C0AF89402CA6995928ED41B4D6 rdf:type dm:ClassOfInanimatePhysicalObject ;

    rdfs:subClassOf rdl:RDS461204 ;

    rdfs:label "P-101-CAS" ; # subtag, user-defined

    meta:valEffectivedate "2015-07-24T00:00:00Z"^^xsd:dateTime .

 

#DECLARATION OF TEMPLATES DEFINING THE INTERRELATIONS BETWEEN PLACEHOLDERS

 

#PUMP CASING CLASS is a (class of) part of PUMP REQUIREMENTS CLASS

:663D5DEB49F948BA8032FAA3A8ADB675 rdl:type tpl:ClassOfAssemblyDefinition ;

    tpl:hasClassOfWhole :3B7C59BF63BA42C79BB973727EB55D50 ;

    tpl:hasClassOfPart :BEED18C0AF89402CA6995928ED41B4D6 ;

    tpl:hasCardinalityOfWhole rdl:RDS222625 ;

    tpl:hasCardinalityOfPart rdl:RDS222625 ;

    meta:valEffectivedate "2015-07-24T00:00:00Z"^^xsd:dateTime .

 

#DECLARATION OF TEMPLATES DEFINING THE INFORMATION ATTRIBUTED TO THE PLACEHOLDERS OTHER THAN ABOVE INTERRELATIONS

 

#CASING SPLIT is AXIAL

:48D74CEA69A748D280C8C48F9D0FCA86 rdf:type tpl:SpecializationOfClassOfIndividual ;

    tpl:hasSubClass :BEED18C0AF89402CA6995928ED41B4D6 ;

    tpl:hasSuperClass rdl:RDS881279 ;

    meta:valEffectivedate "2015-07-24T00:00:00Z"^^xsd:dateTime .

 

#CASING TYPE is SINGLE VOLUTE

:21D812E81F4C41909F697EB30EE56216  rdf:type tpl:SpecializationOfClassOfIndividual ;

    tpl:hasSubClass :BEED18C0AF89402CA6995928ED41B4D6 ;

    tpl:hasSuperClass rdl:RDS1013264 ;

    meta:valEffectivedate "2015-07-24T00:00:00Z"^^xsd:dateTime .

 

#CASING has MAX ALLOW@PT

:73BB313FAFB1446EA8C1F7C623E6BD86 rdf:type tpl:ClassOfIndividualHasIndirectPropertyWithMaximumValue ;

    tpl:hasPossessorType :BEED18C0AF89402CA6995928ED41B4D6 ;

    tpl:hasIndirectPropertyType rdl:RDS2227070 ;

    tpl:valMaximumValue "105"^^xsd:decimal ;

    tpl:hasScale rdl:RDS2223604 ; # KILOGRAM PER SQUARE CENTIMETRE GAUGE

    meta:valEffectivedate "2015-07-24T00:00:00Z"^^xsd:dateTime .

 

:ID_TPL65A rdf:type tip:HydrostaticTestFluidOfClassOfIndividual ;

    tip:role1 "P-101" ;

    tip:role2 "-HYA" ;

    tip:role3 "-HYF" ;

    tip:role4 RDS1012769 ; # WATER

    tip:role5 ""^^xsd:dateTime .

 

:ID_TPL65B rdf:type tip:HydrostaticTestPressureOfClassOfIndividual ;

    tip:role1 "P-101" ;

    tip:role2 "-HYF" ;

    tip:role3 "235"^^xsd:decimal ;

    tip:role4 rdl:RDS2223604 ; # KILOGRAM PER SQUARE CENTIMETRE GAUGE (REVISED RDS NUMBER)

    tip:role5 ""^^xsd:dateTime .

 

#NOTE This use of TIPs is still experimental; TIPs can be used in cases where one template cannot represent the semantics of the information.

 

#The above TIP instances 'explode to the following declared objects and templates:

 

#Declaration of the hydrostatic tesing class via Role2 of above :ID_TPL65A

:5BE87E25F94F4A46829EC7897FC847CB rdf:type dm:ClassOfActivity ;

    rdfs:subClassOf rdl:RDS9706787 ; # HYDROSTATIC TESTING

    rdfs:label "P-101-HYA" ;

    meta:valEffectiveDate "2015-07-24T00:00:00Z"^^xsd:dateTime .

 

# Declaration of test liquid class via Role2 of above :ID_TPL65B

:D2B33200CF0A4B33B4A130DFB633C46B rdf:type dm:ClassOfCompound ;

    rdfs:subClassOf rdl:RDS427094 ; # LIQUID COMPOUND

    rdfs:label "P-101-HYF" ;

    meta:valEffectiveDate "2015-07-24T00:00:00Z"^^xsd:dateTime .

 

# Participation of tested object in hydrostatic testing activity

:CAFD3FBC150D4D7697423520A860D8A3 rdf:type tpl:ClassOfParticipationDefinition ;

    tpl:hasActivityType :5BE87E25F94F4A46829EC7897FC847CB ; # declared hydrostatic testing activity class

    tpl:hasParticipantType :BEED18C0AF89402CA6995928ED41B4D6 ; # PUMP CASING CLASS

    tpl:hasParticipantRole rdl:RDS2221130 ; # TESTED OBJECT

    tpl:hasCardinalityOfActivity rdl:RDS222625 ; # 1:1

    tpl:hasCardinalityOfParticipant rdl:RDS222625 ; # 1:1

    meta:valEffectiveDate "2015-07-24T00:00:00Z"^^xsd:dateTime .

 

# Participation of test liquid in hydrostatic testing activity

:83FC67A8C0A24EFAB44DA62F792DCF1A rdf:type tpl:ClassOfParticipationDefinition ;

    tpl:hasActivityType :5BE87E25F94F4A46829EC7897FC847CB ; # declared testing activity class

    tpl:hasParticipantType :D2B33200CF0A4B33B4A130DFB633C46B ; ; # declared test liquid class

    tpl:hasParticipantRole rdl:RDS2221131 ; # TEST FLUID

    tpl:hasCardinalityOfActivity rdl:RDS222624 ; # 0:1

    tpl:hasCardinalityOfParticipant rdl:RDS222625 ; # 1:1

    meta:valEffectiveDate "2015-07-24T00:00:00Z"^^xsd:dateTime .

 

# Defining the type of test liquid

:2B8E8834C6744E468104732E5964108D rdf:type tpl:SpecializationByCompoundType ;

    tpl:hasSubClass :D2B33200CF0A4B33B4A130DFB633C46B ; # declared test liquid class

    tpl:hasSuperClass rdl:RDS1012769 ; # WATER

    meta:valEffectiveDate "2015-07-24T00:00:00Z"^^xsd:dateTime .

 

:A9E22A2DEAD448B281B3A8AB87DA60D4 rdf:type tpl:ClassOfIndividualHasPropertyWithValue ;

    tpl:hasPossessorType :D2B33200CF0A4B33B4A130DFB633C46B ;

    tpl:hasPropertyType rdl:RDS7345161 ; # GAUGE PRESSURE

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

    tpl:hasScale rdl:RDS2223604 ; # KILOGRAM PER SQUARE CENTIMETRE GAUGE

    meta:valEffectivedate "2015-07-24T00:00:00ZZ"^^xsd:dateTime .

 

Generic coding

For actual mapping purposes it is necessary to work with variables and pick lists.

The above code is generalized here:

#DECLARATION OF INFORMATION PLACEHOLDERS (marked red and purple)

 

#Declaration of PUMP REQUIREMENTS CLASS

:ID6 rdf:type dm:ClassOfInanimatePhysicalObject ;

    rdfs:subClassOf rdl:RDS327239 ; # PUMP

    rdfs:label "var_ID6" ;

    meta:valEffectivedate ""^^xsd:dateTime .

 

#Declaration of PUMP CASING CLASS

:ID2 rdf:type dm:ClassOfInanimatePhysicalObject ;

    rdfs:subClassOf rdl:RDS13029297 ; # CASING (RED NUMBER REVISED)

    rdfs:label "var_ID1-CAS" ;

    meta:valEffectivedate ""^^xsd:dateTime .

 

#DECLARATION OF TEMPLATES DEFINING THE INTERRELATIONS BETWEEN PLACEHOLDERS

 

#PUMP CASING CLASS is a (class of) part of PUMP REQUIREMENTS CLASS

:ID-TPL1 rdl:type tpl:ClassOfAssemblyDefinition ;

    tpl:hasClassOfWhole :ID1 ;

    tpl:hasClassOfPart :ID2 ;

    tpl:hasCardinalityOfWhole rdl:RDS222625 ;

    tpl:hasCardinalityOfPart rdl:RDS222625 ;

    meta:valEffectivedate ""^^xsd:dateTime .

 

#DECLARATION OF TEMPLATES DEFINING THE INFORMATION ATTRIBUTED TO THE PLACEHOLDERS OTHER THAN ABOVE INTERRELATIONS

 

#CASING SPLIT is AXIAL

:ID-TPL2 rdf:type tpl:SpecializationOfClassOfIndividual ;

    tpl:hasSubClass :ID2 ;

    tpl:hasSuperClass esco:ESOC0009  ; # Picklist, alternatively it can be fixed with one RDF identifier. See next paragraph.

    meta:valEffectivedate ""^^xsd:dateTime .

 

#CASING TYPE is SINGLE VOLUTE

:ID-TPL3 rdf:type tpl:SpecializationOfClassOfIndividual ;

    tpl:hasSubClass :ID2 ;

    tpl:hasSuperClass esco:ESOC0010 ;  # Picklist, alternatively it can be fixed with one RDF identifier. See next paragraph.

    meta:valEffectivedate ""^^xsd:dateTime .

 

#CASING has MAX ALLOW@PT

:ID-TPL4 rdf:type tpl:ClassOfIndividualHasIndirectPropertyWithMaximumValue ;

    tpl:hasPossessorType :ID2 ;

    tpl:hasIndirectPropertyType rdl:RDS2227070 ;

    tpl:valMaximumValue "var_Value"^^xsd:decimal ;

    tpl:hasScale rdl:RDS2223604 ; # KILOGRAM PER SQUARE CENTIMETRE GAUGE (to keep this generic, use a picklist)

    meta:valEffectivedate ""^^xsd:dateTime .

 

#CASING contains HYDROSTATIC TEST FLUID

:ID-TPL5 rdf:type tip:HydrostaticTestFluidOfClassOfIndividual ;

    tip:role1 "var_TestedObjectTag" ;

    tip:role2 "var_ActivityTagSuffix" ;

    tip:role3 "var_LiquidTagSuffix" ;

    tip:role4 "var_LiquidClass" ; # Instead var_LiquidClass the liquid type for hydrostatic testing may be on a Picklist or even fixed with one RDF dientifier

    tip:role5 "var_dateTime" ;

 

#CASING has HYDROSTATIC TEST PRESSURE (NOTE)

:ID-TPL6 rdf:type tip:HydrostaticTestPressureOfClassOfIndividual ;

    tip:role1 "var_TestedObjectTag" ;

    tip:role2 "var_LiquidTagSuffix" ;

    tip:role3 "var_PressureValue" ;

    tip:role4 "var_Scale" ; # Instead var_Scale the pressure xcale for hydrostatic testing may be on a Picklist or even fixed with one RDF dientifier.

    tip:role5 "var_dateTime" ;

NOTE - An alternative for :ID2 would be :var_ID1-CAS.id meaning the ID belonging to the label var_ID1-CAS , fetchable with a simple SPARQL query.

Pick-lists

On ISO 15926 standard pick-lists will be set-up and be accessible on endpoint http://data.15926.org/esoc/ . For example all ASME B16.5 Flange sizes. 

A pick-list is an instance of dm:EnumeratedSetOfClass of which one to many RDL classes are members by means of one of two template types.

Examples are:

#Declaration of EnumeratedSetOfClass instance that is the core of a pick-list:

:ESOC0004 rdf:type dm:EnumerateSetOfClass ;

    rdfs:label "Picklist for ASME B16.5 FLANGE SIZES" ;

    meta:valEffectivedate "2017-09-09T00:00:00Z"^^xsd:dateTime

  

#Declaration of template that allocates one size to above pick-list:

:ESOC00004.007 rdf:type tpl:PicklistOfClassesWithPromptAndValue ;

    tpl:valPrompt "SIZE IN." ;

    tpl:valValue "4" ;

    tpl:hasClassified rdl:RDS20863408250 ;

    tpl:hasClassifier :ESOC0004 ;

    meta:valEffectivedate "2017-09-02T00:00:00Z"^^xsd:dateTime .

and one for selections:

#Local declaration of EnumeratedSetOfClass instance that is the core of a pick-list:

:ESOC0012 rdf:type dm:EnumerateSetOfClass ;

    rdfs:label "Picklist for BEARING TYPES" ;

    meta:valEffectivedate "2017-09-09T00:00:00Z"^^xsd:dateTime

  

#Local declaration of template that allocates one size to above pick-list:

:ESOC00004.007 rdf:type tpl:PicklistOfClassesWithPromptAndBooleanValue ;

    tpl:valPrompt "RADIAL" ;

    tpl:valValue "true"^^xsd:boolean ;

    tpl:hasClassified rdl:RDS6810280 ; # RADIAL BEARING

    tpl:hasClassifier :ESOC0004 ;

    meta:valEffectivedate "2017-09-02T00:00:00Z"^^xsd:dateTime .

This is Work In Progress.

Mapping

For each data element in the document that needs to be mapped (by the way, that is, from a business point of view, not always required) a script must be written that, in many cases, uses the value of one or more other data elements.

The data on data sheets are either:

  • prompts with associated literals that lead to the proper templates via the applicable script
  • literals (numbers, strings)
  • radio buttons or Y / N choices, that select whether the associated information is applicable; if not, the related template(s) shall not be generated.

ESOCs (see above) shall be used to map a prompt to an RDL class, or validate already mapped data.

That script shall, where possible, contain validation rules to check whether the data are well-formed (e.g. checking decimal comma (23,7) or period (23.7) ) or accepting and mitigating the most common cases of sloppiness.