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 of brick: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/1.1/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/1.1/Brick#> .
@prefix tag: <https://brickschema.org/schema/1.1/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: Tags

Before reasoning:

@prefix brick: <https://brickschema.org/schema/1.1/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/1.1/Brick#> .
@prefix tag: <https://brickschema.org/schema/1.1/BrickTag#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix mybldg: <mybuilding#> .

# The reasoner adds the tags associated with brick:Zone_Air_Temperature_Sensor and all
# of its superclasses to the mybldg:t1 entity.
# For clarity, we are eliding the superclasses that would also be added
mybldg:t1   a   brick:Zone_Air_Temperature_Sensor,
            brick:hasTag    tag:Zone, tag:Air, tag:Temperature,
                            tag:Sensor, tag:Point .

Example: Inverse Relationships

Before reasoning:

@prefix brick: <https://brickschema.org/schema/1.1/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/1.1/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: