ilid2db ist eine in Java erstellte Programmfamilie, die zurzeit ili2pg, ili2fgdb, ili2gpkg, ili2ora, ili2mssql, ili2mysql und ili2h2gis umfasst.
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. Folgende Funktionen sind möglich:
- erstellt das Datenbankschema aus einem Interlis Modell
- importiert Daten aus einer Transferdatei in die Datenbank
- exportiert Daten aus der Datenbank in eine Transferdatei
Folgende Transferformate werden unterstützt:
- INTERLIS 1
- INTERLIS 2
- GML 3.2 [1]
Beim Schemaimport (--schemaimport
) wird anhand des INTERLIS Modells das
Datenbankschema angelegt.
Diverse Optionen beeinflussen die Abbildung.
Den Geometrien kann mittels Parameter ein EPSG-Code zugewiesen werden. Die Geometrie-Attribute können optional indexiert werden.
Beispiel:
java -jar ili2gpkg.jar --schemaimport --dbfile mogis.gpkg path/to/dm01av.ili
Der Import (--import
) schreibt alle Objekte (im Sinne der eigentlichen Daten)
der Transferdatei in die Datenbank.
Diverse Optionen beeinflussen, was mit den bestehenden Daten in der DB geschieht.
Area- und Surface-Geometrien werden bei Interlis 1 polygoniert.
Kreisbögen werden als Kreisbögen importiert und somit nicht segmentiert (oder können optional auch segmentiert werden).
Beispiel:
java -jar ili2gpkg.jar --import --dbfile mogis.gpkg path/to/data.xtf
Der Export (--export
) schreibt alle Daten aus der Datenbank in eine
Transferdatei.
Mit weiteren Optionen wird gesteuert, welche Daten aus der Datenbank exportiert werden.
Genau einer der Parameter --models
, --topics
, --baskets
oder --dataset
muss zwingend verwendet werden, um die zu exportierenden DB-Records auszuwählen.
Der Parameter --exportModels
definiert das Export-Modell, indem die Daten
exportiert werden (der Parameter ist also keine Alternative,
sondern ein Zusatz für --models
, --topics
, --baskets
oder --dataset
).
Als Export-Modelle sind Basis-Modelle (also z.B. Bundes-Modell
statt Kantons-Modell) oder übersetzte Modelle (also z.B. DM_IT statt DM_DE) zulässig.
Ohne die Option --exportModels
werden die Daten so wie sie erfasst sind
(bzw. importiert wurden), exportiert.
Geometrien vom Typ Area und Surface werden bei Interlis 1 während dem Export in Linien umgewandelt.
Beispiel:
java -jar ili2gpkg.jar --export --models DM01 --dbfile mogis.gpkg path/to/output.xtf
Die Log-Meldungen sollen dem Benutzer zeigen, was das Programm macht. Am Anfang erscheinen Angaben zur Programm-Version. Falls das Programm ohne Fehler durchläuft, wird das am Ende ausgegeben.:
Info: ili2fgdb-3.10.7-20170823 ... Info: compile models... ... Info: ...export done
Bei einem Fehler wird das am Ende des Programms vermerkt. Der eigentliche Fehler wird aber in der Regel schon früher ausgegeben.:
Info: ili2fgdb-3.10.7-20170823 ... Info: compile models... ... Error: DM01.Bodenbedeckung.BoFlaeche_Geometrie: intersection tids 48, 48 ... Error: ...import failed
Um fehlerhaften Daten zu importieren (um sie danach (z.B. im GIS) zu flicken), muss mindestens die
Validierung ausgeschaltet werden (--disableValidation
). Das DB Schema muss
aber auch so angelegt werden, dass fehlerhafte Werte als Text importiert werden können (--sqlColsAsText
)
bzw. durch NULL
ersetzt werden können (--sqlEnableNull
).
Und die Programmlogik für den Datenimport muss die Fehler
tolerieren (--skipReferenceErrors
und --skipGeometryErrors
), so dass
z.B. eine Referenz auf ein nicht vorhandenes Objekt ignoriert wird.
Um solche Daten zu importieren (um sie danach zu flicken):
java -jar ili2gpkg.jar --schemaimport --sqlEnableNull --sqlColsAsText --dbfile mogis.gpkg path/to/mo.ili java -jar ili2gpkg.jar --import --skipReferenceErrors --skipGeometryErrors --disableValidation --dbfile mogis.gpkg path/to/data.xtf
Bei ITF (Interlis 1): Fehlerhafte AREA Attribute können für
den ganzen Datensatz nicht als Polygone
gelesen werden, weil ein Programm nicht erkennen kann, welche Linien und
Punkte falsch sind (Punkt und/oder Linie zu viel oder zu wenig; Linie zu kurz oder zu lang);
und somit nicht erkennen kann, bei welchem Polygon der Fehler ist.
Dass diese Daten nicht gelesen werden können, hat also nicht in erster Linie
mit der Validierung zu tun, sondern damit, dass aus den Linien+Punkten
keine Polygone gebildet werden können. Die Polygonbildung muss also
ausgeschaltet werden (--skipPolygonBuilding
).
Um solche Daten zu importieren (um sie danach zu flicken):
java -jar ili2gpkg.jar --schemaimport --sqlEnableNull --sqlColsAsText --skipPolygonBuilding --dbfile mogis.gpkg path/to/mo.ili java -jar ili2gpkg.jar --import --skipReferenceErrors --skipPolygonBuilding --skipGeometryErrors --disableValidation --dbfile mogis.gpkg path/to/data.itf
Bei XTF (Interlis 2): Fehlerhafte SURFACE/AREA Attribute können
als Linien (statt als Polygone) eingelesen werden. Die Polygonbildung muss also
ausgeschaltet werden (--skipPolygonBuilding
).
Um solche Daten zu importieren (um sie danach zu flicken):
java -jar ili2gpkg.jar --schemaimport --sqlEnableNull --sqlColsAsText --skipPolygonBuilding --dbfile mogis.gpkg path/to/mo.ili java -jar ili2gpkg.jar --import --skipReferenceErrors --skipPolygonBuilding --skipGeometryErrors --disableValidation --dbfile mogis.gpkg path/to/data.xtf
Das Programm setzt Java 1.8 voraus.
PostGIS: Als Datenbank muss mindestens PostgreSQL 8.3 und PostGIS
1.5 vorhanden sein. Falls das Interlis Datenmodell INTERLIS.UUIDOID als
OID verwendet, wird die Funktion uuid_generate_v4() verwendet.
Dazu muss die PostgreSQL-Erweiterung uuid-ossp konfiguriert sein
(CREATE EXTENSION "uuid-ossp";
). Mit der Option --setupPgExt
erstellt ili2pg die fehlenden notwendigen Erweiterungen.
FileGDB: Es muss Visual Studio 2015 C and C++ Runtimes installiert sein. Je nach Java Version (Die Java Version ist massgebend, nicht die Windows Version) muss die 32-bit oder 64-bit Version dieser Laufzeitbibliothek installiert sein. Falls diese Laufzeitbibliothek nicht installiert ist, gibt es einen Fehler beim laden der FileGDB.dll. Zur Laufzeit entpackt ili2fgdb zwei DLLs/Shared-Libraries und lädt diese. Der Benutzer benötigt also die Berechtigungen, um diese Bibliotheken zu laden.
GeoPackage: Zur Laufzeit entpackt ili2gpkg eine DLL/Shared-Library und lädt diese. Der Benutzer benötigt also die Berechtigungen, um die Bibliothek zu laden.
GNU Lesser General Public License
In den folgenden Abschnitten wird die Funktionsweise anhand einzelner Anwendungsfälle beispielhaft beschrieben. Die detaillierte Beschreibung einzelner Funktionen ist im Kapitel „Referenz“ zu finden.
Die Tabellen existieren nicht und sollen in der Datenbank angelegt
werden (--schemaimport
).
PostGIS: java -jar ili2pg.jar --schemaimport --dbdatabase mogis
--dbusr julia --dbpwd romeo path/to/dm01.ili
GeoPackage: java -jar ili2gpkg.jar --schemaimport --dbfile
mogis.gpkg path/to/dm01.ili
FileGDB: java -jar ili2fgdb.jar --schemaimport --dbfile
mogis.gdb path/to/dm01.ili
Es werden keine Daten importiert, sondern nur die leeren Tabellen angelegt.
PostGIS: Die leeren Tabellen werden im Default-Schema des Benutzers julia angelegt. Die Geometrie-Spalten werden in der Tabelle public.geometry_columns registriert.
Als Host wird der lokale Rechner angenommen und für die Verbindung zur Datenbank der Standard-Port.
GeoPackage: Die Geometrie-Spalten werden in den Tabellen gpkg_contents und gpkg_geometry_columns registriert.
Falls die Datei mogis.gpkg noch nicht existiert, wird sie erzeugt und mit den für GeoPackage nötigen Metatabellen initialisiert. Falls die Datei schon existiert, werden die Tabellen ergänzt.
FileGDB: Falls die Datei mogis.gdb noch nicht existiert, wird sie erzeugt. Falls die Datei schon existiert, werden die Tabellen ergänzt.
Das gewünschte Schema und die Tabellen existieren nicht und es soll das DB-Schema und -Datenmodell angelegt werden:
PostGIS: java -jar ili2pg.jar --schemaimport --dbdatabase mogis
--dbschema dm01av --dbusr julia --dbpwd romeo path/to/dm01.ili
Es werden keine Daten importiert, sondern nur das Schema dm01av (--dbschema dm01av
) und die
leeren Tabellen angelegt. Die Geometrie-Spalten werden in der Tabelle
public.geometry_columns registriert.
Die Tabellen existieren nicht und sollen in der Datenbank angelegt werden. Es werden keine Daten importiert, sondern nur die leeren Tabellen angelegt:
PostGIS: java -jar ili2pg.jar --schemaimport --dbhost ofaioi4531 --dbport
5432 --dbdatabase mogis --dbusr julia --dbpwd romeo
--createEnumTabs --createBasketCol --log path/to/logfile path/to/dm01.ili
GeoPackage: java -jar ili2gpkg.jar --schemaimport --dbfile mogis.gpkg
--createEnumTabs --createBasketCol --log path/to/logfile path/to/dm01.ili
FileGDB: java -jar ili2fgdb.jar --schemaimport --dbfile mogis.gdb
--createEnumTabs --createBasketCol --log path/to/logfile path/to/dm01.ili
Alle Tabellen werden in der Datenbank erstellt.
Die Geometrie-Spalten werden registriert. Als Primary-Key
wird ein zusätzliches Attribut erstellt (t_id). Zusätzlich wir ein
t_basket Attribut erstellt (--createBasketCol
). Dieses zeigt als Fremdschlüssel auf eine
Meta-Hilfstabelle (Importdatum, Benutzer, Modellname, Pfad der
Itf-Datei).
Die Aufzähltypen werden in Lookup-Tables abgebildet (--createEnumTabs
).
Es wird ein Logfile angelegt (--log path/to/logfile
).
Dieses enthält Zeitpunkt des Schemaimports, Name
des Benutzers, Datenbankparameter (ohne Passwort), Name (ganzer Pfade)
der Ili-Datei, sämtliche Namen der importierten Tabellen. Allfällige Fehlermeldungen
(bei Importabbruch) werden auch in die Logdatei geschrieben.
Enumerations werden zusätzlich als Textattribut hinzugefügt:
PostGIS: java -jar ili2pg.jar --schemaimport --createEnumTxtCol
--dbdatabase mogis --dbusr julia --dbpwd romeo path/to/dm01.ili
GeoPackage: java -jar ili2gpkg.jar --schemaimport --createEnumTxtCol
--dbfile mogis.gpkg path/to/dm01.ili
FileGDB: java -jar ili2fgdb.jar --schemaimport --createEnumTxtCol
--dbfile mogis.gdb path/to/dm01.ili
Das Modell wird in die Datenbank importiert. Es werden keine Daten importiert, sondern nur die leeren Tabellen
angelegt.
Zusätzlich werden die
Attribute vom Typ Enumeration in ihrer Textrepräsentation (Attribut
„art“ = 0 ⇒ „art_txt“ = „Gebaeude“) hinzugefügt (--createEnumTxtCol
).
Den Geometrien wird ein spezieller SRS (Spatial Reference System) Identifikator hinzugefügt:
PostGIS: java -jar ili2pg.jar --schemaimport --defaultSrsAuth EPSG
--defaultSrsCode 2056 --dbdatabase mogis --dbusr julia --dbpwd romeo
path/to/dm01.ili
GeoPackage: java -jar ili2gpkg.jar --schemaimport --defaultSrsAuth EPSG
--defaultSrsCode 2056 --dbfile mogis.gpkg path/to/dm01.ili
FileGDB: java -jar ili2fgdb.jar --schemaimport --defaultSrsAuth EPSG
--defaultSrsCode 2056 --dbfile mogis.gdb path/to/dm01.ili
Das Modell wird in die Datenbank importiert. Es werden keine Daten importiert, sondern nur die leeren Tabellen
angelegt.
Zusätzlich wird jeder
Geometrie eine SRS-ID (EPSG-Code 2056) hinzugefügt
(--defaultSrsAuth EPSG --defaultSrsCode 2056
).
Ebenfalls wird derselbe Identifikator für
die Registrierung der Geometriespalten in den Metatabellen der Datenbank
benutzt.
Geometrien werden indexiert:
PostGIS: java -jar ili2pg.jar --schemaimport --createGeomIdx --dbdatabase
mogis --dbusr julia --dbpwd romeo path/to/dm01.ili
GeoPackage: java -jar ili2gpkg.jar --schemaimport --createGeomIdx --dbfile
mogis.gpkg path/to/dm01.ili
Das Modell wird in die Datenbank importiert. Es werden keine Daten importiert, sondern nur die leeren Tabellen
angelegt.
Die Geometrien werden
indexiert (--createGeomIdx
).
FileGDB: Die Geometrien sind grundsätzlich immer indexiert.
Die Tabellen existieren nicht und sollen in der Datenbank angelegt
werden (--schemaimport
).
Das Modell und die Abbildungsparameter ergeben sich aus der Meta-Konfiguration, die aus einem Repository bezogen wird.
PostGIS: java -jar ili2pg.jar --schemaimport --metaConfig ilidata:metconfigId --dbdatabase
mogis --dbusr julia --dbpwd romeo
GeoPackage: java -jar ili2gpkg.jar --schemaimport --metaConfig ilidata:metconfigId --dbfile
mogis.gpkg
Das Modell wird in die Datenbank importiert. Es werden keine Daten importiert, sondern nur die leeren Tabellen angelegt.
Die Tabellen existieren bereits und der Inhalt der Tabellen soll
erweitert werden (--import
):
PostGIS: java -jar ili2pg.jar --import --dbdatabase mogis --dbusr
julia --dbpwd romeo path/to/260100.itf
GeoPackage: java -jar ili2gpkg.jar --import --dbfile mogis.gpkg
path/to/260100.itf
FileGDB: java -jar ili2fgdb.jar --import --dbfile mogis.gdb
path/to/260100.itf
Das Itf 260100.itf wird importiert und die Daten den bereits vorhanden Tabellen hinzugefügt. Die Tabellen können zusätzliche Attribute enthalten (z.B. bfsnr, datum etc.), welche beim Import leer bleiben.
Die Tabellen existieren bereits und der Inhalt der Tabellen soll durch
den Inhalt des itf ersetzt werden (--import
):
PostGIS: java -jar ili2pg.jar --import --deleteData --dbdatabase
mogis --dbusr julia --dbpwd romeo --log path/to/logfile path/to/260100.itf
GeoPackage: java -jar ili2gpkg.jar --import --deleteData --dbfile
mogis.gpkg --log path/to/logfile path/to/260100.itf
FileGDB: java -jar ili2fgdb.jar --import --deleteData --dbfile
mogis.gdb --log path/to/logfile path/to/260100.itf
Das Itf 260100.itf wird importiert und die bestehenden Daten in den
bereits vorhanden Tabellen gelöscht (--deleteData
). Die Tabellen können zusätzliche
Attribute enthalten (z.B. bfsnr, datum etc.), welche beim Import leer
bleiben.
Es wird ein Logfile angelegt (--log path/to/logfile
). Dieses enthält Zeitpunkt des Imports, Name
des Benutzers, Datenbankparameter (ohne Passwort), Name (ganzer Pfade)
der Ili- und Itf-Datei, sämtliche Namen der importierten Tabellen inkl.
Anzahl der importierten Elemente pro Tabelle. Allfällige Fehlermeldungen
(bei Importabbruch) werden auch in die Logdatei geschrieben.
Tauchen beim Import des Itf Fehler auf (z. B. mangelnde Modellkonformität oder verletzte Constraints in der DB), bricht der Import ab.
PostGIS, GeoPackage: Bei einem Fehler werden keine Daten importiert, d.h. der Import in die Datenbank ist ein einzelner Commit.
FileGDB: Da die FileGDB keine Transaktionen unterstützt, werden die Daten teilweise importiert, und die FileGDB befindet sich danach evtl. in einem inkonsistenten Zustand.
Die Tabellen existieren bereits und der Inhalt einer Datei aus einem Repository (z.B. eine Katalog-Datei) soll importiert werden:
PostGIS: java -jar ili2pg.jar --import --dbdatabase mogis --dbusr
julia --dbpwd romeo ilidata:dataId
GeoPackage: java -jar ili2gpkg.jar --import --dbfile mogis.gpkg
--metaConfig ilidata:dataId
FileGDB: java -jar ili2fgdb.jar --import --dbfile mogis.gdb
--metaConfig ilidata:dataId
Die Daten mit der gegebenen dataId
werden aus dem Repository bezogen und den bereits vorhanden
Tabellen hinzugefügt.
Die Tabellen existieren bereits und die Daten gemäss einer Meta-Konfiguration sollen importiert werden:
PostGIS: java -jar ili2pg.jar --import --dbdatabase mogis --dbusr
julia --dbpwd romeo --metaConfig ilidata:metconfigId
GeoPackage: java -jar ili2gpkg.jar --import --dbfile mogis.gpkg
--metaConfig ilidata:metconfigId
FileGDB: java -jar ili2fgdb.jar --import --dbfile mogis.gdb
--metaConfig ilidata:metconfigId
Die Meta-Konfiguration mit der gegebenen metconfigId
wird aus dem Repository bezogen.
Die Referenz-/Katalog-Daten ergeben sich aus der Meta-Konfiguration und werden den bereits vorhanden
Tabellen hinzugefügt.
Die Tabellen werden aus der Datenbank in eine Interlis 1-Transfer-Datei
geschrieben (--export
):
PostGIS: java -jar ili2pg.jar --export --models DM01AV --dbhost
ofaioi4531 --dbport 5432 --dbdatabase mogis --dbusr julia --dbpwd romeo
path/to/output.itf
GeoPackage: java -jar ili2gpkg.jar --export --models DM01AV --dbfile
mogis.gpkg path/to/output.itf
FileGDB: java -jar ili2fgdb.jar --export --models DM01AV --dbfile
mogis.gdb path/to/output.itf
Die Daten aller Tabellen des Interlis-Modells DM01AV (--models DM01AV
)
werden in die
Interlis 1-Transferdatei output.itf geschrieben. Fehlende Tabellen in
der Datenbank werden dementsprechend als leere Tabellen oder gar nicht
(gemäss Definition im Datenmodell) in die Datei geschrieben. Fehlende
Attribute in einer Datenbanktabelle werden mit einem „@“ substituiert.
Anhand des Parameters --models wird definiert, welche Daten exportiert werden. Alternativ kann auch der Parameter --topics, --baskets oder --dataset verwendet werden, um die zu exportierenden Daten auszuwählen. Einer dieser Parameter muss also zwingend beim Export angegeben werden.
Die Tabellen werden aus der Datenbank in eine Interlis 2-Transfer-Datei
geschrieben (--export
):
PostGIS: java -jar ili2pg.jar --export --models DM01AV --dbhost
ofaioi4531 --dbport 5432 --dbdatabase mogis --dbusr julia --dbpwd romeo
path/to/output.xtf
GeoPackage: java -jar ili2gpkg.jar --export --models DM01AV --dbfile
mogis.gpkg path/to/output.xtf
FileGDB: java -jar ili2fgdb.jar --export --models DM01AV --dbfile
mogis.gdb path/to/output.xtf
Die Daten aller Tabellen des Interlis-Modells DM01AV (--models DM01AV
)
werden in die
Interlis 2-Transferdatei output.xtf geschrieben. Fehlende Tabellen und
Attribute in der Datenbank werden gar nicht in die Datei geschrieben.
Anhand des Parameters --models wird definiert, welche Daten exportiert werden. Alternativ kann auch der Parameter --topics, --baskets oder --dataset verwendet werden, um die zu exportierenden Daten auszuwählen. Einer dieser Parameter muss also zwingend beim Export angegeben werden.
Die Daten in der Datenbank werden anhand des Interlis-Modells geprüft (--validate
):
PostGIS: java -jar ili2pg.jar --validate --models DM01AV --dbhost
ofaioi4531 --dbport 5432 --dbdatabase mogis --dbusr julia --dbpwd romeo
GeoPackage: java -jar ili2gpkg.jar --validate --models DM01AV --dbfile
mogis.gpkg
FileGDB: java -jar ili2fgdb.jar --validate --models DM01AV --dbfile
mogis.gdb
Anhand des Parameters --models wird definiert, welche Daten geprüft werden. Alternativ kann auch der Parameter --topics, --baskets oder --dataset verwendet werden, um die zu prüfenden Daten auszuwählen. Einer dieser Parameter muss also zwingend beim Prüfen angegeben werden.
Die von ili2b 4.x benutzten Schemaabbildungsregeln sind zum Teil nicht kompatibel mit den Regeln von ili2db 3.x. Das einfachste für die Datenmigration ist darum:
- Daten mit 3.x exportieren
- Schema mit 4.x anlegen
- Daten mit 4.x importieren
Ab ili2db 4.1 gibt es eine Option --export3
um Daten aus einer mit 3.x angelegten
DB zu exportieren.
Die wichtigsten Optionen, um zu 3.x kompatibles Verhalten zu erhalten sind:
--createTidCol
damit--importTid
und--exportTid
funktioniert--doSchemaImport
damit--import
auch die Tabellen anlegt--ver3-translation
um bei Modellen mitTRANSLATION OF
die 3.x Tabellen zu erhalten
Die Tabellen existieren nicht und sollen in der Datenbank angelegt
werden und die Daten sollen importiert werden (--import
):
PostGIS: java -jar ili2pg.jar --import --doSchemaImport --dbhost ofaioi4531 --dbport
5432 --dbdatabase mogis --dbusr julia --dbpwd romeo
--createEnumTabs --createBasketCol --log path/to/logfile path/to/260100.itf
GeoPackage: java -jar ili2gpkg.jar --import --doSchemaImport --dbfile mogis.gpkg
--createEnumTabs --createBasketCol --log path/to/logfile path/to/260100.itf
FileGDB: java -jar ili2fgdb.jar --import --doSchemaImport --dbfile mogis.gdb
--createEnumTabs --createBasketCol --log path/to/logfile path/to/260100.itf
Alle Tabellen werden in der Datenbank erstellt (--doSchemaImport
) und das Itf 260100.itf
importiert. Die Geometrie-Spalten werden registriert. Als Primary-Key
wird ein zusätzliches Attribut erstellt (t_id). Zusätzlich wir ein
t_basket Attribut erstellt (--createBasketCol
). Dieses zeigt als Fremdschlüssel auf eine
Meta-Hilfstabelle (Importdatum, Benutzer, Modellname, Pfad der
Itf-Datei).
Die Aufzähltypen werden in Lookup-Tables abgebildet (--createEnumTabs
).
Es wird ein Logfile angelegt (--log path/to/logfile
). Dieses enthält Zeitpunkt des Imports, Name
des Benutzers, Datenbankparameter (ohne Passwort), Name (ganzer Pfade)
der Ili- und Itf-Datei, sämtliche Namen der importierten Tabellen inkl.
Anzahl der importierten Elemente pro Tabelle. Allfällige Fehlermeldungen
(bei Importabbruch) werden auch in die Logdatei geschrieben.
Die Konfiguration mit der die Datenbank erstellt wurde, wird als INI-Datei exportiert (--exportMetaConfig
):
PostGIS: java -jar ili2pg.jar --exportMetaConfig --dbhost
ofaioi4531 --dbport 5432 --dbdatabase mogis --dbusr julia --dbpwd romeo --metaConfig config.ini
GeoPackage: java -jar ili2gpkg.jar --exportMetaConfig --dbfile
mogis.gpkg --metaConfig config.ini
FileGDB: java -jar ili2fgdb.jar --exportMetaConfig --dbfile
mogis.gdb --metaConfig config.ini
Die erstellte INI-Datei ist nicht ganz vollständig. iliMetaAttrs, pre- und postScript werden nicht berücksichtigt.
Mit Hilfe der INI-Datei kann danach die Datenbank neu erstellt werden:
PostGIS: java -jar ili2pg.jar --schemaimport --dbhost
ofaioi4531 --dbport 5432 --dbdatabase mogisNeu --dbusr julia --dbpwd romeo --metaConfig config.ini
GeoPackage: java -jar ili2gpkg.jar --schemaimport --dbfile
mogisNeu.gpkg --metaConfig config.ini
FileGDB: java -jar ili2fgdb.jar --schemaimport --dbfile
mogisNeu.gdb --metaConfig config.ini
In den folgenden Abschnitten werden einzelne Aspekte detailliert, aber isoliert, beschrieben. Die Funktionsweise als Ganzes wird anhand einzelner Anwendungsfälle beispielhaft im Kapitel „Funktionsweise“ (weiter oben) beschrieben.
Die Dokumentation gilt grundsätzlich für alle ili2xy Varianten, ausser es gibt einen spezifischen Hinweis auf PostGIS, GeoPackage oder FileGDB.
PostGIS: java -jar ili2pg.jar [Options] [file]
GeoPackage: java -jar ili2gpkg.jar [Options] [file]
FileGDB: java -jar ili2fgdb.jar [Options] [file]
Der Rückgabewert ist wie folgt:
- 0 import/export ok, keine Fehler festgestellt
- !0 import/export nicht ok, Fehler festgestellt
Optionen:
Option | Beschreibung |
---|---|
--import | Importiert Daten aus einer Transferdatei in die Datenbank. Die Tabellen werden implizit auch angelegt, falls sie noch nicht vorhanden sind (siehe Kapitel Abbildungsregeln). Falls die Tabellen in der Datenbank schon vorhanden sind, können sie zusätzliche Spalten enthalten (z.B. bfsnr, datum etc.), welche beim Import leer bleiben. Falls beim Import ein Datensatz-Identifikator (--dataset) definiert wird, darf dieser Datensatz-Identifikator in der Datenbank noch nicht vorhanden sein. Um die bestehenden Daten zu ersetzen, kann die Option --replace verwendet werden. TODO Die Tabellen sind schon vorhanden (und entsprechen (nicht) der ili-Klasse) |
--update | Aktualisiert die Daten in der Datenbank anhand einer Transferdatei, d.h. neue Objekte werden eingefügt, bestehende Objekte werden aktualisiert und in der Transferdatei nicht mehr vorhandene Objekte werden gelöscht. Diese Funktion bedingt, dass das Datenbankschema mit der Option --createBasketCol erstellt wurde, und dass die Klassen und Topics eine stabile OID haben. |
--replace | Ersetzt die Daten in der Datenbank anhand eines Datensatz-Identifikators (--dataset) mit den Daten aus einer Transferdatei. Diese Funktion bedingt, dass das Datenbankschema mit der Option --createBasketCol erstellt wurde. |
--delete | Löscht die Daten in der Datenbank anhand eines Datensatz-Identifikators (--dataset). Diese Funktion bedingt, dass das Datenbankschema mit der Option --createBasketCol erstellt wurde. |
--export | Exportiert Daten aus der Datenbank in eine Transferdatei. Mit dem Parameter --models, --topics, --baskets oder --dataset wird definiert, welche Daten exportiert werden. Existieren zum gegeben Modell (--models) oder Topic (--topics) in der DB keine Daten, wird ohne Fehlermeldung eine leere Transferdatei erstellt. Wird eine Datensatz (--dataset) oder Basket (--baskets) bezeichnet, der in der DB nicht vorhanden ist, bricht der Export mit einem Fehler ab. Ob die Daten im Interlis 1-, Interlis 2- oder GML-Format geschrieben werden, ergibt sich aus der Dateinamenserweiterung der Ausgabedatei. Für eine Interlis 1-Transferdatei muss die Erweiterung .itf verwendet werden. Für eine GML-Transferdatei muss die Erweiterung .gml verwendet werden. Die Optionen --topics und --baskets bedingen, dass das Datenbankschema mit der Option --createBasketCol erstellt wurde. |
--export3 | Exportiert Daten aus einer Datenbank die mit ili2db 3.x angelegt wurde in eine Transferdatei. |
--validate | Prüft die Daten in der Datenbank (ohne Export in eine Transferdatei). Mit dem Parameter --models, --topics, --baskets oder --dataset wird definiert, welche Daten geprüft werden. Die Optionen --topics und --baskets bedingen, dass das Datenbankschema mit der Option --createBasketCol erstellt wurde. |
--schemaimport | Erstellt die Tabellenstruktur in der Datenbank (siehe Kapitel Abbildungsregeln). |
--exportMetaConfig | Die Konfiguration mit der die Datenbank erstellt wurde, wird als INI-Datei exportiert. Mit dem Parameter --metaConfig wird die Ziel-Datei definiert. Die erstellte INI-Datei ist nicht ganz vollständig. iliMetaAttrs, pre- und postScript werden nicht berücksichtigt. |
--iliMetaAttrs filename | Name der Konfigurationsdatei, die zusätzliche Interlis-Metaattribute enthält (Meta-Attribute, die in den ili-Dateien nicht enthalten sind).
[Model1.Topic1.Structure1] MetaAttr1=AttrValue1 MetaAttr2=AttrValue2 [Model1.Topic1.ClassA.AttrB] MetaAttrN=AttrValueN |
--metaConfig filename |
Konfiguriert ili2db mit Hilfe einer INI-Datei.
|
--validConfig filename | Name der Konfigurationsdatei, die für die Validierung verwendet werden soll.
filename kann auch die Form ilidata:DatesetId haben,
dann wird die entsprechende Datei aus den Repositories benutzt. |
--disableValidation | Schaltet die Validierung der Daten aus. |
--disableAreaValidation | Schaltet die Validierung der AREA Topologie aus. |
--forceTypeValidation | Beschränkt die Aufweichung der Validierung mittels --validConfig auf "multiplicity". |
--disableBoundaryRecoding | Deaktiviert beim Import die Umcodierung von Randlinien von Flächen (damit sie OGC/ISO konform sind) |
--dbhost host | PostGIS: Der hostname der Datenbank. Default ist localhost. |
--dbport port | PostGIS: Die Port-Nummer, unter der die Datenbank angesprochen warden kann. Default ist 5432. |
--dbdatabase database | PostGIS: Der Name der Datenbank. |
--dbusr username | PostGIS: Der Benutzername für den Datenbankzugang und Einträge in Metatabellen. GeoPackage: Der Benutzername für Einträge in Metatabellen. |
--dbpwd password | PostGIS: Das Passwort für den Datenbankzugriff. |
--dbparams filename | Datei (UTF-8 codiert) mit zusätzlichen Parametern für den Datenbankzugriff. Einfaches zeilenorientiertes Format mit Parameter=Wert pro Zeile. Die möglichen Parameter sind beim jeweiligen JDBC Treiber beschrieben. |
--dbschema schema | PostGIS: Definiert den Namen des Datenbank-Schemas. Default ist kein Wert, d.h. das aktuelle Schema des Benutzers der mit –user definiert wird. |
--dbfile filename | GeoPackage: Name der GeoPackage-Datei. FileGDB: Name der ESRI File Geodatabase-Datei. |
--setupPgExt | PostGIS: erstellt postgreql Erweiterungen 'uuid-ossp' und 'postgis' (falls noch nicht vorhanden) |
--disableRounding | Beim Import und Export werden die Daten per Default gerundet gem. Angaben im Modell. Mit dieser Option findet keine Rundung statt. |
--deleteData | bei einem Datenimport (--import) werden alle Daten in den existierenden/benutzten Tabellen gelöscht (Mit DELETE, die Tabellenstruktur bleibt unverändert). |
--defaultSrsAuth auth | SRS Authority für Geometriespalten, wo sich dieser Wert nicht ermitteln lässt (für ili1 und ili2.3 immer der Fall). Gross-/Kleinschreibung ist signifikant. Default ist EPSG |
--defaultSrsCode code | SRS Code für Geometriespalten, wo sich dieser Wert nicht ermitteln lässt. Kein Default |
--modelSrsCode model=epsgCode | SRS Code für Geometriespalten des gegebenen Modells, wo sich dieser Wert nicht pro Attribut ermitteln lässt. Mehrere Definitionen können durch Strichpunkt getrennt wrden, z.B.: --modelSrsCode ModelA=2056;ModelB=21781 |
--fgdbXyResolution value | FileGDB: XY-Auflösung für Geometriespalten |
--fgdbXyTolerance value | FileGDB: XY-Toleranz für Geometriespalten |
--modeldir path | Dateipfade, die Modell-Dateien (ili-Dateien) enthalten. Mehrere Pfade können durch Semikolon ‚;‘ getrennt werden. Es sind auch URLs von Modell-Repositories möglich. Default ist %ILI_FROM_DB;%XTF_DIR;http://models.interlis.ch/;%JAR_DIR Es werden folgende Platzhalter unterstützt: %ILI_FROM_DB ist ein Platzhalter für die in der Datenbank vorhandenen Modelle (in der Tabelle t_ili2db_model). %XTF_DIR ist ein Platzhalter für das Verzeichnis mit der Transferdatei. %JAR_DIR ist ein Platzhalter für das Verzeichnis des ili2db Programms (ili2pg.jar bzw. ili2gpkg.jar Datei). %ILI_FROM_DB sollte i.d.R. der erste Pfad sein (damit mehrere Imports und Exports das selbe Modell verwenden). Der erste Modellname (Hauptmodell), zu dem ili2db die ili-Datei sucht, ist nicht von der INTERLIS-Sprachversion abhängig. Es wird in folgender Reihenfolge nach einer ili-Datei gesucht: zuerst INTERLIS 2.3, dann 1.0 und zuletzt 2.2. Beim Auflösen eines IMPORTs wird die INTERLIS Sprachversion des Hauptmodells berücksichtigt, so dass also z.B. das Modell Units für ili2.2 oder ili2.3 unterschieden wird. |
--models modelname | Namen des Modells (nicht zwingend identisch mit dem Dateinamen!), für das die Tabellenstruktur in der Datenbank erstellt werden soll. Mehrere Modellnamen können durch Semikolon ‚;‘ getrennt werden. Normalerweise muss der Namen nicht angegeben werden, und das Programm ermittelt den Wert automatisch aus den Daten. Wird beim --schemaimport nur eine ili-Datei als file angegeben, wird der Name des letzten Modells aus dieser ili-Datei als modelname genommen. |
--dataset name | Name/Identifikator des Datensatzes (Kurzform für mehrere BIDs). Kann z.B. eine BFSNr oder ein Kantonskürzel sein. Beim Daten Export können mehrere Datensatznamen durch Semikolon ‚;‘ getrennt werden. Bedingt die Option --createBasketCol. |
--baskets BID | BID der Baskets, die importiert, exportiert oder validiert werden sollen. Mehrere BIDs können durch Semikolon ‚;‘ getrennt werden. |
--topics topicname | Topic-Namen der Baskets, die importiert, exportiert oder validiert werden sollen. Mehrere Namen können durch Semikolon ‚;‘ getrennt werden. Es muss der qualifizierte Topic-Name (Model.Topic) verwendet werden. |
--createscript filename | Erstellt zusätzlich zur Tabellenstruktur in der Datenbank ein SQL-Skript um die Tabellenstruktur unabhängig vom Programm erstellen zu können. Das Skript wird zusätzlich zu den Tabellen in der Datenbank erzeugt, d.h. es ist nicht möglich, nur das Skript zu erstellen (ohne Datenbank). |
--dropscript filename | Erstellt ein SQL-Skript um die Tabellenstruktur unabhängig vom Programm löschen zu können. |
--preScript filename | SQL-Skript, das vor dem (Schema-)Import/Export ausgeführt wird. |
--postScript filename | SQL-Skript, das nach dem (Schema-)Import/Export ausgeführt wird. |
--noSmartMapping | Alle strukturellen Abbildungsoptimierungen werden ausgeschaltet. (s.a. --smart1Inheritance, --coalesceCatalogueRef, --coalesceMultiSurface, --coalesceMultiLine, --coalesceMultiPoint, --expandMultilingual, --expandLocalised, --coalesceArray) |
--smart1Inheritance | Bildet die Vererbungshierarchie mit einer dymamischen Strategie ab. Für Klassen, die referenziert werden und deren Basisklassen nicht mit einer NewClass-Strategie abgebildet werden, wird die NewClass-Strategie verwendet. Abstrakte Klassen werden mit einer SubClass-Strategie abgebildet. Konkrete Klassen, ohne Basisklasse oder deren direkte Basisklassen mit einer SubClass-Strategie abgebildet werden, werden mit einer NewClass-Strategie abgebildet. Alle anderen Klassen werden mit einer SuperClass-Strategie abgebildet. |
--smart2Inheritance | Bildet die Vererbungshierarchie mit einer dymamischen Strategie ab. Abstrakte Klassen werden mit einer SubClass-Strategie abgebildet. Konkrete Klassen werden mit einer NewAndSubClass-Strategie abgebildet. |
--coalesceCatalogueRef | Strukturattribute deren maximale Kardinalität 1 ist, deren Basistyp CHBase:CatalogueReference oder CHBase:MandatoryCatalogueReference ist und die ausser „Reference“ keine weiteren Attribute haben, werden direkt mit einem Fremdschlüssel auf die Ziel-Tabelle (die die konkrete CHBase:Item Klasse realisiert) abgebildet, d.h. kein Record in der Tabelle für die Struktur mit dem „Reference“ Attribut. |
--coalesceMultiSurface | Strukturattribute deren maximale Kardinalität 1 ist, deren Basistyp CHBase:MultiSurface ist und die ausser „Surfaces“ keine weiteren Attribute haben, werden direkt als Spalte mit dem Typ MULTISURFACE (oder MULTIPOLYGON, falls --strokeArcs) abgebildet. |
--coalesceMultiLine | Strukturattribute deren maximale Kardinalität 1 ist, deren Basistyp CHBase:MultiLine ist und die ausser „Lines“ keine weiteren Attribute haben, werden direkt als Spalte mit dem Typ MULTICURVE (oder MULTILINESTRING, falls --strokeArcs) abgebildet. |
--coalesceMultiPoint | Strukturattribute deren maximale Kardinalität 1 ist, die nur ein Attribut haben, werden direkt als Spalte mit dem Typ MULTIPOINT abgebildet. |
--coalesceArray | Strukturattribute mit dem Metaattribut ili2db.mapping=ARRAY , die nur ein Attribut haben, werden direkt als Spalte mit dem Typ ARRAY abgebildet. |
--coalesceJson | Strukturattribute mit dem Metaattribut ili2db.mapping=JSON , werden direkt als Spalte mit dem Typ JSON abgebildet. |
--expandMultilingual | Strukturattribute deren maximale Kardinalität 1 ist, deren Basistyp LocalisationCH_V1.MultilingualText oder LocalisationCH_V1.MultilingualMText ist (oder das Metaattribut ili2db.mapping=Multilingual haben) und die ausser „LocalisedText“ keine weiteren Attribute haben, werden direkt als Spalten in der Tabelle des Strukturattributes abgebildet, d.h. keine Records in den Tabellen für die Multilingual-Strukturen. |
--expandLocalised | Strukturattribute deren maximale Kardinalität 1 ist, deren Basistyp LocalisationCH_V1.LocalisedText oder LocalisationCH_V1.LocalisedMText (oder das Metaattribut ili2db.mapping=Localised haben) ist und die ausser „Language“ und „Text“ keine weiteren Attribute haben, werden direkt als Spalten in der Tabelle des Strukturattributes abgebildet, d.h. keine Records in den Tabellen für die Multilingual-Strukturen. |
--createGeomIdx | Erstellt für jede Geometriespalte in der Datenbank einen räumlichen Index. (siehe Kapitel Abbildungsregeln/Geometrieattribute) |
--createEnumColAsItfCode | Bildet bei Aufzählungsattributen den Aufzählungswert als ITF-Code ab. Diese Option ist nur zulässig, wenn im Modell keine Erweiterungen von Aufzählungen vorkommen. Ohne diese Option wird der XTF-Code als Aufzählwert in der Datenbank verwendet. (siehe Kapitel Abbildungsregeln/Aufzählungen) |
--createEnumTxtCol | Erstellt für Aufzählungsattribute eine zusätzliche Spalte mit dem Namen des Aufzählwertes. (siehe Kapitel Abbildungsregeln/Aufzählungen) |
--createEnumTabs | Erstellt pro Aufzählungsdefinition eine Tabelle mit den einzelnen Aufzählwerten. (siehe Kapitel Abbildungsregeln/Aufzählungen) |
--createSingleEnumTab | Erstellt eine einzige Tabelle mit allen Aufzählwerten aller Aufzählungsdefinitionen. (siehe Kapitel Abbildungsregeln/Aufzählungen) |
--createEnumTabsWithId | Erstellt pro Basis-Aufzählungsdefinition eine Tabelle mit den einzelnen Aufzählwerten, inkl. aller Aufzählungserweiterungen von dieser Basisdefinition. So können auch Fremdschlüssel (--createFk) definiert werden. (siehe Kapitel Abbildungsregeln/Aufzählungen) |
--createMetaInfo | Erstellt zusätzliche Meta-Tabellen T_ILI2DB_TABLE_PROP, T_ILI2DB_COLUMN_PROP, T_ILI2DB_META_ATTRS mit weiteren Angaben aus dem Interlis Modell. (siehe Kapitel Metadaten) |
--createNlsTab | Erstellt eine zusätzliche Meta-Tabelle T_ILI2DB_NLS mit weiteren Angaben aus dem Interlis Modell für mehrsprachige Anwendungen. |
--beautifyEnumDispName | Verschönert den Anzeigetext für das Aufzählelement. Beim Import wird die Spalte mit dem XTF-Code ohne Untersstriche befüllt ("Strasse befestigt" statt "Strasse_befestigt") (siehe Kapitel Abbildungsregeln/Aufzählungen) |
--createStdCols | Erstellt in jeder Tabelle zusätzliche Metadatenspalten T_User, T_CreateDate, T_LastChange. (siehe Kapitel Abbildungsregeln/Tabellen) |
--t_id_Name name | Definiert den Namen für die interne technische Schlüsselspalte in jeder Tabelle (nicht zu verwechseln mit dem externen Transferidentifikator). Default ist T_Id. (siehe Kapitel Abbildungsregeln/Tabellen) |
--idSeqMin zahl | PostGIS: Definiert den Minimalwert für den Generator der internen technischen Schlüssel |
--idSeqMax zahl | PostGIS: Definiert den Maximalwert für den Generator der internen technischen Schlüssel |
--createTypeDiscriminator | Erstellt für jede Tabelle (auch wenn das Modell keine Vererbung benutzt) eine Spalte für den Typdiskriminator. Für Klassen mit Vererbung wird die Spalte immer erstellt. (siehe Kapitel Abbildungsregeln/Tabellen) |
--disableNameOptimization | Schaltet die Nutzung von unqualifizierten Klassennamen aus. Für alle Tabellennamen werden qualifizierte Interlis-Klassennamen (Model.Topic.Class) verwendet (und in einen gültigen Tabellennamen abgebildet). (siehe Kapitel Abbildungsregeln/Namenskonventionen) |
--nameByTopic | Für alle Tabellennamen werden teilweise qualifizierte Interlis-Klassennamen (Topic.Class) verwendet (und in einen gültigen Tabellennamen abgebildet). (siehe Kapitel Abbildungsregeln/Namenskonventionen) |
--nameLang lang | Für alle Tabellen- und Spaltennamen werden Namen aus dem Interlis-Modell der gegebenen Sprache verwendet. Die möglichen Sprachnamen ergeben sich aus den Interlis-Modellen (MODEL Name (lang) ... ).
Mehrere Sprachen können durch Semikolon getrennt werden, um die Priorität zu regeln. Ist für einen Namen kein Modell in einer der gegebenen Sprache vorhanden, wird der Namen aus dem Modell in der Ursprungssprache verwendet. |
--maxNameLength length | Definiert die maximale Länge der Namen für Datenbankelemente (Tabellennamen, Spaltennamen , usw.) Default ist 60. Ist der Interlis-Name länger, wird er gekürzt. (siehe Kapitel Abbildungsregeln/Namenskonventionen) |
--sqlEnableNull | Erstellt keine NOT NULL Anweisungen bei Spalten die Interlis-Attribute abbilden. (siehe Kapitel Abbildungsregeln/Attribute) |
--sqlExtRefCols | Erstellt Spalten die Interlis-Rollen oder Interlis-Referenz-Attribute abbilden als Textspalten, so dass der Referenzwert aus der Transferdatei in der Spalte aufgenommen werden kann und die referenzierten Objekte nicht vorliegen müssen. (siehe Kapitel Abbildungsregeln/Beziehungen) |
--strokeArcs | Segmentiert Kreisbogen beim Datenimport. Der Radius geht somit verloren. Die Kreisbogen werden so segmentiert, dass die Abweichung der erzeugten Geraden kleiner als die Koordinatengenauigkeit der Stützpunkte ist. |
--oneGeomPerTable | PostGIS: Erzeugt Hilfstabellen, falls in einer Klasse/Tabelle mehr als ein Geometrie-Attribut ist, so dass pro Tabelle in der Datenbank nur eine Geometriespalte ist. |
--gpkgMultiGeomPerTable | GeoPackage: Erzeugt mehrere Geometriespalten pro Tabelle, falls in einer Klasse/Tabelle mehr als ein Geometrie-Attribut ist. |
--skipPolygonBuilding | Bei ITF-Dateien werden die Linientabellen gelesen, so wie sie in der ITF-Datei sind, d.h. es werden keine Polygon gebildet. Bei XTF-Dateien werden die Polygone (SURFACE/AREA) als Linien eingelesen, d.h. es können auch offene Ränder oder sich kreuzende Randlinien eingelesen werden, um sie zu korrigieren. |
--skipGeometryErrors | Geometry Fehler werden ignoriert (und nicht rapportiert). Spezifischere Fehlermeldungen müssen mittels --validConfig konfiguriert werden. |
--skipReferenceErrors | Referenzfehler (z.B. Verweise auf nicht vorhandene Objekte) werden ignoriert (und nicht rapportiert). Die Option bedingt, dass der Schema Import mit --sqlEnableNull erfolgte, damit die fehlenden Referenzen beim Insert auf der DB nicht zu einem NULL Constraint Fehler führen. |
--keepAreaRef | Bei ITF-Dateien wird für AREA Attribute der Gebietsreferenzpunkt als zusätzliche Spalte in der Tabelle eingefügt. |
--createTidCol | Erstellt in jeder Tabelle eine zusätzlich Spalte T_Ili_Tid. (siehe Kapitel Abbildungsregeln/Tabellen) |
--importTid | Liest die Transferidentifikation (TID aus der Transferdatei) in eine zusätzliche Spalte T_Ili_Tid. (siehe Kapitel Abbildungsregeln/Tabellen). Bedingt beim Schema Import die Option --createTidCol. |
--exportTid | Verwendet den Wert der Spalte T_Ili_Tid als Transferidentifikation (TID in der Transferdatei). (siehe Kapitel Abbildungsregeln/Tabellen). Bedingt beim Schema Import die Option --createTidCol. |
--importBid | Liest die Behälteridentifikation (BID aus der Transferdatei) in die Spalte T_Ili_Tid der Tabelle t_ili2db_basket. |
--exportFetchSize rows | Definiert die Anzahl Records pro SQL Abfrage beim Export aus der DB. |
--importBatchSize rows | Definiert die Anzahl Records pro SQL-Insert/-Update beim Import in die DB. |
--createBasketCol | Erstellt in jeder Tabelle eine zusätzlich Spalte T_basket um den Behälter identifizieren zu können. (siehe Kapitel Abbildungsregeln/Metadaten)
Beim --schemaimport von Modellen mit erweiterten TOPICs muss die Option benutzt werden, damit die Daten korrekt exportiert werden können. |
--createDatasetCol | Erstellt in jeder Tabelle eine zusätzlich Spalte T_datasetname mit dem Namen/Identifikator des Datensatzes. Die Option bedingt die Option --dataset. Die Spalte ist redundant zur Spalte datasetname der Tabelle t_ili2db_dataset (siehe Kapitel Abbildungsregeln/Metadaten). |
--createFk | Erzeugt eine Fremdschlüsselbedingung bei Spalten die Records in anderen Tabellen referenzieren. |
--createFkIdx | Erstellt für jede Fremdschlüsselpalte in der Datenbank einen Index. Kann auch ohne die Option --createFk benutzt werden. |
--createUnique | Erstellt für INTERLIS-UNIQUE-Constraints in der Datenbank UNIQUE Bedingungen (sofern abbildbar). |
--createNumChecks | Erstellt für numerische Datentypen CHECK-Constraints in der Datenbank. |
--createTextChecks | Erstellt für Text Datentypen CHECK-Constraints in der Datenbank. (nicht nur Leerzeichen; bei TEXT keine Zeilenumbrüche) |
--createDateTimeChecks | Erstellt für Datum und Zeit Datentypen CHECK-Constraints in der Datenbank. |
--createMandatoryChecks | Erstellt für NULLable FK Spalten die MANDATORRY Referenzattribute oder Rollen implementieren CHECK-Constraints in der Datenbank. |
--createTypeConstraint | Erstellt für die t_type Spalte ein CHECK-Constraint in der Datenbank. |
--plugins folder | Verzeichnis mit JAR-Dateien, die Zusatzfunktionen enthalten. Die Zusatzfunktionen müssen das Java-Interface ch.interlis.iox_j.validator.InterlisFunction implementieren, und der Name der Java-Klasse muss mit IoxPlugin enden. |
--sqlColsAsText | Bildet alle (einfachen/unstrukturierten) Interlis-Attribute als TEXT-Spalten ab, so dass fehlerhafte Daten importiert werden können. |
--createImportTabs | Erstellt die t_ili2db_import Tabellen in der Datenbank. |
--doSchemaImport | Beim Datenimport werden die Tabellen angelegt, d.h. es muss nicht zuerst ein --schemaimport gemacht werden. |
--ver4-noSchemaImport | Nicht mehr verwenden, wird entfernt. Beim Datenimport wird keine Tabellen angelegt, d.h. es muss zuerst explizit ein --schemaimport gemacht werden. |
--ver3-translation | Verwendet ili2db 3.x Abbildungsregeln für übersetzte Modelle (Inkompatibel mit ili2db 4.x Abbildungen). |
--ver4-translation | Nicht mehr verwenden, wird entfernt. Verwendet ili2db 4.x Abbildungsregeln für übersetzte Modelle (Inkompatibel mit ili2db 3.x Abbildungen). |
--translation modelT=modelU | Definiert bei übersetzten INTERLIS 1 Modellen (modelT), das Modell der Ursprungssprache (ModelU). Mehrere Übersetzungen können durch Strichpunkt getrennt wrden, z.B.: --translation modelT1=modelU;modelT2=modelU |
--exportModels modelname | Beim Export/Prüfen werden die Daten gem. dem gegebenen Export-Modell exportiert/geprüft. Ohne die Option --exportModels werden die Daten so wie sie erfasst sind (bzw. importiert wurden), exportiert/validiert. Mehrere Modellnamen können durch Semikolon ‚;‘ getrennt werden. Als Export-Modelle sind Basis-Modelle (also z.B. Bundes-Modell statt Kantons-Modell) oder übersetzte Modelle (also z.B. DM_IT statt DM_DE) zulässig. |
--exportCrsModels modelname | Beim Export/Prüfen werden die Daten gem. dem gegebenen Modell, das ein alternatives CRS zum Original Modell hat, exportiert/geprüft. Ohne die Option --exportCrsModels werden die Daten so wie sie erfasst sind, exportiert/validiert. |
--ILIGML20 | Verwendet beim Export eCH-0118-2.0 als Transferformat. |
--log filename | Schreibt die log-Meldungen in eine Datei. |
--logtime | Ergänzt die log-Meldungen in der Log-Datei mit Zeitstempeln. |
--xtflog result.xtf | Schreibt die log-Meldungen in eine INTERLIS 2-Datei. Die Datei result.xtf entspricht dem Modell IliVErrors. |
--proxy host | Definiert den Name des Hosts der als Proxy für den Zugriff auf Modell-Repositories benutzt werden soll. |
--proxyPort port | Port auf dem Proxy. |
--gui | Startet ein einfaches GUI. |
--verbose | Schreibt detailiertere validierungs log-Meldungen |
--trace | Erzeugt zusätzliche Log-Meldungen (wichtig für Programm-Fehleranalysen) |
--help | Zeigt einen kurzen Hilfetext an. |
--version | Zeigt die Version des Programmes an. |
Alle explizit genannten Modelle (mit --models
) werden vollständig importiert.
Direkt oder indirekt importierte Modelle (via IMPORTS
) werden nicht importiert,
ausser denjenigen Klassen die direkt oder indirekt via Assoziationen oder
Referenzattribute referenziert werden.
Wird via --models
kein Modell explizit bezeichnet, wird das letzte Modell der
ili-Datei importiert.
Wird das Schema als Teil des Daten-Imports (--doSchemaImport
)
angelegt (ohne --models
), werden die Modelle gemäss dem Element MODELS
aus der Transferdatei angelegt.
Je nach Programmoption, werden Klassen unterschiedlich abgebildet. Die Abbildungsregeln für den Tabellennamen sind im Abschnitt Namenskonventionen beschrieben.
Nummer | Beispiel INTERLIS | Beispiel SQL | Kommentare |
---|---|---|---|
1 | CLASS A= END A; |
CREATE TABLE A ( T_Id integer PRIMARY KEY ); |
Für jede Klasse wird eine Tabelle erstellt. Jede Tabelle hat mindestens eine Spalte T_Id. Diese Spalte ist der Datenbank interne Primärschlüssel (und nicht die TID aus der Transferdatei). |
2 | CLASS A = END A; |
CREATE TABLE A ( T_Id integer PRIMARY KEY, T_Type varchar(60) NOT NULL ); |
Mit der Option --createTypeDiscriminator erhält jede Tabelle (die eine Klasse oder Struktur repräsentiert, die keine Basisklasse hat) eine zusätzliche Spalte T_Type. Diese Spalte enthält den konkreten Klassenname (der SQL-Name des qualifizierten INTERLIS-Klassennamens [2]) des Objektes jedes einzelnen Records. Tabellen für Klassen die eine Basisklasse haben, erhalten diese Spalte nicht. |
3 | CLASS A = END A; |
CREATE TABLE A ( T_Id integer PRIMARY KEY, T_LastChange timestamp NOT NULL, T_CreateDate timestamp NOT NULL, T_User varchar(40) NOT NULL ); |
Mit der Option --createStdCols erhalten alle Tabellen drei zusätzliche Spalten für den Zeitpunkt der letzten Änderung, den Zeitpunkt der Erstellung und den Benutzer, der die letzte Änderung durchgeführt hat. Diese Spalten müssen durch die Applikation nachgeführt werden, und werden typischerweise für die Implementierung eines optimistischen Lockings benötigt/benutzt. |
4 | CLASS A = END A; |
CREATE TABLE A ( T_Id integer PRIMARY KEY, T_Ili_Tid varchar(200) NULL ); |
Mit der Option --createTidCol erhält jede Tabelle (die eine Klasse repräsentiert, die keine Basisklasse hat) eine zusätzliche Spalte T_Ili_Tid. Diese Spalte enthält die TID aus der Transferdatei. Diese Spalte ist NICHT der Datenbank interne Primärschlüssel. |
5 | !!@ili2db.oid=MyOID CLASS A = END A; |
CREATE TABLE A ( T_Id integer PRIMARY KEY, T_Ili_Tid varchar(200) NULL ); |
Mit dem Metaattribut ili2db.oid erhält die Tabelle (die eine Klasse repräsentiert, die keine Basisklasse hat) eine zusätzliche Spalte T_Ili_Tid, wie wenn die Klasse eine OID hätte. Diese Spalte enthält die TID aus der Transferdatei. MyOID muss eine im Modell vorhandene OID-Domain Definition sein (z.b. INTERLIS.UUIDOID). Das Metaattribut steht typischerweise in einer externen Datei, die beim Schemaimport mit --iliMetaAttrs mitgegeben wird. Diese Spalte ist NICHT der Datenbank interne Primärschlüssel. |
6 | CLASS A = END A; |
CREATE TABLE A ( oidname integer PRIMARY KEY ); |
Mit der Option --t_id_Name oidname wird der Namen der Spalte für den Datenbank internen Primärschlüssel (nicht die Spalte für die TID aus der Transferdatei) festgelegt. |
7 | STRUCTURE C = END C; |
CREATE TABLE C ( T_Id integer PRIMARY KEY, T_seq integer NOT NULL ); |
Strukturen werden im Allgemeinen abgebildet wie Klassen. Die Strukturtabelle enthält zusätzlich eine Spalte T_seq, die die Reihenfolge der Strukturelement festlegt. Da Strukturelemente keine TID haben, erhalten sie auch mit der Option --createTidCol kein Spalte T_Ili_Tid. |
8 | CLASS A = END A; |
CREATE TABLE A ( T_Id integer PRIMARY KEY, T_basket integer NOT NULL ); |
Mit der Option --createBasketCol erhält jede Tabelle eine zusätzliche Spalte T_basket. Diese Spalte enthält den Fremschlüssel auf die Tabelle t_ili2db_basket. |
9 | CLASS A = END A; |
CREATE TABLE A ( T_Id integer PRIMARY KEY, T_datasetname varchar(200) NOT NULL ); |
Mit der Option --createDatasetCol erhält jede Tabelle eine zusätzliche Spalte T_datasetname. Die Spalte ist redunant zur Spalte datasetname der Tabelle t_ili2db_dataset (siehe Kapitel Abbildungsregeln/Metadaten) |
Im allgemeinen lässt sich Vererbung nach drei unterschidlichen Strategien abbilden:
- NewClass
- Diese Strategie ist für jede Klasse möglich. Bei dieser Strategie wird für eine Klasse eine neue Tabelle angelegt, ein Interlis-Objekt verteilt sich somit auf Records in mehreren Tabellen.
- SuperClass
- Diese Strategie ist nur für Klassen mit einer Super-Klasse möglich. Bei dieser Strategie wird für die Klasse keine neue Tabelle angelegt, d.h. die Attribute der Klasse werden als weitere Spalten in der Tabelle der Super-Klasse ergänzt.
- SubClass
- Diese Strategie ist nur für Klassen mit mindestens einer Sub-Klasse möglich. Bei dieser Strategie wird für eine Klasse keine neue Tabelle angelegt, d.h. die Attribute der Klasse werden als weitere Spalten in den Tabellen der Sub-Klassen ergänzt.
ili2db bildet die Vererbung nach einer je nach Klasse unterschiedlichen Strategie (--smart1Inheritance oder --smart2Inheritance) oder für alle Klassen einheitlich nach der NewClass-Strategie (--noSmartMapping) ab.
Bei --smart1Inheritance wird wie folgt abgebildet: Fuer Klassen, die referenziert werden und deren Basisklassen nicht mit einer NewClass-Strategie abgebildet werden, wird die NewClass-Strategie verwendet. Abstrakte Klassen werden mit einer SubClass-Strategie abgebildet. Konkrete Klassen, ohne Basisklasse oder deren direkte Basisklassen mit einer SubClass-Strategie abgebildet werden, werden mit einer NewClass-Strategie abgebildet. Alle anderen Klassen werden mit einer SuperClass-Strategie abgebildet.
Bei --smart2Inheritance wird wie folgt abgebildet: Abstrakte Klassen werden mit einer SubClass-Strategie abgebildet. Konkrete Klassen werden mit einer NewAndSubClass-Strategie abgebildet.
Nummer | Beispiel INTERLIS | Beispiel SQL | Kommentare |
---|---|---|---|
1 | CLASS A = Attribut_1 : TEXT*20; END A; CLASS B EXTENDS A = Attribut_2 : TEST*20; END B; |
CREATE TABLE A ( T_Id integer PRIMARY KEY, T_Type varchar(60) NOT NULL, Attribut_1 varchar(20) ); CREATE TABLE B ( T_Id integer PRIMARY KEY, Attribut_2 varchar(20) ); |
Bei --noSmartMapping wird für jede Klasse eine Tabelle erstellt. Ein Objekt A ergibt ein Record in Tabellen A. Ein Objekt B ergibt je ein Record in Tabellen A und B. Die T_Id ist bei beiden Records identisch. |
2 | CLASS A (ABSTRACT) = Attribut_1 : TEXT*20; END A; CLASS B EXTENDS A = Attribut_2 : TEST*20; END B; CLASS C EXTENDS B = Attribut_3 : TEST*20; END C; |
CREATE TABLE B ( T_Id integer PRIMARY KEY, T_Type varchar(60) NOT NULL, Attribut_1 varchar(20), Attribut_2 varchar(20), Attribut_3 varchar(20) ); |
Bei --smart1Inheritance wird für abstrakte Klassen (A) keine Tabelle erstellt (ausser sie wird referenziert). Für die allgemeinste konkrete Klasse (B) wird eine Tabelle erstellt. Für erweiterte konkrete Klassen (C), die eine konkrete Klasse erweitern, wird keine eigene Tabelle erstellt. |
3 | CLASS A (ABSTRACT) = Attribut_1 : TEXT*20; END A; CLASS B EXTENDS A = Attribut_2 : TEST*20; END B; CLASS C EXTENDS B = Attribut_3 : TEST*20; END B; |
CREATE TABLE B ( T_Id integer PRIMARY KEY, T_Type varchar(60) NOT NULL, Attribut_1 varchar(20), Attribut_2 varchar(20) ); CREATE TABLE C ( T_Id integer PRIMARY KEY, T_Type varchar(60) NOT NULL, Attribut_1 varchar(20), Attribut_2 varchar(20), Attribut_3 varchar(20) ); |
Bei --smart2Inheritance wird für abstrakte Klassen (A) keine Tabelle erstellt (auch nicht, wenn sie referenziert wird). Für konkrete Klassen (B und C) wird je eine vollständige Tabelle erstellt (inkl. geerbte Attribute). |
EXTENDED Attribute ergeben keine Spalte, nur die Basis-Definition des Attributs ergibt eine Spalte.
Nummer | Beispiel INTERLIS | Beispiel SQL | Kommentare |
---|---|---|---|
1 | textLimited : TEXT*10; textUnlimited : TEXT; mtextLimited : MTEXT*10; mtextUnlimited : MTEXT; |
textLimited varchar(10) NULL textUnlimited text NULL mtextLimited varchar(10) NULL mtextUnlimited text NULL |
|
2 | aufzaehlung : (null, eins, zwei, drei, mehr ( vier, fuenf, sechs, sieben, acht ,neun, zehn) ); |
aufzaehlung varchar(255) NULL |
Je nach Option, sind andere Abbildungen möglich. Siehe Kapitel Aufzählungen. |
3 | horizAlignment : HALIGNMENT; vertAlignment : VALIGNMENT; |
horizAlignment varchar(255) NULL vertAlignment varchar(255) NULL |
|
4 | aBoolean : BOOLEAN; |
aBoolean boolean NULL |
|
5 | numericInt : 0 .. 10; numericDec : 0.0 .. 10.0; |
numericInt integer NULL numericDec decimal(4,1) NULL |
|
6 | aTime : INTERLIS.XMLTime; aDate : INTERLIS.XMLDate; aDateTime : INTERLIS.XMLDateTime; |
aTime time NULL aDate date NULL aDateTime timestamp NULL |
|
7 | aOid : OID TEXT*30; aUuid : INTERLIS.UUIDOID; |
aOid varchar(255) NULL aUuid uuid NULL |
|
8 | aClass : CLASS; |
aClass varchar(255) NULL |
TODO
Beziehungen werden abhängig von der maximalen Kardinalität auf zwei Arten abgebildet:
- direkt als Fremdschlüssel bei einer der Tabellen, die die an der Assoziation beteiligten Klassen abbilden
- mit Hilfe einer Zwischentabelle, mit je einen Fremschlüssel auf die beteiligten Tabellen
Die Stärke der Beziehung (Assoziation, Aggregation oder Komposition) beeinflusst die Art der Abbildung nicht.
Nummer | Beispiel INTERLIS | Beispiel SQL | Kommentare |
---|---|---|---|
1 | CLASS A = END A; CLASS B = END B; ASSOCIATION a2b = role_A -- {0..1} ClassA; role_B -- {0..*} ClassB; END a2b; |
CREATE TABLE A ( T_Id integer PRIMARY KEY, ); CREATE TABLE B ( T_Id integer PRIMARY KEY, role_a integer REFERENCES A(T_id) ); |
Wenn die maximale Kardinalität bei einer der beiden Rollen nicht grösser als 1 ist, wird keine Zwischentabelle erstellt. |
2 | CLASS A = END A; CLASS B = END B; ASSOCIATION a2b = role_A -- {0..*} ClassA; role_B -- {0..*} ClassB; END a2b; |
CREATE TABLE A ( T_Id integer PRIMARY KEY, ); CREATE TABLE B ( T_Id integer PRIMARY KEY, ); CREATE TABLE a2b ( role_a integer REFERENCES A(T_id) role_b integer REFERENCES B(T_id) ); |
Wenn die maximale Kardinalität bei beiden Rollen grösser als 1 ist, wird eine Zwischentabelle erstellt. |
3 | CLASS A = END A; CLASS B = END B; ASSOCIATION a2b = role_A (EXTERNAL) -- {0..1} ClassA; role_B -- {0..*} ClassB; END a2b; |
CREATE TABLE A ( T_Id integer PRIMARY KEY, ); CREATE TABLE B ( T_Id integer PRIMARY KEY, role_a varchar(255) ); |
Wenn die Option --sqlExtRefCols benutzt wird, wird bei EXTERNAL statt der Fremdschlüsselspalte ein Text-Spalte erstellt, die den REF Wert aus der Transferdatei aufnimmt. So muss das refernzierte Objekt nicht importiert werden. |
TODO
TODO
TODO
Strukturen werden im Allgemeinen abgebildet wie Klassen (siehe Kapitel zu der Abbildung von Klassen). Strukturattribute (also wenn eine Struktur als Attributstyp verwendet wird, z.B. bei BAG OF oder LIST OF) werden unabhängig von der Kardinalität durch einen Fremdschlüssel bei der Tabelle der Struktur abgebildet. Bei gewissen Strukturen wird bei Smart-Mapping eine alternative Abbildung verwendet.
Nummer | Beispiel INTERLIS | Beispiel SQL | Kommentare |
---|---|---|---|
1 | STRUCTURE C = END C; CLASS D = attr1 : LIST OF C; attr2 : LIST OF C; END D; |
CREATE TABLE C ( T_Id integer PRIMARY KEY, T_seq integer NOT NULL, D_attr1 integer, D_attr2 integer ); CREATE TABLE D ( T_Id integer PRIMARY KEY ); |
Für jedes Strukturattribut wird in der Tabelle der Struktur eine Spalte für den Fremdschlüssel erstellt. Der Name der Spalte ist der qualifizierte INTERLIS-Attributnamen [3]. Die Strukturtabelle enthält zusätzlich eine Spalte T_seq die die Reihenfolge der Strukturelement festlegt. |
Beispiel XML:
|<BspTable.TopicA.D TID="2"> | <attr1> | <BspTable.TopicA.C> | </BspTable.TopicA.C> | <BspTable.TopicA.C> | </BspTable.TopicA.C> | </attr1> | <attr2> | <BspTable.TopicA.C> | </BspTable.TopicA.C> | </attr2> |</BspTable.TopicA.D>
Beispiel für Abbildungsvariante 1:
Tabelle C | |||
---|---|---|---|
t_id | t_seq | D_attr1 | D_attr2 |
7 | 0 | 6 | |
8 | 1 | 6 | |
9 | 0 | 6 |
Tabelle D | |
---|---|
t_id | T_Ili_Tid |
6 | 2 |
Bei den folgenden Strukturen wird bei Smart-Mapping für die Strukturattribute eine alternative Abbildung verwendet:
- Strukturen mit dem Interlis Metaattribut ili2db.mapping=MultiSurface
- Strukturen mit dem Interlis Metaattribut ili2db.mapping=MultiLine
- Strukturen mit dem Interlis Metaattribut ili2db.mapping=MultiPoint
- GeometryCHLV03_V1.MultiSurface
- GeometryCHLV03_V1.MultiLine
- GeometryCHLV03_V1.MultiDirectedLine
- GeometryCHLV95_V1.MultiSurface
- GeometryCHLV95_V1.MultiLine
- GeometryCHLV95_V1.MultiDirectedLine
- CatalogueObjects_V1.Catalogues.CatalogueReference
- CatalogueObjects_V1.Catalogues.MandatoryCatalogueReference
- Strukturen mit dem Interlis Metaattribut ili2db.mapping=Multilingual
- LocalisationCH_V1.MultilingualMText
- LocalisationCH_V1.MultilingualText
- Strukturen mit dem Interlis Metaattribut ili2db.mapping=Localised
- LocalisationCH_V1.LocalisedMText
- LocalisationCH_V1.LocalisedText
Für die Abbildung von Aufzählungen gibt es zwei Varianten und verschiedene Optionen.
- Variante 1 bei der der Aufzählwert als XTF-Code gespeichert wird
- Variante 2 bei der der Aufzählwert als ITF-Code gespeichert wird
- Optional kann eine zusätzliche Spalte erzeugt werden, die den Anzeigtext enthalten kann
- Optional können zusätzliche Tabellen erzeugt werden, die alle Aufzählwerte enthalten.
Nummer | Beispiel INTERLIS | Beispiel SQL | Kommentare |
---|---|---|---|
1 | farbe : (rot, blau, gruen); |
farbe varchar(255) NULL |
Default-Abbilung. Der XTF-Code (der Code wie er in der XTF-Transferdatei steht) wird als Aufzählwert in der Datenbank verwendet. Im Beispiel also: rot, blau oder gruen |
2 | farbe : (rot, blau, gruen); |
farbe integer NULL |
Abbilung mit der Option --createEnumColAsItfCode . Der ITF-Code (der Code
wie er in der ITF-Transferdatei steht) wird als Aufzählwert in der Datenbank
verwendet. Im Beispiel also: 0, 1 oder 2. Diese Option ist nur zulässig, wenn im
Modell keine Erweiterungen von Aufzählungen vorkommen. |
3 | farbe : (rot, blau, gruen); |
farbe varchar(255) NULL, farbe_txt varchar(255) NULL |
Abbilung mit der Option --createEnumTxtCol . Es wird eine zusätzliche Spalte
mit dem Attributnamen+``_txt`` erstellt (Im Besipiel art_txt ).
Die zusätzliche Spalte kann einen beliebigen Wert enthalten, der als Anzeigetext
gedacht ist. Beim Import wird die Spalte mit dem XTF-Code befüllt.
Die Option kann bei Variante 1 oder 2 benutzt werden. |
4 | DOMAIN Farbe : (rot, blau, !!@ili2db.dispName=grün gruen ); |
CREATE TABLE Farbe ( itfCode integer PRIMARY KEY, iliCode varchar(1024) NOT NULL, seq integer NULL, dispName varchar(250) NOT NULL, description varchar(1024) NULL, inactive boolean NOT NULL ); |
Abbildung mit der Option itfCode ist der ITF-Code des Aufzählwertes. iliCode ist der qualifizierte Elementnamen (=XTF-Code) des Aufzählwertes. seq Definiert die Reihenfolge der Aufzählelemente. dispName definiert den Anzeigetext für das Aufzählelement. Beim Import wird die Spalte mit dem XTF-Code befüllt. Falls das Aufzählelement das Metaattribut @ili2db.dispName hat, wird dessen Wert verwendet. description enthält die Beschreibung des Aufzählelements. Beim Import wird die Spalte mit dem ilidoc Kommentar aus dem Modell befüllt. inactive TRUE um einen Aufzählwert für die Erfassung auszublenden, ohne dass er gelöscht werden muss. Wird beim Import mit FALSE befüllt. |
5 | DOMAIN Farbe : (rot, blau, !!@ili2db.dispName=grün gruen ); |
CREATE TABLE T_ILI2DB_ENUM ( thisClass varchar(1024) NOT NULL, baseClass varchar(1024) NOT NULL, itfCode integer NOT NULL, iliCode varchar(1024) NOT NULL, seq integer NULL, dispName varchar(250) NOT NULL, description varchar(1024) NULL, inactive boolean NOT NULL ); |
Abbildung mit der Option thisClass ist der qualifizierte Namen der Aufzählungsdefinition. baseClass ist der qualifizierte Namen der Basis-Aufzählungsdefinition itfCode ist der ITF-Code des Aufzählwertes. iliCode ist der qualifizierte Elementnamen (=XTF-Code) des Aufzählwertes. seq Definiert die Reihenfolge der Aufzählelemente. dispName definiert den Anzeigetext für das Aufzählelement. Beim Import wird die Spalte mit dem XTF-Code befüllt. Falls das Aufzählelement das Metaattribut @ili2db.dispName hat, wird dessen Wert verwendet. description enthält die Beschreibung des Aufzählelements. Beim Import wird die Spalte mit dem ilidoc Kommentar aus dem Modell befüllt. inactive TRUE um einen Aufzählwert für die Erfassung auszublenden, ohne dass er gelöscht werden muss. Wird beim Import mit FALSE befüllt. |
6 | DOMAIN Farbe : (rot, blau, !!@ili2db.dispName=grün gruen ); |
CREATE TABLE Farbe ( T_Id integer PRIMARY KEY, thisClass varchar(1024) NOT NULL, baseClass varchar(1024) NOT NULL, itfCode integer NOT NULL, iliCode varchar(1024) NOT NULL, seq integer NULL, dispName varchar(250) NOT NULL, description varchar(1024) NULL, inactive boolean NOT NULL ); |
Abbildung mit der Option thisClass ist der qualifizierte Namen der Aufzählungsdefinition. baseClass ist der qualifizierte Namen der Basis-Aufzählungsdefinition itfCode ist der ITF-Code des Aufzählwertes. iliCode ist der qualifizierte Elementnamen (=XTF-Code) des Aufzählwertes. seq Definiert die Reihenfolge der Aufzählelemente. dispName definiert den Anzeigetext für das Aufzählelement. Beim Import wird die Spalte mit dem XTF-Code befüllt. Falls das Aufzählelement das Metaattribut @ili2db.dispName hat, wird dessen Wert verwendet. description enthält die Beschreibung des Aufzählelements. Beim Import wird die Spalte mit dem ilidoc Kommentar aus dem Modell befüllt. inactive TRUE um einen Aufzählwert für die Erfassung auszublenden, ohne dass er gelöscht werden muss. Wird beim Import mit FALSE befüllt. |
Einzelne Abbildungen können direkt im Modell über Metaaatribute konfiguriert werden.
Metaattribute stehen unmittelbar vor dem Modellelement das sie betreffen und beginnen mit !!@
.
Falls der Wert (rechts von `=`
) aus mehreren durch Leerstellen getrennten Wörtern besteht, muss er mit Gänsefüsschen eingerahmt werden (`"..."`
).
Modelelement | Metaattribut | Beschreibung |
---|---|---|
AttributeDef | ili2db.mapping |
Strukturattribute mit diesem Meta-Attribut werden als Spalte mit dem Datentyp Array oder JSON abgebildet. D.h. es gibt keine weiteren Records in einer Hilfstabelle. Siehe auch Programm-Optionen --coalesceArray und --coalesceJson. Mögliche Werte: ARRAY, JSON |
ClassDef | ili2db.mapping |
Strukturen mit diesem Meta-Attribut werden als Spalte mit dem enstprechenden Multi-Geometrie Datentyp abgebildet. D.h. es gibt keine weiteren Records in einer Hilfstabelle. Mögliche Werte: MultiSurface, MultiLine, MultiPoint |
ClassDef, AttributeDef, EnumElement | ili2db.dispName |
Definiert den Anzeigetext für das entsprechende Modell-Element. Für Aufzählelemente ist es der Wert der Saplte dispName in der jeweiligen Tabelle mit den Aufzählwerten. Für Klassen ist es in der Tabelle t_ili2db_table_prop der Wert mit dem Tag ch.ehi.ili2db.dispName. Für Attribute ist es in der Tabelle t_ili2db_column_prop der Wert mit dem Tag ch.ehi.ili2db.dispName. |
ClassDef | ili2db.oid |
Mit dem Metaattribut ili2db.oid erhält die Tabelle (die eine Klasse repräsentiert, die keine Basisklasse hat) eine zusätzliche Spalte T_Ili_Tid, wie wenn die Klasse eine OID hätte. Siehe auch Klassen/Strukturen. |
Ein Modell kann beliebige weitere Metaattribute enthalten; diese werden
durch ili2db beim Schemaimpot in t_ili2db_meta_attrs abgelegt.
Mit Hilfe der Option --iliMetaAttrs
können beliebige weitere Metaattribute
definiert werden, ohne das Modell (die ili-Datei) zu ändern.
In der Meta-Konfigurationsdatei werden die folgenden Parameter unterstützt (hier nicht aufgeführte Kommandozeilenargument werden in der Meta-Konfiguration nicht unterstützt). Im Aufruf evtl. vorhandene Kommandozeilenargumente übersteuern die Angaben in der Meta-Konfigurationsdatei.
Konfiguration | Beispiel | Beschreibung |
---|---|---|
baseConfig | [CONFIGURATION]
baseConfig=ilidata:DatesetId
|
Basis-Meta-Konfiguration, auf der die aktuelle Meta-Konfiguration aufbaut.
Statt Mehrere Basiskonfigurationen werden mit einem Strichpunkt ";" getrennt. |
org.interlis2.validator.config | [CONFIGURATION]
org.interlis2.validator.config=ilidata:DatesetId
|
Validierungs-Konfiguration, die benutzt werden soll.
Statt Mehrere Validierungs-Konfigurationen werden mit einem Strichpunkt ";" getrennt. |
ch.interlis.referenceData | [CONFIGURATION]
ch.interlis.referenceData=ilidata:DatesetId
|
Basis-Daten (z.B. Kataloge), die benutzt werden sollen.
Statt Mehrere Basis-Daten werden mit einem Strichpunkt ";" getrennt. |
models | [ch.ehi.ilivalidator]
models=Simple23
|
Entspricht dem Kommandozeilenargument --models .
Hier nicht aufgeführte Kommandozeilenargument werden in der Meta-Konfiguration
nicht unterstützt.
models
exportModels
exportCrsModels
nameLang
dataset
baskets
topics
defaultSrsAuth
defaultSrsCode
modelSrsCode
multiSrs
domains
altSrsModel
validConfig
disableValidation
disableAreaValidation
disableRounding
disableBoundaryRecoding
forceTypeValidation
createSingleEnumTab
createEnumTabs
createEnumTabsWithId
createEnumTxtCol
createEnumColAsItfCode
beautifyEnumDispName
noSmartMapping
smart1Inheritance
smart2Inheritance
coalesceCatalogueRef
coalesceMultiSurface
coalesceMultiLine
coalesceMultiPoint
coalesceArray
coalesceJson
expandMultilingual
expandLocalised
createFk
createFkIdx
createUnique
createNumChecks
createTextChecks
createDateTimeChecks
createMandatoryChecks
createImportTabs
createStdCols
t_id_Name
idSeqMin
idSeqMax
createTypeDiscriminator
createGeomIdx
disableNameOptimization
nameByTopic
maxNameLength
sqlColsAsText
sqlEnableNull
sqlExtRefCols
strokeArcs
skipPolygonBuilding
skipReferenceErrors
skipGeometryErrors
keepAreaRef
createTidCol
importTid
exportTid
importBid
exportFetchSize
importBatchSize
createBasketCol
createDatasetCol
ILIGML20
ver3-translation
translation
createMetaInfo
iliMetaAttrs
createTypeConstraint |
Beispiel für eine Meta-Konfigurationsdatei:
[CONFIGURATION] ch.interlis.referenceData=ilidata:63553eb4-a0dc-48eb-8596-ca1aa9bdbc0f [ch.ehi.ili2db] models=Simple23 defaultSrsCode = 2056 smart2Inheritance = true strokeArcs = false createBasketCol = true
Tabelle | Beschreibung |
---|---|
t_ili2db_attrname | Abbildung von Attributnamen |
t_ili2db_basket | In der Datenbank vorhandene Baskets. Wird benötigt, wenn die Option --createBasketCol verwendet wird. |
t_ili2db_classname | Abbildung der qualifizierten Interlis Klassennamen auf Sql-Namen. Nicht aus jedem Eintrag gibt es eine Datenbank-Tabelle, je nach Abbildungsart der Interlis-Klasse wird der Sql-Name nur als Inhalt der Spalte t_type verwendet. |
t_ili2db_dataset | In der Datenbank vorhandene Datensätze (Sammlung von Baskets). Wird benötigt, wenn die Option --createBasketCol verwendet wird. |
t_ili2db_import | Nicht mehr verwenden, wird entfernt. Wird beim Export nicht benötigt. |
t_ili2db_import_basket | Nicht mehr verwenden, wird entfernt. Wird beim Export nicht benötigt. |
t_ili2db_import_object | Nicht mehr verwenden, wird entfernt. Wird beim Export nicht benötigt. |
t_ili2db_inheritance | Abbildung der Interlis Klassen Vererbungshierarchie (in der Tabellen sind die qualifizierten Interlis Klassennamen). Wird beim Export nicht benötigt. |
t_ili2db_enum | Aufzählwerte, falls die Option --createSingleEnumTab verwendet wird. Wird beim Export nicht benötigt. |
t_ili2db_model | Modelle, die beim Import benötigt wurden (so dass der Export mit denselben Modellen erfolgen kann). |
t_ili2db_settings | Programmeinstellungen für ili2db |
t_ili2db_trafo | Konfiguration der semantischen Abbildung (insb. der Vererbung) |
t_ili2db_table_prop | Weitere Angaben zu den DB-Tabellen aus dem Interlis Modell (z.B. ob es eine Tabelle mit Aufzählwerten ist). Wird nur erstellt mit Option --createMetaInfo. |
t_ili2db_column_prop | Weitere Angaben zu den DB-Spalten aus dem Interlis Modell (z.B. ob es MTEXT ist). Wird nur erstellt mit Option --createMetaInfo. |
t_ili2db_nls | Mehrsprechige Daten je Modell-Element; z.B. der Name . Wird nur erstellt mit der Option --createNlsTab. |
t_ili2db_meta_attrs | Interlis-Meta-Attribute (auch für Modell-Elemente, denen kein DB-Element entspricht; z.B. die einem FK gegenüberliegende Rolle). Wird nur erstellt mit der Option --createMetaInfo. |
t_key_object | Hilfstabelle für den ID-Generator. Wird beim Export nicht benötigt. |
TODO alle Tabelle beschreiben
Angaben zu den einzelnen Behältern (Ein Behälter ist eine Instanz eines TOPICs).
- t_id Diese Spalte ist der Datenbank interne Primärschlüssel (und nicht die BID aus der Transferdatei). Wird mit der Option --createBasketCol von den einzelnen Records für die Objekte via Spalte t_basket referenziert.
- dataset Fremdschlüssel auf die Tabelle t_ili2db_dataset
- topic Der qualifizierte Name des Interlis-TOPICs.
- t_ili_tid BID aus der Transferdatei falls das Topic ein stabild BID hat (BASKET OID AS) oder die Option --importBid beim Datenimport benutzt wurde. Wird beim Datenexport mittels --baskets benutzt, um zu ermitteln, welche Objekte exportiert werden sollen.
- attachmentKey Nicht mehr verwenden, wird entfernt. (Als Pfad-Prefix für Zusatzdatein zu diesem Behälter gedacht.)
Weitere Angaben zu den DB-Spalten aus dem Interlis Modell (z.B. ob es MTEXT ist). Wird nur erstellt mit Option --createMetaInfo. Die Tabelle ist so aufgebaut, dass sie beliebige (auch zukünftige) Werte/Zusatzangaben aufnehmen kann.
- tablename Name der Tabelle
- columnname Name der Spalte
- subtype Name des Subtyps (Inhalt der Spalte t_type), falls die Angabe nicht für alle Klassen gilt
- tag Name des Wertes/der Zusatzinformation
- setting Wert/Zusatzinformation
Tag | Beschreibung |
---|---|
ch.ehi.ili2db.typeKind |
Art des Interlis Datentyps. Mögliche Werte:
Generell: Domain basiert oder Inline wird nicht unterschieden. |
ch.ehi.ili2db.c1Min |
Bei Geometriespalten der Minimalwert der 1. Dimension |
ch.ehi.ili2db.c1Max |
Bei Geometriespalten der Maximalwert der 1. Dimension |
ch.ehi.ili2db.c2Min |
Bei Geometriespalten der Minimalwert der 2. Dimension |
ch.ehi.ili2db.c2Max |
Bei Geometriespalten der Maximalwert der 2. Dimension |
ch.ehi.ili2db.c3Min |
Bei Geometriespalten der Minimalwert der 3. Dimension |
ch.ehi.ili2db.c3Max |
Bei Geometriespalten der Maximalwert der 3. Dimension |
ch.ehi.ili2db.geomType |
Bei Geometriespalten die Art der Geometrie. Mögliche Werte: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING MULTIPOLYGON, GEOMETRYCOLLECTION, CIRCULARSTRING COMPOUNDCURVE, CURVEPOLYGON, MULTICURVE, MULTISURFACE POLYHEDRALSURFACE, TIN, TRIANGLE |
ch.ehi.ili2db.srid |
Bei Geometriespalten der EPSG Code |
ch.ehi.ili2db.coordDimension |
Bei Geometriespalten die Dimension der Geometrie |
ch.ehi.ili2db.dispName |
Benutzerfreundliche Bezeichnung der Spalte (z.B. im UI) |
ch.ehi.ili2db.textKind |
Falls mehrzeilige Textspalte, der Wert MTEXT |
ch.ehi.ili2db.unit |
Name der numerischen Einheit z.B. m |
ch.ehi.ili2db.foreignKey |
Bei Fremdschlüsseln der Name der Zieltabelle. Damit auch
ohne --createFk die Beziehungen ermittelt werden können |
ch.ehi.ili2db.enumDomain |
Bei Aufzählungsattributen der Name der konkreten Aufzählung. Damit auch bei erweiterten Attributen/Aufzählungen die für die Subklasse relevante Aufzählung ermittelt werden kann |
ch.ehi.ili2db.oidDomain |
Bei Klassen mit OID der qualifizierte Name des OID-Wertebereichs (z.B. INTERLIS.UUIDOID) |
Mehrsprechige Daten je Modell-Element.
Wird nur erstellt mit der Option --createNlsTab
.
- ilielement Qualifizierter Name des betroffenen Interlis-Elements in der Wurzel-Original-Sprache (dem Modell, das keine Übersetzung ist)
- lang Sprachcode
- uivariant Code für unterschiedliche Benutzer-Schnittstellen (z.B. kleiner/grosser Bildschirm) (
ili
für Einträge die durch den Modellimport erzeugt werden) - label Name des Elementes (oder Meta-Attrubut ili2db.dispName (bzw. ili2db.dispName_{LANG}) falls vorhanden)
- mnemonic Tastenkürzel oder Kurzname des Elementes
- tooltip kurze Beschreibung des Elementes
- descr längere Beschreibung des Elementes
- symbol Symbol des Elementes(z.B. für Werkzeugleiste)
Weitere Angaben zu den DB-Tabellen aus dem Interlis Modell (z.B. ob es eine Tabelle mit Aufzählwerten ist). Wird nur erstellt mit Option --createMetaInfo.
- tablename Name der Tabelle
- tag Name des Wertes/der Zusatzinformation
- setting Wert/Zusatzinformation
Tag | Beschreibung |
---|---|
ch.ehi.ili2db.dispName |
Benutzerfreundliche Bezeichnung der Tabelle (z.B. im UI) |
ch.ehi.ili2db.tableKind |
Art/Zweck der Tabelle
|
Interlis-Meta-Attribute (auch für Modell-Elemente, denen kein DB-Element
entspricht; z.B. die einem FK gegenüberliegende Rolle).
Diese Tabelle wird nur erstellt
mit der Option --createMetaInfo
.
Die Tabelle enthält auch von ili2db aufgrund des Modells generierte
Meta-Attribute (z.B. Kardinaliät einer Rolle). Die Namen dieser generierten
Meta-Attribute beginnen
mit ili2db.ili.
.
- ilielement Qualifizierter Name des betroffenen Interlis-Elements
- attr_name Name des Meta-Attributs
- attr_value Wert des Meta-Attributs
Von ili2db werden automatisch aufgrund des Interlis-Modells folgende Meta-Attribute generiert:
Tag | Beschreibung |
---|---|
ili2db.ili.lang |
Sprache der Namen der Modellelemente (gemäss INTERLIS-Modell). |
``ili2db.ili.translationOf `` | Names des Modells in der Ursprungssprache, falls es
übersetzt ist (TRANLSLATION OF ) |
ili2db.ili.topicClasses |
Lister der in einem Behälter möglichen Objekte (als Leerzeichen getrennte Liste der SQL-Namen der Klassen) |
ili2db.ili.attrCardinalityMin |
minimum Anzahl Werte eines Attributes |
ili2db.ili.attrCardinalityMax |
maximum Anzahl Werte eines Attributes |
ili2db.ili.assocCardinalityMin |
minimum Anzahl Objekte zu einer Bezeihungs-Rolle |
ili2db.ili.assocCardinalityMax |
maximum Anzahl Objekte zu einer Beziehungs-Rolle |
ili2db.ili.assocKind |
Stärke der Rolle
|
Die Abbildung der Klassennamen in Tabellennamen erfolgt nach drei möglichen Strategien:
- Unqualifiziert
- Es wird der Klassennamen verwendet (ohne voranstellen von Topic- und/oder Model-Namen). Falls der Name schon benutzt ist, wird der voll qualifizierte Name verwendet.
- Mit Topic qualifiziert
- Dem unqualifizierten Klassennamen wird der Topic-Name vorangestellt. Falls der Name schon benutzt ist, wird der voll qualifizierte Name verwendet.
- Voll qualifiziert
- Der Tabellenname wird aus Model-, Topic- und Klassenname zusammengesetzt.
Falls der Tabellenname zu lang ist, wird er gekürzt, in dem die Vokale entfernt werden (ausser die ersten beiden und letzten beiden Buchstaben). Falls er danach immer noch zu lang ist, werden in der der Mitte des Namens Buchstaben entfernt.
Falls der Tabellenname nun einem SQL-Schlüsselwort entspricht, wird er um ein führeneds ‚a‘ ergänzt.
Falls der Tabellenname nun nicht eindeutig ist, wird er um eine Ziffer ergänzt: ‚0‘, ‚1‘, usw. bis er eindeutig ist.
Die automatische Namensabbildung kann übersteuert werden, indem vor dem ersten Import entsprechende Einträge in der Tabelle t_ili2db_classname gemacht werden.
[1] | GML 3.2; die verwendeten Kodierungsregeln entsprechen eCH-0118-1.0 |
[2] | Der SQL-Name ergibt sich aus den Namenskonventionen. Die konkrete Übersetzung ist in der Tabelle T_ILI2DB_CLASSNAME hinterlegt. |
[3] | Der SQL-Name ergibt sich aus den Namenskonventionen. Die konkrete Übersetzung ist in der Tabelle T_ILI2DB_ATTRNAME hinterlegt. |
[4] | Der SQL-Name ergibt sich aus den Namenskonventionen. Die konkrete Übersetzung ist in der Tabelle T_ILI2DB_CLASSNAME hinterlegt. |