OPDA Knowledge base
Diagnostic exemplar

person-with-name-change

person-with-name-change

Summary

Person IC over deed-poll name change (2019): one Person individual with name-attribute mutation, NOT two distinct Persons. NameChangeEvent captures provenance via PROV-O. Anti-pattern: owl:sameAs across former/current names.

Cross-link: Concept tier — Person hard cases.

Exemplar instance graph

--- config: layout: elk --- %%{init: {"theme": "base", "themeVariables": {"primaryColor": "#B3E5FC", "primaryTextColor": "#01579B", "primaryBorderColor": "#0277BD", "lineColor": "#37474F"}}}%% flowchart LR accTitle: person-with-name-change exemplar instance graph accDescr: One Person individual whose name-attribute changed (former name Alex Smith, current name Alex Wright). The reified NameChangeEvent records the 2019 deed-poll; identity persists, no owl:sameAs. %% @prefix opda: %% @prefix opda-x: %% @prefix prov: classDef instance fill:#B3E5FC,stroke:#0277BD,stroke-width:2px,color:#01579B classDef event fill:#FFE0B2,stroke:#E65100,stroke-width:2px,color:#BF360C classDef literal fill:#FFF9C4,stroke:#F57F17,stroke-width:2px,color:#E65100 P["opda-x:person
<b>Person</b>"]:::instance Ev["opda-x:name-change-event
<b>NameChangeEvent</b>"]:::event DOB["1985-07-14"]:::literal NI["QQ123456C"]:::literal Cur["Alex Wright (current)"]:::literal Prev["Alex Smith (former)"]:::literal Date["2019-09-22"]:::literal Mech["deed-poll"]:::literal P -->|opda:dateOfBirth| DOB P -->|opda:niNumber| NI P -->|opda:currentName| Cur P -->|opda:formerName| Prev P -->|opda:nameChangeDate| Date P -->|opda:nameChangeMechanism| Mech Ev -->|prov:atTime| Date Ev -->|opda:previousName| Prev Ev -->|opda:newName| Cur Ev -->|opda:appliesTo| P

Exemplar Turtle

# Diagnostic exemplar — ODR-0004 §8a, IC-only — input to ODR-0006 (Agents & Roles).
# Situation: a Person with a name change (deed-poll, 2019); they were the seller on a 2017
# transaction under their former name, and the buyer on a 2024 transaction under their current name.
# The IC must say this is one Person individual whose name-attribute changed, not two.
# Status: ratified. Namespace: https://opda.org.uk/pdtf/ (Session 003b + ADR-0006).
# ODR-0004 status: accepted (council: session-004); ODR-0006 status: accepted (council: session-006).

@prefix opda:    <https://opda.org.uk/pdtf/> .
@prefix opda-x:  <https://opda.org.uk/pdtf/harness/data/exemplar/person-with-name-change/> .
@prefix prov:    <http://www.w3.org/ns/prov#> .
@prefix dct:     <http://purl.org/dc/terms/> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos:    <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .

opda-x:exemplar
    a opda:DiagnosticExemplar ;
    dct:title "Person with name change — IC across name-mutation hard case" ;
    dct:status "ratified" ;
    dct:references <ODR-0006> , <ODR-0005> , <ODR-0004> ;
    skos:scopeNote
        "Tests Person IC over the name-change hard case. The same Person held distinct names on two transactions five years apart (deed-poll in 2019). Under S006 Q1 the IC for opda:Person must give one individual, not two. Candidate ICs: (a) date-of-birth + state-issued ID combination; (b) any single state-issued ID; (c) PROV-O wasDerivedFrom chain over name-attribute changes. The IC the Council settles must cope with the 2017-as-FormerName + 2024-as-CurrentName case without collapsing to owl:sameAs (which would propagate every triple from one context to the other; same anti-pattern as ODR-0005 Rule 5)." .

# One Person individual; name-attribute changed over time (recorded via prov:wasRevisionOf).
opda-x:person
    a opda:Person ;
    rdfs:label "Person individual — currently named Alex Wright (formerly Alex Smith)" ;
    opda:dateOfBirth "1985-07-14"^^xsd:date ;
    opda:niNumber "QQ123456C" ;
    opda:currentName "Alex Wright" ;
    opda:formerName "Alex Smith" ;
    opda:nameChangeDate "2019-09-22"^^xsd:date ;
    opda:nameChangeMechanism "deed-poll" .

# Provenance of the name change — a registered deed-poll event.
opda-x:name-change-event
    a opda:NameChangeEvent ;
    rdfs:label "Deed-poll filed 2019-09-22" ;
    prov:atTime "2019-09-22T00:00:00Z"^^xsd:dateTime ;
    opda:previousName "Alex Smith" ;
    opda:newName "Alex Wright" ;
    opda:appliesTo opda-x:person ;
    dct:source <https://www.gov.uk/change-name-deed-poll> .

Expected report Turtle

# person-with-name-change-expected-report.ttl
@prefix dct: <http://purl.org/dc/terms/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<https://opda.org.uk/pdtf/data/exemplar-reports/report>
    rdf:type sh:ValidationReport ;
    dct:source <https://opda.org.uk/pdtf/harness/data/exemplar/person-with-name-change> ;
    sh:conforms "true"^^xsd:boolean .

SHACL outcome

sh:conforms true. The exemplar satisfies:

  • opda:PersonIdentityKeyShape (Cat 1): opda:hasAssertedCapacity count is 0 (admissible)
  • opda:SpecialCategoryPIIWithoutLawfulBasisShape (Cat 4): no opda:hasSpecialCategoryData true → rule does not fire

The SHACL-AF rules materialise:

  • opda:IdentifierSuccessionRuleopda:hasIdentifierSuccessionEvent opda-x:name-change-event (the NameChangeEvent names the Person via opda:appliesTo, equivalent surface for the rule’s prov:wasAssociatedWith pattern)
  • opda:CapacityAuthorityMatchRule → no fire (no opda:hasAssertedCapacity)

Source ODR + ADR

Comments

Loading comments…