Inlezen omgevingsplannen XML's in postgres

Hoi,

Ik probeer in een ETL proces omgevingsplannen weg te schrijven naar mijn postgres db. Daarvoor gebruik ik het liefste ogr2ogr. Vorige week had ik een vraag over GML’s en GFS-en. Nu gaat het me om de XML’s zoals ambtsgebieden, divisies, regelingsgebieden, etc.

Als ik XML bestanden wegschrijf met de XSD van IMOW v2 (TPOD/xmlschema/v2.0.0 at master · Geonovum/TPOD · GitHub), loop ik tegen een probleem aan. Ogr2ogr lijkt de identificatie van het object niet te kunnen vinden met behulp van de XSD (-oo XSD=./src/datasources/dso/xsd/IMOW/locatie/IMOW_Locatie.xsd):

Dit is een ambtsgebied uit een willekeurig omgevingsplan waar het al misloopt:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ow-dc:owBestand xmlns:rol="http://www.geostandaarden.nl/imow/regelsoplocatie" xmlns:schemaLocation="http://www.geostandaarden.nl/imow/bestanden/deelbestand https://register.geostandaarden.nl/xmlschema/tpod/v2.0.0/bestanden-ow/deelbestand-ow/IMOW_Deelbestand.xsd" xmlns:rg="http://www.geostandaarden.nl/imow/regelingsgebied" xmlns:da="http://www.geostandaarden.nl/imow/datatypenalgemeen" xmlns:l="http://www.geostandaarden.nl/imow/locatie" xmlns:sym="http://www.geostandaarden.nl/imow/symbolisatie" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:kaart="http://www.geostandaarden.nl/imow/kaart" xmlns="http://www.geostandaarden.nl/bestanden-ow/manifest-ow" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ow-dc="http://www.geostandaarden.nl/imow/bestanden/deelbestand" xmlns:ga="http://www.geostandaarden.nl/imow/gebiedsaanwijzing" xmlns:sl="http://www.geostandaarden.nl/bestanden-ow/standlevering-generiek" xmlns:p="http://www.geostandaarden.nl/imow/pons" xmlns:regels="http://www.geostandaarden.nl/imow/regels" xmlns:ow="http://www.geostandaarden.nl/imow/owobject" xmlns:vt="http://www.geostandaarden.nl/imow/vrijetekst" xmlns:op="http://www.geostandaarden.nl/imow/opobject"> <sl:standBestand> <sl:dataset>Onbekend</sl:dataset> <sl:inhoud> <sl:gebied>Onbekend</sl:gebied> <sl:leveringsId>Onbekend</sl:leveringsId> <sl:objectTypen> <sl:objectType>Ambtsgebied</sl:objectType> </sl:objectTypen> </sl:inhoud> <sl:stand> <ow-dc:owObject> <l:Ambtsgebied> <l:identificatie>nl.imow-gm0718.ambtsgebied.c0eb1609629d411891fa663df96613fd</l:identificatie> <l:noemer>Ambtsgebied Gemeente Vlissingen</l:noemer> <l:bestuurlijkeGrenzenVerwijzing> <l:BestuurlijkeGrenzenVerwijzing> <l:bestuurlijkeGrenzenID>GM0718</l:bestuurlijkeGrenzenID> <l:domein>NL.BI.BestuurlijkGebied</l:domein> <l:geldigOp>2023-01-01</l:geldigOp> </l:BestuurlijkeGrenzenVerwijzing> </l:bestuurlijkeGrenzenVerwijzing> </l:Ambtsgebied> </ow-dc:owObject> </sl:stand> </sl:standBestand> </ow-dc:owBestand>

Als ik zelf eerst een tabel aanmaak en daar de identificatie-kolom nullable maak, verschijnen er twee rijen in de db. Dat zijn echter rijen van hetzelfde en enige ambtsgebied (die naar elkaar verwijzen).

Ik zou die rijen willen combineren en/of gewoon de standaard XSD definitie willen kunnen gebruiken. Wat moet ik daarvoor doen?

Hier is ook het ambtsgebied.xml in leesbaarder formaat:

De standaarden van de Omgevingswet zijn best complex. Eventjes een omgevingsplan in een relationele database als PostgreSQL in zijn volledigheid en bruikbaar inlezen is een flinke klus. Naar mijn inschatting gaat dat niet goed lukken zonder daarvoor te programmeren.

Daarentegen is het inlezen van een omgevingsplan in een xml-database (zoals BaseX) een fluitje van een cent (next-next-finish).

Wellicht kun je aangeven wat je precies wilt doen nadat de boel is ingelezen. Dan kunnen we je beter helpen.

Dank voor je reactie, Marco. Ik wil de omgevingsplannen geometrisch kunnen benaderen. Op basis van nog te bepalen criteria wil ik bijvoorbeeld alle locaties kunnen ophalen waar een activiteit van toepassing is. Deze ETL staat in een zelfgebouwde straat - het gaat me niet om een one-off ogr2ogr proces. Van een Postgres database kan ik niet afwijken.

Waar ik tegenaan loop is dat ik het xsd schema waarnaar ik in mijn vorige bericht linkte niet aan de praat krijg. Ogr2ogr accepteert één of meerdere expliciet gedefinieerde xsd bestanden als input (maar dus niet een hele map). Zou ik alle xsd bestanden uit de hele map moeten gebruiken? Of is er een die als ingang geldt voor het hele schema?

PS: Het xsd schema werkt in zoverre dat het wel tabellen aanmaakt voor de data die ik aanwijs (de ambtsgebieden van één melding om te testen). Maar de data wordt vervolgens niet in de tabel gezet. Kan dat aan mijn gebruik van de xsd’s liggen? Als ik andere xsd bestanden als ingangspunt neem, krijg ik de error die ik in mijn eerste bericht beschreef

Een omgevingsplan bestaat uit een samenhangende set xml-bestanden, waarbij de geometrie is opgenomen in een speciaal setje bestanden (de bij elkaar horende xml’s en gml’s). In mijn beleving kun je zo’n omgevingsplan niet op een integrale en samenhangende manier inlezen mbv ogr2ogr.

Ook niet als het je lukt om het schema probleem op te lossen.

Dat gezegd hebbende, met deze set xsd bestanden heb ik succes met het valideren van IMOW-omgevingsplanbestanden mits ik zoiets als het volgende opneem in de namespace declaratie:

<ow-dc:owBestand 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xlink="http://www.w3.org/1999/xlink" 
    xmlns:ga="http://www.geostandaarden.nl/imow/gebiedsaanwijzing" 
    xmlns:da="http://www.geostandaarden.nl/imow/datatypenalgemeen" 
    xmlns:k="http://www.geostandaarden.nl/imow/kaart"
    xmlns:sl="http://www.geostandaarden.nl/bestanden-ow/standlevering-generiek" 
    xmlns:ow-dc="http://www.geostandaarden.nl/imow/bestanden/deelbestand" 
    xmlns:ow="http://www.geostandaarden.nl/imow/owobject"
    xmlns:op="http://www.geostandaarden.nl/imow/opobject"
    xmlns:rol="http://www.geostandaarden.nl/imow/regelsoplocatie" 
    xmlns:l="http://www.geostandaarden.nl/imow/locatie" 
    xmlns:r="http://www.geostandaarden.nl/imow/regels" 
    xsi:schemaLocation="http://www.geostandaarden.nl/imow/bestanden/deelbestand ../xsd/bestanden-ow/deelbestand-ow/IMOW_Deelbestand.xsd">

Het gaat hierbij dus om het xsi:schemaLocation attribuut.

Dank voor je suggestie. Na een boel gehannes heb ik nu toch resultaat door niet IMOW_Deelbestand.xsd als schema te gebruiken, maar per xml klasse het betreffende schema verder uit te specificeren. Bijvoorbeeld: IMOW_Locatie.xsd bij ambtslocaties, IMOW_RegelsOpLocatie.xsd voor regelsoplocatie, etc. Wat er mis gaat in het deelbestand is me niet duidelijk, maar dit voldoet voor mij nu. Verder zaten er fouten in mijn ogr2ogr commando/configuratie.

Het zou fijn zijn als je je oplossing hier deelt. Dan hebben anderen er ook wat aan. En dat is nu precies de bedoeling van een forum als dit.

Mijn oplossing deelde ik al: “[Ik heb] nu toch resultaat door niet IMOW_Deelbestand.xsd als schema te gebruiken, maar per xml klasse het betreffende schema verder uit te specificeren. Bijvoorbeeld: IMOW_Locatie.xsd bij ambtslocaties, IMOW_RegelsOpLocatie.xsd voor regelsoplocatie, etc. Wat er mis gaat in het deelbestand is me niet duidelijk, maar dit voldoet voor mij nu.”

Voor de toekomstige lezer die ogr2ogr wil gebruiken: XML kun je inlezen met de GMLAS driver. Die wil een XSD input hebben waarvoor je dus niet het deelbestand kunt gebruiken maar per bestandstype een andere (sub-)XSD uit de link uit mijn eerste post moet gebruiken.
De documentatie hielp mij bij het begrijpen en parsen van de xml structuur: Informatiemodel Omgevingswet (IMOW)