Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

NIST Example Building 1 Model 1

NIST Example Building 1 Model 1

Example Building 1 is a simplistic, reference tiny office building consisting of a single story with 5 rooms spanning 5 space types.

This reference building was developed for and first described in the journal article “Metadata Schemas and Ontologies for Building Energy Applications: A Critical Review and Use Case Analysis”.

Example Building 1 Model 1 is provided by current and former NIST staff and Pacific Northwest National Laboratory. See also PNNL Example Building 1 Model 2 for a different modeling approach for the same building.

Schematic view

image

Contents

This model contains a representation of the building architecture, mechanical system, and electrical/lighting system.

Source

The model was created using TopQuadrant TopBraid Composer Maestro Edition.

Downloads

What are these files?
  • Turtle file (original): This is the original source Turtle file that was provided to models.open223.info, usually as the output of some model creation tool.

  • Turtle file (compiled): This is the original Turtle file with all inferred relationships and values added through SHACL inference against the 223P ontology and other dependencies. You should use this file for any further processing. It does not contain any of the ontologies.

  • Turtle file (with all imports): This is the compiled Turtle file with all imports included in the file (223P ontology, QUDT ontology, and others). This is helpful when you do not want to deal with downloading and managing ontology dependencies. It is also much larger than the compiled file.

  • JSON-LD file (original): This is the original Turtle file converted to the JSON-LD format.

Turtle is a syntax for RDF (Resource Description Framework) that is easy to read and write. It is a popular format for representing linked data. Parsers and serializers are available in many programming languages. JSON-LD is a JSON-based format for linked data that is easy to use with JavaScript and other web technologies.

Queries

DescriptionQuery URL
Where are all the temperature sensors?Query Link
What equipment is serving a particular room?Query Link

Model Components

Parent ClassClassInstances
EquipmentActuator12
EquipmentLuminaire12
EquipmentTemperatureSensor10
EquipmentDamper6
EquipmentHeatingCoil3
EquipmentFlowSensor3
EquipmentFan3
EquipmentValve3
EquipmentPressureSensor2
EquipmentOccupantMotionSensor2
EquipmentOccupantPresenceSensor2
EquipmentSingleDuctTerminal2
EquipmentAirHandlingUnit1
EquipmentBoiler1
EquipmentFilter1
EquipmentGenerator1
EquipmentThermostat1
EquipmentWindow1
EquipmentCoil1
EquipmentCoolingCoil1
EquipmentSensor1
EquipmentIlluminanceSensor1
ConnectionPipe3
ConnectionDuct1
ConnectionPointInletConnectionPoint73
ConnectionPointOutletConnectionPoint70
ConnectionPointBidirectionalConnectionPoint3
DomainSpace19
Zone8
PropertyQuantifiableActuatableProperty21
PropertyQuantifiableObservableProperty18
PropertyEnumerableProperty14
PropertyQuantifiableProperty12
PropertyEnumeratedObservableProperty4
PropertyEnumeratedActuatableProperty2

Load and Validate Model

This code uses the BuildingMOTIF library to load the 223P ontology and the model file into a temporary in-memory instance. It then validates the model against the ontology. If the model is invalid, it will print the validation report.

To run this code, you need to have Java installed on your system. If you do not have Java installed, you can remove the shacl_engine='topquadrant' parameter from the BuildingMOTIF constructor. Be warned that without the shacl_engine='topquadrant' parameter, the validation process will be slower.

from buildingmotif import BuildingMOTIF
from buildingmotif.dataclasses import Library, Model
import ontoenv
import logging

# Create a BuildingMOTIF object. If you do not have Java installed, remove the "shacl_engine" parameter
bm = BuildingMOTIF('sqlite://', shacl_engine='topquadrant', log_level=logging.ERROR)

# load 223P library. We will load a recent copy from the models.open223.info
# git repository; later, we will load this from the location of the actual standard
s223 = Library.load(ontology_graph="https://open223.info/223p.ttl", infer_templates=False, run_shacl_inference=False)
unit = Library.load(ontology_graph="http://qudt.org/3.1.1/vocab/unit", infer_templates=False, run_shacl_inference=False)
quantitykind = Library.load(ontology_graph="http://qudt.org/3.1.1/vocab/quantitykind", infer_templates=False, run_shacl_inference=False)

# load the model into the BuildingMOTIF instance
model = Model.create("urn:nist-bdg1-1")
model.graph.parse("https://models.open223.info/nist-bdg1-1.ttl")

# validate the model against 223P ontology
ctx = model.validate([s223.get_shape_collection(),
                      unit.get_shape_collection(),
                      quantitykind.get_shape_collection()],
                     error_on_missing_imports=False)

# print the validation result
print(f"Model is valid: {ctx.valid}")

# if the model is invalid, print the validation report
if not ctx.valid:
    print(ctx.report_string[:1000]) # first 1000 characters of the report

# BuildingMOTIF can also interpret the report to provide recommendations on fixes
for focus_node, diffs in ctx.get_reasons_with_severity("Violation").items():
    if len(diffs) == 0:
        continue
    print(focus_node)
    for diff in diffs:
        print("  - " + diff.reason())
Model is valid: 0
Validation Report
Conforms: False

Validation Results (3):

--- Result 1 ---
Severity: sh:Violation
Focus Node: ns2:NumberOfElectricalPhases-SinglePhase
Message: Value must be an instance of ns1:QuantityKind
Path: ns1:hasQuantityKind
Value: <http://qudt.org/vocab/quantitykind/NumberOfElectricalPhases>
Source Constraint: sh:ClassConstraintComponent
Source Shape: <urn:well-known/6c7ef335>

--- Result 2 ---
Severity: sh:Violation
Focus Node: ns2:NumberOfElectricalPhases-ThreePhase
Message: Value must be an instance of ns1:QuantityKind
Path: ns1:hasQuantityKind
Value: <http://qudt.org/vocab/quantitykind/NumberOfElectricalPhases>
Source Constraint: sh:ClassConstraintComponent
Source Shape: <urn:well-known/6c7ef335>

--- Result 3 ---
Severity: sh:Violation
Focus Node: ns2:Numerical-NumberOfElectricalPhases
Message: Value must be an instance of ns1:QuantityKind
Path: ns1:hasQuantityKind
Value: <http://qudt.org/vocab/quantitykind/NumberOfElectricalPhases>
Source Constraint: sh:ClassConstraintC
http://data.ashrae.org/standard223#NumberOfElectricalPhases-SinglePhase
  - http://qudt.org/vocab/quantitykind/NumberOfElectricalPhases on http://data.ashrae.org/standard223#NumberOfElectricalPhases-SinglePhase needs to be a http://qudt.org/schema/qudt/QuantityKind
http://data.ashrae.org/standard223#Numerical-NumberOfElectricalPhases
  - http://qudt.org/vocab/quantitykind/NumberOfElectricalPhases on http://data.ashrae.org/standard223#Numerical-NumberOfElectricalPhases needs to be a http://qudt.org/schema/qudt/QuantityKind
http://data.ashrae.org/standard223#NumberOfElectricalPhases-ThreePhase
  - http://qudt.org/vocab/quantitykind/NumberOfElectricalPhases on http://data.ashrae.org/standard223#NumberOfElectricalPhases-ThreePhase needs to be a http://qudt.org/schema/qudt/QuantityKind
References
  1. Pritoni, M., Paine, D., Fierro, G., Mosiman, C., Poplawski, M., Saha, A., Bender, J., & Granderson, J. (2021). Metadata Schemas and Ontologies for Building Energy Applications: A Critical Review and Use Case Analysis. Energies, 14(7), 2024. 10.3390/en14072024