The Ontology for Property Management (OPM) is an ontology for describing temporal properties that are subject to changes as the building design evolves.

The namespace for OPM terms is http://www.w3id.org/opm#

The suggested prefix for the OPM namespace is opm

The Turtle version of the OPM ontology is available at http://www.w3id.org/opm/opm.ttl

General Information

This is a Public Draft of a document prepared by the Linked Building Data Community Group (LBD). The document is prepared following W3C conventions. The document is released at this time to solicit public comment.

Introduction

Some description.

Origins of OPM

Here we briefly review the origins of OPM.

Axiomatization

This section introduces the specifications for OPM.

The namespace for OPM terms is http://www.w3id.org/opm#

The suggested prefix for the OPM namespace is opm

The Turtle version of the OPM ontology is available at http://www.w3id.org/opm/opm.ttl

Overview of Classes and Properties

Property States

Overview and examples

States
Defining a property state.

Specification

This section introduces the following classes and properties:

opm:PropertyState

IRI: http://www.w3id.org/opm#PropertyState

a OWL Class

Property State - A property state is an evaluation holding the value + metadata about a property that was true for the given time. Metadata must as a minimum be the time of generation stated by prov:generatedAtTime, but preferably also a prov:wasAttributedTo reference to the agent who created the state. Calculated properties are also stored as states as these change when an expression argument changes. Calculations must have an opm:expression and a prov:wasDerivedFrom assigned to them. prov:wasDerivedFrom is stored as a rdf:Seq pointing to the property states that were used for the calculation.
Example An area state holding the value, unit and generation time of a temporal area property.
Disjoint with opm:Calculation
opm:CurrentPropertyState

IRI: http://www.w3id.org/opm#CurrentPropertyState

a OWL Class

Current Property State - The property state that was most recently defined is an instance of opm:CurrentPropertyState.
Example The most recent area state.
Sub class of opm:PropertyState
Disjoint with opm:OutdatedPropertyState
opm:OutdatedPropertyState

IRI: http://www.w3id.org/opm#OutdatedPropertyState

a OWL Class

Outdated Property State - Any property state that has been substituted with a new one is an instance of opm:OutdatedPropertyState.
Example The area state that was replaced by the most recent area state.
Sub class of opm:PropertyState
Disjoint with opm:CurrentPropertyState
opm:Deleted

IRI: http://www.w3id.org/opm#Deleted

a OWL Class

Deleted - A deleted property is a property that is no longer part of the design. The class enables a user to delete a property without removing it from the dataset.
Example Deletion of the area property.
opm:hasPropertyState

IRI: http://www.w3id.org/opm#hasPropertyState

a OWL Object Property

hasPropertyState - Relationship between a property and one of its states.
Example Some area property having a state with metadata:
<window_prop_area> opm:hasPropertyState <window_prop_area1> .
<window_prop_area1> a opm:CurrentPropertyState ;
  schema:value "20 m2"^^cdt:area ;
  prov:generatedAtTime "2018-02-03T13:35:23Z"^^xsd:dateTime .
Domain opm:Property
Range opm:PropertyState
Sub property of seas:evaluation

Reliability

Overview and examples

In project design it is common that properties change over time. By clearly flagging the reliability of a certain property state the other project participants can interpret the property accordingly when taking design decisions that depend upon it.
The figure below illustrates an assumed property state. An assumed property state is likely subject to changes.

Assumed
An opm:Assumed state is a state with lowest reliability. It will most likely change before the final design.

At some point, distinct properties must be locked in oreder to progress with the design. The design team could for example decide that the super structure of a building cannot be changed after a certain data because numerous other design disciplines depend upon its geometry.
The figure below illustrates a confirmed property state. The state directly refers to documentation of the confirmation, and it is attributed to a prov:Agent. A confirmed property should not change! Changing a confirmed property is possible, but it will likely come at a price. OPM provides the means to document that a property was changed after it was confirmed by some authority. This is a valuable tool in rapidly changing design projects.

Confirmed
An opm:Confirmed state is a state with highest reliability. It should not be changed.

Specification

This section introduces the following classes and properties:

opm:Assumed

IRI: http://www.w3id.org/opm#Assumed

a OWL Class

Assumed - An assumption is an unconfirmed property. Assumptions enable designers to move on with the design knowing that the assumed property might change as the project progresses.
Example An assumed U-value (heat transfer coefficient) of a wall at an early design stage where its final structure has not been defined by the architect.
Disjoint with opm:Confirmed
opm:Confirmed

IRI: http://www.w3id.org/opm#Confirmed

a OWL Class

Confirmed - A confirmed property is a property that has been validated by an agent who is authorized to do so. A confirmed property should not be changed, and it should preferably be documented using opm:documentation.
Example At a specific milestone in the project design, the superstructure of the building is locked. All coordinates will hence be classified as opm:Confirmed.
Disjoint with opm:Assumed
opm:documentation

IRI: http://www.w3id.org/opm#documentation

a OWL Object Property

documentation - Relationship between a confirmed state and a file holding some documentation. This could for example be a mail, a scanned document or a digital signature.
Domain opm:PropertyState

Calculations

Overview and examples

OPM deals with derived properties. The figure below illustrates how to define a opm:Calculation that will infer the property props:area as the product of variables ?width and ?height where ?width is found by the argument path "?foi props:width" and ?height is found by the argument path "?foi props:height ?height".

Calculation
Defining a calculation.

It is recommended that OPM calculations are be implemented in a REST API following these guidelines:

  • URI of <calc> as API route
  • POST request to <calc> URI will append the derived property to all FoIs that have the necessary relationships defined by opm:argumentPaths attached. If further restrictions are defined by opm:foiRestriction and opm:pathRestriction (see next section), these should also be fulfilled.
  • PUT request to <calc> URI will update all derived properties of the specific kind where the state of one or more of the arguments has been outdated.
Restrictions

In some cases is might be necessary to restrict a calculation to a single FoI or FoIs where a certain path is fulfilled. This can be handled by using one of the restrictions illustrated in the figures below.

FoI restriction
Restricting a calculation to only be applied to a specific FoI.
Path restriction
Restricting a calculation to only be applied to FoIs where a certain path is fulfilled.

Specification

This section introduces the following classes and properties:

opm:Calculation

IRI: http://www.w3id.org/opm#Calculation

a OWL Class

Calculation - A calculation holds the necessary information to infer derived properties.
Example An area calculation with inferred property props:area, property path ['?foi props:width ?width', '?foi props:height ?height'] and expression ?width*?height.
Disjoint with opm:PropertyState
opm:argumentPaths

IRI: http://www.w3id.org/opm#argumentPaths

a OWL Object Property

argument paths - Relationship between a calculation and a list (RDF collection) of argument paths. An argument path is given in triples and indicates the relationship between the Feature of Interest (FoI) to which the inferred property will be applied and a FoI on which the argument property exists. If the argument exists on the FoI itself it can be referred by "?foi xx:argProperty ?arg1". The path can be any length, and another example could be an argument existing on the super-system of a FoI: "?foi xx:subSystemOf/xx:argProperty ?arg1".
Domain opm:Calculation
opm:inferredProperty

IRI: http://www.w3id.org/opm#inferredProperty

a OWL Object Property

inferred property - Relationship between a calculation and the property kind it will infer.
Domain opm:Calculation
opm:expression

IRI: http://www.w3id.org/opm#expression

a OWL Datatype Property

expression - Points to a literal containing the expression to execute with a calculation. Arguments of the expression are defined with vaiables (ie. ?arg1) corresponding to ones used in the argument paths.
Domain opm:Calculation
opm:foiRestriction

IRI: http://www.w3id.org/opm#foiRestriction

a OWL Object Property

feature of interest restriction - If a calculation is only to be applied to one specific feature of interest (FoI), this restriction can be used.
Domain opm:Calculation
Range seas:FeatureOfInterest
opm:pathRestriction

IRI: http://www.w3id.org/opm#pathRestriction

a OWL Datatype Property

path restriction - If a calculation is only to be applied to features of interest (FoIs) that have a certain relationship applied, this restriction can be used.
Domain opm:Calculation
Range xsd:string

Common Modeling Questions

Wide review

Results of the wide review of OPM is missing.

Complete Examples

Assigning a new OPM property

The OPM query generator is a JavaScript library with methods to construct SPARQL queries for operations on an OPM compliant RDF graph.

                const { OPMProp } = require('opm-qg');

                var host = "http://example.org/opmTest/";

                var prefixes = [
                    {prefix: 'cdt', uri: 'http://w3id.org/lindt/custom_datatypes#'},
                    {prefix: 'props', uri: 'https://w3id.org/product/props/'}
                ];

                let opmProp = new OPMProp(host, prefixes);

                const q = opmProp.postByFoI('<someFoi>', 'props:area', '"20 m2"^^cdt:area');

                console.log(q);
            

Above will return the query:

                PREFIX  props: <https://w3id.org/product/props/>
                PREFIX  opm:   <https://w3id.org/opm#>
                PREFIX  prov:  <http://www.w3.org/ns/prov#>
                PREFIX  cdt:   <http://w3id.org/lindt/custom_datatypes#>
                
                INSERT {
                    ?foi props:area ?propertyURI .
                    ?propertyURI a opm:Property ;
                        opm:hasPropertyState ?stateURI .
                    ?stateURI a opm:CurrentPropertyState ;
                        schema:value ?val ;
                        prov:generatedAtTime ?now .
                }
                WHERE {
                    BIND(<someFoi> AS ?foi)
                    BIND("20 m2"^^cdt:area AS ?val)
            
                    # FoI MUST EXIST
                    ?foi ?p ?o .
            
                    # THE FoI CANNOT HAVE THE PROPERTY ASSIGNED ALREADY
                    MINUS { ?foi props:area ?prop . }
            
                    # CREATE STATE AND PROPERTY URIs
                    BIND(URI(CONCAT("https://example.org/opmTest/", "state_", STRUUID())) AS ?stateURI)
                    BIND(URI(CONCAT("https://example.org/opmTest/", "property_", STRUUID())) AS ?propertyURI)
                    BIND(now() AS ?now)
                }
            

Provided that <someFoi> exists and that it doesn't have a props:area assigned already, triples in the following form will be generated:

                @prefix cdt:   <http://w3id.org/lindt/custom_datatypes#> .
                @prefix ex:    <https://example.org/opmTest/> .
                @prefix opm:   <https://w3id.org/opm#> .
                @prefix prov:  <http://www.w3.org/ns/prov#> .
                @prefix props: <https://w3id.org/product/props/> .
                @prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
                
                <someFoi> 
                    props:area ex:property_efafede9-53d3-425f-89f3-ed8a40b5995a .
                
                ex:property_efafede9-53d3-425f-89f3-ed8a40b5995a 
                    a opm:Property ;
                    opm:hasPropertyState ex:state_8e889bba-bc25-4b1a-ac34-330f776892fa .
                
                ex:state_8e889bba-bc25-4b1a-ac34-330f776892fa 
                    a opm:Assumed , opm:CurrentPropertyState ;
                    schema:value "20 m2"^^cdt:area ;
                    prov:generatedAtTime "2018-05-28T16:41:17.711+02:00"^^xsd#dateTime .' }
            

Acknowledgments

The Editors recognize the major contribution of the members of the W3C Linked Building Data Community Group.