Giter Site home page Giter Site logo

xlsx-brick-tools's Introduction

About

This package provides a series of tools to help users generate Graph models of their buildings. This tool comes with support for Brick and Switch Extension ontologies, as well as the ability to add custom ontologies for validation and generation purposes.

The following functions are provided:

  • xlsx-validator Given a xlsx model in the supported template, validate the proposed model.
  • xlsx-generator Given an xlsx model in the supported template, generate a graph model.

Each of the tools is described in more detail below.

Installation

Create a new environment and install from github:

poetry add git+https://github.com/wcrd/switch-brick-tools.git@main

In your working file simply import the package

import switch_brick_tools as sbt

An example working file is provide as 'example.py'.

Dependencies

If you need to install dependencies run

poetry install

(you will need Poetry installed)

brick-xlsx-validator

A tool that performs basic structure validation on brick models constructed in excel using the provided template [link to template].

Validations

The tool validates the following:

  • Main definition sheets exist: Equipment, Locations, Points
  • Entities have an ID defined
  • Entities have a valid class defined (either from Brick, or provided custom ontology)
  • Relationships per entity reference other defined entities
  • Checks subject uniqueness

Example Usage

import switch_brick_tools as sbt
import os

model_path = r"path_to_excel/excel_file.xlsx"

bad_rows, bad_refs, bad_classes, duplicate_ids = sbt.validate(os.path.join(model_path))

The validator can take a number of options:

validate(filepath, load_brick: bool = True, load_switch: bool = True, brick_version: str = "1.2", switch_version: str = "1.1", custom_graph: rdflib.Graph = None, relationship_field: tuple = ("Brick", "label"))

custom_graph: a custom ontology definition in .ttl format that can be used for class validation relationship_field: the field in the template which entities reference each other by. In a Brick model this would always be the 'subject' field, however some flexibility is allowed for in the spreadsheet based definition, allowing entities to reference each other by 'label' rather than a uuid, for example.

The output of the validator is:

  • pandas dataframe containing the 'bad' rows from the read file, including the errors found for that row
  • set of non-existing entities (i.e. bad references)
  • set of invalid classes
  • list of pandas dataframes containing rows with duplicated ids per sheet

brick-xlsx-generator

A tool that takes a template XLSX file (included) and converts it into a Brick TTL model file.

Usage

  1. Intitialize converter as an empty rdf dataset
g = sbt.Dataset()

This will automatically load Brick and Switch ontologies. You can pass in custom versions if you need to.

sbt.Dataset(load_brick: bool = True, load_switch: bool = True, brick_version: str = "1.2", switch_version: str = "1.1.4")
  1. Process the xlsx input file to generate a populated graph model
g.process(path_to_xlsx)

This will generate all brick relationships and process any Switch Relationships and Tags provided. See the Switch Brick Extension included to learn more.

The process() function can take a number of additional parameters:

process(self, path_to_xlsx: str, portfolio_name: str = "example", building_name: str = "example_building", relationship_field:tuple = ("Brick", "identifier"), graph_name:str = "building")

portfolio_name & building_name define the URI components that the building entities will be created under. The building URI takes the form: https://{portfolio_name}.com/{building_name}# with a default prefix of building.
relationship_field: the field in the template which entities reference each other by. In a Brick model this would always be the 'subject' field, however some flexibility is allowed for in the spreadsheet based definition, allowing entities to reference each other by 'label' rather than a uuid, for example.
graph_name: If you needed to process multiple inputs into separate graphs, then you can provide a custom graph name per import. If you are only importing one file leave this as default. process_source: Bool. If true will process source fields for BACnet and create bacnet device entities and add externalrefs to the points showing the bacnet source information.

  1. Export Model to TTL
g.export(export_mode="full")  # export_mode is optional

Export options available are:

  • full: export everything
  • building: export only building entities [DEFAULT]
  • equipment_locations_systems: export only building entities and exclude points

For export "building" mode, if you have imported multiple files into separate graphs you can provide the graph name through the graph_name parameter to control which building graph is exported in this mode,

Note

The original sbt.Graph() method is still available if your legacy code uses this. It is recommended to switch to sbt.Dataset() as the capability is greatly improved.

References

Parts of this code are based on code provided by the py-brickschema package.

xlsx-brick-tools's People

Contributors

wcrd avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.