Skip to content

Schema-substraat — overzicht

Het substraat staat op drie pijlers, elk uitgewerkt in eigen sub-pagina:

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 claiminstrument.* 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.besluiten en 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

Intern handboek — niet voor externe publicatie