Authority-Retrieved Artefacts
Context
ODR-0008 §Q2a(b) named a spawn trigger: “when Survey/EPC/Search/Title-Plan cannot be flat datatype bags without losing prov:wasGeneratedBy, spawn ODR-0008d ‘Authority-Retrieved Artefacts’.” ODR-0022 Category E fired it: the descriptive layer’s search/environmental results are a six-field block (riskIndicator, actionAlertRating, result, summary, recommendations, datasetAttribution) recurring across exactly 24 parents = 12 environmental perils × 2 (the peril + its riskSubcategories[]), plus localSearches (185 leaves, CON29-style) and valuationComparisonData (23). The five §Q4a-promoted classes (opda:Search, opda:Survey, opda:EPCCertificate, opda:Valuation, opda:Comparable) ship today as bare classes with identity-key SHACL shapes; they have no internal structure, there is no opda:RiskAssessment class, and no peril SKOS scheme.
This is kind: pattern — it commits new classes with identity criteria, so under ODR-0001 §A9 it MUST state, for each, (a) a UFO meta-category, (b) an identity criterion over named hard cases, and (c) the artefact realisation. It was deliberated by the Linked Data Council at session-024 (Full-lean; Queen Kendall; DA Cagle; agent-fan-out, the first of the ODR-0023 R1–R4 parallel run). Q1 7–1, Q2 8–0, Q3 7–1, Q4 6–1, Q5 8–0, Q6 7–1 FOR a RiskAssessment class + peril scheme; Cagle DA holds a principled dissent for reuse-Search (alternative d).
Decision
Adopt the authority-retrieved-artefact family as UFO Information Objects on the ODR-0009 PROV-O backbone: mint opda:RiskAssessment (the per-peril search/environmental result) as one class (~6 properties) instantiated per peril; mint a first-class opda:PerilScheme SKOS concept scheme (12 dereferenceable peril concepts, each dct:source-d to its governing authority); give the five already-ratified classes their internal structure; and retro-correct all six classes’ UFO meta-category from “Substance Kind” to “Information Object” — chosen because each artefact prov:wasGeneratedBy an authority’s activity and bears a provenance-grounded identity (a re-run search is a new result), which is precisely what a flat datatype bag on Search (alternative d) cannot carry, while one class + a peril value-scheme (not 12 subclasses) answers the lender’s cross-peril query without OWL over-classification.
Rules
1. opda:RiskAssessment — A9 discharge
- (a) UFO meta-category: Information Object (DOLCE Non-Physical Object; gUFO
gufo:Objectartefact),rdfs:subClassOf prov:Entity. It is not a Substance Kind and not a Quality ofopda:Property— it is a report, an information artefact existentially dependent on its generating activity. - (b) Identity criterion (over named hard cases): an
opda:RiskAssessmentis individuated by the tuple ⟨generating activity (prov:wasGeneratedBy), source peril/dataset, subject property, generation time (prov:generatedAtTime)⟩ — identity grounded in the activity, not the result values. Hard cases:- Re-run (the case that answers the DA): a flood search re-run on the same property next year is a distinct
RiskAssessment(new activity + newgeneratedAtTime),prov:wasDerivedFromthe prior — distinct identity independent of the peril value. This is the lifecycle a flat datum onSearchcannot express. - Co-reference: two providers’ flood assessments for one property are distinct instances (distinct
prov:wasAttributedToAgent), not one merged value. - Sub-result: a
riskSubcategories[]entry is itself a (leaf)RiskAssessment(see Rule 4). otherEnvironmental(a 2-of-6-field stub) is a valid leafRiskAssessmentwith optional Qualities absent — an Object with missing Qualities, not a different kind.
- Re-run (the case that answers the DA): a flood search re-run on the same property next year is a distinct
- (c) Artefact realisation: one
sh:NodeShapesh:targetClass opda:RiskAssessmentwith ~6 property shapes —opda:peril(sh:intheopda:PerilScheme),opda:riskIndicator/opda:actionAlertRating(sh:intheir rating schemes),result/summary/recommendations(opda:disclosureDetail-grade strings),opda:datasetAttribution≡prov:wasAttributedTo; provenance-keyed by the §Q4a identity-key shape reused from the emitted family pattern; recursive viash:node opda:RiskAssessmentforriskSubcategories[]. Not 72 datatype properties (alternatives a/d), not 12 subclasses (alternative c).
2. opda:PerilScheme — the dataset/peril axis (SKOS, not subclasses)
A skos:ConceptScheme mirroring opda:BoundedContextScheme member-for-member: 12 skos:Concepts — Flooding, CoalMining, NonCoalMining, Radon, GroundStability, ContaminatedLand, CoastalErosion, Climate, Energy, Infrastructure, Planning, Transportation — each with skos:prefLabel/skos:definition/skos:inScheme/skos:topConceptOf, dct:source → its governing data authority (Environment Agency, Coal Authority, UKHSA/BGS, DESNZ, the local authority, Groundsure/Landmark), skos:narrower to its sub-perils, opda:ufoCategory "Quale-in-Region". Steward: Baker (deputy Isaac). The peril MUST be a dereferenceable concept (a lender’s mortgage condition names “a satisfactory coal-mining search”) — never an opaque string, never an rdfs:subClassOf hierarchy (SKOS Reference §3: a delimited value-space is a scheme, not a class tree).
3. The five existing classes — Information-Object retro-correction + internals
opda:Search, opda:Survey, opda:EPCCertificate, opda:Valuation, opda:Comparable are Information Objects (correcting the emitted “Substance Kind (informational)” scopeNotes — a normative A9 meta-category fix). Each IC = ⟨issuing authority, authority reference/number, issue date⟩ (extrinsic, provenance-grounded), rdfs:subClassOf prov:Entity (already emitted). Their internal property structure is given here as ~per-class node shapes. opda:RiskAssessment prov:wasGeneratedBy the activity that also generates the opda:Search it belongs to (one search yields many per-peril assessments). opda:Comparable relates to opda:Valuation via prov:wasInformedBy.
4. One class, not two; recursion via part-of
One opda:RiskAssessment for both environmental-search and local-authority (CON29) results — they differ only on the prov:wasAttributedTo Agent and the peril, both already modelled; a second class needs a named CON29-specific-property query (none attested — §Q6a). The riskSubcategories[] recursion is self-referential: opda:hasSubAssessment (a mereological part-of; sub-results are first-class RiskAssessments) realised as sh:node opda:RiskAssessment. The peril taxonomy (peril → sub-perils) uses skos:narrower within opda:PerilScheme; the result recursion uses opda:hasSubAssessment — two distinct axes.
5. Provenance + PII
The family hangs off the ODR-0009 PROV-O backbone (prov:wasGeneratedBy/wasAttributedTo/generatedAtTime/wasDerivedFrom); datasetAttribution reuses prov:wasAttributedTo (do not mint). PII co-annotation per ODR-0018 where a result carries personal data (occupier/owner-named search results). Lifecycle (issued/superseded/re-run) uses ODR-0017 SHACL-AF succession rules — materialised at sh:severity sh:Info (a re-run records substantive succession via prov:wasDerivedFrom, so it meets ODR-0017 §Rules.2a’s sh:Info tier rather than sh:Warning), non-blocking, and placed in the shapes graph (opda-descriptive-shapes.ttl, never opda-annotations.ttl, per ODR-0017 §Rules.3 + ODR-0004 §3a three-graph separation); the succession rule is never sh:Violation (it is informative, not normative-breaking — ODR-0017 §Rules.2). The wasGeneratedBy identity-key constraint of Rule 1(c) remains an ordinary sh:Violation SHACL-Core shape (a missing provenance key IS normative-breaking) — distinct from this non-blocking succession rule.
Held dissent (recorded)
Cagle (DA) HOLDS for alternative (d) — reuse opda:Search, no new class — on the OntoClean carries-identity (+I) test (Guarino & Welty 2002): “a type supplying no identity beyond a discriminating value is not a sortal Kind”; he notes opda:riskIndicator already ships as a flat datatype property and opda:Search’s scopeNote already covers CON29/environmental/coal-mining. Withdrawal trigger (his own): “state an IC for RiskAssessment independent of (i) the peril value and (ii) the parent Search’s lifecycle.” Queen’s assessment: Rule 1(b)‘s re-run hard case meets it — a re-run is a distinct RiskAssessment by activity + generatedAtTime, independent of both peril value and the parent Search (which persists across the re-run). Guizzardi & Guarino’s instrument is decisive: “details collapses on value (−I, a datum); RiskAssessment does not (+I, a class) — same OntoClean instrument, opposite verdicts.” The dissent is recorded held-as-live with a named re-open trigger: if implementation shows no RiskAssessment ever has a lifecycle independent of its parent Search (no re-run/supersession in real data), collapse to alternative (d). The peril scheme (Q2) and PROV-O wiring (Q5) and the five classes’ internals (Q3) are unanimous and unaffected by the hold.
Alternatives
- (a) Flat datatype-bag on
Search— six fields as datatype properties; loses per-peril uniformity and the cross-peril query; an Object’s Qualities modelled as the Object. - (c) 12 per-peril subclasses (
FloodRisk,CoalMiningRisk, …) — OWL over-classification (TopBraid-EDG anti-pattern): the perils differ by a Quality value (the peril), not by identity; ash:inover the peril scheme expresses it without 12 rigid sortals. The byte-uniform six-field block across all 24 parents is the evidence (one Type varying by one Quale). - (d) Reuse
opda:Searchas a structured datatype (Cagle’s held position) — preserves parsimony but loses the per-resultprov:wasGeneratedBylifecycle (a re-run search’s result has its own identity); rejected 7–1 but recorded held-as-live with a re-open trigger.
Consequences
Emission status — 2026-05-30: realised in the generator —
opda:RiskAssessment+opda:PerilScheme(12 concepts) +opda:RiskIndicatorScheme/opda:ActionAlertRatingScheme+ the node shapes + the five classes’ Information-Object correction are emitted; pytest 243 pass / 1 xfail + all four CI gates byte-identity-green + site build green. Decided on directing authority (greenfield — no WG gate; ADR-0006). Three modelling choices stand and are revisited only if a concrete need arises: the dedicatedopda:RiskIndicatorScheme(vs. reusing the existingYesNoNotKnownScheme, since its value-space is No/Not known/Yes),opda:PerilSchemecarrying noskos:narrower(the data attests no enumerated sub-peril value-set, so the per-result recursion ridesopda:hasSubAssessmentinstead), andopda:priceas a single shared property (noopda:MonetaryAmountvalue type exists yet). Cagle’s held dissent (alternative-d) rides unaffected.WG-review recommendations (2026-05-30, engineering analysis — not decisions): (1)
RiskIndicatorScheme→ APPLIED 2026-05-30:riskIndicatorreusesYesNoNotKnownScheme(value-spaces byte-identical {No, Not known, Yes}; ODR-0022 §1 Category C forbids a duplicate scheme over an existing value-set; the node shape constrains via a literalsh:in). The dedicatedRiskIndicatorSchemeis removed;ActionAlertRatingScheme(1–5) stays (no existing equivalent). Applying this surfaced and fixed a latent duplicate declaration:opda:riskIndicatorhad been declared in bothopda-property.ttl(stale flat-Property home,rdfs:domain opda:Property) andopda-descriptive.ttl(RiskAssessment Quale,rdfs:domain opda:RiskAssessment) — conflicting domains; the stale Property declaration is removed, soriskIndicatornow lives solely onopda:RiskAssessmentper ODR-0008d. All four CI gates + site build green. (2)PerilSchemeskos:narrower→ sound as-is: PDTF v3 attests sub-results only as free-textsubCategory(no enumerated sub-peril value-set), and Rule 4 routes per-result recursion throughopda:hasSubAssessment; revisit only if a governed sub-peril register appears. (3)opda:MonetaryAmount→ keep the sharedopda:pricenow; defer a first-class value type to the Category-G monetary-leaf walk (~225 monetary leaves, onlypriceemitted today; no currency sub-field in the data). All three honour §4’s binding constraint and defer the speculative half. Update 2026-05-31 (Council session-028 Q3 / ODR-0024 R3): the council ratified item (3) — keep the fixtures-scopedopda:pricenow; the deferred Category-G monetary walk mintsopda:MonetaryAmount(magnitude + ISO-4217 currency) as a shared value type, with distinct per-economic-kind properties each on its own bearer (the 18 monetary leaves wrongly collapsed onto the fixturespricewere withdrawn — ODR-0022 §1/G1 keeps them distinct). Tracked as ADR-0005 §G22. EXECUTED 2026-05-31 — item-3 deferral DISCHARGED: the monetary walk landed —opda:MonetaryAmount(magnitudeopda:amount+opda:currency→ the seeded-extensible ISO-4217opda:CurrencyScheme) + 16 per-economic-kind monetary properties, eachrdfs:range opda:MonetaryAmounton its own bearer, minted via the generator (ODR-0024 R3);opda:priceleft a single-currency fixtures interim (not migrated). Coverage 196/239; all 6 CI gates green; §G22 closed.
- The generator emits a sixth class
opda:RiskAssessment(opda-descriptive.ttl) + its node shape (opda-descriptive-shapes.ttl) extending the existingprov:wasGeneratedByidentity-key pattern,opda:PerilScheme(12 concepts,opda-vocabularies.ttl, steward Baker), and the internal property structure of the five existing classes. - A9 meta-category retro-correction: the five emitted classes’ scopeNotes change from “Substance Kind (informational)” to “Information Object” — a normative correction (a report is not a Substance Kind). CI verifies all six carry
rdfs:subClassOf prov:Entity+ thewasGeneratedByViolation shape. - This unblocks ODR-0022 Category E emission (held pending this council) — the search/environmental ~200 leaves bind to
RiskAssessment+PerilScheme, not flat properties; ODR-0023 R1 is struck. - Cagle’s held dissent rides as a re-open trigger; the directing authority / Linked Data Council ratifies
proposed → accepted(greenfield; no WG) — nowaccepted. The peril scheme + PROV-O wiring proceed unconditionally. - status
proposed; adoption via OPDA WG → Modelling Sub-Committee.
References
- Council: session-024 — Authority-Retrieved Artefacts (Full-lean; Queen Kendall; DA Cagle — held for alt-d; Moreau/Knublauch/Guizzardi+Guarino/Baker+Isaac FOR the class). Evidence:
working/session-024/EVIDENCE.md. - Parent + trigger: ODR-0008 §Q2a(b) (the spawn), §Q4a (the five class promotions + the authority-provenance/lifecycle criteria), §Q6a (reasoner-independence).
- Realizing records: ODR-0009 (PROV-O backbone;
wasGeneratedBy/wasAttributedTo); ODR-0011 (thePerilScheme+ rating schemes); ODR-0017 (succession/lifecycle); ODR-0018 (result PII); ODR-0005 (the subject Property). - Fired by: ODR-0022 Category E; tracked in ODR-0023 R1.
- External citations (per ODR-0001 §Citation grounding): W3C PROV-O Recommendation 2013 §3.2 (Moreau, co-editor); Guizzardi 2005 Ontological Foundations for Conceptual Modeling Ch. 4 (Information Object); Guarino & Welty 2002 OntoClean CACM 45(2) (the +I identity instrument — cited by both the class majority and the DA); W3C SHACL Recommendation 2017 §4.8.1
sh:noderecursion (Knublauch, co-editor); SKOS Reference 2009 §3/§8 (Isaac) + Singapore Framework 2008 (Baker).
Comments