OPDA Knowledge base
Physical — ontology property

Property shapes

opda:Shapes

Property shapes

Six SHACL shapes (4 identity-key + 1 IC-breach + 1 INSPIRE rule) plus 1 UPRN succession SHACL-AF rule, emitted into opda-property-shapes.ttl.

<https://opda.org.uk/pdtf/graph/property-shapes>
    rdf:type owl:Ontology ;
    dct:title "OPDA Property Shapes"@en ;
    opda:targetsClassGraph <https://opda.org.uk/pdtf/harness/release/1.0.0/> .

opda:AddressIdentityKeyShape

opda:AddressIdentityKeyShape
    rdf:type sh:NodeShape ;
    dct:source <https://opda.org.uk/pdtf/harness/odr/ODR-0015/section-Rule-6> ;
    sh:property _:b89b6f844e401 ;
    sh:targetClass opda:Address .

_:b89b6f844e401
    sh:datatype xsd:string ;
    sh:maxCount "1"^^xsd:integer ;
    sh:message "Address addressVariant MUST be a single xsd:string value (one of 'title' | 'marketing' | 'inspire') per ODR-0015 §Rule 6. Distinguishes the authority lifecycle borne by the Address instance."@en ;
    sh:path opda:addressVariant ;
    sh:severity sh:Violation .

Severity tier

sh:Violation (Cat 1 — identity-key missing/wrong-type)

Target

sh:targetClass opda:Address; property opda:addressVariant

Validation behaviour

For every opda:Address instance, pyshacl checks that opda:addressVariant is at most one xsd:string value. Multi-value or non-string violations produce the message above. Exemplar listed-building-divergent-addresses demonstrates valid multi-address-instance pattern (three separate Address instances, each with one variant).

Source ODR + ADR

opda:LegalEstateIdentityKeyShape

opda:LegalEstateIdentityKeyShape
    rdf:type sh:NodeShape ;
    dct:source <https://opda.org.uk/pdtf/harness/odr/ODR-0005/section-3b> ;
    sh:property _:bdd41e84ee3f5 ;
    sh:targetClass opda:LegalEstate .

_:bdd41e84ee3f5
    sh:datatype xsd:string ;
    sh:maxCount "1"^^xsd:integer ;
    sh:message "LegalEstate identity surface: tenureKind (Freehold / Leasehold / Commonhold) MUST be a single xsd:string value when present. The full rights-bundle IC per ODR-0005 §3b is enforced by the registered-title binding via opda:recordsEstate."@en ;
    sh:path opda:tenureKind ;
    sh:severity sh:Violation .

Severity tier

sh:Violation (Cat 1 — identity-key)

Target

sh:targetClass opda:LegalEstate; property opda:tenureKind

Validation behaviour

For every opda:LegalEstate instance, opda:tenureKind MUST be at most one xsd:string. The full rights-bundle IC is enforced via the registered-title binding (opda:recordsEstate), not at this shape. Exemplar registered-freehold-house demonstrates conforming usage.

Source ODR + ADR

opda:PropertyIdentityKeyShape

opda:PropertyIdentityKeyShape
    rdf:type sh:NodeShape ;
    dct:source <https://opda.org.uk/pdtf/harness/odr/ODR-0005/section-6a> ;
    sh:property _:ba17cdd559a14 ;
    sh:targetClass opda:Property .

_:ba17cdd559a14
    sh:datatype xsd:string ;
    sh:maxCount "1"^^xsd:integer ;
    sh:message "Property hasUPRN, when present, MUST be a single xsd:string value. Absence is admissible (UPRN is a contingent administrative identifier per ODR-0005 §6a); succession is tracked by the UPRNSuccessionRule SHACL-AF rule below."@en ;
    sh:path opda:hasUPRN ;
    sh:severity sh:Violation .

Severity tier

sh:Violation (Cat 1 — identity-key)

Target

sh:targetClass opda:Property; property opda:hasUPRN

Validation behaviour

For every opda:Property instance, opda:hasUPRN MUST be at most one xsd:string. Absence is admissible (UPRN is contingent per ODR-0005 §6a). Multi-UPRN cases violate; succession across re-numbering is tracked by opda:UPRNSuccessionRule (Info severity). Exemplars unregistered-pre-first-registration-house (UPRN absent) and flat-with-split-uprn (succession event) both demonstrate conforming usage.

Source ODR + ADR

opda:PropertyICBreachShape

opda:PropertyICBreachShape
    rdf:type sh:NodeShape ;
    dct:source <https://opda.org.uk/pdtf/harness/odr/ODR-0005/section-Rule-5> ;
    sh:property _:b6a1eb5c7e44d ;
    sh:targetClass opda:Property .

_:b6a1eb5c7e44d
    sh:message "Property co-reference MUST use opda:identifiesSameProperty (an IRI-valued ObjectProperty); owl:sameAs is forbidden per ODR-0005 Rule 5 because it propagates identity-collapse across contexts under reasoning."@en ;
    sh:nodeKind sh:IRI ;
    sh:path opda:identifiesSameProperty ;
    sh:severity sh:Violation .

Severity tier

sh:Violation (Cat 2 — IC breach / anti-pattern)

Target

sh:targetClass opda:Property; property opda:identifiesSameProperty

Validation behaviour

For every opda:Property instance, opda:identifiesSameProperty MUST be IRI-valued (not a literal). This is the gentle reminder that co-reference uses the OPDA-specific predicate; the harder anti-pattern (using owl:sameAs) is rejected upstream by CI (Rule 5). Exemplar registered-freehold-house uses opda:identifiesSameProperty correctly between title, estate, and property.

Source ODR + ADR

opda:UPRNSuccessionRule

opda:UPRNSuccessionRule
    rdf:type sh:NodeShape ;
    rdfs:comment "UPRN succession rule (ODR-0005 §6a; SHACL-AF citing site #1). Materialises opda:hasUPRNSuccessionStatus on every Property with a UPRN: 'succession-tracked' when prov:wasDerivedFrom names a predecessor with a different UPRN; 'primary-uprn' otherwise. Per ODR-0017 §1a non-blocking-quality-rule pattern."@en ;
    dct:source <https://opda.org.uk/pdtf/harness/odr/ODR-0005/section-6a> ;
    sh:rule _:b16e82da2b31c ;
    sh:severity sh:Info ;
    sh:targetClass opda:Property .

_:b16e82da2b31c
    rdf:type sh:SPARQLRule ;
    sh:construct "PREFIX opda: <https://opda.org.uk/pdtf/>\nPREFIX prov: <http://www.w3.org/ns/prov#>\nCONSTRUCT {\n  ?property opda:hasUPRNSuccessionStatus ?status .\n}\nWHERE {\n  ?property a opda:Property ;\n            opda:hasUPRN ?currentUPRN .\n  OPTIONAL { ?property prov:wasDerivedFrom ?predecessor .\n             ?predecessor opda:hasUPRN ?priorUPRN .\n             FILTER (?currentUPRN != ?priorUPRN) }\n  BIND (IF(BOUND(?priorUPRN), \"succession-tracked\", \"primary-uprn\") AS ?status)\n}" .

Derives

opda:hasUPRNSuccessionStatus (“succession-tracked” | “primary-uprn”)

Citing site

ODR-0005 §6a — UPRN as contingent identifier (citing site #1)

Severity

sh:Info

Source ODR + ADR

opda:INSPIRESuccessionRule

opda:INSPIRESuccessionRule
    rdf:type sh:NodeShape ;
    rdfs:comment "INSPIRE Identifier / OS AddressBase succession rule (ODR-0015 §4a; SHACL-AF citing site #3). Materialises opda:hasINSPIRESuccessionStatus on inspire-variant Address instances. Per ODR-0017 §1a."@en ;
    dct:source <https://opda.org.uk/pdtf/harness/odr/ODR-0015/section-4a> ;
    sh:rule _:becbeff0baa17 ;
    sh:severity sh:Info ;
    sh:targetClass opda:Address .

_:becbeff0baa17
    rdf:type sh:SPARQLRule ;
    sh:construct "PREFIX opda: <https://opda.org.uk/pdtf/>\nPREFIX prov: <http://www.w3.org/ns/prov#>\nCONSTRUCT {\n  ?address opda:hasINSPIRESuccessionStatus ?status .\n}\nWHERE {\n  ?address a opda:Address ;\n           opda:addressVariant \"inspire\" .\n  OPTIONAL { ?address prov:wasDerivedFrom ?prior .\n             ?prior opda:addressVariant \"inspire\" }\n  BIND (IF(BOUND(?prior), \"inspire-re-issued\", \"inspire-primary\") AS ?status)\n}" .

Derives

opda:hasINSPIRESuccessionStatus (“inspire-re-issued” | “inspire-primary”)

Citing site

ODR-0015 §4a — INSPIRE Identifier succession (citing site #3)

Severity

sh:Info

Source ODR + ADR

Comments

Loading comments…