The bake-off's seventh "tool". Every off-the-shelf generator scores None on the
layers below — overlay profiles + the gap register, round-trip exemplars, the three-graph separation, the
governance/decision lineage, and the known-issues register. This page is generated by
scripts/gen-ontology-custom.mjs from the committed TTL corpus (the script half) wrapped in
hand/LLM-authored narrative (the prose half) — the combination ADR-0041 adopts as the composition.
Corpus snapshot: 42 classes · 76 object + 207 datatype properties · 46 SKOS schemes / 304 concepts · 408 SHACL node shapes · 31 overlay profiles (15 bound) · 17 round-trip exemplars.
A PDTF form is its SHACL overlay (ODR-0010 / ADR-0029). Only Category-G substantive attributes bind
as per-leaf sh:path shapes; A/B/C/D/E/F leaves are carried by dct:subject +
JSON-pointer dct:source and GAP-registered, never fabricated (session-034). A thin
profile is the ratified outcome, not a defect.
17 worked instance graphs, each paired with an expected SHACL validation report — the data contract no OWL doc tool renders. They demonstrate conformant + non-conformant cases (e.g. the BASPI5 Seller-as-Attorney violation traceable to form-question B1.3.2).
OPDA keeps three graphs strictly apart (ODR-0004 §3a, CI-enforced): the class graph
(opda-classes.ttl + module TBox), the shapes graph (opda-*-shapes.ttl —
constraints that target classes, never owl:imports them), and the annotation
graph (opda-*-annotations.ttl — DPV co-annotations, AI hints). Inference materialises into a
fourth, derived graph (…/pdtf/graph/inferred/entailment) and never pollutes the canonical three.
Infer the relations whose closure the author wants (subclass/subproperty/inverse/symmetric/transitive — the 7
frozen rules of config/opda-rdfs-plus.rules, a sound but RL-incomplete fragment, not an
OWL 2 RL reasoner). Validate the constraints the author wants checked (domain/range/cardinality/identity) as SHACL —
the 273 sh:targetSubjectsOf → sh:class domain/range shapes (ODR-0029 R3). The closure adds 0 triples over
the flat schema; it is kept as a governed boundary + negative gate (no owl:sameAs, no spurious
EPCCertificate ⊑ Property), not for current output.
Every term carries dct:source back to a PDTF schema-leaf-path or glossary row. The ontology's own
provenance is the ODR/ADR/council corpus: the schema-to-ontology project is retired (ODR-0003, 2026-06-14);
the descriptive layer is reconciled complete (ODR-0028); the inference/validation boundary is ODR-0029 (Council
session-039); this reference document is ADR-0041 (Council session-038), and ADR-0042 records the historical
/manual→/model rename. Both former documentation routes are now retired.
| Issue | Record | Status | Detail |
|---|---|---|---|
| EPC-certificate inference cross-trip | ODR-0028 R3 / ODR-0029 R4 | CONSUMER-SIDE | A naive full-RDFS/OWL consumer mis-infers EPCCertificate ⊑ Property (currentEnergyRating has rdfs:domain Property). OPDA’s own Safe-Group closure excludes domain/range and does NOT produce this; the round-trip validates against the Safe-Group closure. Model is correct. |
| Thin overlay profiles | session-034 / ODR-0022 §Rules.1 | BY DESIGN | 16 of 31 profiles bind 0 per-leaf shapes; most overlay leaves are A/B/C/D/E/F treatments carried by dct:subject + dct:source, not per-leaf sh:path. 224 bound / 1095 GAPped across 28 forms. |
| oc1 / llc1 held thin | ODR-0008d / session-034 Q2 | BY DESIGN (re-open trigger) | Authority-register extracts, not human-filled forms; thin until a named consumer issues a worked SPARQL query against a register leaf. |
| Ruleset is not OWL 2 RL | ODR-0029 R5 | RESOLVED (rename) | config/opda-rdfs-plus.rules is a SOUND but RL-incomplete fragment (7 of the RL rules; omits domain/range/equality/functional/equivalence) — not an OWL 2 RL reasoner. Renamed + honest header; rule logic frozen. |