Known issues
A completeness claim that conceals deferred work or defects is a provenance lie. This is the dated register of every known caveat in the schema-derived ontology, each cross-referenced to the ODR that governs it. The important distinction throughout: none of these is a defect in OPDA's own materialised graph. They are consumer-side traps, by-design outcomes, a report-side miscount, and one item already resolved by a rename.
The register (dated 2026-06-14)
| Issue | Governing 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
(because currentEnergyRating has rdfs:domain Property). OPDA's own Safe-Group closure excludes domain/range
rules and does NOT produce this (ODR-0025 §R7); the round-trip exemplars
validate against the Safe-Group closure. The model is correct — this is a trap a
naive consumer sets for itself.
|
| Thin overlay profiles | session-034 / ODR-0010 | 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 — profiles bind Category-G only. 224 bound / 1095
GAPped across 28 forms; the GAP register is the deliberate, honest record of this.
|
oc1 / llc1 held thin | ODR-0008 / session-034 Q2 | By design (re-open trigger) | Authority-register extracts (Official Copy / Local Land Charges), not human-filled forms. Held thin until a named consumer issues a worked SPARQL query against a register leaf — at which point the binding is re-opened. |
SHACL-Core vacuous sh:xone | ODR-0017 | Open (documented caveat) |
The committed non-conformant exemplar reads conforms: true under
plain SHACL-Core. Correct validation requires pyshacl with
advanced=True (see Consume
the ontology). Documented, not silent.
|
| 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. Resolved by an honest rename + header; the rule logic is
frozen.
|
| Category-C binning report miscount | ODR-0028 | Report-only |
A report-side over-count in descriptive-category-binning.json; the
emitted TTL is already correct G-grade. The miscount is in the audit report, not in
any emitted artefact.
|
| ODR-0004 namespace prose drift | ODR-0004 | Open (prose cleanup) |
The ODR-0004 prose still cites the old w3id.org/opda/# namespace; the
emitted TTL correctly uses opda.org.uk/pdtf/ (the as-built namespace —
see the prefix map). Prose-only cleanup.
|
Why the EPC cross-trip is not a model defect
This is the issue most likely to be misread, so it is worth stating plainly. If you load
the OPDA ontology into a generic reasoner running full RDFS or OWL — one that
applies rdfs:domain entailment — and you assert an
opda:EPCCertificate that carries currentEnergyRating, that
reasoner will infer the certificate is an opda:Property, because
currentEnergyRating is declared with rdfs:domain opda:Property.
That inference is wrong: an EPC certificate is a document about a property, not
the property itself.
OPDA does not make that inference. The Safe-Group closure adopted in
ODR-0025 (§R7) deliberately excludes
domain and range rules. The seven frozen rules cover subclass, subproperty,
inverse, symmetric and transitive entailment — the relations whose closure the author
actually wants — and nothing that would manufacture a spurious class membership from a
property's declared domain. The round-trip exemplars are validated against
this closure, and they pass. So the cross-trip is a consumer-side
trap (and a modelling smell worth knowing about), not a defect in OPDA's
graph, and it does not block draft → accepted. The provenance for this
ruling is on the Decision provenance
page.
Why thin profiles are by design
"A form IS its SHACL overlay" (ODR-0010). But a
PDTF form is mostly questions whose answers are A/B/C/D/E/F treatments — carried by
dct:subject and a JSON-pointer dct:source — not Category-G
substantive attributes that bind as per-leaf sh:path shapes. A profile that
binds only its Category-G leaves and GAP-registers the rest is therefore the
ratified outcome, not an omission (session-034). A "thin" profile that
binds zero per-leaf shapes (oc1, llc1, tf, and
others) is correct: the leaves it would otherwise bind are register extracts or
free-text, and the GAP register records exactly which leaves are unbound and why. The
live profile counts and the bound/thin split are on the
overview and the bake-off's custom-layer rendering.
Why the ruleset is not an OWL 2 RL reasoner
An earlier framing risked implying that config/opda-rdfs-plus.rules was an
OWL 2 RL profile reasoner. It is not, and ODR-0029
R5 resolved this by renaming the artefact and giving it an honest header. The ruleset is
a sound but RL-incomplete fragment: it implements seven of the OWL-RL
rules and deliberately omits domain/range, equality (owl:sameAs),
functional-property and equivalence reasoning. Soundness means everything it derives is
valid; RL-incompleteness means it does not derive everything OWL 2 RL would — which is
the point, because the omitted rules are exactly the ones that would produce the EPC
cross-trip and spurious owl:sameAs collapses. The rule logic is now frozen.
Related: Decision provenance (the governing records),
Consume the ontology (the advanced=True
validation recipe), and the Tool bake-off (the custom
layer that emits the GAP register).
Comments
Loading comments…
Sign in to post a comment