OPDA Knowledge base
Business Data Knowledge Stub · Updated 2026-05-15 DAMA · Metadata Management

Concept taxonomy (SKOS)

Terminology layer for PDTF. Three families of SKOS concept scheme: one cross-cutting Core, one per bounded context (six in total), and a growing set of small code-list (enumeration) schemes for controlled vocabularies. Concepts that mean the same thing across contexts are defined once and tagged with multiple skos:inScheme memberships — not duplicated, not collapsed into one tree.

See also: Ontology manual — Physical-Ontology tier (SKOS vocabularies)

This page describes the design of the SKOS scheme structure (multi-scheme, multi-membership, bounded-context alignment). The SKOS schemes page in the Ontology manual documents the 23 generator-emitted SKOS concept schemes (137 concepts) that the ontology currently ships — the realised output of the design described here.

Status

This is a stub for upcoming work. The shape below replaces the earlier nine-branch single-scheme proposal — see why multiple schemes for the reasoning.

What already exists

The schemes

Core vocabulary scheme

The spanning vocabulary — concepts that transcend any single context. These are the nouns the OWL ontology mints as classes (pdtf:Property, pdtf:Participant, pdtf:Transaction, pdtf:Document) plus the cross-context property concepts the data dictionary already identifies (address, name, email, dateOfBirth, …).

Source: the 389 cross-context concepts already counted in the data dictionary (appear in 3+ schemas).

One scheme per bounded context

Six schemes, mirroring the six primary industry contexts in 12-bounded-contexts and the overlay grouping already used by the data dictionary:

SchemeBounded contextOverlays
pdtf-ea:SchemeEstate Agencybaspi5, nts2, ntsl2
pdtf-conv:SchemeConveyancing (Legal)ta6, ta7, ta10, lpe1
pdtf-lend:SchemeMortgage Lendingfme1
pdtf-surv:SchemeSurveying / Valuationpiq
pdtf-pds:SchemeProperty Data Servicescon29R, con29DW, oc1, llc1, rds, sr24
pdtf-tech:SchemeProperty Technology(orchestration — no overlay of its own)

Code-list schemes (enumerations)

Small controlled vocabularies for things that are values rather than nouns — used wherever an instance needs to be tagged with one of a fixed set of categories. Each is its own scheme, kept short and self-contained. The bounded-context schemes refer to these as tag values; they do not duplicate the concepts.

SchemeConcepts (examples)Used as
pdtf-forms:SchemeTA6, TA7, TA10, BASPI5, NTS2, LPE1, FME1, PIQ, …dcterms:source on claims — which form a claim came from
pdtf-searches:SchemeCON29R, CON29DW, LLC1, OC1, RDS, SR24, …dcterms:source on claims — which search returned the data
pdtf-states:SchemeListed, OfferAccepted, Exchanged, Completed, …State labels on transaction milestones; ordering lives in PROV-O, not here
pdtf-roles:SchemeBuyer, Seller, Conveyancer, Surveyor, Lender, EstateAgent, …Role tag on pdtf:Participant instances

Natural neighbours likely to grow into their own enum schemes: tenure types (Freehold, Leasehold, Commonhold), EPC ratings (A–G), Council tax bands (A–H), verification levels for the trust framework.

What lives outside SKOS

The earlier nine-branch proposal mixed terminology with structure and state. SKOS keeps the terminology; the rest moves to its natural home:

  • Structural classespdtf:Property, pdtf:Participant, pdtf:Document, pdtf:Transaction, pdtf:Form, pdtf:Search are OWL classes. The SKOS schemes hold the terms; OWL holds what those terms are. Form and Search appear in both layers — class-of-thing in OWL, value-of-tag in the code-list schemes above.
  • Transaction lifecycle — the machine — the ordering of states (Listed → OfferAccepted → Exchanged → Completed) is a state machine modelled in PROV-O activities. The state labels are in pdtf-states:Scheme above; the transitions are not.
  • Claim & Evidence — the W3C VC wrapper. PDTF reuses vc:Credential, vc:Issuer, vc:Holder, vc:Verifier — we do not mint our own.
  • Financial / Legal — subject-matter facets, not concepts. Apply as dcterms:subject tags on individual concepts where useful, not as schemes.

Worked example: address

"Address" appears in 10 overlays. In most contexts it is exactly the same concept; in Estate Agency it is subtly different (a marketing label, not a registered identifier). The taxonomy makes that distinction explicit — and avoids minting redundant URIs.

--- config: layout: elk --- flowchart LR accTitle: SKOS concept scheme membership for pdtf:address accDescr: The shared pdtf:address concept belongs to multiple schemes via skos:inScheme. Estate Agency's pdtf-ea:marketingAddress is a separate concept because its meaning differs, linked back to the core via skos:closeMatch. cAddress["pdtf:address"]:::info eaMarketing["pdtf-ea:marketingAddress"]:::data CORE[("Core scheme")]:::user EA[("Estate Agency scheme")]:::user CONV[("Conveyancing scheme")]:::user PDS[("Property Data Services scheme")]:::user LEND[("Mortgage Lending scheme")]:::user SURV[("Surveying scheme")]:::user cAddress -->|"skos:inScheme"| CORE cAddress -->|"skos:inScheme"| EA cAddress -->|"skos:inScheme"| CONV cAddress -->|"skos:inScheme"| PDS cAddress -->|"skos:inScheme"| LEND cAddress -->|"skos:inScheme"| SURV eaMarketing -->|"skos:inScheme"| EA eaMarketing -.->|"skos:closeMatch"| cAddress
The shared pdtf:address concept (blue) belongs to every scheme it applies in via skos:inScheme — one URI, many memberships. The context-specific variant pdtf-ea:marketingAddress (orange) is minted only because Estate Agency's meaning differs from the core; skos:closeMatch records the kinship. Schemes are drawn as cylinders.

Rule of thumb

  • Same meaning across N contexts → define the concept once (in pdtf:CoreScheme) and list every context it lives in via skos:inScheme. SKOS permits a concept to belong to many schemes.
  • Meaning genuinely differs → mint a context-specific concept and link it to the core concept with skos:closeMatch (or broader / narrower if the relationship is hierarchical).
  • Never mint context-specific concepts that skos:exactMatch back to the core — that is just two URIs for one concept, which the unique-name principle forbids.
@prefix skos:      <http://www.w3.org/2004/02/skos/core#> .
@prefix pdtf:      <https://w3id.org/opda/pdtf/concept/> .
@prefix pdtf-ea:   <https://w3id.org/opda/pdtf/context/ea/concept/> .
@prefix scheme:    <https://w3id.org/opda/pdtf/scheme/> .

# Define address ONCE — list every scheme it belongs to
pdtf:address  a skos:Concept ;
    skos:prefLabel "Address"@en ;
    skos:definition "A postal address identifying a building or land parcel."@en ;
    skos:inScheme  scheme:Core ;
    skos:inScheme  scheme:Conveyancing ;
    skos:inScheme  scheme:PropertyDataServices ;
    skos:inScheme  scheme:MortgageLending ;
    skos:inScheme  scheme:Surveying .

# Mint a separate concept ONLY when the meaning genuinely differs
pdtf-ea:marketingAddress  a skos:Concept ;
    skos:prefLabel  "Marketing address"@en ;
    skos:inScheme   scheme:EstateAgency ;
    skos:closeMatch pdtf:address ;
    skos:scopeNote  "Approximate — may exclude flat numbers; not the registered title address."@en .

The result: one URI for the shared concept, one extra URI only where the semantics actually diverge. A SPARQL query asking "what address concepts apply in Conveyancing?" returns the single pdtf:address. The same query against Estate Agency returns pdtf-ea:marketingAddress — and a follow-up closeMatch hop discovers it's a near-synonym of the core address concept.

URI strategy

ResourceURI patternExample
OWL classhttps://w3id.org/opda/pdtf/term/{TitleCase}pdtf:Property
Core SKOS schemehttps://w3id.org/opda/pdtf/scheme/corepdtf:CoreScheme
Core SKOS concepthttps://w3id.org/opda/pdtf/concept/{camelCase}pdtf:address
Context SKOS schemehttps://w3id.org/opda/pdtf/context/{ctx}/schemepdtf-conv:Scheme
Context SKOS concept (only when meaning differs)https://w3id.org/opda/pdtf/context/{ctx}/concept/{camelCase}pdtf-ea:marketingAddress
Enum SKOS schemehttps://w3id.org/opda/pdtf/enum/{name}/schemepdtf-states:Scheme
Enum SKOS concepthttps://w3id.org/opda/pdtf/enum/{name}/concept/{slug}pdtf-roles:Buyer

The OWL term namespace (/term/) and the SKOS concept namespace (/concept/) are kept distinct so the same label can serve both roles without URI collision — pdtf:Property (the class) is not the same resource as pdtf:property (the concept).

Why multiple schemes, not one

A bounded context is, by Eric Evans's definition, a linguistic boundary: a term means what it means inside the context, and reconciling it with another context is an explicit modelling step. skos:ConceptScheme formalises exactly that — it is the right SKOS construct for "this is where this term is at home." When the same concept genuinely does mean the same thing in multiple contexts, SKOS lets it sit in multiple schemes (skos:inScheme is many-to-many); when meaning diverges, the mapping relations (closeMatch, broader, narrower) carry the reconciliation that context-map patterns describe at the DDD layer.

A single flat scheme cannot express that "address" is the same concept in Conveyancing and Property Data Services but a near-synonym ("marketing address") in Estate Agency — it either collapses them (losing context fidelity) or duplicates them with no link (losing the reconciliation). Multiple schemes with multi-membership and explicit mappings is the SKOS-native way to model what we already say in the bounded-contexts page.

Next work

  1. Mint the scheme URIs — Core, 6 contexts, and the initial 4 enum schemes (11 schemes to start) — and update business-glossary.ttl so each concept declares its skos:inScheme — multi-valued for shared concepts.
  2. For each of the 389 cross-context concepts, decide: shared (one URI, multiple skos:inScheme), genuinely-variant (separate URI + skos:closeMatch), or hierarchical (skos:broader / narrower). Start with address, name, email, dateOfBirth.
  3. Draft the first enumeration schemes: form types, search types, transaction states, participant roles. Each is small (≤20 concepts) and self-contained.
  4. Hand the structural classes (Property, Participant, Document, Transaction, Form, Search) over to the OWL ontology, and the state-machine transitions over to PROV-O activities.
  5. Land the cross-scheme mapping file at source/00-deliverables/semantic-models/mappings/cross-scheme.ttl (the empty folder is already there).
  6. Wire the existing data browser on Business glossary to filter by scheme and by scheme family.

Comments

Loading comments…