Gated gUFO rdf:type Property-Typing Pass
Context and Problem Statement
Council session-029 (Full panel) judged the ODR-0008 §Q2a(a) UFO-axis spawn trigger NOT met (Q1–Q4 each 0–6–0) and declined to mint ODR-0008a/b/c: the curated walk typed leaves by bearer Kind (rdfs:domain), not UFO meta-category, and the flagship leaves fail OntoClean as a partition backbone (priceQualifier straddles Mode/Quality; ownershipType rides two identity principles — Guarino). But the panel unanimously affirmed (Q5, 6–0–0) that the Quality/Mode distinction is ontologically real and rigid as a typing (Guizzardi, Guarino, Knublauch, Davis) and ruled it should be preserved via a per-property gUFO rdf:type annotation — “the distinction earns rdf:type; it does not earn a namespace.” Verified live, no gufo: prefix and not one rdf:type gufo:Quality/gufo:Mode triple exists in the corpus today — the typing pass was never run. This work item is logged at ADR-0005 §G25 (queued from session-029 Q5); running it is conjunct (i) of the ODR-0023 R2 re-open trigger. This ADR is the engineering record for the emission; the modelling decision and the per-leaf identity criterion remain owned by ODR-0008 §Q5a (session-029 §“No new ODR”).
Decision Drivers
- session-029 Q5 (6–0–0) — the ratified disposition: a gated gUFO
rdf:typetyping pass over the uncontested Property descriptive leaves, preserving the insight without a namespace. - ODR-0010 §Q7a — Knublauch’s pin: the typing is a classification triple, not a constraint, so it lives in the annotation graph, never the shapes graph (CI-test-3:
ASK { GRAPH opda:annotations { ?s a sh:NodeShape } }→ FALSE). Not SHACL (no validator exists; that re-incurs the rejected structure cost). - Uncontested-only — type the clean Quale-in-Region leaves; omit the straddlers (
priceQualifier,marketingTenure) and the re-sorter (ownershipType) until a rigid rule adjudicates each to exactly one cell (Guarino’s identity/disjointness gate).tenureKindis a Substance-Kind label, not a Quality/Mode — also omitted. - Classification, not axiom — the
rdf:typeis an advisory UFO meta-category marker on the attribute, quarantined to the annotation graph so no reasoner reads the datatype property as a quality individual; the bearer’s identity criterion stays ODR-0008 §Q5a’s. No new bearer, no fresh IC (session-029 line 134). - Reversible / subtractive posture (S025/S029) — assert a
rdf:typeover a w3id namespace; do not mint permanent modules around an analytic lens that re-sorts under the next reasoner pass.
Considered Options
- Per-property
rdf:type gufo:Qualityin the annotation graph — the dominant position (Guizzardi/Guarino/Knublauch/Davis); exactly as the verdict frames it. skos:scopeNote/rdfs:commentprose only — Allemang’s conservative minority on mechanism (not route): keep prose until a typing pass + a biting query arrive, lest the assertion manufacture an entailment no query needs. Recorded, non-blocking.- SHACL over the annotation, or a UFO sub-module namespace (
ODR-0008a/b/c) — rejected by session-029 (no validator; partition backbone fails OntoClean on the straddlers).
Decision Outcome
Chosen option: per-property rdf:type gufo:Quality in the descriptive annotation graph, gated to the uncontested leaves — the unanimous Q5 route. Emitted via the ADR-0030 generator (no hand-edited TTL), extending the ADR-0012 annotation emitter (emitters/annotations.py::build_descriptive_annotations):
- Prefix — declare
gufo: <http://purl.org/nemo/gufo#>, bound only inopda-descriptive-annotations.ttl(the other five annotation files are byte-unchanged). - Typed leaves (5) —
gufo:Qualityrdf:typeon every §Q5a Quale-in-Region leaf onopda:Property:opda:currentEnergyRating(EPC),opda:councilTaxBand(council-tax),opda:builtForm(built-form),opda:centralHeatingFuelType,opda:heatingType. Each also carriesdct:source <…/ODR-0008#section-Q5a>. - Omitted (adjudicated-pending / out-of-category) —
opda:ownershipType(re-sorter: quality-by-type vs legal-estate-by-bearer);opda:priceQualifier,opda:marketingTenure(Mode/Quality straddlers — and descriptive-layer, not core Property);opda:tenureKind(Substance-Kind label). A module-levelrdfs:commentrecords the inclusion rule + the omissions + the advisory (non-axiom) reading. - Home discipline — the triples land in
opda-descriptive-annotations.ttl(the advisory annotation graph), never inopda-classes.ttl,opda-inference.ttl, or any*-shapes.ttl. Nogufo:Qualityis declared as anowl:Classhere (it is referenced, reference-not-import, like DPV). - NOT emitted: any
gufo:Mode(no uncontested Mode leaf exists — the Modes are the omitted straddlers); any SHACL; anyODR-0008a/b/cnamespace; anyowl:imports <…/gufo>.
Consequences
- Good, because it preserves the UFO Quality insight the panel affirmed, as a queryable
rdf:type, without minting the rejected modules. - Good, because it builds conjunct (i) of the ODR-0023 R2 re-open trigger — a future honest spawn judgement now has a typed leaf-set to test a biting query against (conjunct (ii)).
- Good, because it incurs no namespace, no IC, no key debt and is reversible (a classification triple in the advisory graph retracts cleanly; re-homes onto a sub-module if one is ever earned).
- Neutral, because the straddlers/re-sorter stay untyped by design — adjudicating
priceQualifier(Guizzardi: a Quality of the listing Relator) /ownershipTypeto one cell is a separate, named follow-on, not blocked here. - Neutral, because Allemang’s prose-until-a-biting-query minority is recorded — if the typing is later judged to manufacture an unused entailment, it is annotation-graph-isolated and removable without touching classes/shapes.
- Bad (accepted), because asserting
rdf:type gufo:Qualityon a datatype property is a deliberate lightweight abbreviation of “this attribute is of the Quality meta-category”, not a literal claim that the property is a quality particular — mitigated by the annotation-graph quarantine + the modulerdfs:commentthat states the reading.
Confirmation
tests/test_annotations.py::test_descriptive_gufo_quality_typingasserts the 5 leaves carry(leaf, rdf:type, gufo:Quality)+dct:sourceODR-0008 §Q5a, and that the 4 omitted leaves do not.ci-three-graph(check_no_shacl_in_annotations) stays green — the typing usesrdf:type/dct:source, nosh:*;test_no_owl_class_triples_in_annotationsstays green (no?s a owl:Class).ci-byte-identityre-pins onlyopda-descriptive-annotations.ttl(the other five annotation files + all class/shape graphs are byte-unchanged);test_annotation_files_byte_identical_across_runsconfirms determinism.ci-category-g-coverageunchanged at 239/239 (this is a typing annotation, not a new leaf); fullopda-genpytest suite green.
More Information
- Modelling decision + IC owner: ODR-0008 §Q5a (per-leaf Quale-in-Region bindings) + §Q2a(a) (the spawn-gate refinement); Council session-029 Q5 (the 6–0–0 disposition + DA scorecard + the held-as-live pro-spawn dissent).
- Scheduling + scope: Council session-029 Q5 (the 6–0–0 disposition) + ADR-0005 §G25 (the queued work item — pure-additive and sound, executed here); ODR-0023 R2 (conjunct (i) of the re-open trigger).
- Graph-boundary contract: ODR-0010 §Q7a (annotation-vs-shapes graph); ODR-0004 §3a (three-graph separation).
- Deferred-work register: ADR-0005 §G25 (this work item, now executed).
- Generator: ADR-0012 (the annotation emitter this extends); ADR-0030 (the descriptive emission subsystem).
- gUFO vocabulary: Almeida, Guizzardi et al., gUFO: A Lightweight Implementation of UFO (NEMO, 2019),
http://purl.org/nemo/gufo#. - AgentDB registration of this ADR is pending an
adr-indexrun (therufloMCP is disconnected this session); the file + frontmatter edges are authoritative.
Comments
Loading comments…
Sign in to post a comment