Exemplar BASPI5 round-trip paired report
baspi5-transaction-conformant
A fully conformant BASPI5 transaction — the positive arm of the ci-baspi5-roundtrip gate.
Input instance (ABox)
# baspi5-transaction-conformant.ttl — BASPI5 round-trip exemplar (conformant)
# Hand-authored ABox fixture (ODR-0003 termination signal 1 / ODR-0010 §Rules (a)).
# The transaction-side complement to the profile-side G3 coverage check: a
# minimal conformant BASPI5 transaction validated against
# base shapes + the loaded BASPI5 overlay profile + the class TBox
# (with rdfs inference) by the `ci-baspi5-roundtrip` gate
# (tools/opda-gen/src/opda_gen/ci/baspi5_roundtrip_test.py) — it MUST conform
# with zero SHACL violations.
#
# Contents: an opda:Property carrying the BASPI5-required leaves (uprn, address,
# propertyType, builtForm, currentEnergyRating, heatingType), an opda:Address
# (line1 + postcode), an opda:Seller acting as "Legal Owner" (branch (a) of the
# sellersCapacity sh:xone — no evidenced authority required), an opda:Buyer, and
# an opda:LegalEstate (ownershipType + tenureKind). Every enum value is an exact
# member of the BASPI5 sh:in list for its leaf.
#
# NOTE — EPCCertificate is modelled by-attribute on the Property
# (opda:currentEnergyRating), NOT as a separate opda:EPCCertificate node. The
# emitted Baspi5_EPCCertificateShape binds opda:currentEnergyRating, but that
# predicate has rdfs:domain opda:Property in the TBox; under rdfs inference an
# EPCCertificate node carrying currentEnergyRating is inferred to ALSO be an
# opda:Property and then trips every Baspi5_PropertyShape minCount on that node.
# That is a latent BASPI5-profile defect (a Property-domain predicate reused on a
# non-Property target shape), reported as a B2 follow-up — NOT modelled around
# silently. The conformant transaction therefore carries the energy rating where
# the domain places it (on the Property); the profile does not require a separate
# EPCCertificate instance to exist.
#
# This is instance data (ABox); it changes no emitted TBox/profile, and is not
# paired with an expected-report.ttl (it is validated against the BASPI5 profile
# by ci-baspi5-roundtrip, not against the foundation shapes by the ADR-0014
# exemplar-regression layer).
@prefix opda: <https://opda.org.uk/pdtf/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vcard: <http://www.w3.org/2006/vcard/ns#> .
<https://opda.org.uk/pdtf/harness/data/baspi5-conformant/property>
a opda:Property ;
rdfs:label "BASPI5 conformant transaction — property"@en ;
opda:hasUPRN "100023336956" ;
opda:hasAddress <https://opda.org.uk/pdtf/harness/data/baspi5-conformant/address> ;
opda:propertyType <https://opda.org.uk/pdtf/scheme/propertyType/House> ;
opda:builtForm <https://opda.org.uk/pdtf/scheme/builtForm/Detached> ;
opda:currentEnergyRating <https://opda.org.uk/pdtf/scheme/currentEnergyRating/C> ;
opda:heatingType <https://opda.org.uk/pdtf/scheme/heatingType/Central-heating> .
<https://opda.org.uk/pdtf/harness/data/baspi5-conformant/address>
a opda:Address ;
vcard:street-address "1 Conformant Way, Testville" ;
vcard:postal-code "TE1 1ST" .
<https://opda.org.uk/pdtf/harness/data/baspi5-conformant/seller>
a opda:Person, opda:Seller ;
vcard:fn "Alex Vendor" ;
vcard:email "alex.vendor@example.org" ;
opda:roleNotation <https://opda.org.uk/pdtf/scheme/role/Seller> ;
opda:hasAssertedCapacity <https://opda.org.uk/pdtf/scheme/sellersCapacity/Legal-Owner> .
<https://opda.org.uk/pdtf/harness/data/baspi5-conformant/buyer>
a opda:Person, opda:Buyer ;
vcard:fn "Sam Purchaser" ;
vcard:email "sam.purchaser@example.org" ;
opda:roleNotation <https://opda.org.uk/pdtf/scheme/role/Buyer> .
<https://opda.org.uk/pdtf/harness/data/baspi5-conformant/estate>
a opda:LegalEstate ;
opda:ownershipType <https://opda.org.uk/pdtf/scheme/ownershipType/Freehold> ;
opda:tenureKind <https://opda.org.uk/pdtf/scheme/tenureKind/Freehold> .
Expected SHACL validation report
# baspi5-transaction-conformant-expected-report.ttl — paired SHACL validation report
# Generated by opda-gen 1.0.2; DO NOT HAND-EDIT.
# Specification: https://opda.org.uk/pdtf/harness/adr/ADR-0007-ontology-generator-specification
# Implementation: https://opda.org.uk/pdtf/harness/adr/ADR-0014-baspi5-round-trip-mvp-harness
# Ratifying ODR: ODR-0004 §8a (diagnostic exemplar pairing).
# Comparison is semantic-equivalence (focusNode, resultPath, severity, constraint, message) per tests/baspi5_round_trip/compare_reports.py.
@prefix dct: <http://purl.org/dc/terms/> .
@prefix opda: <https://opda.org.uk/pdtf/> .
@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/harness/data/exemplar-reports/report>
rdf:type sh:ValidationReport ;
dct:source <https://opda.org.uk/pdtf/harness/data/exemplar/baspi5-transaction-conformant> ;
sh:conforms "true"^^xsd:boolean .
Related
The full exemplar catalogue and round-trip contract: Exemplars; the shapes this graph validates against: SHACL shapes; the overlay profiles it loads: Overlay profiles.