Schema-substraat — overzicht
Het substraat staat op drie pijlers, elk uitgewerkt in eigen sub-pagina:
1. Dutch-legal noun-families (uitwerking)
Postgres-schema's heten naar het Nederlands-juridische zelfstandig naamwoord dat ze huisvesten. Niet core of entities of data, maar instrument.*, besluit.*, publicatie.*, gezag.*, uitspraak.*. De naam is een legale claim — instrument.* claimt dat de tabellen erin alleen Awb 1:3 lid 1 AVV-achtige entiteiten houden; besluit.* claimt Awb 1:3 lid 2.
Technische schema's (catalogus.*, herkomst.*, verbinding.*, tekst.*, wet.*) doen geen legale claim — daar zit infrastructuur (catalogi, audit-logs, junctions, content-blobs, wet-corpus).
Naam-regel: schema = enkelvoud, hoofdtabel = Nederlandse meervoud (instrument.instrumenten, besluit.besluiten).
2. Two-stack FRBR (uitwerking)
FRBR (Functional Requirements for Bibliographic Records) onderscheidt vier niveaus: Work, Expression, Manifestation, Item. Voor wetgeving en beleidsdocumenten in Nederland werkt dat alleen als je twee parallelle pijlers modelleert:
Decision-stack: Instrument-stack:
besluit.besluiten (Work) instrument.instrumenten (Work)
└── decision_expressions └── instrument.versies (Expression)
└── publicatie.publicaties └── instrument.manifestaties
(Manifestation) (Manifestation)Een vaststellingsbesluit (decision-stack) en het omgevingsplan dat erdoor wordt vastgesteld (instrument-stack) zijn juridisch verschillende dingen met verschillende levensduren. Eén OB-pagina kan ze beide gelijktijdig bekendmaken — dat is geen reden om ze in één tabel te lumpen.
3. Anker-protocol (uitwerking)
Elke schema-claim — elk schema-naam, elke gesloten-vocab-rij — moet ankeren op een corpus-geverifieerd wet-artikel. Hetzij in wet.artikelen (BWBR-corpus), hetzij in wet.stop_paragrafen (STOP-paragrafen, krachtens RSPO aangewezen).
Géén "ik denk dat dit betekent X". Géén "in de praktijk noemen we dit Y". De catalogus-rij catalogus.expression_aarden(id='geconsolideerd') heeft een anker-rij in catalogus.legal_anchors die wijst naar Bw art. 19 — met de corpus_hash van de geverifieerde artikel-tekst op het moment van vastlegging. Drift-detectie op corpus_hash zorgt dat een wetstekst-wijziging niet ongemerkt voorbij gaat.
Zonder dit anker-protocol bouwt het schema op vermoedens. Met het protocol staat elke claim op een verifieerbare basis — en blokkeert de validator in CI elke PR die een niet-anchored vocab-uitbreiding toevoegt.
Waarom deze drie?
De drie pijlers ondersteunen elkaar:
- Noun-families maken de legale claim lezbaar in de schema-structuur — een ontwikkelaar ziet
besluit.besluitenen weet wat erin staat. - Two-stack FRBR zorgt dat die legale claim niet wordt vervaagd door rechtshandelingen (besluit) en de inhoud die ze creëren (instrument) in dezelfde tabellen te stoppen.
- Anker-protocol zorgt dat de legale claim niet alleen lezbaar is maar ook toetsbaar — élke uitbreiding moet zich verantwoorden tegenover de wet-tekst.
Hieruit volgen alle andere keuzes: provenantie als 1-N junction (niet als rendering-classificatie), Expression-aard als gesloten enum (niet als vrije tekst-kolom), publicatie-handeling-soorten als junction (niet als enum-op-publicatie-rij), enzovoorts.
Onderliggende ADRs
- ADR-0031: Two-stack FRBR (decisions + instruments)
- ADR-0032: Two-stack FRBR migration plan
- ADR-0033: Schema noun-families + legal anchoring
- ADR-0036: STOP-standaard als anker-bron krachtens RSPO