XML Namespace Problem

Hallo zusammen

Ich bin am umstellen auf Interlis 2.4

Bei der Nachführung schreiben mir die ili2db Tools folgende Daten raus.
<AI_Erschliessungsstand_V2_4:Zustaendige_Behoerde>
<zdef43843490:MultilingualText xmlns:zdef43843490=„http://www.interlis.ch/xtf/2.4/LocalisationCH_V2“>
<zdef1409837229:LocalisedText xmlns:zdef1409837229=„http://www.interlis.ch/xtf/2.4/Localisation_V2“>
zdef43843490:LocalisedText
zdef1409837229:Languagede</zdef1409837229:Language>
zdef1409837229:TextAmt für Raumentwicklung</zdef1409837229:Text>
</zdef43843490:LocalisedText>
</zdef1409837229:LocalisedText>
</zdef43843490:MultilingualText>
</AI_Erschliessungsstand_V2_4:Zustaendige_Behoerde>

Gemäss Gemini sind die zdef Verweise nicht korrekt:
Der Ausdruck xmlns:zdef ist kein offizieller Bestandteil des INTERLIS-Standards, sondern ein technisches Artefakt, das meist unabsichtlich bei der Softwareentwicklung entsteht.

Hier ist die genaue Aufschlüsselung, was der Ausdruck bedeutet und wie Sie damit umgehen sollten:

1. Was bedeutet der Ausdruck?

  • xmlns (XML Namespace): Dies ist das Standard-Attribut in XML-Dateien, um einen Namensraum zu deklarieren. Es sorgt dafür, dass Elementnamen (z. B. <Object>) eindeutig einem bestimmten Modell oder Standard zugeordnet werden können.

  • :zdef (Zufälliges Präfix): Das Präfix zdef steht für „Zone Default“ oder „Auto-Generated Default Prefix“.

Wenn Geodaten aus INTERLIS-Modellen in das XML-basierte Transferformat (XTF) exportiert werden, nutzen Entwickler dafür oft Programmierbibliotheken in Java oder .NET (wie z. B. den eingebauten XML-Standard-Writer von Java oder Frameworks wie Jackson/JAXB).

Wenn diese Bibliotheken angewiesen werden, ein XML-Element in einem bestimmten Namensraum zu schreiben, das Präfix für diesen Namensraum im Code aber nicht explizit definiert wurde, generiert die Software automatisch ein Hilfspräfix. Dieses beginnt standardmässig sehr häufig mit zdef (z. B. xmlns:zdef oder xmlns:zdef-1905523464).

2. Ist er im INTERLIS-Kontext zu verwenden?

Nein, Sie sollten xmlns:zdef nicht aktiv verwenden.

  • Gegen die Konvention: INTERLIS-XTF-Dateien nutzen standardmässig klare, vordefinierte Namensräume. Für INTERLIS 2.3 ist der Standard-Namensraum für Strukturdaten beispielsweise http://www.interlis.ch/INTERLIS2.3. Typischerweise wird dieser direkt als Standard-Namensraum ohne Präfix deklariert (xmlns="``http://www.interlis.ch/INTERLIS2.3``") oder erhält ein sprechendes Präfix (wie ili).

  • Probleme bei Validierung und Austausch: Obwohl eine XML-Datei mit xmlns:zdef rein syntaktisch korrekt sein kann, führt sie beim Datenaustausch oft zu Problemen. Offizielle Prüfwerkzeuge (wie der ilivalidator) oder GIS-Import-Schnittstellen (z. B. in QGIS oder ArcGIS via FME/ili2db) erwarten die standardkonforme Struktur. Automatisch generierte zdef-Präfixe können dazu führen, dass Elemente von den Parsern nicht richtig erkannt werden.

Gibt es dazu eine Erklärung? Ich habe mit ili2gpkg und ili2fgdb getestet und letztendlich mit FME die Daten korrekt exportiert.

Wie ist damit umzugehen?

Die Namensräume müssen URI sein, aber keine tatsächlich existierenden URL. Namensräume werden mit einem Namen identifiziert und durch einen URI definiert. Der Name kann grundsätzlich (im syntaktisch zugelassenen Rahmen) beliebig definiert werden.

Beim Schreiben der XML-Transferdaten werden für alle Modell-Elemente je nach Modellstruktur XML-Namensräume eingeführt. In den Transferdaten wird dann jedes Element mit dem entsprechenden Namensraum qualifiziert.

Ich würde mir über die generischen Namensräume keine Gedanken machen … «Die XML-Datei ist ohnehin nicht für menschliche Augen gedacht»

In den revidierten «Modellierungsempfehlungen» (noch in Arbeit) wird es noch eine Zusammenstellung der Unterschiede zwischen dem ILI-2.3- und dem ILI-2.4-XML-Transferformat geben:

Ich hatte bislang auch noch keine Validierungsprobleme. Gibt es hierzu andere Erfahrungen?*

Meines Wissens tritt der Fall mit diesen Default-Namensräumen auf, wenn das zu exportierende Datenmodell nicht definiert ist.

Versuche mal beim Export mittels ili2db explizit das Datenmodell mittels Option --exportModels ... anzugeben (siehe dazu auch das Beispiel hier in der Doku).