From 5ac2bcd7492a22b327ee911060a6404dd1b1027c Mon Sep 17 00:00:00 2001 From: Filip Henrik Larsen Date: Fri, 20 Jan 2023 13:23:56 +0100 Subject: [PATCH 01/14] fix/compare_versions_tool --- README.md | 6 +- tools/compare_versions/README.md | 8 +-- tools/compare_versions/compare_versions.py | 78 ++++++++++++---------- 3 files changed, 49 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index e8aad785..32d9f547 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ Tests go in the `tests/` directory and should be implemented using [pytest](http [`tests/test_inference.py`](https://github.com/BrickSchema/Brick/blob/master/tests/test_inference.py) is a good example. Run tests by executing `pytest` or `make test` in the top-level directory of this repository. -* Before running `pytest` the Brick.ttl file needs to be created using either `make` or `python generate_brick.py`. +* Before running `pytest` the Brick.ttl file needs to be created using either `make` or `python generate_brick.py`. ## Python Framework @@ -66,9 +66,9 @@ For now, the code is the documentation. Look at `bricksrc/equipment.py`, `bricks ### Version Comparison We can track the different classes between versions. The below scripts produces comparison files. -- `python tools/compare_versions/compare_versions.py --oldbrick 1.0.3 https://github.com/BrickSchema/Brick/releases/download/v1.0.3/Brick.ttl --newbrick 1.1.0 ./Brick.ttl` +- `python tools/compare_versions/compare_versions.py --oldbrick 1.0.3 https://brickschema.org/schema/1.0.3/Brick.ttl --newbrick 1.1.0 ./Brick.ttl` -It will produce three files inside `history/{current_version}`. +It will produce three files inside `history/{old_version}-{new_version}`. - `added_classes.txt`: A list of new classes introduced in the current version compared to the previous version. - `removed_classes.txt`: A list of old classes removed in the current version compared to the previous version. - `possible_mapping.json`: A map of candidate classes that can replace removed classes. Keys are removed classes and the values are candidate correspondants in the new vesion. diff --git a/tools/compare_versions/README.md b/tools/compare_versions/README.md index 77fe4dfd..739ef821 100644 --- a/tools/compare_versions/README.md +++ b/tools/compare_versions/README.md @@ -1,7 +1,7 @@ -Brick Version Comparison ------------------------- +## Brick Version Comparison # How to use it? + - `python tools/compare_versions/compare_versions.py --help` for getting help -- `python --oldbrick 1.0.3 https://github.com/BrickSchema/Brick/releases/download/v1.0.3/Brick.ttl --newbrick 1.1.0 ./Brick.ttl - - This will produce the comparison results inside `./history/{new_version}`. +- `python --oldbrick 1.0.3 https://brickschema.org/schema/1.0.3/Brick.ttl --newbrick 1.1.0 ./Brick.ttl + - This will produce the comparison results inside `./history/{old_version}-{new_version}`. diff --git a/tools/compare_versions/compare_versions.py b/tools/compare_versions/compare_versions.py index fec9e4ab..ff98e9cc 100644 --- a/tools/compare_versions/compare_versions.py +++ b/tools/compare_versions/compare_versions.py @@ -1,31 +1,28 @@ -import sys +import argparse +import json import os from collections import defaultdict -import json -import argparse -import semver +from pathlib import Path +import semver +from rdflib import Graph, OWL, RDF, RDFS, Namespace from tqdm import tqdm -import rdflib -from rdflib import Namespace, URIRef, RDF, RDFS, OWL - - -def get_root(version): - if ( - semver.compare(version, "1.0.3") > 0 - ): # if the current version is newer than 1.0.3 - root_template = "https://brickschema.org/schema/{0}/Brick#Class" - else: - root_template = "https://brickschema.org/schema/{0}/BrickFrame#TagSet" - return root_template.format(version) def get_short_version(version): version = semver.parse_version_info(version) if version.major >= 1 and version.minor >= 1: return ".".join([str(version.major), str(version.minor)]) - else: - return version + return version + + +def get_root(version): + short_version = get_short_version(version) + if short_version == "1.3": + return "https://brickschema.org/schema/Brick#Class" + if semver.compare(version, "1.0.3") > 0: # if current version is newer than 1.0.3 + return f"https://brickschema.org/schema/{short_version}/Brick#Class" + return f"https://brickschema.org/schema/{short_version}/BrickFrame#TagSet" argparser = argparse.ArgumentParser() @@ -33,34 +30,43 @@ def get_short_version(version): "--oldbrick", nargs=2, metavar=("VERSION", "PATH"), - help="The version of and the path to the old Brick. The path can be either a URL or filesystem path.", + help=( + "The version of and the path to the old Brick. The path can be either a " + "URL or filesystem path." + ), default=[ "1.0.3", - "https://github.com/BrickSchema/Brick/releases/download/v1.0.3/Brick.ttl", + "https://brickschema.org/schema/1.0.3/Brick.ttl", ], ) argparser.add_argument( "--newbrick", nargs=2, metavar=("VERSION", "PATH"), - help="The version of, and the path to the new Brick. The path can be either a URL or filesystem path.", - default=["1.1.0", "./Brick.ttl"], + help=( + "The version of, and the path to the new Brick. The path can be either a " + "URL or filesystem path." + ), + default=["1.3.0", "./Brick.ttl"], +) +argparser.add_argument( + "--serialize", + action="store_true", + help="Save the graph containing both ontologies as a turtle file.", ) args = argparser.parse_args() - old_ver = args.oldbrick[0] old_ttl = args.oldbrick[1] new_ver = args.newbrick[0] new_ttl = args.newbrick[1] -brick_ns_template = "https://brickschema.org/schema/{0}/Brick#" -OLD_BRICK = Namespace(brick_ns_template.format(old_ver)) -NEW_BRICK = Namespace(brick_ns_template.format(new_ver)) +OLD_BRICK = Namespace(f"https://brickschema.org/schema/{old_ver}/Brick#") +NEW_BRICK = Namespace(f"https://brickschema.org/schema/{new_ver}/Brick#") OLD_ROOT = get_root(old_ver) NEW_ROOT = get_root(new_ver) -g = rdflib.Graph() +g = Graph() g.parse(old_ttl, format="turtle") g.parse(new_ttl, format="turtle") g.bind("old_brick", OLD_BRICK) @@ -69,8 +75,6 @@ def get_short_version(version): g.bind("rdf", RDF) g.bind("owl", OWL) -g.serialize("test.ttl", format="turtle") - def get_tag_sets(root): tag_sets = {} @@ -90,19 +94,21 @@ def get_tag_sets(root): old_tag_sets = get_tag_sets(OLD_ROOT) new_tag_sets = get_tag_sets(NEW_ROOT) -history_dir = "history/{0}".format(new_ver) -if not os.path.exists(history_dir): - os.makedirs(history_dir) +history_dir = Path(f"history/{old_ver}-{new_ver}") +os.makedirs(history_dir, exist_ok=True) old_classes = set(old_tag_sets.keys()) new_classes = set(new_tag_sets.keys()) -with open(history_dir + "/removed_classes.txt", "w") as fp: +with open(history_dir / "removed_classes.txt", "w") as fp: fp.write("\n".join(sorted(old_classes - new_classes))) -with open(history_dir + "/added_classes.txt", "w") as fp: +with open(history_dir / "added_classes.txt", "w") as fp: fp.write("\n".join(sorted(new_classes - old_classes))) +if args.serialize: + g.serialize(history_dir / "graph.ttl", format="turtle") + # List possible matches for removed classes mapping_candidates = defaultdict(list) @@ -111,7 +117,7 @@ def get_tag_sets(root): continue for new_class, new_tag_set in new_tag_sets.items(): # If the delimited tags are similar in the old class and this new class, - # They might be mappable across the version. + # they might be mappable across the version. if ( len(old_tag_set.intersection(new_tag_set)) / len(old_tag_set.union(new_tag_set)) @@ -119,5 +125,5 @@ def get_tag_sets(root): ): mapping_candidates[old_class].append(new_class) -with open(history_dir + "/possible_mapping.json", "w") as fp: +with open(history_dir / "possible_mapping.json", "w") as fp: json.dump(mapping_candidates, fp, indent=2) From 80b2a6298b3a00300f244e8f8cab87399831c3ab Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Wed, 26 Apr 2023 09:38:53 -0600 Subject: [PATCH 02/14] add ref schema and REC imports --- bricksrc/ontology.py | 3 + support/rec.ttl | 3018 ++++++++++++++++++++++++++++++++++++++++ support/recimports.ttl | 144 ++ 3 files changed, 3165 insertions(+) create mode 100644 support/rec.ttl create mode 100644 support/recimports.ttl diff --git a/bricksrc/ontology.py b/bricksrc/ontology.py index 171bbfc1..167a389a 100644 --- a/bricksrc/ontology.py +++ b/bricksrc/ontology.py @@ -44,6 +44,9 @@ "dimensionvector": "http://qudt.org/2.1/vocab/dimensionvector", "shacl": "http://www.w3.org/ns/shacl#", "bacnet": "http://data.ashrae.org/bacnet/2020", + "ref": "https://brickschema.org/schema/Brick/ref", + "rec": "https://w3id.org/rec", + "recimports": "https://w3id.org/rec/recimports", } shacl_namespace_declarations = [ diff --git a/support/rec.ttl b/support/rec.ttl new file mode 100644 index 00000000..3472a402 --- /dev/null +++ b/support/rec.ttl @@ -0,0 +1,3018 @@ +# baseURI: https://w3id.org/rec +# imports: http://datashapes.org/dash +# imports: https://brickschema.org/schema/1.3/Brick +# imports: https://w3id.org/rec/brickpatches +# prefix: rec + +@prefix : . +@prefix brick: . +@prefix brickpatches: . +@prefix dash: . +@prefix geojson: . +@prefix owl: . +@prefix qudt: . +@prefix rdf: . +@prefix rdfs: . +@prefix rec: . +@prefix sh: . +@prefix xsd: . + +brick:Equipment + rdf:type owl:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Equipment" ; + rdfs:subClassOf rec:Asset ; +. + + rdf:type owl:Ontology ; + rdfs:label "RealEstateCore" ; + owl:imports ; + owl:imports ; + owl:imports ; + owl:versionInfo "4.0" ; +. +rec:AbsoluteHumidityObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Absolute humidity observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:AccelerationObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Acceleration observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:AccessControlZone + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Access control zone" ; + rdfs:subClassOf rec:Zone ; +. +rec:AccessPanel + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Access panel" ; + rdfs:subClassOf rec:BarrierAsset ; +. +rec:ActuationEvent + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Actuation event" ; + rdfs:subClassOf rec:PointEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:targetPoint ; + sh:class brick:Point ; + sh:description "The brick:Point(s) (e.g., brick:Commands, brick:Setpoints, or brick:Parameters) that the actuation will target/execute." ; + sh:minCount 1 ; + sh:name "target point" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:string ; + sh:description "The command message/payload of this actuation event." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:AdmittingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Admitting room" ; + rdfs:subClassOf rec:HealthcareRoom ; +. +rec:Agent + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "The human, group, or machine that consumes or acts upon an object or data. This higher-level grouping allows properties that are shared among its subclasses (Person, Organization, ....) to be anchored in one joint place, on the Agent class." ; + rdfs:label "Agent" ; + rdfs:subClassOf rdfs:Resource ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:isMemberOf ; + sh:class rec:Organization ; + sh:description "Indicates membership in an organization. Note that componency (e.g., departments of a corporation) are expressed using the more generic Organization.isPartOf property." ; + sh:name "is member of" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:owns ; + sh:description "Indicates ownership of some thing, e.g., a building, an asset, an organization, etc." ; + sh:name "owns" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:AlarmObject + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Alarm object" ; + rdfs:subClassOf rec:ServiceObject ; +. +rec:AngleObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Angle observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:AngularAccelerationObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Angular acceleration observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:AngularVelocityObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Angular velocity observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Apartment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Apartment" ; + rdfs:subClassOf rec:Collection ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:includes ; + sh:class rec:Room ; + sh:minCount 1 ; + sh:name "includes" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:ArchitecturalAsset + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Architectural asset" ; + rdfs:subClassOf rec:Asset ; +. +rec:Architecture + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A designed/landscaped (or potentially designed/landscaped) part of the physical world that has a 3D spatial extent. E.g., a building site, a building, levels within the building, rooms, etc." ; + rdfs:label "Architecture" ; + rdfs:subClassOf rec:Space ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:address ; + sh:class rec:PostalAddress ; + sh:description "Physical address of the architecture (site, building, sub-building, entrance room, etc.) in question." ; + sh:name "address" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:adjacentElement ; + sh:class rec:BuildingElement ; + sh:name "adjacent element" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:architectedBy ; + sh:class rec:Agent ; + sh:name "architected by" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:area ; + sh:class rec:ArchitectureArea ; + sh:maxCount 1 ; + sh:name "area" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:capacity ; + sh:class rec:ArchitectureCapacity ; + sh:maxCount 1 ; + sh:name "capacity" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:constructedBy ; + sh:class rec:Agent ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:containsElement ; + sh:class rec:BuildingElement ; + sh:description "Links an Architecture to BuildingElement that is contained in the Space." ; + sh:name "contains element" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:documentation ; + sh:class rec:Document ; + sh:name "documentation" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:hasPoint ; + sh:class brick:Point ; + sh:name "has point" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:intersectingElement ; + sh:class rec:BuildingElement ; + sh:name "intersecting element" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:isFedBy ; + sh:name "is fed by" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:operatedBy ; + sh:class rec:Agent ; + sh:name "operated by" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:ownedBy ; + sh:class rec:Agent ; + sh:name "owned by" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:ArchitectureArea + rdf:type ; + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Describes business-relevant area measurements typically associated with architected spaces. As the exact requirements on these measurements will vary from case to case or jurisdiction to jurisdiction, subclassing and specializing this definition is encouraged." ; + rdfs:label "Architecture area" ; + rdfs:subClassOf rec:Information ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:grossArea ; + sh:datatype xsd:float ; + sh:maxCount 1 ; + sh:name "gross area" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:netArea ; + sh:datatype xsd:float ; + sh:maxCount 1 ; + sh:name "net area" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:rentableArea ; + sh:datatype xsd:float ; + sh:maxCount 1 ; + sh:name "rentable area" ; + ] ; +. +rec:ArchitectureCapacity + rdf:type ; + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Describes business-relevant capacity measurements typically associated with architected spaces. As the exact requirements on these measurements will vary from case to case or jurisdiction to jurisdiction, subclassing and specializing this definition is encouraged." ; + rdfs:label "Architecture capacity" ; + rdfs:subClassOf rec:Information ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:maxOccupancy ; + sh:datatype xsd:integer ; + sh:description "E.g., per Building Code" ; + sh:maxCount 1 ; + sh:name "maximum occupancy" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:seatingCapacity ; + sh:datatype xsd:integer ; + sh:maxCount 1 ; + sh:name "seating capacity" ; + ] ; +. +rec:AreaObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Area observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Asset + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Something which is placed inside of a building, but is not an integral part of that building's structure; e.g., furniture, equipment, systems, etc." ; + rdfs:label "Asset" ; + rdfs:subClassOf rdfs:Resource ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:IPAddress ; + sh:datatype xsd:string ; + sh:name "IP address" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:MACAddress ; + sh:datatype xsd:string ; + sh:name "MAC address" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:assetTag ; + sh:datatype xsd:string ; + sh:name "asset tag" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:commissionedBy ; + sh:class rec:Agent ; + sh:name "commissioned by" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:commissioningDate ; + sh:datatype xsd:date ; + sh:maxCount 1 ; + sh:name "commissioning date" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:documentation ; + sh:class rec:Document ; + sh:name "documentation" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:geometry ; + sh:class rec:Geometry ; + sh:description "A GeoJSON Geometry representing the position or extent of the asset." ; + sh:maxCount 1 ; + sh:name "geometry" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:hasPart ; + sh:class rec:Asset ; + sh:name "has part" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:hasPoint ; + sh:class brick:Point ; + sh:name "has point" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:initialCost ; + sh:maxCount 1 ; + sh:name "initial cost" ; + sh:nodeKind sh:Literal ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:installationDate ; + sh:datatype xsd:date ; + sh:maxCount 1 ; + sh:name "installation date" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:installedBy ; + sh:class rec:Agent ; + sh:name "installed by" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:isPartOf ; + sh:class rec:Asset ; + sh:name "is part of" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:locatedIn ; + sh:class rec:Space ; + sh:minCount 1 ; + sh:name "located in" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:maintenanceInterval ; + sh:datatype xsd:duration ; + sh:name "maintenance interval" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:manufacturedBy ; + sh:class rec:Agent ; + sh:name "manufactured by" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:modelNumber ; + sh:datatype xsd:string ; + sh:name "model number" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:mountedOn ; + sh:class rec:BuildingElement ; + sh:description "An asset may be mounted on some part of the building construction (e.g., a blind on a facade, a camera on a wall, etc)." ; + sh:maxCount 1 ; + sh:name "mounted on" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:serialNumber ; + sh:datatype xsd:string ; + sh:name "serial number" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:servicedBy ; + sh:class rec:Agent ; + sh:name "serviced by" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:turnoverDate ; + sh:datatype xsd:date ; + sh:maxCount 1 ; + sh:name "turnover date" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:weight ; + sh:datatype xsd:decimal ; + sh:maxCount 1 ; + sh:name "weight" ; + ] ; +. +rec:Atrium + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Atrium" ; + rdfs:subClassOf rec:Room ; +. +rec:AudioVisualEquipment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Audio visual equipment." ; + rdfs:label "Audio Visual Equipment" ; + rdfs:subClassOf rec:ICTEquipment ; +. +rec:Auditorium + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Auditorium" ; + rdfs:subClassOf rec:Room ; +. +rec:BACnetController + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "BACnet controller." ; + rdfs:label "BACnet Controller" ; + rdfs:subClassOf rec:Controller ; +. +rec:BackOffice + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Back office" ; + rdfs:subClassOf rec:Room ; +. +rec:Balcony + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Balcony" ; + rdfs:subClassOf rec:BuildingElement ; +. +rec:BarRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Bar room" ; + rdfs:subClassOf rec:FoodHandlingRoom ; +. +rec:BarrierAsset + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Barrier asset" ; + rdfs:subClassOf rec:ArchitecturalAsset ; +. +rec:BasementLevel + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Basement level" ; + rdfs:subClassOf rec:Level ; +. +rec:Bathroom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Bathroom" ; + rdfs:subClassOf rec:Room ; +. +rec:Bed + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Bed" ; + rdfs:subClassOf rec:Furniture ; +. +rec:Bedroom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Bedroom" ; + rdfs:subClassOf rec:Room ; +. +rec:BicycleGarage + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Bicycle garage" ; + rdfs:subClassOf rec:Garage ; +. +rec:Bookcase + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Bookcase" ; + rdfs:subClassOf rec:Furniture ; +. +rec:BooleanValueObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Generic xsd:boolean value observation that is not specific to any particular QUDT quantitykind or unit." ; + rdfs:label "Boolean value observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Building + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A confined building structure." ; + rdfs:label "Building" ; + rdfs:subClassOf rec:Architecture ; +. +rec:BuildingElement + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A part that constitutes a piece of a building's structural makeup. E.g., Facade, Wall, Slab, Roof, etc." ; + rdfs:label "Building element" ; + rdfs:subClassOf rdfs:Resource ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:documentation ; + sh:class rec:Document ; + sh:name "documentation" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:hasPart ; + sh:class rec:BuildingElement ; + sh:name "has part" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:isPartOf ; + sh:class rec:BuildingElement ; + sh:maxCount 1 ; + sh:name "is part of" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:locatedIn ; + sh:class rec:Architecture ; + sh:description "Indicates the architected space (site, building, level, room...) in which this building element is placed." ; + sh:maxCount 1 ; + sh:name "located in" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:BulletinBoard + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Bulletin board" ; + rdfs:subClassOf rec:Furniture ; +. +rec:Cabinet + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Cabinet" ; + rdfs:subClassOf rec:UtilitiesRoom ; +. +rec:CableRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Cable room" ; + rdfs:subClassOf rec:UtilitiesRoom ; +. +rec:CafeteriaRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Cafeteria room" ; + rdfs:subClassOf rec:FoodHandlingRoom ; +. +rec:Campus + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A campus represents a collection of location entities. The constituent locations may have differing legal ownership and utilization purposes, but they are generally perceived as a coherent unit or sub-region within a city or other region. E.g., a university campus, a hospital campus, a corporate campus, etc." ; + rdfs:label "Campus" ; + rdfs:subClassOf rec:Collection ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:includes ; + sh:class rec:Architecture ; + sh:minCount 1 ; + sh:name "includes" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:CapacitanceObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Capacitance observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Cart + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Cart" ; + rdfs:subClassOf rec:Furniture ; +. +rec:Chair + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Chair" ; + rdfs:subClassOf rec:Furniture ; +. +rec:Cinema + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Cinema" ; + rdfs:subClassOf rec:Room ; +. +rec:Classroom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Classroom" ; + rdfs:subClassOf rec:EducationalRoom ; +. +rec:CleaningRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Cleaning room" ; + rdfs:subClassOf rec:Room ; +. +rec:ClimateControlRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Climate-control room" ; + rdfs:subClassOf rec:UtilitiesRoom ; +. +rec:CloakRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Cloak room" ; + rdfs:subClassOf rec:Room ; +. +rec:CoatRack + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Coat rack" ; + rdfs:subClassOf rec:Furniture ; +. +rec:CoffeeTable + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Coffee table" ; + rdfs:subClassOf rec:Table ; +. +rec:Collection + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "An administrative grouping of entities that are adressed and treated as a unit for some purpose. These entities may have some spatial arrangement (e.g., an apartment is typically contiguous) but that is not a requirement (see, e.g., a distributed campus consisting of spatially disjoint plots or buildings). Inclusion in a Collection is determined by the 'includes' field on a specific subclass." ; + rdfs:label "Collection" ; + rdfs:subClassOf rdfs:Resource ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:documentation ; + sh:class rec:Document ; + sh:name "documentation" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:Company + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Company" ; + rdfs:subClassOf rec:Organization ; +. +rec:ComputerCart + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Computer cart" ; + rdfs:subClassOf rec:Cart ; +. +rec:ConferenceRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Conference room" ; + rdfs:subClassOf rec:Room ; +. +rec:ConferenceTable + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Conference table" ; + rdfs:subClassOf rec:Table ; +. +rec:Controller + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Controller." ; + rdfs:label "Controller" ; + rdfs:subClassOf rec:ICTEquipment ; +. +rec:ConversationRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Conversation room" ; + rdfs:subClassOf rec:Room ; +. +rec:CookingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Cooking room" ; + rdfs:subClassOf rec:FoodHandlingRoom ; +. +rec:CopyingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Copying room" ; + rdfs:subClassOf rec:Room ; +. +rec:DataNetworkEquipment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Data network equipment." ; + rdfs:label "Data Network Equipment" ; + rdfs:subClassOf rec:ICTEquipment ; +. +rec:DataRateObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Data rate observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:DataServerRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Data server room" ; + rdfs:subClassOf rec:UtilitiesRoom ; +. +rec:DataSizeObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Data size observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:DaylightSensorEquipment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Daylight sensor." ; + rdfs:label "Daylight Sensor" ; + rdfs:subClassOf rec:SensorEquipment ; +. +rec:DensityObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Density observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Department + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Department" ; + rdfs:subClassOf rec:Organization ; +. +rec:Desk + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Desk" ; + rdfs:subClassOf rec:Furniture ; +. +rec:DeskLamp + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Desk lamp" ; + rdfs:subClassOf rec:Lamp ; +. +rec:DiningRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Dining room" ; + rdfs:subClassOf rec:FoodHandlingRoom ; +. +rec:DisabledToilet + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Disabled toilet" ; + rdfs:subClassOf rec:PersonalHygiene ; +. +rec:DishingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Dishing room" ; + rdfs:subClassOf rec:FoodHandlingRoom ; +. +rec:DistanceObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Distance observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Document + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Document" ; + rdfs:subClassOf rec:Information ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:documentTopic ; + sh:name "document topic" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:url ; + sh:name "URL" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:Door + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Door" ; + rdfs:subClassOf rec:BarrierAsset ; +. +rec:DoubleValueObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Generic xsd:double value observation that is not specific to any particular QUDT quantitykind or unit." ; + rdfs:label "Double value observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:DressingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Dressing room" ; + rdfs:subClassOf rec:Room ; +. +rec:EducationalRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Educational room" ; + rdfs:subClassOf rec:Room ; +. +rec:ElectricChargeObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Electric charge observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:ElectricCurrentObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Elecric current observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:ElectricityRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Electricity room" ; + rdfs:subClassOf rec:UtilitiesRoom ; +. +rec:ElevatorRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Elevator room" ; + rdfs:subClassOf rec:Room ; +. +rec:ElevatorShaft + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Elevator shaft" ; + rdfs:subClassOf rec:Room ; +. +rec:ElevatorTrip + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Elevator trip" ; + rdfs:subClassOf rec:Event ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:currentLevel ; + sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:name "current level" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:endLevel ; + sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:name "end level" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:startLevel ; + sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:name "start level" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:tripDirection ; + sh:datatype xsd:string ; + sh:in ( + "Up" + "Down" + ) ; + sh:maxCount 1 ; + sh:name "trip direction" ; + ] ; +. +rec:EndTable + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "End table" ; + rdfs:subClassOf rec:Table ; +. +rec:EnergyObservation + rdf:type ; + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Energy observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Entrance + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Entrance" ; + rdfs:subClassOf rec:Room ; +. +rec:EquipmentCollection + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Equipment collection" ; + rdfs:subClassOf rec:Collection ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:includes ; + sh:class brick:Equipment ; + sh:minCount 1 ; + sh:name "includes" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:ErrorReport + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Error report" ; + rdfs:subClassOf rec:ServiceObject ; +. +rec:EthernetPort + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Ethernet port." ; + rdfs:label "Ethernet Port" ; + rdfs:subClassOf rec:DataNetworkEquipment ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:poeType ; + sh:datatype xsd:string ; + sh:in ( + "Type1" + "Type2" + "Type3" + "Type4" + ) ; + sh:maxCount 1 ; + sh:name "PoE Type" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:portSpeed ; + sh:datatype xsd:float ; + sh:description "The data rate of the port in Mib/s, i.e. mebibit (2^20 bit) per second." ; + sh:maxCount 1 ; + sh:name "Port Speed" ; + ] ; +. +rec:EthernetSwitch + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Ethernet switch." ; + rdfs:label "Ethernet Switch" ; + rdfs:subClassOf rec:DataNetworkEquipment ; +. +rec:Event + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A temporally indexed entity, e.g., an observation, a lease, a construction project, etc. Can be instantaneous (timestamp property assigned) or have temporal extent (start and end properties assigned). Subclasses may define specific behaviour and requirements, e.g., on spatial indexing, agent participation, etc." ; + rdfs:label "Event" ; + rdfs:subClassOf rdfs:Resource ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:end ; + sh:datatype xsd:dateTime ; + sh:description "Event ending timestamp." ; + sh:maxCount 1 ; + sh:name "end" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:start ; + sh:datatype xsd:dateTime ; + sh:description "Event start timestamp." ; + sh:maxCount 1 ; + sh:name "start" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:timestamp ; + sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:name "timestamp" ; + ] ; +. +rec:ExceptionEvent + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Exception event" ; + rdfs:subClassOf rec:PointEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:sourcePoint ; + sh:class brick:Point ; + sh:description "The brick:Point that emitted this exception." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "source point" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:string ; + sh:description "The message of this exception event." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:ExerciseRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Exercise room" ; + rdfs:subClassOf rec:Room ; +. +rec:ExhibitionRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Exhibition room" ; + rdfs:subClassOf rec:Room ; +. +rec:Facade + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Facade" ; + rdfs:subClassOf rec:BuildingElement ; +. +rec:FilingCabinet + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Filing cabinet" ; + rdfs:subClassOf rec:Furniture ; +. +rec:FittingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Fitting room" ; + rdfs:subClassOf rec:RetailRoom ; +. +rec:FloorLamp + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Floor lamp" ; + rdfs:subClassOf rec:Lamp ; +. +rec:FloorMat + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Floor mat" ; + rdfs:subClassOf rec:Furniture ; +. +rec:FoldingChair + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Folding chair" ; + rdfs:subClassOf rec:Chair ; +. +rec:FoldingTable + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Folding table" ; + rdfs:subClassOf rec:Table ; +. +rec:FoodHandlingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Food-handling room" ; + rdfs:subClassOf rec:Room ; +. +rec:Footrest + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Footrest" ; + rdfs:subClassOf rec:Furniture ; +. +rec:ForceObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Force observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:FrequencyObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Frequency observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Furniture + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Furniture" ; + rdfs:subClassOf rec:Asset ; +. +rec:FurnitureCollection + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Furniture collection" ; + rdfs:subClassOf rec:Collection ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:includes ; + sh:class rec:Furniture ; + sh:minCount 1 ; + sh:name "includes" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:Garage + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Garage" ; + rdfs:subClassOf rec:Room ; +. +rec:Gateway + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Gateway." ; + rdfs:label "Gateway" ; + rdfs:subClassOf rec:ICTEquipment ; +. +rec:Geometry + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Geometry" ; + rdfs:subClassOf rec:Information ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:coordinateSystem ; + sh:datatype xsd:string ; + sh:in ( + "WGS84" + "SWEREF99" + "LocalCoordinates" + ) ; + sh:maxCount 1 ; + sh:name "coordinate system" ; + sh:nodeKind sh:Literal ; + ] ; +. +rec:Georeference + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A georeference creates a relationship between a local coordinate system into a geographic coordinate system." ; + rdfs:label "Georeference" ; + rdfs:subClassOf rec:Information ; +. +rec:Geotransform + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A transform following GDAL's Affine Transform that transforms a local coordinate into a WGS84 coordinate. Created from Ground Control Points (GCP) using GDAL's GCPsToGeotransform method." ; + rdfs:label "Geotransform" ; + rdfs:subClassOf rec:Georeference ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:heightScaleFactor ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:name "height scale factor" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:originX ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:name "origin x" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:originY ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:name "origin y" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:widthScaleFactor ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:name "width scale factor" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:xRotationalScaleFactor ; + sh:datatype xsd:double ; + sh:description "Value will be zero if the local coordinate system is north-aligned." ; + sh:maxCount 1 ; + sh:name "x rotational scale factor" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:yRotationalScaleFactor ; + sh:datatype xsd:double ; + sh:description "Value will be zero if the local coordinate system is north-aligned." ; + sh:maxCount 1 ; + sh:name "y rotational scale factor" ; + ] ; +. +rec:GroupRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Group room" ; + rdfs:subClassOf rec:EducationalRoom ; +. +rec:HVACZone + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "HVAC zone" ; + rdfs:subClassOf rec:Zone ; +. +rec:Hallway + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Hallway" ; + rdfs:subClassOf rec:Room ; +. +rec:HealthcareRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Healthcare room" ; + rdfs:subClassOf rec:Room ; +. +rec:Hospital + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Hospital" ; + rdfs:subClassOf rec:Building ; +. +rec:IAQSensorEquipment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Indoor air quality sensor." ; + rdfs:label "Indoor Air Quality Sensor" ; + rdfs:subClassOf rec:SensorEquipment ; +. +rec:ICTEquipment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Equipment and devices that are part of a building's ICT infrastructure." ; + rdfs:label "ICT Equipment" ; + rdfs:subClassOf brick:Equipment ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:heightRUs ; + sh:datatype xsd:integer ; + sh:name "Height (RUs)" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:numberOfPorts ; + sh:datatype xsd:integer ; + sh:name "Number of Ports" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:standard ; + sh:datatype xsd:string ; + sh:description "The standard the equipment or device adheres to, e.g. IEEE 802.11." ; + sh:name "Standard" ; + ] ; +. +rec:ICTHardware + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "ICT hardware." ; + rdfs:label "ICT Hardware" ; + rdfs:subClassOf rec:ICTEquipment ; +. +rec:ITRack + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "IT rack." ; + rdfs:label "IT Rack" ; + rdfs:subClassOf rec:ICTEquipment ; +. +rec:IlluminanceObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Illuminance observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:InductanceObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Inductance observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Information + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Information" ; + rdfs:subClassOf rdfs:Resource ; +. +rec:IntegerValueObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Generic xsd:int value observation that is not specific to any particular QUDT quantitykind or unit." ; + rdfs:label "Integer value observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:integer ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Kitchenette + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Kitchenette" ; + rdfs:subClassOf rec:FoodHandlingRoom ; +. +rec:Laboratory + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Laboratory" ; + rdfs:subClassOf rec:Room ; +. +rec:LaboratoryDry + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Laboratory (dry)" ; + rdfs:subClassOf rec:Laboratory ; +. +rec:LaboratoryWet + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Laboratory (wet)" ; + rdfs:subClassOf rec:Laboratory ; +. +rec:Lamp + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Lamp" ; + rdfs:subClassOf rec:Furniture ; +. +rec:LaundryRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Laundry room" ; + rdfs:subClassOf rec:Room ; +. +rec:LeakDetectorEquipment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Leak detector." ; + rdfs:label "Leak Detector" ; + rdfs:subClassOf rec:SensorEquipment ; +. +rec:Lease + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Lease" ; + rdfs:subClassOf rec:Event ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:leaseOf ; + sh:description "The object (e.g., property, equipment, etc) that this a lease of." ; + sh:minCount 1 ; + sh:name "lease of" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:leasee ; + sh:class rec:Agent ; + sh:description "The agent leasing some leasable object, i.e., the user of the asset." ; + sh:minCount 1 ; + sh:name "leasee" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:leasor ; + sh:class rec:Agent ; + sh:description "The agent leasing out some leasable object, i.e., the owner of the asset." ; + sh:minCount 1 ; + sh:name "leasor" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:regulatedBy ; + sh:class rec:LeaseContract ; + sh:description "Indicates the contract regulating the terms of the lease in question. " ; + sh:name "regulated by" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:LeaseContract + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Formal document that identifies the Tenant and the leased asset or property; states lease term and fee (rent), and detailed terms and conditions of the lease agreement." ; + rdfs:label "Lease contract" ; + rdfs:subClassOf rec:Document ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:regulates ; + sh:class rec:Lease ; + sh:description "Indicates the lease(s) that this contract regulates the conditions of." ; + sh:name "regulates" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:LengthObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Length observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Level + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "The level of a building, a.k.a. storey, floor, etc." ; + rdfs:label "Level" ; + rdfs:subClassOf rec:Architecture ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:levelNumber ; + sh:datatype xsd:integer ; + sh:description "A number indicating the ordinal number of this level within the containing space (typically a Building or in the case of a Mezzanine, sometimes another level). Note that the implementation of this numbering scheme and its starting point is implementation-specific; e.g., the fifth floor below ground may be 0 in some systems, and -5 in others." ; + sh:name "level number" ; + ] ; +. +rec:Library + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Library" ; + rdfs:subClassOf rec:Room ; +. +rec:LivingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Living room" ; + rdfs:subClassOf rec:Room ; +. +rec:LoadingReceivingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Loading/receiving room" ; + rdfs:subClassOf rec:Room ; +. +rec:LockerRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Locker room" ; + rdfs:subClassOf rec:Room ; +. +rec:LuminanceObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Luminance observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:LuminousFluxObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Luminous flux observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:LuminousIntensityObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Luminous intensity observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:MagneticFluxObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Magnetic flux observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:MailRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Mail room" ; + rdfs:subClassOf rec:BackOffice ; +. +rec:MailroomCart + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Mailroom cart" ; + rdfs:subClassOf rec:Cart ; +. +rec:MainEntrance + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Main entrance" ; + rdfs:subClassOf rec:Entrance ; +. +rec:MassFlowRateObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Mass flow rate observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:MassObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Mass observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:MeditationRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Meditation room" ; + rdfs:subClassOf rec:Room ; +. +rec:MezzanineLevel + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Mezzanine level" ; + rdfs:subClassOf rec:Level ; +. +rec:MobileDesk + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Mobile desk" ; + rdfs:subClassOf rec:Desk ; +. +rec:ModbusController + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Modbus controller." ; + rdfs:label "Modbus Controller" ; + rdfs:subClassOf rec:Controller ; +. +rec:Morgue + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Morgue" ; + rdfs:subClassOf rec:HealthcareRoom ; +. +rec:MothersRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Mothers' room" ; + rdfs:subClassOf rec:Room ; +. +rec:MultiPoint + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Multi point" ; + rdfs:subClassOf rec:Geometry ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:coordinates ; + sh:datatype geojson:MultiPoint ; + sh:description "A GeoJSON MultiPoint coordinate listing. Coordinates may be expressed in two or three dimensions. Ex: [[10.0, 40.0], [40.0, 30.0], [20.0, 20.0], [30.0, 10.0]]." ; + sh:maxCount 1 ; + sh:name "coordinates" ; + ] ; +. +rec:MultiPolygon + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Multi polygon" ; + rdfs:subClassOf rec:Geometry ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:coordinates ; + sh:datatype geojson:MultiPolygon ; + sh:description "A GeoJSON MultiPolygon coordinate listing. Coordinates may be expressed in two or three dimensions. Ex: [[[[30.0, 20.0], [45.0, 40.0], [10.0, 40.0], [30.0, 20.0]]], [[[15.0, 5.0], [40.0, 10.0], [10.0, 20.0], [5.0, 10.0], [15.0, 5.0]]]]." ; + sh:maxCount 1 ; + sh:name "coordinates" ; + ] ; +. +rec:MultiPurposeRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Multi-purpose room" ; + rdfs:subClassOf rec:Room ; +. +rec:NeonatalNursingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Neonatal nursing room" ; + rdfs:subClassOf rec:HealthcareRoom ; +. +rec:NetworkRouter + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Network router." ; + rdfs:label "Network Router" ; + rdfs:subClassOf rec:DataNetworkEquipment ; +. +rec:NetworkSecurityEquipment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Network security equipment." ; + rdfs:label "Network Security Equipment" ; + rdfs:subClassOf rec:DataNetworkEquipment ; +. +rec:NotificationObject + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Notification object" ; + rdfs:subClassOf rec:ServiceObject ; +. +rec:ObservationEvent + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Observation event" ; + rdfs:subClassOf rec:PointEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:sourcePoint ; + sh:class brick:Point ; + sh:description "The brick:Point that emitted this observation." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "source point" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:OccupancySensorEquipment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Occupancy sensor." ; + rdfs:label "Occupancy Sensor" ; + rdfs:subClassOf rec:SensorEquipment ; +. +rec:OccupancyZone + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Occupancy Zone is a spatial area where devices are monitoring or reporting on the concept of Occupancy (motion sensors, people counters, cameras, etc.)" ; + rdfs:label "Occupancy zone" ; + rdfs:subClassOf rec:Zone ; +. +rec:Office + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Office" ; + rdfs:subClassOf rec:Room ; +. +rec:OfficeChair + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Office chair" ; + rdfs:subClassOf rec:Chair ; +. +rec:OfficeLandscape + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "OfficeLandscape" ; + rdfs:subClassOf rec:Office ; +. +rec:OfficeRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "OfficeRoom" ; + rdfs:subClassOf rec:Office ; +. +rec:OperatingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Operating room" ; + rdfs:subClassOf rec:HealthcareRoom ; +. +rec:Organization + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "An organization of any sort (e.g., a business, association, project, consortium, tribe, etc.)" ; + rdfs:label "Organization" ; + rdfs:subClassOf rec:Agent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:hasMember ; + sh:class rec:Agent ; + sh:description "Indicates membership in an organization. Note that componency (e.g., departments of a corporation) are expressed using the more generic hasPart property." ; + sh:name "has member" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:hasPart ; + sh:class rec:Organization ; + sh:description "Indicates parthood relations in organizations (e.g., departments of a corporation). Note that membership in an organization is expressed using the more specific hasMember property." ; + sh:name "has part" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:isPartOf ; + sh:class rec:Organization ; + sh:description "Indicates parthood relations in organizations (e.g., departments of a corporation). Note that membership in an organization is expressed using the Agent.isMemberOf property." ; + sh:name "is part of" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:logo ; + sh:datatype xsd:anyURI ; + sh:description "URL link to an image/logo that represents the organization." ; + sh:name "logo" ; + ] ; +. +rec:OutdoorSpace + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Outdoor space" ; + rdfs:subClassOf rec:Architecture ; +. +rec:OutpatientServicesRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Outpatient services room" ; + rdfs:subClassOf rec:HealthcareRoom ; +. +rec:Pantry + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Pantry" ; + rdfs:subClassOf rec:FoodHandlingRoom ; +. +rec:ParkingSpace + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Parking space" ; + rdfs:subClassOf rec:Zone ; +. +rec:Partition + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Partition" ; + rdfs:subClassOf rec:BarrierAsset ; +. +rec:PeopleCountSensorEquipment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "People count sensor." ; + rdfs:label "People Count Sensor" ; + rdfs:subClassOf rec:SensorEquipment ; +. +rec:Person + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A natural person (i.e., an individual human being)." ; + rdfs:label "Person" ; + rdfs:subClassOf rec:Agent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:familyName ; + sh:datatype xsd:string ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:gender ; + sh:datatype xsd:string ; + sh:name "gender" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:givenName ; + sh:datatype xsd:string ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:image ; + sh:datatype xsd:anyURI ; + sh:description "URL link to an image that represents the person." ; + sh:name "image" ; + ] ; +. +rec:PersonalHygiene + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Personal hygiene room" ; + rdfs:subClassOf rec:Room ; +. +rec:PharmacyRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Pharmacy room" ; + rdfs:subClassOf rec:HealthcareRoom ; +. +rec:PhoneBooth + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "PhoneBooth" ; + rdfs:subClassOf rec:Office ; +. +rec:Point + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Point" ; + rdfs:subClassOf rec:Geometry ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:coordinates ; + sh:datatype geojson:Point ; + sh:description "A GeoJSON Point coordinate listing. Coordinate may be expressed in two or three dimensions. Ex: [30.0, 10.0, 0.0]." ; + sh:maxCount 1 ; + sh:name "coordinates" ; + ] ; +. +rec:PointEvent + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "An event emanating from or targeting a Point; e.g., an individual Observation from a Sensor point, or an Actuation sent to a Command point. In other terms, the Points indicate the capability of some Space or Equipment to emit or accept data, while this class represents those actual data messages. Note that in most non-trivially sized systems, these events are not stored in the knowledge graph itself, but are rather forwarded to some C&C system or time series database." ; + rdfs:label "Point event" ; + rdfs:subClassOf rec:Event ; +. +rec:PointOfInterest + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Point of Interest" ; + rdfs:subClassOf rec:Information ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:objectOfInterest ; + sh:maxCount 1 ; + sh:name "object of interest" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:Polygon + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Polygon" ; + rdfs:subClassOf rec:Geometry ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:coordinates ; + sh:datatype geojson:Polygon ; + sh:description "A GeoJSON Polygon coordinate listing. Coordinates may be expressed in two or three dimensions. Ex: [[30.0, 10.0, 0.0], [40.0, 40.0, 2.0], [20.0, 40.0, 2.0], [10.0, 20.0, 2.0], [30.0, 10.0, 0.0]]." ; + sh:maxCount 1 ; + sh:name "coordinates" ; + ] ; +. +rec:Portfolio + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A portfolio is a grouping of buildings, sites, apartments, campuses, etc. that share some business-relevant commonality, e.g., are managed by the same company, are rented out to the same tenant, share utilization or legal definition (industrial vs commercial), etc." ; + rdfs:label "Portfolio" ; + rdfs:subClassOf rec:Collection ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:includes ; + sh:minCount 1 ; + sh:name "includes" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:PostalAddress + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Postal address" ; + rdfs:subClassOf rec:Information ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:addressLine1 ; + sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:name "address line 1" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:addressLine2 ; + sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:name "address line 2" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:city ; + sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:name "city" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:country ; + sh:datatype xsd:string ; + sh:description "The country, e.g., USA, Sweden, Argentina, or optionally a two-letter ISO 3166-1 alpha-2 country code, e.g., \"SE\", \"US\", etc." ; + sh:maxCount 1 ; + sh:name "country" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:postalCode ; + sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:name "postal code" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:region ; + sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:name "region" ; + ] ; +. +rec:PowerObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Power observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Premises + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A premises is an administrative grouping of spaces that are used for some commercial or industrial purpose by a real estate holder or tenant. E.g, a suite of offices, a shop, or an industrial workshop." ; + rdfs:label "Premises" ; + rdfs:subClassOf rec:Collection ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:includes ; + sh:class rec:Architecture ; + sh:minCount 1 ; + sh:name "includes" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:PressureObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Pressure observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:PrinterCart + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Printer cart" ; + rdfs:subClassOf rec:Cart ; +. +rec:PrinterStand + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Printer stand" ; + rdfs:subClassOf rec:Stand ; +. +rec:RadiologyRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Radiology room" ; + rdfs:subClassOf rec:HealthcareRoom ; +. +rec:RealEstate + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "The legal/administrative representation of some lands and/or buildings. I.e., \"Fastighet\" (Swedish), \"Ejendom\" (Denmark), etc." ; + rdfs:label "Real Estate" ; + rdfs:subClassOf rec:Collection ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:includes ; + sh:class rec:Architecture ; + sh:minCount 1 ; + sh:name "includes" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:Reception + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Reception" ; + rdfs:subClassOf rec:Room ; +. +rec:ReceptionTable + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Reception table" ; + rdfs:subClassOf rec:Table ; +. +rec:RecordingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Recording room" ; + rdfs:subClassOf rec:Room ; +. +rec:RecreationalRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Recreational room" ; + rdfs:subClassOf rec:Room ; +. +rec:Region + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "An administrative geospatial unit larger than the individual real estate. For instance, \"Lombary\", \"North America\", \"The Back Bay\", \"Elnätsområde Syd\", etc." ; + rdfs:label "Region" ; + rdfs:subClassOf rec:Space ; +. +rec:RelativeHumidityObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Relative humidity observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:ResistanceObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Resistance observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:RestingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Resting room" ; + rdfs:subClassOf rec:Room ; +. +rec:RetailRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Retail room" ; + rdfs:subClassOf rec:Room ; +. +rec:Roof + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Roof" ; + rdfs:subClassOf rec:BuildingElement ; +. +rec:RoofLevel + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Roof level" ; + rdfs:subClassOf rec:Level ; +. +rec:Room + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Room" ; + rdfs:subClassOf rec:Architecture ; +. +rec:Safe + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Safe" ; + rdfs:subClassOf rec:Furniture ; +. +rec:Sauna + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Sauna" ; + rdfs:subClassOf rec:PersonalHygiene ; +. +rec:School + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "School" ; + rdfs:subClassOf rec:Building ; +. +rec:SecurityRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Security room" ; + rdfs:subClassOf rec:Room ; +. +rec:SensorEquipment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Sensor equipment." ; + rdfs:label "Sensor Equipment" ; + rdfs:subClassOf rec:ICTEquipment ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:batteryPercentage ; + sh:datatype xsd:double ; + sh:name "Battery Percentage" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:wifiSignalStrength ; + sh:datatype xsd:double ; + sh:name "Wi-Fi Signal Strength" ; + ] ; +. +rec:Server + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Server." ; + rdfs:label "Server" ; + rdfs:subClassOf rec:ICTHardware ; +. +rec:ServiceEntrance + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Service entrance" ; + rdfs:subClassOf rec:Entrance ; +. +rec:ServiceObject + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Service object" ; + rdfs:subClassOf rec:Information ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:acknowledgedBy ; + sh:class rec:Agent ; + sh:maxCount 1 ; + sh:name "acknowledged by" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:acknowledgedTime ; + sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:name "acknowledged time" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:closedBy ; + sh:class rec:Agent ; + sh:maxCount 1 ; + sh:name "closed by" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:closedTime ; + sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:name "closed time" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:createdBy ; + sh:class rec:Agent ; + sh:maxCount 1 ; + sh:name "created by" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:createdTime ; + sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:name "created time" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:producedBy ; + sh:class brick:Point ; + sh:name "produced by" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:relatedTo ; + sh:minCount 1 ; + sh:name "related to" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:severity ; + sh:datatype xsd:string ; + sh:in ( + "Severe" + "Major" + "Minor" + ) ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "severity" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:status ; + sh:datatype xsd:string ; + sh:in ( + "Unacknowledged" + "Acknowledged" + "Closed" + ) ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "status" ; + ] ; +. +rec:ServiceShaft + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Service shaft" ; + rdfs:subClassOf rec:Room ; +. +rec:Shelter + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Shelter" ; + rdfs:subClassOf rec:Room ; +. +rec:ShelterGasLock + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Shelter gas lock" ; + rdfs:subClassOf rec:Shelter ; +. +rec:ShelterRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Shelter room" ; + rdfs:subClassOf rec:Shelter ; +. +rec:ShoppingMall + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Shopping mall" ; + rdfs:subClassOf rec:Building ; +. +rec:ShowerRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Shower room" ; + rdfs:subClassOf rec:PersonalHygiene ; +. +rec:Site + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A piece of land upon which zero or more buildings may be situated." ; + rdfs:label "Site" ; + rdfs:subClassOf rec:Architecture ; +. +rec:Slab + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Slab" ; + rdfs:subClassOf rec:BuildingElement ; +. +rec:SmallStudyRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Small study room" ; + rdfs:subClassOf rec:EducationalRoom ; +. +rec:Sofa + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Sofa" ; + rdfs:subClassOf rec:Furniture ; +. +rec:SoundPressureObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Sound pressure observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Space + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A contiguous part of the physical world that contains or can contain sub-spaces. E.g., a Region can contain many Sites, which in turn can contain many Buildings." ; + rdfs:label "Space" ; + rdfs:subClassOf rdfs:Resource ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:geometry ; + sh:class rec:Geometry ; + sh:description "Polygon representing the spatial extent of this Space." ; + sh:maxCount 1 ; + sh:name "geometry" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:georeference ; + sh:class rec:Georeference ; + sh:description "A georeference creates a relationship between the local coordinate system used within a building (e.g., measured in meters) and a geographic coordinate system (e.g., lat, long, alt), such that locally placed Spaces can be resolved and rendered in that geographic coordinate system (e.g., for mapping purposes)." ; + sh:maxCount 1 ; + sh:name "georeference" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:hasPart ; + sh:class rec:Space ; + sh:name "has part" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:isLocationOf ; + sh:name "is location of" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:isPartOf ; + sh:class rec:Space ; + sh:maxCount 1 ; + sh:name "is part of" ; + sh:nodeKind sh:IRI ; + ] ; +. +rec:SprinklerRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Sprinkler room" ; + rdfs:subClassOf rec:UtilitiesRoom ; +. +rec:Stadium + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Stadium" ; + rdfs:subClassOf rec:Building ; +. +rec:StaffRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Staff room" ; + rdfs:subClassOf rec:Room ; +. +rec:Stairwell + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Stairwell" ; + rdfs:subClassOf rec:Room ; +. +rec:Stand + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Stand" ; + rdfs:subClassOf rec:Furniture ; +. +rec:Storage + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Storage" ; + rdfs:subClassOf rec:Room ; +. +rec:StorageCabinet + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Storage cabinet" ; + rdfs:subClassOf rec:Furniture ; +. +rec:SubBuilding + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Sub-building" ; + rdfs:subClassOf rec:Architecture ; +. +rec:TVStand + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "TV stand" ; + rdfs:subClassOf rec:Stand ; +. +rec:Table + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Table" ; + rdfs:subClassOf rec:Furniture ; +. +rec:TelecommunicationRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Telecommunication room" ; + rdfs:subClassOf rec:CableRoom ; +. +rec:TemperatureObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Temperature observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Theater + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Theater" ; + rdfs:subClassOf rec:Room ; +. +rec:TherapyRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Therapy room" ; + rdfs:subClassOf rec:HealthcareRoom ; +. +rec:ThermostatEquipment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Thermostat." ; + rdfs:label "Thermostat" ; + rdfs:subClassOf rec:SensorEquipment ; +. +rec:ThrustObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Thrust observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:TimeSpanObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Timespan observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Toilet + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Toilet" ; + rdfs:subClassOf rec:PersonalHygiene ; +. +rec:TorqueObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Torque observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:TreatmentRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Treatment room" ; + rdfs:subClassOf rec:Room ; +. +rec:TreatmentWaitingRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Treatment waiting room" ; + rdfs:subClassOf rec:TreatmentRoom ; +. +rec:UtilitiesRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Utilities room" ; + rdfs:subClassOf rec:Room ; +. +rec:VelocityObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Velocity observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:VibrationSensorEquipment + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Vibration sensor." ; + rdfs:label "Vibration Sensor" ; + rdfs:subClassOf rec:SensorEquipment ; +. +rec:VirtualBuilding + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Virtual building" ; + rdfs:subClassOf rec:Building ; +. +rec:VoltageObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Voltage observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:VolumeFlowRateObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Volume flow rate observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:VolumeObservation + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + qudt:hasQuantityKind ; + rdfs:label "Volume observation" ; + rdfs:subClassOf rec:ObservationEvent ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. +rec:Wall + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Wall" ; + rdfs:subClassOf rec:BuildingElement ; +. +rec:WallInner + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Wall (inner)" ; + rdfs:subClassOf rec:Wall ; +. +rec:WasteBasket + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Waste basket" ; + rdfs:subClassOf rec:Furniture ; +. +rec:WasteManagementRoom + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Waste management room" ; + rdfs:subClassOf rec:Room ; +. +rec:Window + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Window" ; + rdfs:subClassOf rec:BarrierAsset ; +. +rec:WirelessAccessPoint + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "Wireless access point." ; + rdfs:label "Wireless Access Point" ; + rdfs:subClassOf rec:DataNetworkEquipment ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:generation ; + sh:datatype xsd:string ; + sh:in ( + "WiFi4" + "WiFi5" + "WiFi6" + "WiFi6E" + "WiFi7" + ) ; + sh:maxCount 1 ; + sh:name "Generation" ; + ] ; +. +rec:WorkOrder + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Work order" ; + rdfs:subClassOf rec:ServiceObject ; +. +rec:Workshop + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Workshop" ; + rdfs:subClassOf rec:Room ; +. +rec:Workspace + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Workspace" ; + rdfs:subClassOf rec:Zone ; +. +rec:Zone + rdf:type rdfs:Class ; + rdf:type sh:NodeShape ; + rdfs:comment "A sub-zone within or outside of a building defined to support some technology and/or use, e.g., an HVAC zone, a parking space, a security zone, etc." ; + rdfs:label "Zone" ; + rdfs:subClassOf rec:Architecture ; +. +rec:substance + rdf:type owl:AnnotationProperty ; + rdfs:domain rec:feeds ; + rdfs:domain rec:isFedBy ; + rdfs:label "substance" ; + rdfs:range [ + rdf:type rdfs:Datatype ; + owl:oneOf ( + "ACElec" + "Air" + "BlowdownWater" + "ChilledWater" + "ColdDomesticWater" + "Condensate" + "CondenserWater" + "DCElec" + "Diesel" + "DriveElec" + "Ethernet" + "ExhaustAir" + "Freight" + "FuelOil" + "Gasoline" + "GreaseExhaustAir" + "HotDomesticWater" + "HotWater" + "IrrigationWater" + "Light" + "MakeupWater" + "NaturalGas" + "NonPotableDomesticWater" + "OutsideAir" + "People" + "Propane" + "RecircHotDomesticWater" + "Refrig" + "ReturnAir" + "SprinklerWater" + "Steam" + "StormDrainage" + "SupplyAir" + "TransferAir" + "WasteVentDrainage" + "Water" + ) ; + ] ; +. diff --git a/support/recimports.ttl b/support/recimports.ttl new file mode 100644 index 00000000..87973aa7 --- /dev/null +++ b/support/recimports.ttl @@ -0,0 +1,144 @@ +# baseURI: https://w3id.org/rec/recimports +# imports: https://w3id.org/rec + +@prefix : . +@prefix geojson: . +@prefix owl: . +@prefix qudt: . +@prefix rdf: . +@prefix rdfs: . +@prefix xsd: . + +qudt:hasQuantityKind + rdf:type owl:ObjectProperty ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; + rdfs:label "Acceleration" ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; + rdfs:label "Angular acceleration" ; +. + + rdf:type rdfs:Resource ; + rdfs:label "Angular velocity" ; +. + + rdf:type rdfs:Resource ; + rdfs:label "Area" ; +. + + rdf:type rdfs:Resource ; + rdfs:label "Capacitance" ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; + rdfs:label "Electric current" ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. + + rdf:type rdfs:Resource ; +. +geojson:Polygon + rdf:type rdfs:Datatype ; + rdfs:comment "A GeoJSON Polygon coordinate listing representing the geometrical representation of the space. Coordinates may be expressed in two or three dimensions. Ex: [[30.0, 10.0, 0.0], [40.0, 40.0, 2.0], [20.0, 40.0, 2.0], [10.0, 20.0, 2.0], [30.0, 10.0, 0.0]]." ; + rdfs:label "Polygon" ; + owl:onDatatype xsd:string ; +. + + rdf:type owl:Ontology ; + owl:imports ; +. From 5bfe6de599b27b5ea82037af6c8e23ad2cc240a2 Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Fri, 28 Apr 2023 08:43:13 -0600 Subject: [PATCH 03/14] add brickpatches --- bricksrc/ontology.py | 1 + support/brickpatches.ttl | 1313 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 1314 insertions(+) create mode 100644 support/brickpatches.ttl diff --git a/bricksrc/ontology.py b/bricksrc/ontology.py index 167a389a..e8b61e42 100644 --- a/bricksrc/ontology.py +++ b/bricksrc/ontology.py @@ -47,6 +47,7 @@ "ref": "https://brickschema.org/schema/Brick/ref", "rec": "https://w3id.org/rec", "recimports": "https://w3id.org/rec/recimports", + "brickpatches": "https://w3id.org/rec/brickpatches", } shacl_namespace_declarations = [ diff --git a/support/brickpatches.ttl b/support/brickpatches.ttl new file mode 100644 index 00000000..d2cd0f18 --- /dev/null +++ b/support/brickpatches.ttl @@ -0,0 +1,1313 @@ +# baseURI: https://w3id.org/rec/brickpatches +# imports: https://brickschema.org/schema/1.3/Brick +# imports: https://w3id.org/rec + +@prefix : . +@prefix brick: . +@prefix owl: . +@prefix rdf: . +@prefix rdfs: . +@prefix rec: . +@prefix sh: . +@prefix xsd: . + +brick:Ablutions_Room + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. There is not yet a replacement in REC for Ablutions_Room" ; + ] +. +brick:Absolute_Humidity_Sensor + rdf:type owl:Class ; + rdf:type sh:NodeShape ; + rdfs:label "Absolute Humidity Sensor" ; + rdfs:subClassOf brick:Humidity_Sensor ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:AbsoluteHumidityObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Adjust_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Air_Grains_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Air_Quality_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Alarm + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:ExceptionEvent ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Angle_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:AngleObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Atrium + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:Atrium" ; + ] +. +brick:Auditorium + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:Auditorium" ; + ] +. +brick:Basement + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:BasementLevel" ; + ] +. +brick:Battery_Room + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:ElectricityRoom" ; + ] +. +brick:Bench_Space + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider creating a rec:Zone that is part of a rec:Stadium" ; + ] +. +brick:Break_Room + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:BasementLevel" ; + ] +. +brick:Breakroom + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:StaffRoom" ; + ] +. +brick:Broadcast_Room + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:RecordingRoom" ; + ] +. +brick:Building + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:Building" ; + ] +. +brick:Cafeteria + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:CafeteriaRoom" ; + ] +. +brick:Capacity_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Cold_Box + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:Laboratory" ; + ] +. +brick:Collection + owl:deprecated "true"^^xsd:boolean ; +. +brick:Command + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:ActuationEvent ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Common_Space + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:Space" ; + ] +. +brick:Concession + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:FoodHandlingRoom" ; + ] +. +brick:Conductivity_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Conference_Room + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:ConferenceRoom" ; + ] +. +brick:Contact_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:BooleanValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Control_Room + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:SecurityRoom" ; + ] +. +brick:Copy_Room + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:CopyingRoom" ; + ] +. +brick:Cubicle + owl:deprecated "true"^^xsd:boolean ; + brick:deprecation [ + brick:deprecatedInVersion "1.3.1" ; + brick:deprecationMitigationMessage "Brick location classes are being phased out in favor of RealEstateCore classes. For a replacement, consider rec:Workspace perhaps with a rec:Desk" ; + ] +. +brick:Current_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:ElectricCurrentObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Demand_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:PowerObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Detention_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Dewpoint_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:TemperatureObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Differential_Temperature_Setpoint + rdf:type sh:NodeShape ; +. +brick:Direction_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:AngleObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Distribution_Frame + owl:deprecated "true"^^xsd:boolean ; +. +brick:Duration_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:TimeSpanObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Electrical_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Elevator_Shaft + owl:deprecated "true"^^xsd:boolean ; +. +brick:Elevator_Space + owl:deprecated "true"^^xsd:boolean ; +. +brick:Employee_Entrance_Lobby + owl:deprecated "true"^^xsd:boolean ; +. +brick:Enclosed_Office + owl:deprecated "true"^^xsd:boolean ; +. +brick:Energy_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:EnergyObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Energy_Zone + owl:deprecated "true"^^xsd:boolean ; +. +brick:Enthalpy_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Entrance + owl:deprecated "true"^^xsd:boolean ; +. +brick:Environment_Box + owl:deprecated "true"^^xsd:boolean ; +. +brick:Equipment + rdfs:subClassOf rec:Asset ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:feeds ; + sh:name "feeds" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:isFedBy ; + sh:name "is fed by" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Equipment_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Exercise_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Field_Of_Play + owl:deprecated "true"^^xsd:boolean ; +. +brick:Fire_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:BooleanValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Fire_Zone + owl:deprecated "true"^^xsd:boolean ; +. +brick:First_Aid_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Floor + owl:deprecated "true"^^xsd:boolean ; +. +brick:Flow_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:VolumeFlowRateObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Food_Service_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Freezer + owl:deprecated "true"^^xsd:boolean ; +. +brick:Frequency_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:FrequencyObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Frost_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:BooleanValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Furniture + owl:deprecated "true"^^xsd:boolean ; +. +brick:Gas_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Gatehouse + owl:deprecated "true"^^xsd:boolean ; +. +brick:Generation_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Generator_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:HVAC_Zone + owl:deprecated "true"^^xsd:boolean ; +. +brick:Hail_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Hallway + owl:deprecated "true"^^xsd:boolean ; +. +brick:Hazardous_Materials_Storage + owl:deprecated "true"^^xsd:boolean ; +. +brick:Heat_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Hospitality_Box + owl:deprecated "true"^^xsd:boolean ; +. +brick:Hot_Box + owl:deprecated "true"^^xsd:boolean ; +. +brick:IDF + owl:deprecated "true"^^xsd:boolean ; +. +brick:Illuminance_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:IlluminanceObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Imbalance_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Information_Area + owl:deprecated "true"^^xsd:boolean ; +. +brick:Janitor_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Laboratory + owl:deprecated "true"^^xsd:boolean ; +. +brick:Library + owl:deprecated "true"^^xsd:boolean ; +. +brick:Lighting + rdf:type sh:NodeShape ; +. +brick:Lighting_Zone + owl:deprecated "true"^^xsd:boolean ; +. +brick:Loading_Dock + owl:deprecated "true"^^xsd:boolean ; +. +brick:Lobby + owl:deprecated "true"^^xsd:boolean ; +. +brick:Location + owl:deprecated "true"^^xsd:boolean ; +. +brick:Loop + rdfs:subClassOf rec:Collection ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:includes ; + sh:class brick:Equipment ; + sh:minCount 1 ; + sh:name "includes" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Lounge + owl:deprecated "true"^^xsd:boolean ; +. +brick:Luminance_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:LuminanceObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:MDF + owl:deprecated "true"^^xsd:boolean ; +. +brick:Mail_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Majlis + owl:deprecated "true"^^xsd:boolean ; +. +brick:Massage_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Mechanical_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Media_Hot_Desk + owl:deprecated "true"^^xsd:boolean ; +. +brick:Media_Production_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Media_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Medical_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Motion_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:BooleanValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Occupancy_Count_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:IntegerValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Occupancy_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:BooleanValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Office + owl:deprecated "true"^^xsd:boolean ; +. +brick:Office_Kitchen + owl:deprecated "true"^^xsd:boolean ; +. +brick:Open_Office + owl:deprecated "true"^^xsd:boolean ; +. +brick:Outdoor_Area + owl:deprecated "true"^^xsd:boolean ; +. +brick:Outside + owl:deprecated "true"^^xsd:boolean ; +. +brick:PV_Array + rdfs:subClassOf rec:Collection ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:includes ; + sh:class brick:PV_Panel ; + sh:minCount 1 ; + sh:name "includes" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Parameter + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Parking_Level + owl:deprecated "true"^^xsd:boolean ; +. +brick:Parking_Space + owl:deprecated "true"^^xsd:boolean ; +. +brick:Parking_Structure + owl:deprecated "true"^^xsd:boolean ; +. +brick:Photovoltaic_Array + owl:deprecated "true"^^xsd:boolean ; +. +brick:Piezoelectric_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Plumbing_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Point + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:hasQuantity ; + sh:class brick:Quantity ; + sh:name "has quantity" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:hasSubstance ; + sh:class brick:Substance ; + sh:name "has substance" ; + sh:nodeKind sh:IRI ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:isPointOf ; + sh:name "is point of" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Portfolio + owl:deprecated "true"^^xsd:boolean ; +. +brick:Position_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Power_Factor_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Power_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:PowerObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Prayer_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Pressure_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Private_Office + owl:deprecated "true"^^xsd:boolean ; +. +brick:Pump_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Rain_Level_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:LengthObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Rain_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Reception + owl:deprecated "true"^^xsd:boolean ; +. +brick:Refrigerant_Level_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Region + owl:deprecated "true"^^xsd:boolean ; +. +brick:Relative_Humidity_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:RelativeHumidityObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Rest_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Restroom + owl:deprecated "true"^^xsd:boolean ; +. +brick:Retail_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Riser + owl:deprecated "true"^^xsd:boolean ; +. +brick:Rooftop + owl:deprecated "true"^^xsd:boolean ; +. +brick:Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Security_Service_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Server_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Service_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Setpoint + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Shared_Office + owl:deprecated "true"^^xsd:boolean ; +. +brick:Shower + owl:deprecated "true"^^xsd:boolean ; +. +brick:Site + owl:deprecated "true"^^xsd:boolean ; +. +brick:Solar_Radiance_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Space + owl:deprecated "true"^^xsd:boolean ; +. +brick:Speed_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:VelocityObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Sports_Service_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Stage_Riser + owl:deprecated "true"^^xsd:boolean ; +. +brick:Staircase + owl:deprecated "true"^^xsd:boolean ; +. +brick:Status + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Storage_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Storey + owl:deprecated "true"^^xsd:boolean ; +. +brick:Studio + owl:deprecated "true"^^xsd:boolean ; +. +brick:Switch_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:System + rdfs:subClassOf rec:Collection ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path rec:includes ; + sh:class brick:Equipment ; + sh:minCount 1 ; + sh:name "includes" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:TETRA_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Team_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Telecom_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Temperature_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:TemperatureObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Ticketing_Booth + owl:deprecated "true"^^xsd:boolean ; +. +brick:Torque_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:TorqueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Transformer_Room + owl:deprecated "true"^^xsd:boolean ; +. +brick:Tunnel + owl:deprecated "true"^^xsd:boolean ; +. +brick:Usage_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:DoubleValueObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Vertical_Space + owl:deprecated "true"^^xsd:boolean ; +. +brick:Visitor_Lobby + owl:deprecated "true"^^xsd:boolean ; +. +brick:Voltage_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:VoltageObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Wardrobe + owl:deprecated "true"^^xsd:boolean ; +. +brick:Waste_Storage + owl:deprecated "true"^^xsd:boolean ; +. +brick:Water_Level_Sensor + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:lastKnownValue ; + sh:class rec:LengthObservation ; + sh:maxCount 1 ; + sh:name "last known value" ; + sh:nodeKind sh:IRI ; + ] ; +. +brick:Water_Tank + owl:deprecated "true"^^xsd:boolean ; +. +brick:Wing + owl:deprecated "true"^^xsd:boolean ; +. +brick:Workshop + owl:deprecated "true"^^xsd:boolean ; +. +brick:Zone + owl:deprecated "true"^^xsd:boolean ; +. +brick:feeds + owl:deprecated "true"^^xsd:boolean ; + owl:equivalentProperty rec:feeds ; +. +brick:hasLocation + owl:equivalentProperty rec:locatedIn ; +. +brick:hasPart + owl:deprecated "true"^^xsd:boolean ; + owl:equivalentProperty rec:hasPart ; +. +brick:hasPoint + owl:equivalentProperty rec:hasPoint ; +. +brick:isFedBy + owl:deprecated "true"^^xsd:boolean ; + owl:equivalentProperty rec:isFedBy ; +. +brick:isPartOf + owl:equivalentProperty rec:isPartOf ; +. +brick:isPointOf + owl:deprecated "true"^^xsd:boolean ; + owl:equivalentProperty rec:isPointOf ; +. + + rdf:type owl:Class ; + rdf:type sh:NodeShape ; + rdfs:subClassOf ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:timestamp ; + sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "timestamp" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:value ; + sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. + + rdf:type owl:Class ; + rdf:type sh:NodeShape ; + rdfs:subClassOf ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:timestamp ; + sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "timestamp" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:value ; + sh:datatype xsd:double ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. + + rdf:type owl:Class ; + rdf:type sh:NodeShape ; + rdfs:subClassOf ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:timestamp ; + sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "timestamp" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:value ; + sh:datatype xsd:duration ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. + + rdf:type owl:Class ; + rdf:type sh:NodeShape ; + rdfs:subClassOf ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:timestamp ; + sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "timestamp" ; + ] ; + sh:property [ + rdf:type sh:PropertyShape ; + sh:path brick:value ; + sh:datatype xsd:integer ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:name "value" ; + ] ; +. + + rdf:type sh:NodeShape ; +. +rec:AbsoluteHumidityObservation + rdf:type ; +. +rec:AccelerationObservation + rdf:type ; +. +rec:ActuationEvent + rdf:type ; +. +rec:AngleObservation + rdf:type ; +. +rec:AngularAccelerationObservation + rdf:type ; +. +rec:AngularVelocityObservation + rdf:type ; +. +rec:AreaObservation + rdf:type ; +. +rec:Asset + rdf:type sh:NodeShape ; +. +rec:AssetCollection + rdf:type sh:NodeShape ; +. +rec:BooleanValueObservation + rdf:type ; +. +rec:CapacitanceObservation + rdf:type ; +. +rec:Collection + rdf:type sh:NodeShape ; +. +rec:DataRateObservation + rdf:type ; +. +rec:DataSizeObservation + rdf:type ; +. +rec:DensityObservation + rdf:type ; +. +rec:DistanceObservation + rdf:type ; +. +rec:DoubleValueObservation + rdf:type ; +. +rec:ElectricChargeObservation + rdf:type ; +. +rec:ElectricCurrentObservation + rdf:type ; +. +rec:EnergyObservation + rdf:type ; +. +rec:EquipmentCollection + rdf:type sh:NodeShape ; +. +rec:ExceptionEvent + rdf:type ; +. +rec:ForceObservation + rdf:type ; +. +rec:FrequencyObservation + rdf:type ; +. +rec:IlluminanceObservation + rdf:type ; +. +rec:InductanceObservation + rdf:type ; +. +rec:IntegerValueObservation + rdf:type ; +. +rec:LengthObservation + rdf:type ; +. +rec:LuminanceObservation + rdf:type ; +. +rec:LuminousFluxObservation + rdf:type ; +. +rec:LuminousIntensityObservation + rdf:type ; +. +rec:MagneticFluxObservation + rdf:type ; +. +rec:MassFlowRateObservation + rdf:type ; +. +rec:MassObservation + rdf:type ; +. +rec:PowerObservation + rdf:type ; +. +rec:PressureObservation + rdf:type ; +. +rec:RelativeHumidityObservation + rdf:type ; +. +rec:ResistanceObservation + rdf:type ; +. +rec:SoundPressureObservation + rdf:type ; +. +rec:TemperatureObservation + rdf:type ; +. +rec:ThrustObservation + rdf:type ; +. +rec:TimeSpanObservation + rdf:type ; +. +rec:TorqueObservation + rdf:type ; +. +rec:VelocityObservation + rdf:type ; +. +rec:VoltageObservation + rdf:type ; +. +rec:VolumeFlowRateObservation + rdf:type ; +. +rec:VolumeObservation + rdf:type ; +. +rec:substance + rdf:type owl:AnnotationProperty ; + rdfs:domain rec:feeds ; + rdfs:domain rec:isFedBy ; + rdfs:label "substance" ; + rdfs:range [ + rdf:type rdfs:Datatype ; + owl:oneOf ( + "ACElec" + "Air" + "BlowdownWater" + "ChilledWater" + "ColdDomesticWater" + "Condensate" + "CondenserWater" + "DCElec" + "Diesel" + "DriveElec" + "Ethernet" + "ExhaustAir" + "Freight" + "FuelOil" + "Gasoline" + "GreaseExhaustAir" + "HotDomesticWater" + "HotWater" + "IrrigationWater" + "Light" + "MakeupWater" + "NaturalGas" + "NonPotableDomesticWater" + "OutsideAir" + "People" + "Propane" + "RecircHotDomesticWater" + "Refrig" + "ReturnAir" + "SprinklerWater" + "Steam" + "StormDrainage" + "SupplyAir" + "TransferAir" + "WasteVentDrainage" + "Water" + ) ; + ] ; +. + + rdf:type owl:Ontology ; + owl:imports ; + owl:imports ; + owl:versionInfo "Created with TopBraid Composer" ; +. From ceabc1b8da182be7345470bdaacc3c05ac722663 Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Fri, 28 Apr 2023 08:43:32 -0600 Subject: [PATCH 04/14] fixing up location haspart constraints --- bricksrc/location.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bricksrc/location.py b/bricksrc/location.py index 79f3fc3c..04fbb136 100644 --- a/bricksrc/location.py +++ b/bricksrc/location.py @@ -632,8 +632,10 @@ }, "constraints": { BRICK.hasPart: [ - BRICK.Room, BRICK.Space, + BRICK.Wing, + BRICK.Outdoor_Area, + BRICK.Floor, ], }, }, From 41e4a68bb60790db9184c99cabcb671f4691d7ae Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Wed, 27 Sep 2023 12:40:51 -0600 Subject: [PATCH 05/14] updating REC --- bricksrc/definitions.csv | 14 +++++++------- support/rec.ttl | 1 - 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/bricksrc/definitions.csv b/bricksrc/definitions.csv index 3aa24360..a26e04c0 100644 --- a/bricksrc/definitions.csv +++ b/bricksrc/definitions.csv @@ -47,7 +47,7 @@ https://brickschema.org/schema/Brick#Audio_Visual_Equipment,Equipment related to https://brickschema.org/schema/Brick#Auditorium,A space for performances or larger gatherings, https://brickschema.org/schema/Brick#Automatic_Mode_Command,"Controls whether or not a device or controller is operating in ""Automatic"" mode", https://brickschema.org/schema/Brick#Automatic_Tint_Window,A window with tint control., -https://brickschema.org/schema/Brick#Automatic_Tint_Window_Array,"An array of Automatic Tint Windows.", +https://brickschema.org/schema/Brick#Automatic_Tint_Window_Array,An array of Automatic Tint Windows., https://brickschema.org/schema/Brick#Availability_Status,"Indicates if a piece of equipment, system, or functionality is available for operation", https://brickschema.org/schema/Brick#Average_Cooling_Demand_Sensor,Measures the average power consumed by a cooling process as the amount of power consumed over some interval, https://brickschema.org/schema/Brick#Average_Discharge_Air_Flow_Sensor,The computed average flow of discharge air over some interval, @@ -305,9 +305,9 @@ https://brickschema.org/schema/Brick#ESS_Panel,See Embedded_Surface_System_Panel https://brickschema.org/schema/Brick#Economizer,"Device that, on proper variable sensing, initiates control signals or actions to conserve energy. A control system that reduces the mechanical heating and cooling requirement.", https://brickschema.org/schema/Brick#Economizer_Damper,A damper that is part of an economizer that is used to module the flow of air, https://brickschema.org/schema/Brick#Effective_Air_Temperature_Setpoint,, -https://brickschema.org/schema/Brick#Effective_Cooling_Zone_Air_Temperature_Setpoint,"The effective cooling setpoint for a specific zone in a building.", -https://brickschema.org/schema/Brick#Effective_Heating_Zone_Air_Temperature_Setpoint,"The effective heating setpoint for a specific zone in a building.", -https://brickschema.org/schema/Brick#Effective_Target_Zone_Air_Temperature_Setpoint,"Target Setpoint (also known as Common Setpoint) is a reference point representing the desired air temperature in a specific zone of a building. This setpoint acts as a baseline from which the cooling and heating setpoints are established by adding or subtracting a deadband width", +https://brickschema.org/schema/Brick#Effective_Cooling_Zone_Air_Temperature_Setpoint,The effective cooling setpoint for a specific zone in a building., +https://brickschema.org/schema/Brick#Effective_Heating_Zone_Air_Temperature_Setpoint,The effective heating setpoint for a specific zone in a building., +https://brickschema.org/schema/Brick#Effective_Target_Zone_Air_Temperature_Setpoint,Target Setpoint (also known as Common Setpoint) is a reference point representing the desired air temperature in a specific zone of a building. This setpoint acts as a baseline from which the cooling and heating setpoints are established by adding or subtracting a deadband width, https://brickschema.org/schema/Brick#Electric_Baseboard_Radiator,Electric heating device located at or near the floor, https://brickschema.org/schema/Brick#Electric_Boiler,"A closed, pressure vessel that uses electricity for heating water or other fluids to supply steam or hot water for heating, humidification, or other applications.", https://brickschema.org/schema/Brick#Electric_Current,, @@ -316,7 +316,7 @@ https://brickschema.org/schema/Brick#Electric_Power,"Electric Power is the rate https://brickschema.org/schema/Brick#Electric_Power_Sensor,Measures the amount of instantaneous electric power consumed, https://brickschema.org/schema/Brick#Electric_Radiator,Electric heating device, https://brickschema.org/schema/Brick#Electric_Voltage,, -https://brickschema.org/schema/Brick#Electrical_Energy_Usage_Sensor,"A sensor that records the quantity of electrical energy consumed in a given period", +https://brickschema.org/schema/Brick#Electrical_Energy_Usage_Sensor,A sensor that records the quantity of electrical energy consumed in a given period, https://brickschema.org/schema/Brick#Electrical_Meter,A meter that measures the usage or consumption of electricity, https://brickschema.org/schema/Brick#Electrical_Room,A class of service rooms that house electrical equipment for a building, https://brickschema.org/schema/Brick#Electrical_System,Devices that serve or are part of the electrical subsystem in the building, @@ -827,10 +827,10 @@ https://brickschema.org/schema/Brick#Power_Factor_Sensor,"Sensors measuring powe https://brickschema.org/schema/Brick#Power_Loss_Alarm,An alarm that indicates a power failure., https://brickschema.org/schema/Brick#Power_Sensor,Measures the amount of instantaneous power consumed, https://brickschema.org/schema/Brick#Prayer_Room,A room set aside for prayer, +https://brickschema.org/schema/Brick#Pre-Cooling_Air_Unit,"A type of AHU, use to pre-treat the outdoor air before feed to AHU", https://brickschema.org/schema/Brick#Pre_Filter,A filter installed in front of a more efficient filter to extend the life of the more expensive higher efficiency filter, https://brickschema.org/schema/Brick#Pre_Filter_Status,Indicates if a prefilter needs to be replaced, https://brickschema.org/schema/Brick#Precipitation,"Amount of atmospheric water vapor fallen including rain, sleet, snow, and hail (https://project-haystack.dev/doc/lib-phScience/precipitation)", -https://brickschema.org/schema/Brick#Pre-Cooling_Air_Unit,"A type of AHU, use to pre-treat the outdoor air before feed to AHU", https://brickschema.org/schema/Brick#Preheat_Command,A command to activate preheating, https://brickschema.org/schema/Brick#Preheat_Demand_Setpoint,Sets the rate required for preheat, https://brickschema.org/schema/Brick#Preheat_Discharge_Air_Temperature_Sensor,Measures the temperature of discharge air before heating is applied, @@ -1035,7 +1035,7 @@ https://brickschema.org/schema/Brick#Temperature_Tolerance_Parameter,A parameter https://brickschema.org/schema/Brick#Temporary_Occupancy_Status,"For systems that differentiate between scheduled occupied/unoccupied mode, this indicates if a space is temporarily occupied when it would otherwise be unoccupied", https://brickschema.org/schema/Brick#Terminal_Unit,A device that regulates the volumetric flow rate and/or the temperature of the controlled medium., https://brickschema.org/schema/Brick#Thermal_Energy,"Thermal Energy} is the portion of the thermodynamic or internal energy of a system that is responsible for the temperature of the system. From a macroscopic thermodynamic description, the thermal energy of a system is given by its constant volume specific heat capacity C(T), a temperature coefficient also called thermal capacity, at any given absolute temperature (T): (U_{thermal = C(T) \cdot T).", -https://brickschema.org/schema/Brick#Thermal_Energy_Usage_Sensor,"A sensor that records the quantity of thermal energy consumed in a given period", +https://brickschema.org/schema/Brick#Thermal_Energy_Usage_Sensor,A sensor that records the quantity of thermal energy consumed in a given period, https://brickschema.org/schema/Brick#Thermal_Power,`, https://brickschema.org/schema/Brick#Thermal_Power_Meter,A standalone thermal power meter, https://brickschema.org/schema/Brick#Thermal_Power_Sensor,, diff --git a/support/rec.ttl b/support/rec.ttl index 3472a402..8335ab04 100644 --- a/support/rec.ttl +++ b/support/rec.ttl @@ -462,7 +462,6 @@ rec:Asset rdf:type sh:PropertyShape ; sh:path rec:locatedIn ; sh:class rec:Space ; - sh:minCount 1 ; sh:name "located in" ; sh:nodeKind sh:IRI ; ] ; From 2d4982c2a62cf53f09b7fdbc8f531315acde9f32 Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Thu, 14 Dec 2023 08:31:49 -0700 Subject: [PATCH 06/14] bump deps --- examples/solar_array/solar_array.ttl | 4 ++++ requirements.txt | 4 ++-- tests/test_shapes.py | 22 +++++++++++----------- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/examples/solar_array/solar_array.ttl b/examples/solar_array/solar_array.ttl index 100afae5..d5d74d67 100644 --- a/examples/solar_array/solar_array.ttl +++ b/examples/solar_array/solar_array.ttl @@ -2,6 +2,10 @@ @prefix brick: . @prefix unit: . @prefix xsd: . +@prefix owl: . + + a owl:Ontology ; + owl:imports . # shared efficiency rating site:panel_efficiency a brick:EfficiencyShape ; diff --git a/requirements.txt b/requirements.txt index 8b900e63..32a73e8c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,11 +4,11 @@ pytest>=7.3 tqdm>=4.0 pyshacl>=0.23 docker>=6.0 -brickschema[all]>=0.7.2a2 +brickschema[all]>=0.7.3a10 black==23.3.0 pre-commit>=3.2 flake8>=6.0 semver>=2.10.1 pytest-xdist[psutil] html5lib -ontoenv>=0.3.5 \ No newline at end of file +ontoenv>=0.3.9a1 diff --git a/tests/test_shapes.py b/tests/test_shapes.py index 683ed920..60c51cd3 100644 --- a/tests/test_shapes.py +++ b/tests/test_shapes.py @@ -18,7 +18,7 @@ def test_no_relations(brick_with_imports): data = base_data data_g = brickschema.Graph().parse(data=data, format="turtle") - conforms, _, _ = data_g.validate([brick_with_imports]) + conforms, _, _ = data_g.validate([brick_with_imports], engine="topquadrant") assert conforms @@ -30,7 +30,7 @@ def test_equip(brick_with_imports): """ ) valid_g = brickschema.Graph().parse(data=valid_data, format="turtle") - conforms, _, _ = valid_g.validate([brick_with_imports]) + conforms, _, _ = valid_g.validate([brick_with_imports], engine="topquadrant") assert conforms invalid_data = ( @@ -41,7 +41,7 @@ def test_equip(brick_with_imports): """ ) invalid_g = brickschema.Graph().parse(data=invalid_data, format="turtle") - conforms, _, _ = invalid_g.validate([brick_with_imports]) + conforms, _, _ = invalid_g.validate([brick_with_imports], engine="topquadrant") assert not conforms @@ -53,7 +53,7 @@ def test_type(brick_with_imports): """ ) invalid_g = brickschema.Graph().parse(data=invalid_data, format="turtle") - conforms, _, _ = invalid_g.validate([brick_with_imports]) + conforms, _, _ = invalid_g.validate([brick_with_imports], engine="topquadrant") assert not conforms @@ -65,7 +65,7 @@ def test_point(brick_with_imports): """ ) invalid_g = brickschema.Graph().parse(data=invalid_data, format="turtle") - conforms, _, _ = invalid_g.validate([brick_with_imports]) + conforms, _, _ = invalid_g.validate([brick_with_imports], engine="topquadrant") assert not conforms @@ -79,7 +79,7 @@ def test_meter_shapes(brick_with_imports): """ ) invalid_g = brickschema.Graph().parse(data=invalid_data, format="turtle") - conforms, _, _ = invalid_g.validate([brick_with_imports]) + conforms, _, _ = invalid_g.validate([brick_with_imports], engine="topquadrant") assert not conforms invalid_data = ( @@ -91,7 +91,7 @@ def test_meter_shapes(brick_with_imports): """ ) invalid_g = brickschema.Graph().parse(data=invalid_data, format="turtle") - conforms, _, _ = invalid_g.validate([brick_with_imports]) + conforms, _, _ = invalid_g.validate([brick_with_imports], engine="topquadrant") assert not conforms valid_data = ( @@ -103,7 +103,7 @@ def test_meter_shapes(brick_with_imports): """ ) valid_g = brickschema.Graph().parse(data=valid_data, format="turtle") - conforms, _, _ = valid_g.validate([brick_with_imports]) + conforms, _, _ = valid_g.validate([brick_with_imports], engine="topquadrant") assert conforms invalid_data = ( @@ -115,7 +115,7 @@ def test_meter_shapes(brick_with_imports): """ ) invalid_g = brickschema.Graph().parse(data=invalid_data, format="turtle") - conforms, _, _ = invalid_g.validate([brick_with_imports]) + conforms, _, _ = invalid_g.validate([brick_with_imports], engine="topquadrant") assert not conforms invalid_data = ( @@ -127,7 +127,7 @@ def test_meter_shapes(brick_with_imports): """ ) invalid_g = brickschema.Graph().parse(data=invalid_data, format="turtle") - conforms, _, _ = invalid_g.validate([brick_with_imports]) + conforms, _, _ = invalid_g.validate([brick_with_imports], engine="topquadrant") assert not conforms valid_data = ( @@ -139,5 +139,5 @@ def test_meter_shapes(brick_with_imports): """ ) valid_g = brickschema.Graph().parse(data=valid_data, format="turtle") - conforms, _, _ = valid_g.validate([brick_with_imports]) + conforms, _, _ = valid_g.validate([brick_with_imports], engine="topquadrant") assert conforms From 105d79f7e22d5e6b0b3004e2604e1f14a239cefd Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Fri, 29 Dec 2023 23:58:51 -0700 Subject: [PATCH 07/14] working on rec/brick --- bricksrc/namespaces.py | 2 ++ bricksrc/ontology.py | 6 +++++- bricksrc/quantities.py | 11 ++++++---- bricksrc/rules.ttl | 29 +++++++++++++++++++++++++++ generate_brick.py | 25 ++++++++++++++++------- support/SCHEMA_QUDT_NoOWL-v2.1.ttl | 2 +- support/VOCAB_QUDT-UNITS-ALL-v2.1.ttl | 2 +- tests/test_examples.py | 3 ++- 8 files changed, 65 insertions(+), 15 deletions(-) diff --git a/bricksrc/namespaces.py b/bricksrc/namespaces.py index 93b8556f..0b7647c9 100644 --- a/bricksrc/namespaces.py +++ b/bricksrc/namespaces.py @@ -15,6 +15,7 @@ SOSA = Namespace("http://www.w3.org/ns/sosa/") VCARD = Namespace("http://www.w3.org/2006/vcard/ns#") S223 = Namespace("http://data.ashrae.org/standard223#") +REC = Namespace("https://w3id.org/rec") # QUDT namespaces QUDT = Namespace("http://qudt.org/schema/qudt/") @@ -52,3 +53,4 @@ def bind_prefixes(g): g.bind("bacnet", BACNET) g.bind("ifc", IFC) g.bind("s223", S223) + g.bind("rec", REC) diff --git a/bricksrc/ontology.py b/bricksrc/ontology.py index 4788722d..643513f0 100644 --- a/bricksrc/ontology.py +++ b/bricksrc/ontology.py @@ -2,7 +2,7 @@ from rdflib import Literal, BNode, URIRef from rdflib.collection import Collection -from .namespaces import DCTERMS, SDO, RDFS, RDF, OWL, BRICK, SH, XSD, REF +from .namespaces import DCTERMS, SDO, RDFS, RDF, OWL, BRICK, SH, XSD, REF, REC from .version import BRICK_VERSION, BRICK_FULL_VERSION # defines metadata about the Brick ontology @@ -80,6 +80,10 @@ SH.namespace: Literal(str(REF), datatype=XSD.anyURI), SH.prefix: Literal("ref"), }, + { + SH.namespace: Literal(str(REC), datatype=XSD.anyURI), + SH.prefix: Literal("rec"), + }, ] BRICK_IRI_VERSION = URIRef(f"https://brickschema.org/schema/{BRICK_VERSION}/Brick") diff --git a/bricksrc/quantities.py b/bricksrc/quantities.py index fa6a1db7..6970b1f3 100644 --- a/bricksrc/quantities.py +++ b/bricksrc/quantities.py @@ -1,14 +1,17 @@ from brickschema.graph import Graph +from ontoenv import OntoEnv from rdflib import Literal, URIRef from .namespaces import SKOS, OWL, RDFS, BRICK, QUDTQK, QUDTDV, QUDT, UNIT - +env = OntoEnv() g = Graph() g.load_file("support/VOCAB_QUDT-QUANTITY-KINDS-ALL-v2.1.ttl") g.load_file("support/VOCAB_QUDT-UNITS-ALL-v2.1.ttl") g.bind("qudt", QUDT) g.bind("qudtqk", QUDTQK) -g.expand(profile="brick") + +env.import_dependencies(g) +g.expand("shacl", backend="topquadrant") def get_units(qudt_quantity): @@ -16,11 +19,11 @@ def get_units(qudt_quantity): Fetches the QUDT unit and symbol (as a Literal) from the QUDT ontology so in order to avoid having to pull the full QUDT ontology into Brick """ - return g.query( + return [x[0] for x in g.query( f"""SELECT ?unit WHERE {{ <{qudt_quantity}> qudt:applicableUnit ?unit . }}""" - ) + )] def all_units(): diff --git a/bricksrc/rules.ttl b/bricksrc/rules.ttl index c4aab61b..d20a6a3e 100644 --- a/bricksrc/rules.ttl +++ b/bricksrc/rules.ttl @@ -386,3 +386,32 @@ bsh:hasSubstance a sh:NodeShape ; sh:targetObjectsOf brick:hasSubstance ; sh:class brick:Substance ; . + + +# rule to add rec:includes when a brick:Collection contains a brick:Equipment +bsh:CollectionIncludesEquipment a sh:NodeShape ; + sh:targetClass brick:Collection, brick:System ; + sh:rule [ + a sh:SPARQLRule ; + sh:construct """ + CONSTRUCT { + $this rec:includes ?eq . + } + WHERE { + $this brick:hasPart ?eq . + { + ?eq rdf:type/rdfs:subClassOf* brick:Equipment . + } + UNION + { + ?eq rdf:type/rdfs:subClassOf* brick:Collection . + } + UNION + { + ?eq rdf:type/rdfs:subClassOf* brick:System . + } + } + """ ; + sh:prefixes ; + ] ; +. diff --git a/generate_brick.py b/generate_brick.py index baa70a93..d2cd87e2 100755 --- a/generate_brick.py +++ b/generate_brick.py @@ -927,7 +927,7 @@ def handle_deprecations(): # "up" into the broader concepts. for r in res: brick_quant, qudt_quant = r - for (unit,) in get_units(qudt_quant): + for unit in get_units(qudt_quant): G.add((brick_quant, QUDT.applicableUnit, unit)) for r in res: brick_quant, qudt_quant = r @@ -1041,13 +1041,24 @@ def handle_deprecations(): os.makedirs("imports", exist_ok=True) env = ontoenv.OntoEnv(initialize=True) env.refresh() -for name, uri in ontology_imports.items(): - depg, loc = env.resolve_uri(str(uri)) - depg.serialize(Path("imports") / f"{name}.ttl", format="ttl") - G += depg # add the imported graph to Brick so we can do validation +env.import_dependencies(G) -# validate Brick -valid, _, report = pyshacl.validate(data_graph=G, advanced=True, allow_warnings=True) +G.serialize("/tmp/withimports.ttl") + + +from brickschema import Graph as BGraph + +BG = BGraph() +for t in G.triples((None, None, None)): + BG.add(t) + +valid, _, report = BG.validate(engine="topquadrant") if not valid: print(report) sys.exit(1) + +# validate Brick +#valid, _, report = pyshacl.validate(data_graph=G, advanced=True, allow_warnings=True) +#if not valid: +# print(report) +# sys.exit(1) diff --git a/support/SCHEMA_QUDT_NoOWL-v2.1.ttl b/support/SCHEMA_QUDT_NoOWL-v2.1.ttl index 2791b7f8..af1a963a 100644 --- a/support/SCHEMA_QUDT_NoOWL-v2.1.ttl +++ b/support/SCHEMA_QUDT_NoOWL-v2.1.ttl @@ -1628,7 +1628,7 @@ qudt:QuantityType-value qudt:QuantityValue a rdfs:Class ; a sh:NodeShape ; - rdfs:comment "A Quantity Value expresses the magnitude and kind of a quantity and is given by the product of a numerical value n and a unit of measure U. The number multiplying the unit is referred to as the numerical value of the quantity expressed in that unit. Refer to NIST SP 811 section 7 for more on quantity values."^^rdf:HTML ; + rdfs:comment ""^^rdf:HTML ; rdfs:isDefinedBy ; rdfs:label "Quantity value" ; rdfs:subClassOf qudt:Concept ; diff --git a/support/VOCAB_QUDT-UNITS-ALL-v2.1.ttl b/support/VOCAB_QUDT-UNITS-ALL-v2.1.ttl index 4671f68f..8c07380c 100644 --- a/support/VOCAB_QUDT-UNITS-ALL-v2.1.ttl +++ b/support/VOCAB_QUDT-UNITS-ALL-v2.1.ttl @@ -20434,7 +20434,7 @@ unit:MilliRAD qudt:applicableSystem sou:CGS-GAUSS ; qudt:applicableSystem sou:SI ; qudt:conversionMultiplier 0.001 ; - qudt:guidance ""^^rdf:HTML ; + qudt:guidance ""^^rdf:HTML ; qudt:hasDimensionVector qkdv:A0E0L0I0M0H0T0D1 ; qudt:hasQuantityKind quantitykind:Angle ; qudt:iec61360Code "0112/2///62720#UAA897" ; diff --git a/tests/test_examples.py b/tests/test_examples.py index 6f4b4e51..24360de6 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -10,7 +10,8 @@ def test_example_file_with_reasoning(brick_with_imports, filename): g = brick_with_imports g.load_file(filename) env.import_dependencies(g) - g.expand("shacl") + g.expand("shacl", backend="topquadrant") + g.serialize("test.ttl", format="turtle") valid, _, report = g.validate() assert valid, report From a0b9f718e24da58fcd4cc6797ae91d78e7ec715f Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Sun, 14 Jan 2024 12:02:22 -0700 Subject: [PATCH 08/14] fixing prefixes and rules --- bricksrc/ontology.py | 2 +- bricksrc/rules.ttl | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/bricksrc/ontology.py b/bricksrc/ontology.py index 3195cd3b..cdfedbb1 100644 --- a/bricksrc/ontology.py +++ b/bricksrc/ontology.py @@ -80,7 +80,7 @@ SH.prefix: Literal("ref"), }, { - SH.namespace: Literal(str(REC), datatype=XSD.anyURI), + SH.namespace: Literal("https://w3id.org/rec#", datatype=XSD.anyURI), SH.prefix: Literal("rec"), }, ] diff --git a/bricksrc/rules.ttl b/bricksrc/rules.ttl index 964c29de..30f9647b 100644 --- a/bricksrc/rules.ttl +++ b/bricksrc/rules.ttl @@ -446,7 +446,7 @@ bsh:hasSubstance a sh:NodeShape ; # rule to add rec:includes when a brick:Collection contains a brick:Equipment bsh:CollectionIncludesEquipment a sh:NodeShape ; - sh:targetClass brick:Collection, brick:System ; + sh:targetClass brick:Collection, brick:System, brick:Equipment ; sh:rule [ a sh:SPARQLRule ; sh:construct """ @@ -469,6 +469,8 @@ bsh:CollectionIncludesEquipment a sh:NodeShape ; } """ ; sh:prefixes ; + ] ; +. # add unidirectional charging to all EVsE chargers as a default value # UNLESS there is already a brick:electricVehicleChargerDirectionality attribute From 29f9edfa8561f1df04e5696f7cdcc7e3592da04d Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Sun, 14 Jan 2024 12:05:12 -0700 Subject: [PATCH 09/14] bump ontoenv --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 80cd83f1..ebfab516 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,4 +11,4 @@ flake8>=6.0 semver>=2.10.1 pytest-xdist[psutil] html5lib -ontoenv>=0.3.9a1 +ontoenv>=0.4.0a5 From 8fb39e16658fb1d6d7178fe56b393d3db07acbe2 Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Sun, 14 Jan 2024 12:30:04 -0700 Subject: [PATCH 10/14] initialie quantities --- bricksrc/quantities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bricksrc/quantities.py b/bricksrc/quantities.py index df8c33d9..ab190dc7 100644 --- a/bricksrc/quantities.py +++ b/bricksrc/quantities.py @@ -3,7 +3,7 @@ from rdflib import Literal, URIRef from .namespaces import SKOS, OWL, RDFS, BRICK, QUDTQK, QUDTDV, QUDT, UNIT -env = OntoEnv() +env = OntoEnv(initialize=True) g = Graph() g.load_file("support/VOCAB_QUDT-QUANTITY-KINDS-ALL-v2.1.ttl") g.load_file("support/VOCAB_QUDT-UNITS-ALL-v2.1.ttl") From 97810df6f9178fb132edf5a7c055361d0f93c413 Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Sun, 14 Jan 2024 12:48:23 -0700 Subject: [PATCH 11/14] Merging quantities --- bricksrc/quantities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bricksrc/quantities.py b/bricksrc/quantities.py index ab190dc7..49ef67f5 100644 --- a/bricksrc/quantities.py +++ b/bricksrc/quantities.py @@ -3,7 +3,7 @@ from rdflib import Literal, URIRef from .namespaces import SKOS, OWL, RDFS, BRICK, QUDTQK, QUDTDV, QUDT, UNIT -env = OntoEnv(initialize=True) +env = OntoEnv(initialize=True, search_dirs="support/") g = Graph() g.load_file("support/VOCAB_QUDT-QUANTITY-KINDS-ALL-v2.1.ttl") g.load_file("support/VOCAB_QUDT-UNITS-ALL-v2.1.ttl") From 5ed21ff12d2459b661fe8df01ad50aa1270c61ee Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Sun, 14 Jan 2024 13:05:16 -0700 Subject: [PATCH 12/14] fixing use of ontoenv --- bricksrc/quantities.py | 2 +- generate_brick.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bricksrc/quantities.py b/bricksrc/quantities.py index 49ef67f5..05e8d4a4 100644 --- a/bricksrc/quantities.py +++ b/bricksrc/quantities.py @@ -3,7 +3,7 @@ from rdflib import Literal, URIRef from .namespaces import SKOS, OWL, RDFS, BRICK, QUDTQK, QUDTDV, QUDT, UNIT -env = OntoEnv(initialize=True, search_dirs="support/") +env = OntoEnv(initialize=True, search_dirs=["support/"]) g = Graph() g.load_file("support/VOCAB_QUDT-QUANTITY-KINDS-ALL-v2.1.ttl") g.load_file("support/VOCAB_QUDT-UNITS-ALL-v2.1.ttl") diff --git a/generate_brick.py b/generate_brick.py index 1aa9b089..49113a3e 100755 --- a/generate_brick.py +++ b/generate_brick.py @@ -1089,7 +1089,7 @@ def handle_deprecations(): # create new directory for storing imports os.makedirs("imports", exist_ok=True) -env = ontoenv.OntoEnv(initialize=True) +env = ontoenv.OntoEnv(initialize=True, search_dirs=["support/"]) for name, uri in ontology_imports.items(): depg, loc = env.resolve_uri(str(uri)) depg.serialize(Path("imports") / f"{name}.ttl", format="ttl") From 154ce3b688f846acd6e61d213f580b4327b66199 Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Sun, 14 Jan 2024 13:26:24 -0700 Subject: [PATCH 13/14] fix ontoenv usage for tests --- tests/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index de592499..531d4189 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -32,7 +32,7 @@ def pytest_configure(config): @pytest.fixture() def brick_with_imports(): - env = ontoenv.OntoEnv(initialize=True) + env = ontoenv.OntoEnv(initialize=True, search_dirs=["support/"]) g = brickschema.Graph() g.load_file("Brick.ttl") g.bind("qudt", QUDT) From 16a44e198657d6397c675a21b927aea3324e272f Mon Sep 17 00:00:00 2001 From: Gabe Fierro Date: Mon, 15 Jan 2024 16:49:25 -0700 Subject: [PATCH 14/14] more rec changes --- bricksrc/namespaces.py | 2 +- .../last_known_value/last_known_value.ttl | 10 ++++--- requirements.txt | 2 +- support/brickpatches.ttl | 28 +++++++++++++++++-- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/bricksrc/namespaces.py b/bricksrc/namespaces.py index 0b7647c9..abccadfc 100644 --- a/bricksrc/namespaces.py +++ b/bricksrc/namespaces.py @@ -15,7 +15,7 @@ SOSA = Namespace("http://www.w3.org/ns/sosa/") VCARD = Namespace("http://www.w3.org/2006/vcard/ns#") S223 = Namespace("http://data.ashrae.org/standard223#") -REC = Namespace("https://w3id.org/rec") +REC = Namespace("https://w3id.org/rec#") # QUDT namespaces QUDT = Namespace("http://qudt.org/schema/qudt/") diff --git a/examples/last_known_value/last_known_value.ttl b/examples/last_known_value/last_known_value.ttl index fab58808..794321df 100644 --- a/examples/last_known_value/last_known_value.ttl +++ b/examples/last_known_value/last_known_value.ttl @@ -4,6 +4,7 @@ @prefix unit: . @prefix xsd: . @prefix bacnet: . +@prefix rec: . @prefix owl: . bldg: a owl:Ontology ; @@ -20,8 +21,9 @@ bldg:sensor1 a brick:Air_Temperature_Sensor ; bacnet:object-name "BLDG-Z410-ZATS" ; bacnet:objectOf bldg:sample-device ; ] ; - brick:lastKnownValue [ - brick:value "72.0"^^xsd:float ; + brick:lastKnownValue bldg:sensor1_reading1 . + +bldg:sensor1_reading1 a rec:TemperatureObservation ; + brick:value "72.0"^^xsd:double ; brick:timestamp "2020-01-01T00:00:00Z"^^xsd:dateTime ; - ] ; -. + rec:sourcePoint bldg:sensor1 . diff --git a/requirements.txt b/requirements.txt index ebfab516..f42b3512 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,4 +11,4 @@ flake8>=6.0 semver>=2.10.1 pytest-xdist[psutil] html5lib -ontoenv>=0.4.0a5 +ontoenv>=0.4.0a6 diff --git a/support/brickpatches.ttl b/support/brickpatches.ttl index d2cd0f18..0f3f7610 100644 --- a/support/brickpatches.ttl +++ b/support/brickpatches.ttl @@ -10,6 +10,7 @@ @prefix rec: . @prefix sh: . @prefix xsd: . +@prefix bsh: . brick:Ablutions_Room owl:deprecated "true"^^xsd:boolean ; @@ -170,7 +171,7 @@ brick:Cold_Box ] . brick:Collection - owl:deprecated "true"^^xsd:boolean ; + rdfs:subClassOf rec:Collection ; . brick:Command sh:property [ @@ -902,12 +903,15 @@ brick:Studio brick:Switch_Room owl:deprecated "true"^^xsd:boolean ; . -brick:System +brick:Collection rdfs:subClassOf rec:Collection ; sh:property [ rdf:type sh:PropertyShape ; sh:path rec:includes ; - sh:class brick:Equipment ; + sh:or ( + [ sh:class brick:Equipment ] + [ sh:class brick:Collection ] + ) ; sh:minCount 1 ; sh:name "includes" ; sh:nodeKind sh:IRI ; @@ -1311,3 +1315,21 @@ rec:substance owl:imports ; owl:versionInfo "Created with TopBraid Composer" ; . + +brick:value rdfs:subPropertyOf rec:value . + +bsh:InferRecValue a sh:NodeShape ; + sh:targetSubjectsOf brick:value ; + sh:rule [ + a sh:SPARQLRule ; + sh:construct """ + CONSTRUCT { +$this rec:value ?v +} +WHERE { +$this brick:value ?v +} + """ ; + sh:prefixes ; + ] ; +.