Skip to content

Data model

This page describes the entity relationships behind the OWI Metadatabase API. Understanding the data model helps you choose the right query methods and filter parameters.

Locations domain

The locations domain has three entities arranged in a simple hierarchy:

erDiagram
    ProjectSite {
        int id PK
        string slug
        string title
    }

    Location {
        int id PK
        int projectsite_id FK
        string title
        string slug
    }

    AssetLocation {
        int location_id PK
    }

    ProjectSite ||--o{ Location : "has many"
    Location ||--|| AssetLocation : "inherits"
  • ProjectSite — a wind farm or project (e.g. "Nobelwind").
  • Location — a named position within a project site.
  • AssetLocation — a specialisation of Location representing a physical asset such as a turbine foundation.

The SDK's LocationsAPI exposes get_projectsites(), get_assetlocations(), and their detail variants to query these entities.

Geometry domain

The geometry domain is richer, with six main entities:

erDiagram
    ProjectSite ||--o{ AssetLocation : "has many"
    ModelDefinition ||--o{ SubAssembly : "defines"
    AssetLocation ||--o{ SubAssembly : "located at"
    SubAssembly ||--o{ BuildingBlock : "composed of"
    BuildingBlock ||--|| TubularSection : "is a"
    BuildingBlock ||--|| LumpedMass : "is a"
    BuildingBlock ||--|| DistributedMass : "is a"
    Material ||--o{ TubularSection : "used by"
  • ModelDefinition — a named structural model for a project, selected by project site title.
  • SubAssembly — a major structural component (tower TW, transition piece TP, monopile MP) belonging to both a model definition and an asset location.
  • BuildingBlock — a segment within a sub-assembly. Each building block has exactly one of three specialisations:
    • TubularSection — a cylindrical segment with a material reference.
    • LumpedMass — a point mass.
    • DistributedMass — a distributed mass.
  • Material — steel grades and their mechanical properties, referenced by tubular sections.

How the SDK maps to the data model

SDK method Entity Filter path
LocationsAPI.get_projectsites() ProjectSite title
LocationsAPI.get_assetlocations(projectsite=...) AssetLocation projectsite__title
GeometryAPI.get_model_definitions(projectsite=...) ModelDefinition site
GeometryAPI.get_subassemblies(projectsite=..., assetlocation=...) SubAssembly asset__projectsite__title, asset__title
GeometryAPI.get_buildingblocks(projectsite=..., assetlocation=...) BuildingBlock sub_assembly__asset__projectsite__title
GeometryAPI.get_materials() Material (no filter)

Processing layer

The OWT and OWTs classes consume the raw DataFrames returned by GeometryAPI and assemble them into component-level views:

Processing class Input Output
OWT Sub-assembly objects for one turbine .tower, .tp, .mp, .rna DataFrames
OWTs List of turbine names + API client Concatenated DataFrames across all turbines

The processing step resolves the sub-assembly → building-block → tubular-section chain and organises the rows by sub-assembly type (TW, TP, MP).