Motivation

In den letzten Monaten kam mehrmals die Frage auf: Wie übersetzte ich eine INTERLIS Transferdatei (*.xtf) in eine andere Sprache, z.B. von Deutsch nach Französisch?

Eine einfache Lösung ist mit der von Claude Eisenhut in Java entwickelten ilid2db Programmfamilie zu arbeiten. Damit kann eine INTERLIS-Transferdatei (itf oder xtf) einem INTERLIS-Modell entsprechend (ili) mittels 1:1-Transfer in eine Datenbank (PostgreSQL/Postgis bzw. GeoPackage) gelesen werden oder aus der Datenbank mittels einem 1:1-Transfer eine solche Transferdatei erstellt werden.

Was die ausführlichen Dokumentation nicht auf den ersten Blick zeigt ist, dass man diesen Mechanismus auch nutzen kann, um eine Transferdatei z.B. nach PostgreSQL auf Deutsch zu importieren, aber dann in eine andere Sprache, konkret Französisch zu exportieren. Konkreter Anlass war der Wunsch im VSA Wiki auch französische Testdatensätze zur Verfügung zu haben und die VSA-DSS auch auf Französisch zu nutzen. Erste Tests zeigten dann aber, dass nicht ganz alle Daten korrekt übersetzt werden, weil die Datenstruktur Siedlungsentwässerung (VSA-DSS) beim Status das Konstrukt ALL OF im Modell verwendet. In der Zwischenzeit ist der Fehler aber behoben (herzlichen Dank an Claude Eisenhut für den Fix und dem Service de l’environnement / Amt für Umwelt, Canton de Fribourg für die Finanzierung)

Schritt für Schritt

Ich habe mir dazu die aktuelle Version ili2pg heruntergeladen (4.9.0 oder neuer) und installiert und mir dann ein kleines Batch-File geschrieben (ich arbeite auf Windows), mit folgendem Header, wo ich meine grunsätzlichen Einstellungen (Datenbank, Passwort, Pfad zur PostgreSQL Version, Pfad zum lokalen INTERLIS Verzeichnis (falls die INTERLIS Modelle wie bei VSA-DSS Release 2015 noch nicht online in einem Repository publiziert sind, siehe ), Port, Host und User festlegen kann:

set db=dss_translate
set pwd=mypassword
set PATH=%PATH%;C:/Program Files/PostgreSQL/12/bin
set ilimodelpath=“C:/Daten/interlismodellverzeichnis/“
set port=5432
set host=localhost
set user=postgres

(Damit alles reibungslos funktioniert müssen alle INTERLIS Modelldateien sowohl in der deutschen wie auch der französischen Version im Modellverzeichnis vorhanden sein.)

um die folgenden Schritte auszuführen:

  1. Erstellen des leeren Schemas (Bespiel DSS_2015_LV95 und das zugehörige französische Modell SDEE_2015_LV95)

java -jar C:/Daten/ili2pg-4.9.0/ili2pg-4.9.0.jar –modeldir %ilimodelpath% –schemaimport –importTid –sqlEnableNull –createEnumTabs –createFk –noSmartMapping –defaultSrsAuth EPSG –defaultSrsCode 2056 –dbhost %host% –dbport %port% –dbdatabase %db% –dbschema vsa_dss_2015_d_f_490 –dbusr %user% –dbpwd %pwd% –log createschema_vsa_dss_2015_d_f_490.log –trace –models DSS_2015_LV95; SDEE_2015_LV95;

Während man normalerweise beim Parameter –models nur eine MODEL Version angibt, braucht man für eine Übersetzung beide Sprachversionen: –models DSS_2015_LV95; SDEE_2015_LV95;

2. Datenimport aus Transferdatensatz deutsch ins Schema

java -jar C:/Daten/ili2pg-4.9.0/ili2pg-4.9.0.jar –disableValidation –import –deleteData –modeldir %ilimodelpath% –trace –sqlEnableNull –createEnumTabs –createFk –defaultSrsCode 2056 –noSmartMapping –dbhost %host% –dbport %port% –dbdatabase %db% –dbschema vsa_dss_2015_d_f_490 –dbusr %user% –dbpwd %pwd% –log datenimportvsa_dss_2015_d_f_490.log C:/Daten/transferdatensatz_2015_d_LV95_T-20210727.xtf

Die Daten sind auf Deutsch im Postgres Schema abgelegt

3. Datenexport (inkl. Übersetzung nach Französisch)

Wichtig hier ist nun die Festlegung der gewünschten Sprache mit den folgenden Parametern: –export –models SDEE_2015_LV95 –exportModels SDEE_2015_LV95

java -jar C:/Daten/ili2pg-4.9.0/ili2pg-4.9.0.jar –modeldir %ilimodelpath% –export –models SDEE_2015_LV95 –exportModels SDEE_2015_LV95 –skipReferenceErrors –sqlEnableNull –createEnumTabs –createFk –noSmartMapping –defaultSrsAuth EPSG –defaultSrsCode 2056 –dbhost %host% –dbport %port% –dbdatabase %db% –dbschema vsa_dss_2015_d_f_490 –dbusr %user% –dbpwd %pwd% –log transferdatensatz_2015_d_LV95_T-20210727_fr.log –trace transferdatensatz_2015_d_LV95_T-20210727_490_fr.xtf

Im erzeugten Transferdatensatz sind nun wie gewünscht alle Daten (mit Ausnahme von Text Attributen (wie Bezeichnung oder Bemerkung) auf Französisch vorhanden.

Anpassungen für Release 2020

Will man dasselbe für VSA-DSS oder VSA-DSS-Mini Release 2020 machen gilt es noch drei Dinge mehr zu beachten:

  1. Erstellen des leeren Schemas

java -jar C:/Daten/ili2pg-4.9.0/ili2pg-4.9.0.jar –schemaimport –importTid –sqlEnableNull –sqlExtRefCols –createEnumTabs –createBasketCol –createFk –noSmartMapping –defaultSrsAuth EPSG –defaultSrsCode 2056 –dbhost %host% –dbport %port% –dbdatabase %db% –dbschema vsa_dss_mini_2020_d_f_490 –dbusr %user% –dbpwd %pwd% –log createschema_vsa_dss_2020_d_f_490.log –trace –models VSADSSMINI_2020_LV95; VSASDEEMINI_2020_LV95;

  • Für Release 2020 lasse ich den lokalen Modellpfad und den Paramter –modeldir %ilimodelpath% weg, weil die Modelle im VSA-Repository verfügbar sind und automatisch von dort bezogen werden. (Achtung: Wenn ich –modeldir drin lasse werden diese übernommen – was die Gefahr birgt, eine veraltete Version lokal gespeichert zu haben)
  • Weil Release 2020 von der Modellstruktur ein TOPIC erweitert, muss beim Export zusätzlich der Basket spezifiziert werden.
  • Das setzt voraus, dass beim Datenimport in Schema, die Basketid mit importiert wird. Dies erreicht man mit dem Parameter –createBasketCol (für Details siehe die Referenzen in der ili2pg Dokumentation).

2. Datenimport aus Transferdatensatz deutsch ins Schema

java -jar C:/Daten/ili2pg-4.9.0/ili2pg-4.9.0.jar –import –importBid –disableValidation –createBasketCol –deleteData –trace –sqlEnableNull –skipReferenceErrors –createEnumTabs –createFk –defaultSrsCode 2056 –noSmartMapping –dbhost %host% –dbport %port% –dbdatabase %db% –dbschema vsa_dss_mini_2020_d_f_490 –dbusr %user% –dbpwd %pwd% –log datenimportvsa_dss_mini_2020_d_f_490.log C:\Daten\transferdatensatz_2020_d_LV95_T-20221019_mini.xtf

  • Und man muss diesen Basket dann im Export im Parameter –baskets spezifizieren: –baskets BASKET1 (wie der Basket benannt ist kann man im Ursprungsdatensatz nachschauen)

3. Datenexport (inkl. Übersetzung nach Französisch)

java -jar C:/Daten/ili2pg-4.9.0/ili2pg-4.9.0.jar –export –models VSASDEEMINI_2020_LV95 –exportModels VSASDEEMINI_2020_LV95 –baskets BASKET1 –skipReferenceErrors –sqlEnableNull –createEnumTabs –createFk –noSmartMapping –defaultSrsAuth EPSG –defaultSrsCode 2056 –dbhost %host% –dbport %port% –dbdatabase %db% –dbschema vsa_dss_mini_2020_d_f_490 –dbusr %user% –dbpwd %pwd% –log transferdatensatz_2020_f_LV95_T-20221019_mini.log –trace transferdatensatz_2020_f_LV95_T-20221019_mini.xtf

Weitere Hinweise:

  • –trace kann man immer weglassen – ist aber hilfreich, wenn etwas nicht wie gewünscht funktioniert, weil damit ausführlichere log Dateien erzeugt werden.
  • –defaultSrsAuth EPSG kann man, soweit ich die Dokumentation verstanden habe, auch weglassen, weil EPSG der Standardwert ist, wenn man den Parameter nicht setzt
  • Alle Transfer- und Testdatensätze VSA-DSS und VSA-DSS-Mini 2020 findet sich hier auf deutsch bzw. französich (Lizenz für VSA-Wiki notwendig – die hier erworben werden kann)

Für Kommentare oder Korrekturen, Hinweise zu eigenen Erfahrungen und Fragen stehe ich gerne zur Verfügung. Gerne biete ich Ihnen die Konversion als Dienstleistung an. Bitte nehmen Sie mit mir Kontakt auf.