Slices, Mappings & Provenance
Beyond the engines, PurRDF carries the plumbing a serious vocabulary or data-pipeline project needs: a slice catalog for organizing authored RDF, an explicit loss ledger for lossy projections, and native codecs for the SSSOM and FnO interchange formats.
The slice catalog
purrdf-slice (re-exported as
purrdf::slice) is tooling for ontology/vocabulary repositories organized as
slices — directories of authored RDF (slices/<group>/<name>/), each
described by a manifest.ttl:
- Catalog — manifest-based discovery (
SliceCatalog::discover), typed slice metadata (SliceRecord,SliceTier), and artifact roles. Slice identity comes from the manifest, not the directory name. - Ownership & dependencies — term-ownership analysis (every declared term has exactly one owning slice), dependency edges with evidence, forbidden-edge rules (extension slices depend only on core), and machine-applicable fix suggestions.
- Content addressing — deterministic artifact digests and cache keys for incremental pipelines.
- Emitters — projection/mapping emitters and lints: prefix maps, JSON-LD contexts, FnO function catalogs, claim views.
True to the rule that PurRDF mints no vocabulary IRIs, every term the slice
framework reads or emits belongs to the caller’s vocabulary: a
SliceVocab is caller-constructed (it has no Default) and threaded through
every public entry point.
use std::path::Path;
use purrdf::slice::{SliceCatalog, SliceVocab};
// Your vocabulary namespace — PurRDF fabricates none.
let vocab = SliceVocab::for_namespace("https://example.org/vocab/");
assert_eq!(vocab.slice_class(), "https://example.org/vocab/Slice");
// Discover every slice under the repository root from its manifest.ttl.
let catalog = SliceCatalog::discover(Path::new("slices"), vocab)
.expect("slices discovered");
for slice in catalog.records() {
println!("{} ({:?})", slice.manifest.slice_iri, slice.manifest.tier);
}
The loss ledger
PurRDF’s projections are allowed to be lossy — but never silently. The kernel
carries a machine-readable RDF↔GTS loss matrix
(generated/rdf-loss-matrix.json,
a generated artifact) and a LossLedger API: when a star-incapable codec
drops reifier bindings, or CSV results drop provenance, the realized count is
recorded and surfaced to the caller. See
Codecs & Determinism and
Result Formats.
Provenance
purrdf-core includes a generic provenance sidecar for the frozen IR —
attribution, origin sets, and per-quad provenance that engines can carry
without polluting the data graph. The SPARQL results extension
(Result Formats) and the SARIF
boundary both resolve these runtime-only provenance ids to public IRIs at
their serialization edges.
SSSOM and FnO
Two native interchange codecs live in the kernel:
- SSSOM — Simple Standard for Sharing Ontological
Mappings mapping-set TSV support
(
SssomMappingSet,SssomMapping, with typed diagnostics), for carrying cross-vocabulary mappings alongside your data. - FnO — a Function Ontology function-catalog codec
(
FnoCatalog,fno_to_quads,fno_to_ntriples), used by the slice emitters to describe function catalogs as RDF.
As with everything else in the toolkit, these are codecs for caller data — PurRDF does not define mappings or functions of its own.
Related
- GTS Graph Transport — the other side of the RDF↔GTS ledger.
- Design Rules & Invariants — the mints-no-IRIs rule in full.