OB extraction — 7-stage plan
De OB-ingest staat momenteel op SRU-metadata-only: titles + Dublin Core in canonical.documents, geen body, geen bijlagen, geen LVBB-cross-link. Voor BOPA-toetsing, retrieval over tekst, en versie-chains heb je meer nodig. Het 7-stage plan in project_ob_extraction.md (memory, 2026-05-01) beschrijft hoe.
OB-structuur — drie lagen
Layer 1 — Publication wrapper (welk "blad"):
stb-Staatsblad ·stcrt-Staatscourant ·trb-Tractatenbladgmb-Gemeenteblad ·prb-Provincieblad ·wsb-Waterschapsblad ·bgr-Blad GRblg-Standalone bijlage (first-class object, citable from many bekendmakingen)
Layer 2 — Publication regime (twee coexistierende XML schemas):
- OP-XML (legacy, pre-2024 + non-Ow): XSDs op
repository.officiele-overheidspublicaties.nl/Schema/OP/. Body =<officiele-publicatie>→<lichaam>met<bijlage>,<illustratie>,<externe-verwijzing>,<intern-verwijzing>,<eli:related>,<dcterms:isReferencedBy>. - STOP-IMOP (Omgevingswet, 2024-01-01+): Roots
<data:OfficielePublicatie>(besluit) en<tekst:RegelingCompact>(regeling). Bijlagen als<tekst:Bijlage>blocks. References viadata:TekstReferentie(typed AKN / JCI / URI),IntIoRef(intra-pub),ExtIoRef(cross-pub AKN). Mutations:data:RegelingMutatie.
Layer 3 — "Real document" location varies by document type:
| Doc type | "Echte document" leeft in |
|---|---|
| Omgevingsplan | LVBB regeling expression (al ingest via DSO) |
| Omgevingsvisie | Bijlage in OB of LVBB |
| Beleidsregel / verordening (non-Ow) | Body van bekendmaking + CVDR |
| Bestemmingsplan (pre-Ow) | DSO/IMRO-infrastructuur (ruimtelijkeplannen.nl, IMRO ID) |
| Vergunning / projectbesluit | Bekendmaking-body zelf |
Bijlage anatomie
Elke publicatie levert manifest.xml lijstend de resources (mime, role, href onder zoek.officielebekendmakingen.nl/{pub-id}/{filename}). Format-mix: PDF ~90% (soms scan-only, OCR nodig), GML voor werkingsgebieden (DSO handelt deze al af voor Ow-plannen), GeoTIFF, SVG-illustraties, occasional XLSX/DOCX.
Failure-modes:
- Name-only refs (pre-2018) — geen URL, alleen bestandsnaam
- Cross-system bijlagen op ruimtelijkeplannen.nl — buiten OB
- Regeling-bijlagen versioned vs besluit-bijlagen one-shot — verschillende lifecycle
De zeven stages
| Stage | Doel | Belangrijkste tabellen / code |
|---|---|---|
| 0 | SRU schema-completeness — OfficielePublicaties-connection + w.* / cd.* field-parsing aan KoopSruClient. Inclusief bekendmakingBetreffendePlan. | KoopSruClient.ts, SruService.ts |
| 1 | Body-fetch — metadata.xml + body XML + manifest.xml; cold storage. | cold.bekendmaking_raw, cold.bekendmaking_manifest, cold.bekendmaking_body |
| 2 | Body-parsing — dual OP-XML + STOP-IMOP, unified write-target. | canonical.bekendmaking_references reference-graph |
| 3 | Bijlage-discovery + acquisition. PDF / GML / SVG / DOCX format-dispatch. Standalone blg- krijgen eigen rij + reference-rijen. | Object store + parent_document_id op canonical.documents |
| 4 | OCR voor scan-only PDFs. Recommend: Tesseract first, paid OCR opt-in voor BOPA-critical. | extraction_confidence flag |
| 5 | LVBB regeling-resolution (Ow-only). Cross-link naar bestaande DSO dso_artikel, never re-ingest. | canonical.bekendmaking_regeling_links |
| 6 | Pre-Ow IMRO-resolution. Wire version_of across bekendmaking↔bestemmingsplan boundary. | extends bestaande IMRO chain |
Twaalf open beslissings-punten
Per de research-memo, samengevat:
- Cold storage shape: raw + parsed.
- Manifest fetch policy: always.
- Blob store: object store keyed by sha256, niet BYTEA.
- OCR: Tesseract default; paid opt-in voor BOPA-critical.
- Pipeline shape: twee parsers, één schema.
- LVBB: cross-link, geen re-ingest.
- Standalone
blg-: eigen rij + reference-rijen. - Pre-Ow bestemmingsplan-bijlagen: laat aan DSO/IMRO.
- Versioning:
bijlage_kindkolom. - Taxonomie v1 interactie: parent krijgt
bekendmakingprimary + onderliggende instrument secondary; bijlage krijgt het instrument als primary. - Crawl rate: 5 req/s + backoff.
- Deferred: signed-PDF verification, geo tile pyramid, citation-graph beyond hop-1, image-bijlage symbol recognition.
Hoe te gebruiken bij beslissingen
- Wanneer een feature document-content nodig heeft buiten metadata (BOPA toetsing, retrieval over text, version chains), check welke stage(s) eerst gedaan moeten worden; paper niet over met regex op titels.
- Voor Ow-plannen: het "echte document" is de regeling-expressie in DSO/LVBB —
canonical.dso_artikel-rijen zijn al er, de join vanuit bekendmaking is wat ontbreekt. - Voor pre-Ow-plannen: IMRO is het thuis — zelfde pattern, andere infrastructuur.
- De 7-stage split is gated by clear handoffs — implementeer Stage N vóór Stage N+1; geen overslaan.
- Companion van taxonomy v1 (issue #4114): zodra OB-extractie landt, krijgt elk recovered document four-axis-tagging via taxonomy's pattern matcher.
Onderliggende docs
project_ob_extraction.md(memory) — origineel research draft v0docs/handoffs/2026-05-01-...— vroege FRBR-context- KOOP STOP standaard:
https://koop.gitlab.io/STOP/standaard/index.html - OP XSDs:
https://repository.officiele-overheidspublicaties.nl/Schema/OP/