OPDA Knowledge base

Physical — deployment

Named-graph layout, derived profiles, overlay deployment topology, and CI gates.

Audience: Triplestore operators, DevOps

OPDA Physical-Database Tier

This is the Physical-Database tier view of OPDA’s ontology — written for triplestore operators, SPARQL endpoint consumers, downstream ontology integrators, devops engineers running the deployment, and JSON-LD client developers. It describes the deployed/served form of the ontology: which named graphs hold which TTLs, what load order produces a coherent graph, how derived consumer profiles compose, and how HTTP requests to https://opda.org.uk/pdtf/<resource> resolve to TTL / JSON-LD / RDF/XML representations.

If you have ever asked questions like:

  • “Which named graph do I load to validate a BASPI5 submission?”
  • “What’s the difference between opda-validation.ttl and opda-ui.ttl?”
  • “How does the build-step composer assemble the derived consumer profiles?”
  • “What does Accept: text/turtle against https://opda.org.uk/pdtf/Property return?”
  • “Which CI gate blocks a commit that introduces drift in expected SHACL reports?”

then this tier is for you. It is operational, not deliberative — the Physical-Ontology tier owns the source TTLs; this tier owns the deployment.

OPDA’s ontology deploys as 24 source TTLs (foundation + vocabularies + six module-TBoxes + six module-shapes + six module-annotations + meta-shapes + meta-annotations) plus one overlay profile (BASPI5). The deployment exposes these as named graphs under the persistent https://opda.org.uk/pdtf/* namespace via the W3C PICG redirect ratified by ADR-0006.

A build-step composer (ADR-0013) projects the 24 source TTLs into three derived consumer profilesopda-validation.ttl, opda-ui.ttl, opda-inference.ttl — and the deployment serves each via HTTP content negotiation.

See also: Modelling section

The PDTF overlays and JSON-LD mappings pages in the Modelling section cover the schema-layer artefacts that correspond to what is deployed here. The PDTF overlays page catalogues the 34 JSON Schema overlay files whose per-overlay ontology profiles are deployed as named graphs from this tier. The JSON-LD mappings page covers the authoring of the @context files that underpin the content-negotiation responses this tier serves.

Reading order

  1. Start with this tier overview — deployment topology + named-graph catalogue at a glance (below).
  2. Read named-graphs.md — per-named-graph layout, load order, triple counts, version IRIs.
  3. Read derived-profiles/README.md — three consumer profiles (opda-validation, opda-ui, opda-inference) the build-step composer assembles from per-module TTLs.
  4. Read content-negotiation/README.md — Accept-header routing to TTL / JSON-LD / RDF/XML / HTML per resource.
  5. Read overlay-deployment/README.md — overlay profile deployment, starting with BASPI5 (the MVP gate).
  6. Read operations/byte-identity-ci.md, operations/three-graph-ci.md, operations/round-trip-ci.md — the three CI gates the deployment depends on.

For “what’s deployed for this module” queries, the modules/ subdirectory carries a per-module deployment view (foundation + 6 business modules). Use it when you have a module name in hand and want to chase its source TTLs, named graphs, derived-profile membership, overlay bindings, and content-negotiation entry points in one place.

Master deployment topology

--- config: layout: elk elk: mergeEdges: false nodePlacementStrategy: BRANDES_KOEPF --- %%{init: {"theme": "base", "themeVariables": {"primaryColor": "#FFF8E1", "primaryTextColor": "#E65100", "primaryBorderColor": "#F57F17", "lineColor": "#37474F"}}}%% flowchart LR accTitle: OPDA master deployment topology accDescr: Shows the 24 source TTLs plus BASPI5 overlay flowing through the build-step composer to three derived consumer profiles, then via content-negotiation SPARQL endpoint to validator UI reasoner overlay consumers. classDef data fill:#FFF8E1,stroke:#F57F17,stroke-width:2px,color:#E65100 classDef infra fill:#E3F2FD,stroke:#1565C0,stroke-width:2px,color:#0D47A1 classDef process fill:#E1F5FE,stroke:#0277BD,stroke-width:2px,color:#01579B classDef service fill:#E8F5E9,stroke:#2E7D32,stroke-width:2px,color:#1B5E20 classDef user fill:#F3E5F5,stroke:#7B1FA2,stroke-width:2px,color:#4A148C subgraph SRC["Source TTLs — source/03-standards/ontology/"] F["foundation.ttl
opda-classes.ttl
opda-shapes.ttl
opda-annotations.ttl"]:::infra V["opda-vocabularies.ttl
23 SKOS schemes"]:::infra MT["opda-MODULE.ttl × 6
property agent transaction
claim governance descriptive"]:::infra MS["opda-MODULE-shapes.ttl × 6"]:::infra MA["opda-MODULE-annotations.ttl × 6"]:::infra B["profiles/baspi5.ttl
overlay"]:::infra end subgraph CMP["Build-step composer"] C["opda-gen compose
ADR-0013"]:::process end subgraph DRV["Derived consumer profiles"] DV["opda-validation.ttl
classes + shapes"]:::data DU["opda-ui.ttl
classes + shapes + annotations"]:::data DI["opda-inference.ttl
classes only"]:::data end subgraph EP["Endpoint — opda.org.uk/pdtf/*"] EPHTTP["HTTP content negotiation
TTL JSON-LD RDF/XML HTML"]:::service EPSP["SPARQL endpoint
per named graph"]:::service end subgraph CON["Consumers"] U1["pyshacl / TopBraid
SHACL validators"]:::user U2["DASH UI
JSON-LD UI clients"]:::user U3["HermiT / Pellet
OWL reasoners"]:::user U4["BASPI5 overlay
round-trip harness"]:::user U5["Concept-tier site
HTML readers"]:::user end F --> C V --> C MT --> C MS --> C MA --> C C --> DV C --> DU C --> DI DV --> EPHTTP DU --> EPHTTP DI --> EPHTTP B --> EPHTTP F --> EPSP V --> EPSP MT --> EPSP MS --> EPSP MA --> EPSP B --> EPSP EPHTTP --> U1 EPHTTP --> U2 EPHTTP --> U3 EPHTTP --> U4 EPHTTP --> U5 EPSP --> U1 EPSP --> U2 EPSP --> U3

CI gates pipeline

--- config: layout: elk elk: mergeEdges: false nodePlacementStrategy: BRANDES_KOEPF --- %%{init: {"theme": "base", "themeVariables": {"primaryColor": "#E1F5FE", "primaryTextColor": "#01579B", "primaryBorderColor": "#0277BD", "lineColor": "#37474F"}}}%% flowchart LR accTitle: OPDA CI gates pipeline accDescr: Shows the four-stage CI gate sequence with pass-fail branches and the GitHub Actions workflow files that run each stage. classDef process fill:#E1F5FE,stroke:#0277BD,stroke-width:2px,color:#01579B classDef success fill:#C8E6C9,stroke:#2E7D32,stroke-width:2px,color:#1B5E20 classDef error fill:#FFCDD2,stroke:#C62828,stroke-width:2px,color:#B71C1C classDef infra fill:#E3F2FD,stroke:#1565C0,stroke-width:2px,color:#0D47A1 START(["push or PR to main"]):::infra G1["ci-byte-identity
opda-gen emit + diff -rq"]:::process G2["ci-three-graph
5-part separation"]:::process G3["ci-profile-contract
3-rule interface"]:::process G4["baspi5-round-trip
27 pytest cases"]:::process WF1[/"ontology-byte-identity.yml"/]:::infra WF2[/"baspi5-round-trip.yml"/]:::infra PASS(["green merge"]):::success FAIL1(["BLOCK: emitter regressed"]):::error FAIL2(["BLOCK: separation violation"]):::error FAIL3(["BLOCK: overlay broke contract"]):::error FAIL4(["BLOCK: round-trip failed"]):::error START --> WF1 WF1 --> G1 G1 -->|PASS| G2 G1 -->|FAIL| FAIL1 G2 -->|PASS| G3 G2 -->|FAIL| FAIL2 G3 -->|PASS| WF2 G3 -->|FAIL| FAIL3 WF2 --> G4 G4 -->|PASS| PASS G4 -->|FAIL| FAIL4

Named-graph catalogue

The 25 named graphs the deployment exposes, grouped by role. Triple counts measured against the committed TTLs at HEAD; see named-graphs.md for per-graph load order + version IRIs.

Foundation graphs

Named graph IRISource TTLTriples
https://opda.org.uk/pdtf/ (default graph)foundation.ttl15
(no ontology IRI — class graph)opda-classes.ttl36
https://opda.org.uk/pdtf/graph/shapesopda-shapes.ttl51
https://opda.org.uk/pdtf/graph/annotationsopda-annotations.ttl3

Vocabulary graph

Named graph IRISource TTLTriples
(no ontology IRI — SKOS scheme aggregate)opda-vocabularies.ttl873

Module-TBox graphs

Named graph IRISource TTLTriples
https://opda.org.uk/pdtf/graph/propertyopda-property.ttl199
https://opda.org.uk/pdtf/graph/agentopda-agent.ttl77
https://opda.org.uk/pdtf/graph/transactionopda-transaction.ttl39
https://opda.org.uk/pdtf/graph/claimopda-claim.ttl86
https://opda.org.uk/pdtf/graph/governanceopda-governance.ttl42
https://opda.org.uk/pdtf/graph/descriptiveopda-descriptive.ttl35

Module-shape graphs

Named graph IRISource TTLTriples
https://opda.org.uk/pdtf/graph/property-shapesopda-property-shapes.ttl54
https://opda.org.uk/pdtf/graph/agent-shapesopda-agent-shapes.ttl44
https://opda.org.uk/pdtf/graph/transaction-shapesopda-transaction-shapes.ttl37
https://opda.org.uk/pdtf/graph/claim-shapesopda-claim-shapes.ttl45
https://opda.org.uk/pdtf/graph/governance-shapesopda-governance-shapes.ttl13
https://opda.org.uk/pdtf/graph/descriptive-shapesopda-descriptive-shapes.ttl27

Module-annotation graphs

Named graph IRISource TTLTriples
https://opda.org.uk/pdtf/graph/property-annotationsopda-property-annotations.ttl31
https://opda.org.uk/pdtf/graph/agent-annotationsopda-agent-annotations.ttl22
https://opda.org.uk/pdtf/graph/transaction-annotationsopda-transaction-annotations.ttl6
https://opda.org.uk/pdtf/graph/claim-annotationsopda-claim-annotations.ttl27
https://opda.org.uk/pdtf/graph/governance-annotationsopda-governance-annotations.ttl6
https://opda.org.uk/pdtf/graph/descriptive-annotationsopda-descriptive-annotations.ttl14

Overlay-profile graph

Named graph IRISource TTLTriples
https://opda.org.uk/pdtf/shape/profiles/baspi5profiles/baspi5.ttl488

Corpus total: 2 273 triples across 25 named graphs (24 source TTLs + 1 overlay profile).

Derived consumer profiles

The composer projects the source TTLs into three deployable consumer profiles. The directory source/03-standards/ontology/derived/ does not yet exist (composer body activation pending per ADR-0013); each profile below documents the planned composition.

ProfileCompositionAudienceArtefact path
opda-validationclasses ⊕ shapespyshacl / TopBraid SHACL consumerssource/03-standards/ontology/derived/opda-validation.ttl
opda-uiclasses ⊕ shapes ⊕ annotationsDASH form rendering, JSON-LD UI clientssource/03-standards/ontology/derived/opda-ui.ttl
opda-inferenceclasses aloneOWL 2 reasoners (HermiT, Pellet)source/03-standards/ontology/derived/opda-inference.ttl

Per-module breakdown

For “what’s deployed for this module” queries, see the per-module pages under modules/. Each page shows source TTL(s), named-graph declarations, derived-profile membership, overlay bindings, and content-negotiation entry points for one module, with a per-module deployment-graph diagram.

ModulePage
Foundationmodules/foundation.md
Propertymodules/property.md
Agentmodules/agent.md
Transactionmodules/transaction.md
Claimmodules/claim.md
Governancemodules/governance.md
Descriptivemodules/descriptive.md

CI gates

Three CI gates protect the deployment from drift. See operations/ for full details.

GateWorkflowCommand
Byte-identity.github/workflows/ontology-byte-identity.ymlopda-gen ci-byte-identity
Three-graph separation.github/workflows/ontology-byte-identity.yml (job: Three-graph CI test)opda-gen ci-three-graph
Round-trip MVP.github/workflows/baspi5-round-trip.ymlopda-gen ci-profile-contract + pytest tests/baspi5_round_trip

What is not in this tier

  • Business narrative — Identity Criterion, Hard Cases — see Concept tier.
  • Typed attributes, cardinalities, ER diagrams — see Logical tier.
  • OWL / SHACL / SKOS Turtle source-tree layout, per-class blocks — see Physical-Ontology tier.
  • PDTF JSON Schemas at source/03-standards/schemas/ — those were upstream Council programme input, NOT deployment output. They are documented in the nested schemas repo and are deliberately out of scope for the four-tier documentation here.

Provenance

This documentation is generated from:

  • The 24 emitted TTL files at source/03-standards/ontology/ (foundation.ttl, opda-classes.ttl, opda-shapes.ttl, opda-annotations.ttl, opda-vocabularies.ttl, six opda-<module>.ttl, six opda-<module>-shapes.ttl, six opda-<module>-annotations.ttl)
  • The BASPI5 overlay profile at source/03-standards/ontology/profiles/baspi5.ttl
  • The build-step composer stub at tools/opda-gen/src/opda_gen/composer.py (activation pending per ADR-0013)
  • The two CI workflows at .github/workflows/ontology-byte-identity.yml and .github/workflows/baspi5-round-trip.yml
  • The round-trip MVP harness at tests/baspi5_round_trip/

The source/03-standards/ontology/derived/ directory does not yet exist in the repository. This tier documents the three derived profiles per ADR-0013 §“Module pluralism” as their specification — each profile file is marked “spec only; composer activation pending” until the composer body lands.

Comments

Loading comments…