Chapter 9. The Mismatches

RDF is painfully simplistic, but it allows you to work with real-world data and problems that are horribly complicated.

— Dan Brickley and Libby Miller, foreword to Validating RDF Data

Chapter 8 put both halves of the argument into theorem form: every application has the derived form, and the deployed standards fill it. That invites suspicion. An exact match to a deployed stack looks retrofitted until the mismatches are listed openly, so this chapter lists them. The fit is not exact. There are two mismatches between the model Part II forced and the standard Part III named, and two more between the standard and the platform that ships it, the browser. Each is located; the first two are measured (Props. 9.1–9.2), and one of them is turned into a prediction the standard later honored. Part IV holds everyone else’s models to the same test.

Mismatch one: the unnamed entities

RDF permits facts about entities with no name — blank nodes. Nothing in Chapter 5 forced them: the derivation minted a fresh URI wherever it needed an entity, because minting a fresh URI costs nothing. So blank nodes are surplus, and the surplus has a precise reading. A graph containing _:b asserts that something exists with these properties; RDF’s own semantics says exactly this: simple entailment treats blank nodes as existential variables. The extension is well-motivated. Entities routinely exist before anyone names them. A form not yet submitted and an observation not yet reconciled each describe an entity that has no name. So a model that forbade the unnamed would fail R1 at the margins of every domain.

The cost can be stated exactly. Write ⊕ for the merge of two states.

Prop. 9.1. Over ground facts, merge is plain set union (⊕ = ∪) and Chapter 5’s four merge laws hold on the nose: totality, order-freedom, idempotence, atomicity (B-2a–d). With blank nodes, idempotence and atomicity hold up to logical equivalence, and only up to logical equivalence.

Proof — merging a graph with itself doubles the existentials: equivalence survives, identity does not.

Blank nodes are scoped to their graph, so composition must standardize them apart: s ⊕ s carries two copies of each existential. The result asserts nothing new (it entails s and is entailed by it), so s ⊕ s ≡ s. But as a set of atoms it is strictly larger, so s ⊕ s ≠ s. B-2c survives semantically and fails syntactically. Atomicity bends the same way: an atom containing a blank node means something only together with the atoms sharing its variable, so self-containedness holds per connected component, no longer per atom. Restoring identity from equivalence costs exactly two computations: canonical labeling (standardized in 2024 as RDFC-1.0, deterministic, with adversarial worst cases the spec itself documents) and redundancy elimination, which is coNP-complete in general. ∎

That is the bill for anonymity, and it falls exactly on the party that chose anonymity. If you name your entities, state composes by set arithmetic. If you leave them unnamed, composition becomes theorem-proving in miniature, and it lands precisely at the seam where Chapter 6 put canon. The deployed stack’s own list idiom shows the cost: encode an ordered collection as a chain of unnamed cells and every link carries the cost of anonymity. Order is the recurring case. If you state order as facts, using one rank fact per member as Chapter 3’s opening example did, then order merges like any other facts. If you fold order into shape instead, you have the chain just described, and the union of two chains is not a chain, so the order does not merge at all.

Mismatch two: the fourth position

The web adds one requirement that Chapter 5 never imposed. R1–R3 govern facts about the world, and the web also carries claims about those facts: one source asserts a fact and another disputes it, and the web records provenance, retraction, and trust. Call it R4:

R4 — Attribution. Facts about who asserts facts.

Prop. 9.2. The arity-minimal state model satisfying R1–R4 is 𝒫(I × Fact) — quads.

Proof — set union forgets who contributed; reification attributes only descriptions; one position repairs it.

Union erases contribution: B-2d says atoms(s ⊕ s′) = atoms(s) ∪ atoms(s′), and a set union keeps no record of which side an element came from. So within 𝒫(Fact), “who asserted this atom” is unrecoverable by construction — attribution lives in the history of the state, and states-not-histories is what B-2c chose. Reification (the standard’s device of describing a fact in triples of its own) does not escape either: it attributes only a description of the fact. The described fact is then either also present as a plain atom or absent. If present, it is asserted outright and the attribution is defeated. If absent, it is attributed but never stated, quoted rather than asserted. The minimal repair types the atom as a pair (source, fact). The source position must refer across parties, hence lies in I; this is R3’s argument (condition B-3 in Appendix B), verbatim. One extra position suffices, because attribution of attributions is more quads, not more positions. Rerun B.1–B.3 over the retyped atom: 𝒫(I × I × I × (I ∪ V)), merge still union. ∎

Here the mismatch becomes a prediction. The 1999 core standardized triples. The deployed stack then grew exactly the fourth position: named graphs, RDF datasets, TriG (their text notation), standardized in 2014. The graph name is a URI, so attribution itself dereferences. A derivation that merely matched the 1999 core could be coincidence. But the derivation requires attribution, which the 1999 core did not satisfy, and the standard’s own later extension added exactly the position attribution needs. A derivation that anticipates the artifact’s next move is tracking the requirements, not copying the artifact. The fourth position exists, but the standard did not fix what the graph name means, and its semantics is still argued about. The prediction is structural, and claimed as nothing more. (Annotation syntaxes such as RDF 1.2’s triple term, by contrast, only re-serialize what reification already expressed. They are a convenience, because syntax is not a property and Part IV’s audit table scores properties.)

Mismatch three: the abandoned seam

Chapter 6’s crossing needs two pieces: a canonical serialization and a declarative tree-transformation language. The deployed stack had both, and the transformation language (XSLT) was standardized in 1999 and shipped in every browser. The platform then froze it at that 1999 revision for a quarter of a century and, as of this writing, is scheduled to remove it outright. So this mismatch is not a gap in the standards: the technology existed, and the platform stopped maintaining it. This is the evidence Chapter 6 promised: the graph-to-tree crossing needs no invention, only upkeep of software that already existed. The platform declined that upkeep, and the industry built, many times over, the compensating machinery Part IV measures.

Stated generally, that is the book’s practical thesis: what separates the modern web from the derived one is abandoned technology, a maintenance failure rather than a research problem. And the failure is the platform’s, not the language’s: XSLT 3.0 (2017) runs in every current browser through SaxonJS. Its IXSL extension binds browser events to template rules, so Chapter 7’s mobility of evaluation is deployed today and interactivity stays declarative. From userland, a vendor performs the maintenance the platform dropped.

Mismatch four: the write-side last mile

Forms, run backwards, want submissions that denote deltas (Prop. 7.2). The W3C Recommendation stack stops one step short: SPARQL Update carries the delta, but HTML forms speak application/x-www-form-urlencoded, and no recommendation bridges the two. The bridge exists as a community spec, RDF/POST. It flattens the triple positions into form keys (su, pu, ou, ol, …: subject, predicate, object, literal), so that a plain HTML form, with no script, submits a graph. It adds no new data model; it is an encoding of the derived model into the form media type the web already ships. Its non-standardization is a remaining gap on the write side. (Disclosure: the spec is maintained by the author’s company, building on Sergei Egorov’s original draft. Chapter 19 shows it at work.)

The inventory

Four mismatches, then:

mismatch seam resolves as
the unnamed entities (Prop. 9.1) model ↔︎ standard a motivated extension, its cost computable and falling on whoever chose anonymity
the fourth position (Prop. 9.2) model ↔︎ standard a prediction the standard later honored
the abandoned seam standard ↔︎ platform abandonment — maintenance, never research
the write-side last mile standard ↔︎ platform a bridge specified, never standardized

The four mismatches. The derivation meets the world at two seams: the model (Part II) against the standard (Part III), and the standard against the platform that ships it. At the model–standard seam (Props. 9.1–9.2): the standard permits unnamed entities the model never required, and the standard’s fourth position honors a requirement the model missed. At the standard–platform seam: the platform abandoned a technology it had shipped, and a bridge that was specified but never standardized. Fixing either platform mismatch requires no new invention, only maintenance and standardization.

None of these mismatches invalidates a proposition from Part II. And listing them matters: an audit is credible only if the auditor’s own defects are on record first. With the inventory complete, Part IV applies the same requirements to other architectures.