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.
Some description.
Here we briefly review the origins of OPM.
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
Classes: opm:PropertyState , opm:CurrentPropertyState , opm:OutdatedPropertyState , opm:Deleted , opm:Assumed , opm:Confirmed , opm:Calculation
Object Properties: opm:hasPropertyState , opm:documentation , opm:argumentPaths , opm:inferredProperty , opm:foiRestriction
Datatype Properties: opm:expression , opm:pathRestriction
This section introduces the following classes and properties:
opm:PropertyState , opm:CurrentPropertyState , opm:OutdatedPropertyState , opm:Deleted , opm:hasPropertyState
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 |
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 |
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 |
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. |
---|
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> .
|
---|---|
Domain | opm:Property |
Range | opm:PropertyState |
Sub property of | seas:evaluation |
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.
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.
This section introduces the following classes and properties:
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 |
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 usingopm: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 |
IRI: http://www.w3id.org/opm#Derived
a OWL Class
Derived - A derived property is a property that has been deduced from one or more other properties. Specifying a relationship to these should be done using theprov:wasDerivedFrom
predicate.
Example | The area of a rectangular window is a derived property. It is derived as the product of the width and the height of the same window. |
---|
IRI: http://www.w3id.org/opm#Required
a OWL Class
Required - A required property can be assigned to abstract models such as an abstract product model that holds the prerequisites for a future building. The requirements can be compared to properties of actual products available on the market.Example | [1] uses OPM requirements to describe client requirements to rooms of a future building. |
---|
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 |
---|
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".
It is recommended that OPM calculations are be implemented in a REST API following these guidelines:
opm:argumentPaths
attached. If further
restrictions are defined by opm:foiRestriction
and
opm:pathRestriction
(see next section), these should also be fulfilled.
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.
This section introduces the following classes and properties:
opm:Calculation, opm:argumentPaths, opm:inferredProperty, opm:expression , opm:foiRestriction , opm:pathRestriction
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 |
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 |
---|
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 |
---|
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 |
---|
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 |
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 |
Results of the wide review of OPM is missing.
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 .' }