PDTF schema RML schema–ontology verification

    Ontology and Schema are two independent accounts derived from the same PDTF schema data — one in OWL/RDF, one in JSON Schema. This section documents the legacy RML schema–ontology verification mapping: a machine-checked bridge between them, tracing every ontology term back to the exact schema location it was minted from, and every schema location forward to the ontology term (if any) that represents it.

    This is not the SPDTF cross-context semantic mapping, the Property Pack item-to-construct coverage link, a JSON-LD context, or a runtime transformation. Those distinct meanings are qualified in the SPDTF mapping guide.

    Why a second provenance mechanism

    Every opda: term already carries a dct:source citation to its authoritative origin (see Decision provenance). But dct:source is single-valued — it can answer which one source defines this term's meaning, but not everywhere this term's data actually occurs, and nothing about that convention alone independently checks that a citation resolves to something real.

    ODR-0035 adopted RML (RDF Mapping Language) to close that gap: a second, independent, bidirectional trace, checked two ways — every schema location the mapping cites resolves in the real PDTF v3 schema, and every ontology term it addresses is a real, declared opda: term. The two mechanisms are expected to usually agree (68 of 73 directly comparable predicates did, when checked) but are verified independently and are not required to. The audit that motivated this caught real, pre-existing defects — 8 stale-path and 16 unresolved dct:source citations — that the ontology generator's own emission process had never verified.

    Documentation, not ETL

    The mapping consumes a PDTF v3 transaction instance and emits RDF purely to verify the schema↔ontology correspondence — it is not, and must not become, an executable pipeline against real transaction data (ODR-0035 §Rules). No instance data is required for, or produced by, the primary validation gate.

    The mapping, by the numbers

    MetricCountSource
    rr:TriplesMap rules158triplesmap-index.json — live
    Real predicateObjectMaps (owned by a TriplesMap)438triplesmap-index.json — live
    Domain-module resources mapped466 / 469 (99.4%)build/final-gap.json, as of 2026-07-05 — see Coverage & gaps

    The first two rows are counted live from the committed triplesmap-index.json at build time — that file is generated from the mapping via Jena arq (make triplesmap-index), which is also how it distinguishes real predicateObjectMaps from the FNML-nested ones (the mapping file has 526 total predicateObjectMap triples; 88 of those bind FNML function calls, not a schema↔ontology correspondence). The coverage row is not live — it's the output of a separate harness whose build artefacts are gitignored, cited here with its regeneration command on Running & validating. And 469 is the curated domain-module resource count, not the raw 8,458-leaf schema dictionary — see why that's the right denominator.

    See also — a different "mapping"

    JSON-LD mappings is a separate, still-unbuilt workstream: per-overlay @context files for production JSON-LD round-tripping (BASPI v5 first). It solves a different problem for a different audience — this section is the internal, already-largely-complete verification trace; that one is external data-interop tooling yet to be built.

    Explore this section

    Comments

    Loading comments…