Inference and Reasoning
Contents
Inference and Reasoning#
Inference is the process by which implied information is discovered and made explicit in a model. Informally, you can think of this process as automatically adding additional metadata to your Brick model.
The Brick ontology definition includes a set of formal axioms that outline what information can be implied by the statements in a particular Brick model. These axioms are interpreted by a piece of software called a reasoner, which derives all implied information and adds it to the Brick model. The process of performing inference is sometimes referred to as reasoning.
Note
Brick uses the OWL 2 RL profile, described in this W3C document. This section of the W3C documentation provides first-order definitions of the OWL 2 RL axioms, which may be helpful in understanding the specific reasoning mechanisms at hand. Reading and understanding these documents are not necessary to effective use of Brick.
Brick Inference Results#
Applying inference to a Brick model can automatically add a great deal of information that would otherwise need to be manually added. This includes, but is not limited to:
Superclasses: for Brick entities that are instances of Brick classes, reasoning will also attach the superclasses to the instance
Inverse relationships: reasoning will automatically add the “inverse” Brick relationships where needed (e.g.
brick:feeds
is the reverse ofbrick:isFedBy
)Tags: reasoning will add tags to Brick entities which are instances of Brick classes
While using a reasoner is not strictly necessary for effective use of Brick, it does fill in a substantial amount of information that makes Brick easier to use and a more consistent experience.
Example: Superclasses#
Before reasoning:
@prefix brick: <https://brickschema.org/schema/Brick#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix mybldg: <mybuilding#> .
mybldg:t1 a brick:Zone_Air_Temperature_Sensor .
After reasoning:
@prefix brick: <https://brickschema.org/schema/Brick#> .
@prefix tag: <https://brickschema.org/schema/BrickTag#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix mybldg: <mybuilding#> .
# The reasoner adds all parent classes of brick:Zone_Air_Temperature_Sensor as types
# of the mybldg:t1 entity.
# For clarity, we are eliding the tags that would also be associated with mybldg:t1
mybldg:t1 a brick:Zone_Air_Temperature_Sensor,
brick:Air_Temperature_Sensor,
brick:Temperature_Sensor,
brick:Sensor,
brick:Point .
Example: Inverse Relationships#
Before reasoning:
@prefix brick: <https://brickschema.org/schema/Brick#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix mybldg: <mybuilding#> .
mybldg:t1 a brick:Zone_Air_Temperature_Sensor .
mybldg:vav1 a brick:VAV ;
brick:hasPoint mybldg:t1 .
After reasoning:
@prefix brick: <https://brickschema.org/schema/Brick#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix mybldg: <mybuilding#> .
# the inverse relationship (brick:isPointOf) is added by the reasoner.
# Note that for clarity we are eliding the tags and superclasses that would
# be associated with mybldg:t1 and mybldg:vav1
mybldg:t1 a brick:Zone_Air_Temperature_Sensor ;
brick:isPointOf mybldg:vav1 .
mybldg:vav1 a brick:VAV ;
brick:hasPoint mybldg:t1 .
Performing Inference#
Coming soon!
Resources: