DPV Class-Level Co-Annotation Pattern
Context
A pattern has emerged across four kind: pattern ODRs ratified through 2026-05-27: each established that DPV (Data Privacy Vocabulary) co-annotations attach at the CLASS level of OPDA Substance Kinds carrying PII, with variant-conditional refinements at the instance level. The pattern’s contract is reusable: a kind: pattern ODR declares its PII-bearing Kinds + their distinguishing variants/sub-kinds; ODR-0012 (Data-Governance Layer; pending) authors the class-level baseline DPV co-annotations + variant-conditional lawful-basis refinements; instance-level lawful-basis lands at generation time.
Per ODR-0001 A9 §Artefact identity test fourth-citing-site threshold, the pattern crosses the extraction-bar. The four citing sites:
- ODR-0005 §3c — Pandit’s Q3+Q5 amendments:
opda:RegisteredTitlecarries published-personal-data PII regime under HMLR open-register (ICO public-task lawful basis);opda:LegalEstateprivate until registration. PII regime distinction is a class-level discriminator. - ODR-0015 §7a — Class-level
dpv-pd:Addressbaseline onopda:AddressKind + three variant-conditional refinements (title→ PublicTask HMLR;marketing→ Consent/LegitimateInterest;inspire→ PublicTask INSPIRE Directive). - ODR-0006 §Q1 + Q4 amendments — Pandit’s amendment: Person identifier predicates carry DPV co-annotation at property level (each
niNumber/passportNumber/driverLicenceetc. asdpv-pd:OfficialID) AND at class level (opda:Personbears the aggregate baseline). Organisation:opda:Organisationpublished-PII when sole-trader/individual-director. - ODR-0009 §Q6 pointer — Evidence subclasses (DocumentEvidence / ElectronicRecordEvidence / VouchEvidence) carry class-level DPV baseline; instance-level lawful-basis varies (regulated-profession → PublicTask; statutory → LegalObligation; private grant → Consent).
This ODR extracts the pattern. The four citing sites retrofit implements: [ODR-0003, ODR-0018]. ODR-0012 (Data-Governance Layer) when ratified will be the canonical authoring authority for DPV co-annotations following this pattern.
The pattern is kind: pattern per A9; it discharges (a)/(b)/(c) inline per A9 §Per-kind discipline.
RDF graph: DPV annotations co-attaching at class level
The diagram below shows how class-level, variant-conditional, and property-level DPV triples all land in opda-annotations.ttl, separate from the class graph and the shapes graph.
dpv-pd:Person"]:::success T2["dpv-pd:hasPersonalDataCategory
dpv-pd:Address"]:::success T3["dpv-pd:hasPersonalDataCategory
dpv-pd:OfficialID"]:::success T4["opda:niNumber
dpv-pd:hasPersonalDataCategory
dpv-pd:OfficialID"]:::success end subgraph SG["opda:shapes (shapes graph — NO DPV)"] SH["sh:NodeShape / sh:PropertyShape"]:::warning end P -->|"subject of"| T1 A -->|"subject of"| T2 DE -->|"subject of"| T3 P -->|"property-level also"| T4 SH -. "MUST NOT contain DPV triples" .-> SG
Decision
Adopt the DPV class-level co-annotation pattern as the canonical mechanism for attaching dpv-pd: and dpv: annotations to OPDA Substance Kinds carrying PII: each PII-bearing Substance Kind class carries a class-level dpv-pd:hasPersonalDataCategory triple declaring the aggregate PII regime; variant-conditional refinements track distinguishing sub-kinds or variants (e.g. Address-variant; Evidence-subtype; Title-vs-Estate registration state) that drive lawful-basis-trigger differences; instance-level dpv:hasLawfulBasis lands at generation time, dispatched from the variant tag. Co-annotations live in opda-annotations.ttl per ODR-0004 §3a (advisory annotations, NOT shape constraints — they do not belong in the shapes graph).
Three-tier co-annotation pattern structure
This flowchart maps the three tiers of the pattern: a class-level baseline, variant-conditional refinements, and instance-level lawful-basis dispatch at generation time.
(opda-annotations.ttl)
dpv-pd:hasPersonalDataCategory"]:::process T2["Tier 2 — Variant-conditional refinements
(consuming ODR mapping table)
variant tag → lawful-basis category"]:::process T3["Tier 3 — Instance-level dispatch
(generator at generation time)
dpv:hasLawfulBasis per instance"]:::success MT["opda:DPVMappingTable
in opda-annotations.ttl
(ODR-0012 authors)"]:::user VT{"Variant tag
present on instance?"}:::warning T1 --> T2 T2 --> MT MT --> VT VT -->|"yes — dispatch"| T3 VT -->|"no — class baseline
sufficient"| T3
Rules
These rules constrain every implements: of this pattern.
- Class-level baseline MUST be declared. Every PII-bearing Kind class declares its baseline
dpv-pd:hasPersonalDataCategorytriple. Example:opda:Person dpv-pd:hasPersonalDataCategory dpv-pd:Person;opda:Address dpv-pd:hasPersonalDataCategory dpv-pd:Address;opda:DocumentEvidence dpv-pd:hasPersonalDataCategory dpv-pd:OfficialID. - Variant-conditional refinements MUST be authored when the consuming ODR identifies distinguishing variants. Each variant maps to a specific DPV lawful-basis category. The mapping table is in the consuming ODR’s §Operational specifications; ODR-0012 (when ratified) consumes the tables to author the annotation triples.
dpv-pd:anddpv:annotations live inopda-annotations.ttl. Per ODR-0004 §3a three-graph separation. The CI testASK { GRAPH opda:shapes { ?s ?p ?o . FILTER(STRSTARTS(STR(?p), "https://w3id.org/dpv")) } }MUST return false — no DPV triples in the shapes graph.- Property-level + class-level co-annotations are BOTH admissible when the consuming ODR has predicates with distinguishing PII categories (ODR-0006 Person identifier predicates). Property-level annotation:
opda:niNumber dpv-pd:hasPersonalDataCategory dpv-pd:OfficialID; class-level:opda:Person dpv-pd:hasPersonalDataCategory dpv-pd:Person. Both can coexist for one Kind. - PII-regime-discriminating variant tags carry their own DPV triples — when a variant tag (e.g.
addressVariant "title") discriminates a PII regime, the variant assignment in the data graph triggers the corresponding lawful-basis annotation at ODR-0012’s generation time. dct:sourceon every DPV co-annotation — resolves to the regulator’s published text verbatim per ODR-0011 §4a (DPV-PD §Scope discipline). Paraphrase moves toskos:scopeNoteper Pandit S011 Q4 amendment.- ODR-0012 is the authoring authority. Consuming ODRs declare the PII-bearing Kinds + variants + mapping tables; ODR-0012 authors the actual DPV triples + lawful-basis assignments. The consuming ODR’s
## Rulescarries a one-paragraph pointer to ODR-0012 per S009 Q6 precedent.
Operational specifications
1a. UFO/DOLCE meta-category — Quality (A9 (a) discharge)
Per ODR-0011 §8a’s seven-category UFO framework, this pattern is operationally a Quality (UFO Quality particularising a Substance Kind) — DPV categories are qualities of the PII-bearing data; the lawful-basis assignment is a value the Quality takes; the variant tag is a particularisation of the Quality within the bearer Kind.
dct:source on the UFO category: Guizzardi 2005 Ch. 4 (UFO Quality) + Masolo et al. 2003 D18 §4.3 (DOLCE Quality / Quale) + ODR-0015 §2a precedent (opda:addressVariant as UFO Quality particularising opda:Address) + ODR-0018 (this Council-authored DPV-Quality binding).
2a. IC over named hard cases (A9 (b) discharge)
A class-level DPV co-annotation a₁ for Kind K at time t₁ and a candidate-individual co-annotation a₂ at time t₂ > t₁ are the same individual iff (i) the bearing Kind K is the same; (ii) the dpv-pd:hasPersonalDataCategory value is the same OR refined under SKOS-broader (dpv-pd:Person broader dpv-pd:DataSubject); (iii) the variant-mapping table is preserved (refinement of variants ADMITS new mappings; removing existing mappings = new individual).
Five hard cases:
- DPV category broadened. A class’s baseline moves from
dpv-pd:Addresstodpv-pd:LocationData(broader) → same individual (broader inherits narrower). - DPV category narrowed. Moves from broader to narrower → NEW individual;
prov:wasDerivedFromto predecessor. - Variant added. New
addressVariantvalue introduced → same individual; variant table extends; new lawful-basis row added. - Variant retired. Existing variant marked
owl:deprecated trueper ODR-0011 §5a + ODR-0017 deprecation-rule pattern → same individual; deprecated variant’s lawful-basis row retained for historical-data dereferenceability. - DPV vocabulary version bump. DPV CG publishes new version with renamed category → same individual;
dct:sourceupdates to new version-pinned URL; old version-pinned reference moves todct:isReferencedBy.
3a. Artefact realisation (A9 (c) discharge)
The artefact realisation is a Turtle template placed in opda-annotations.ttl:
# Class-level baseline (in opda-annotations.ttl, NOT opda-shapes.ttl)
opda:Person
dpv-pd:hasPersonalDataCategory dpv-pd:Person ;
dct:source <https://w3id.org/dpv/pd> .
# Variant-conditional refinement (mapping table)
opda:AddressVariantLawfulBasisMap a opda:DPVMappingTable ;
opda:mapsKind opda:Address ;
opda:mapsVariantPredicate opda:addressVariant ;
opda:mappingEntry [
opda:variantValue "title" ;
opda:lawfulBasis dpv:PublicTask ;
dct:source <https://www.gov.uk/government/organisations/land-registry>
] , [
opda:variantValue "marketing" ;
opda:lawfulBasis dpv:Consent ;
dct:source <https://ico.org.uk/for-organisations/guide-to-data-protection/>
] , [
opda:variantValue "inspire" ;
opda:lawfulBasis dpv:PublicTask ;
dct:source <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32007L0002>
] .
The generator (per ODR-0004 §6a deterministic-emission discipline) reads the mapping table and emits per-instance dpv:hasLawfulBasis triples at generation time, dispatching from the variant tag.
4a. Three-graph separation (CI test)
Inherits ODR-0004 §3a discipline. The CI test additions:
ASK { GRAPH opda:shapes { ?s ?p ?o . FILTER(STRSTARTS(STR(?p), "https://w3id.org/dpv")) } }MUST return false.ASK { GRAPH opda:annotations { ?s ?p ?o . FILTER(STRSTARTS(STR(?p), "https://w3id.org/dpv")) } }MUST return true (DPV triples present in annotation graph).ASK { GRAPH opda:classes { ?s ?p ?o . FILTER(STRSTARTS(STR(?p), "https://w3id.org/dpv")) } }MUST return false (DPV triples NOT in the class graph either — they are advisory, not class-graph-axioms).
Alternatives considered and the chosen outcome
This flowchart traces the four rejected options and the single accepted path, matching the ## Alternatives section below.
co-annotations live?"}:::warning OWL["OWL property restrictions
on the class"]:::error SHACL["SHACL sh:property
constraints"]:::error RDFS["rdfs:comment
natural language"]:::error INST["Per-instance only
(no class-level baseline)"]:::error ACC["Class-level baseline
in opda-annotations.ttl
+ variant mapping table
+ instance-level dispatch"]:::success Q --> OWL Q --> SHACL Q --> RDFS Q --> INST Q --> ACC OWL -->|"Rejected: breaks ODR-0004
three-graph separation"| R1["DPV in class graph"]:::error SHACL -->|"Rejected: DPV is advisory,
not a shape constraint"| R2["DPV in shapes graph"]:::error RDFS -->|"Rejected: LLM fallback
failure mode (Hellmann 2017)"| R3["Natural language only"]:::error INST -->|"Rejected: misses class-level
PII regime discriminator"| R4["No class baseline"]:::error ACC --> DONE["ACCEPTED"]:::success
Alternatives
- DPV co-annotations as OWL property restrictions on the class. Rejected: would put DPV triples in the class graph, breaking ODR-0004 §3a three-graph separation; DPV is advisory annotation, not class-graph reasoning material.
- DPV co-annotations as SHACL
sh:propertyconstraints. Rejected: would put DPV triples in the shapes graph; DPV co-annotations are NOT shape constraints (they don’t validate; they advise).sh:InfoSHACL-AF rules (ODR-0017) are ADJACENT but distinct — ODR-0017 produces validation-report assertions; this pattern produces annotation-graph metadata. - DPV co-annotations as
rdfs:commentnatural-language. Rejected per Hellmann et al. (DBpedia 2017) LLM-fallback failure mode. Same lesson as ODR-0005 §6a + ODR-0011 §5a: structured machine-readable annotations > natural-language commentary. - Per-instance-only DPV annotations (no class-level baseline). Rejected: misses the class-level discriminator (S005 §3c PII regime distinction; S006 Q1 Person identifier aggregate). Instance-only requires LLM consumers to aggregate per-instance triples to derive class-level PII regime; class-level baseline gives the regime as data.
ODR dependency graph
This diagram reflects the depends-on, implements, and supersedes frontmatter relationships declared for this record.
DPV Class-Level
Co-Annotation Pattern"]:::process ODR01["ODR-0001
Methodology"]:::warning ODR04["ODR-0004
PDTF Ontology Foundation"]:::warning ODR15["ODR-0015
Address and Geography"]:::warning ODR03["ODR-0003
Programme"]:::success ODR05["ODR-0005
Property Land Identity"]:::user ODR06["ODR-0006
Agents and Roles"]:::user ODR09["ODR-0009
Claims Evidence Provenance"]:::user ODR17["ODR-0017
SHACL-AF Quality Rules"]:::user ODR12["ODR-0012
Data-Governance Layer
(pending)"]:::external ODR01 -->|"depends-on"| ODR18 ODR04 -->|"depends-on"| ODR18 ODR15 -->|"depends-on"| ODR18 ODR18 -->|"implements"| ODR03 ODR18 -->|"implemented-by"| ODR05 ODR18 -->|"implemented-by"| ODR06 ODR18 -->|"implemented-by"| ODR09 ODR18 -->|"sibling pattern"| ODR17 ODR18 -->|"authoring authority
(when ratified)"| ODR12
Consequences
- Four-site
implements:retrofitting. ODR-0005 §3c, ODR-0015 §7a, ODR-0006 §Q1+Q4, ODR-0009 §Q6 all addODR-0018to theirimplements:frontmatter and cite this pattern in their## References. The retrofit is a follow-up housekeeping task; flagged for next /loop fire. - A9 pressure-test passes. This is the second
kind: patternODR that is itself a pattern-extraction record (after ODR-0017 SHACL-AF). The (a)/(b)/(c) discipline applies; this ODR discharges all three (UFO Quality category; five named hard cases for co-annotation identity; Turtle template in annotation graph). - ODR-0012 (Data-Governance Layer) inherits this pattern as authoring contract. When S012 ratifies, ODR-0012 §Rules will reference ODR-0018 as the canonical mechanism + author the actual DPV triples + variant mapping tables.
odr-reviewlint extension. Beyond existing planned extensions: any ODR declaring PII-bearing Kinds + variants MUSTimplements: [..., ODR-0018]if it follows the class-level co-annotation pattern; any DPV annotation MUST be inopda-annotations.ttl(CI test enforces).- Namespace ratified; record
accepted. The inherited ODR-0004 namespace block is lifted (theopda:string was ratified 2026-05-27 — greenfield; no WG), so ODR-0018 isaccepted. Generator output may still carrydct:status "draft"as a publication-grade marker, independent of record ratification.
References
- Methodology: ODR-0001 §What an ODR records (per-kind discipline) — A9 amendment 2026-05-27; §Artefact identity test (fourth-citing-site threshold this ODR satisfies); ODR-0011 §8a (UFO Quality category source).
- Foundation: ODR-0004 §3a (three-graph separation — annotation graph for DPV); §7a (term-sourcing five-line precedence — verbatim regulator citation).
- W3C / spec: DPV Specification (Pandit et al. 2024 DPV 2.0); DPV-PD (Personal Data) module; GDPR Art. 5 + Art. 6 + Art. 9; ICO Guidance on Public Authorities Lawful Bases (2023).
- Foundational ontology: Guizzardi 2005 Ch. 4 (UFO Quality); Masolo et al. 2003 D18 §4.3 (DOLCE Quality / Quale).
- AI-RDF citation: Hellmann et al. 2017 DBpedia 2017 — LLM fallback when annotations are in
rdfs:commentonly. - Citing sites (
implements:retrofit pending):- ODR-0005 §3c — RegisteredTitle published-PII regime.
- ODR-0015 §7a — Address baseline + three variant refinements.
- ODR-0006 §Q1+Q4 — Person identifier predicates (property-level + class-level); Organisation registration data.
- ODR-0009 §Q6 — Evidence subclasses baseline + variant-conditional lawful basis.
- Council deliberation provenance: spawned by session-009 §Synthesis (fourth-citing-site spawn-rule fires); authored as Author-only follow-up to S009’s closure per ODR-0001 §Self-amendment process + §Artefact identity test.
- Related: programme anchor ODR-0003; sibling pattern ODR-0017 (SHACL-AF non-blocking-data-quality-rules — different pattern, same
kind: patternextraction discipline). Future authoring: ODR-0012 (Data-Governance Layer —implements: ODR-0018when ratified; consumes mapping tables + authors DPV triples).
Comments