Declaring an object

Latest update: 2017-09-09        


  

Introduction

In Part 8 Annex C we find:

C.8.1 Declaration

Where in OWL resources are normally not declared, this is mandatory in this part of ISO 15926.

The only exception is that any temporal part, being the rdf:object of a template property, shall not be explicitly declared.

(side note: now a classOf(Temporal)Part of an Class should be added, see also here).

This paper deals with that declaration requirement.

Discussion

There was a dispute about declaration. Some members of the 15926 community were of the opinion that by using the ClassificationOfIndividual template that PossibleIndividual is well enough declared:

:593F4EF8DAF9400D83327BFB6FFE8731 rdf:type tpl:ClassificationOfIndividual ;

      tpl:hasClassified :C8A372E23B124B44AB32E32065507A85 ; # P-101

      tpl:hasClassifier rdl:RDS327239 ; # PUMP

      meta:valEffectiveDate "2004-11-24T14:57:00Z"^^xsd:dateTime .

This is not enough, because it does not define whether C8A372E23B124B44AB32E32065507A85 is a FunctionalPhysicalObject or a MaterializedPhysicalObject, or wether or not it is a WholeLifeIndividual or an ActualIndividual.

In ISO 15926 declaring objects means that the objects are typed with one or more applicable ISO 15926-2 entity types, thus firmly founding these objects. The dispute has been settled.

Solution

Classes

When an instance of a (Part 2) Class is declared the following information must be given:

  • the ID of the declared Class (usually a GUID or UUID);
  • the applicable instance of a Part 2 entity type;  
  • the  instance(s) of ClassOfFunctionalObject in the RDL (e.g. VESSEL or PUMP) of which the Class is a subclass;
  • the label with the identifier valid at declaration time or, alternatively, a descriptive identification;
  • the dateTime this declaration became effective.

A typical example is the code for knock out drum class.

First it is declared as being a member of VESSEL, and then it is made a KNOCK OUT VESSEL, being a specialization of VESSEL. The reason for this two-step approach is that a template can easily be replaced with another one, but changing the type of a declared object is complicated.

NOTE: Use an instance of ClassOfFunctionalObject unless that is not in the RDL, else the highest in the hierarchy of relevant instances of the applicable subclassof ClassOfArrangedIndividual. 

:AECD286079EF4CB394554D4D2342CCD5 rdf:type dm:ClassOfInanimatePhysicalObject ;

    rdfs:subClassOf rdl:RDS414674 ; # VESSEL

    rdfs:label "CO_B14-V-101" ;

    meta:valEffectiveDate "2004-11-24T14:57:00Z"^^xsd:dateTime .

and later, e.g. based on P&ID information:

:8F109CBC01AC40E2A0A066B54A1218F6 rdf:type tpl:SpecializationOfClassOfIndividual ;

    tpl:hasSubClass :CAECD286079EF4CB394554D4D2342CCD5 ;

    tpl:hasSuperClass rdl:RDS43167567209 ; # KNOCK OUT VESSEL

    meta:valEffectiveDate "2004-11-24T14:57:00Z"^^xsd:dateTime .

Assume that, for some reason, the ID is changed from AECD286079EF4CB394554D4D2342CCD5 to 926AC172CB4E48F7BA2FF9DA823D5DC0 at a later date, then the following happens:

:926AC172CB4E48F7BA2FF9DA823D5DC rdf:type dm:ClassOfInanimatePhysicalObject ;

    owl:sameAs :AECD286079EF4CB394554D4D2342CCD5 ;

    meta:valEffectiveDate "2006-10-14T09:32:00Z"^^xsd:dateTime .

In cases where the new ID has been created independently, by error or else, and is not deprecating the old ID, both ID's can co-exist (for a while). owl:sameAs is transitive, so information about the one also applies to the other. Ultimately though, the sooner the better, one of both shall be deprecated and the still valid templates about it shall be referring to the remaining ID. This can be done with SPARQL Update DELETE/INSERT.

PREFIX p1234: <http://p1234.example.org/data#>

WITH <http://p1234.example.org/data#>

DELETE { ?s ?p p1234:AECD286079EF4CB394554D4D2342CCD5 }

INSERT { ?s ?p p1234:926AC172CB4E48F7BA2FF9DA823D5DC }

WHERE  { ?s ?p p1234:AECD286079EF4CB394554D4D2342CCD5 }

Deprecating a Class

In case the relevance of any instance of Part 2 ClassOfIndividual ends, this shall be recorded as follows:

:926AC172CB4E48F7BA2FF9DA823D5DC meta:valDeprecationDate "2014-02-15T12:55:00Z"^^xsd:dateTime .

The validity of all templates in which this Class plays a role are, as a consequence, also ended, i.e. invalid as of the given valDeprecationDate. The software shall take care of that.


Possible Individuals

When an instance of a (Part 2) PossibleIndividual is declared the following information must be given:

  • the UUID of the declared WholeLifeIndividual;
  • the Part 2 entity type dm:WholeLifeIndividual *) AND (an) applicable subtype(s) of PossibleIndividual (e.g. FunctionalPhysicalObject, );
  • the RDL Class (highest in the applicable class hierarchy) of which the WholeLifeIndividual is a member.
  • (optional) a label with the identifier valid at declaration time or, alternatively, a descriptive identification;
  • then use the template ClassifiedIdentificationOfClassOfIndividual to give an human readable identifier to the class.  

*) Temporal parts of that WholeLifeIndividual can play the role 'temporal whole' again in other templates. These must not be declared, because the TemporalWholePart relationship is transitive.

NOTE - That "highest in the class hierarchy" shall be read as follows: Use an instance of ClassOfFunctionalObject unless that is not in the RDL, else the highest in the hierarchy of relevant  instances of ClassOfInanimatePhysicalObject.

A typical example is:

:E09170257F9541D48B5F2937A2A40920 rdf:type dm:FunctionalPhysicalObject, dm:WholeLifeIndividual, rdl:RDS414674 ;

    rdfs:label "B14-V-101" ;

    meta:valEffectiveDate "2005-10-14T13:00:00Z"^^xsd:dateTime .

Now the vessel can be classified as being a member of KNOCK OUT DRUM and as being a member a "requirements class" as defined in a specification.

:B17206B8D8BD48B6BDD991A836B9C461 rdf:type tpl:ClassificationOfIndividual ;

    tpl:hasClassified :E09170257F9541D48B5F2937A2A40920 ;

    tpl:hasClassifier rdl:RDS43167567209, :C926AC172CB4E48F7BA2FF9DA823D5DC ; # KNOCK OUT VESSEL resp. Requirements Class that is defined in a vessel specification

    meta:valEffectiveDate "2006-10-15T13:00:00Z"^^xsd:dateTime .

Ending a PossibleIndividual

In case the existence of any instance of Part 2 PossibleIndividual ends, this shall be recorded as follows:

:E09170257F9541D48B5F2937A2A40920 meta:valDeprecationDate "2014-02-15T12:55:00Z"^^xsd:dateTime .

The validity of all templates in which this individual plays a role are, as a consequence, also ended, i.e. invalid as of the given valDeprecationDate.

When the need for reasoning with OWL-based tools arises, this is to be mapped to an instance of the EndingOfIndividual template:

:2F918E7426514896BC8C50FF52AF677B rdf:type tpl:EndingOfIndividual ;

    tpl:hasIndividual :E09170257F9541D48B5F2937A2A40920 ;

    tpl:valEndTime "2014-02-15T12:55:00Z"^^xsd:dateTime ;

    meta:valEffectiveDate "2014-02-15T12:55:00Z"^^xsd:dateTime .