11. Modul IL2IN - INTERLIS 2 lesen

11.1. Allgemeines

Mit dem Modul IL2IN können Objekte aus einer INTERLIS 2 .xtf Datei gelesen werden. Der Modul interpretiert neben der .xtf Datei auch die zugehörigen INTERLIS 2 Datenmodelle (.ili Dateien). Jedes Objekt wird von IL2IN auf seine Konsistenz gegenüber den INTERLIS 2 Datenmodellen überprüft. Falls z.B. zwingende Attribute vergessen oder falsche Attributwerte gefunden werden, werden entsprechende Fehlermeldungen ausgegeben.

IL2IN wird mit:

|INCL \script\il2in.mod

in einer ICS RUN1-Konfiguration verfügbar gemacht.

11.2. Abhängigkeiten von anderen Modulen

Keine Abhängigkeiten vorhanden.

11.3. Parametermap IL2IN_PARAM

Folgende Parameter können in der Map IL2IN_PARAM für den Modul IL2IN gesetzt werden:

Parameterreq/optBeschreibung
FORCE_COMPILErFalls dieser Parameter auf ON (Default = OFF) gesetzt wird, werden die INTERLIS Datenmodelle jedes mal mit dem INTERLIS 2.2 Compiler analysiert. Falls die Option auf OFF gesetzt ist, wird zuerst nachgeschaut ob bereits eine vorcompilierte Version des Modells existiert (.ilo und .ilp Datei). Das Laden von vorcompilierten Modelldateien ist viel schneller möglich, daher ist die Option normalerweise auf OFF gesetzt.
MODELSr

Mit dieser Option kann man angeben, wie die zum Datensatz gehörigen Modelldateien bestimmt werden. XTF bedeutet, dass die Modelle automatisch aus der gewählten .xtf Datei bestimmt werden. Dazu wird wie folgt vorgegangen:

  • Es wird nach dem letzten ALIAS ENTRIES Element der HEADERSECTION gesucht und aus diesem der Name des Hauptmodells gelesen. Falls keine ALIAS ENTRIES in der .xtf Datei vorhanden sind, wird der Modellname des Hauptmodells aus dem ersten Objekt-Tag der DATASECTION extrahiert.

  • Das Hauptmodell wird zuerst in \user\models2 dann in \system\models2 gesucht. Falls das Hauptmodell gefunden wird, wird das Hauptmodell nach IMPORTS durchsucht und so die allfälligen Basismodelle bestimmt. Für die Basismodelle wird ebenso verfahren.

  • Der INTERLIS 2.2 Compiler wird automatisch mit den so bestimmten Modellen aufgerufen.

Normalerweise funktioniert das oben beschriebene Verfahren gut und ist ausserdem sehr praktisch in der Benutzung. Es kann aber sein, dass man in bestimmten Fällen die automatische Bestimmung der Datenmodelle ausschalten möchte. In diesem Fall kann man unter MODELS auch eine Liste von Datenmodelldateien in der korrekten Reihenfolge für den INTERLIS 2.2 Compiler angeben. Beispiel:

MODELS => units.ili,time.ili,coordsys.ili,dm01avch24d.ili

Die Dateien werden ebenfalls zuerst in \user\models2 dann in \system\models2 gesucht.

MODEL_NAMErUnter MODEL_NAME kann man den Namen eines Basismodells des Hauptmodells angeben (z.B. DM01AVCH24D für eine kantonale Erweiterung). Das Lesen der Daten findet dann nur gemäss den Regeln des Basismodells statt (polymorpher Leser). Hinweis: Dieses Feature ist noch nicht verfügbar, weil die benutzte C-Bibliothek IOM (INTERLIS Object Model) dieses Feature noch nicht vollständig unterstüzt.
MODEL_DIRrNormalerweise werden Modelldateien (.ili) zuerst in \user\models2 ge-sucht. Mit der Option MODEL_DIR kann man einen alternativen (User-)Suchpfad angeben (Default = OFF).
TRACErFalls dieser Parameter auf ON (Default = OFF) gesetzt wird, wird für jedes von IOM gelesene Ob-jekt (IOM = INTERLIS Object Model) eine Meldung in die Logdatei aus-gegeben.
STATISTICSoObjektstatistik am Ende der .log Datei ausgeben (Default = OFF).
DEBUGoON oder OFF. Debugmodus ein oder aus (Default = OFF).

11.4. Objektmodell

Komponenten für jedes IN-Objekt
Komponentereq/optBeschreibung
IN.MODEL(s)rModel des IN Objekts.
IN.TOPIC(s) r

Topic des IN-Objekt

IN.CLASS(s) r

Tabelle des IN-Objekts.

IN.TID(s)rTransferidentifikation des IN-Objekts .
IN.LINE(i)rZeilennummer des Objekts in der Inputdatei.
Weitere Komponenten

Die restlichen Objektkomponenten sind abhängig vom dazughörigen INTERLIS Modell (s.a. IN.MODEL, IN.TOPIC bzw. IN.CLASS). Alle INTERLIS Attribute werden als Kompontenten des IN-Objekts mit dem gleichem Namen geliefert. Die INTERLIS Datentypen werden wie folgt auf ICS Datentypen abgebildet:

INTERLIS DatentypICS Datentyp
NUMBERreal oder int.
TEXT

string.

ENUMERATION

string.

STRUCTUREmap. Das XML-Tag der Struktur kann dem Label der Map entnommen werden (mit GET_LABEL).
LISTlist of map. Die XML-Tags der Sturkturelemente können den Labeln der Maps entnommen werden.
BAGlist of map. Die XML-Tags der Strukturelemente können den Labeln der Maps entnommen werden.
ROLElink.

11.5. Exportierte Prozeduren und Methoden

ProzedurIL2IN_OPEN ! [s input][]
BeschreibungÖffnet eine bestehende INTERLIS 2 Datei <input> und initialisiert den Modul. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
IL2IN_OPEN
ProzedurIL2IN_READ_OBJECT ! [b state][]
Beschreibung

Liest das nächste IN-Objekt aus der geöffneten INTERLIS 2 Datei. Die Prozedur wird von RUN1 automatisch aufgerufen.

Beispiel
IL2IN_READ_OBJECT [TRUE]
ProzedurIL2IN_RESET_READ_REF ! [s tid][]
Beschreibung

Bereitet das Lesen von Objekten, welche mit dem Objekt mit der Transferidentifikation <tid> via ASSOCIATION's verbunden sind, vor.

Beispiel
IN.TID IL2IN_RESET_READ_REF []
ProzedurIL2IN_READ_NEXT_REF ! [s tid][o object,b state]
Beschreibung

Liest das nächste Objekt, welches via eine ASSOCIATION mit dem Objekt mit der Transferidentifikation <tid> verbunden ist.

Beispiel
! display all objects linked with IN.TID
IN.TID IL2IN_RESET_READ_REF
WHILE IN.TID IL2IN_READ_NEXT_REF DO
   => VAR.OBJECT
   DISPLAY VAR.OBJECT
END_WHILE
ProzedurIL2IN_CLOSE ! [][]
BeschreibungSchliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
IL2IN_CLOSE

11.6. Skriptbeispiel

! Diese ICS Konfiguration zeigt alle von il2in.mod
! gelesenen Objekte in der .log Datei an.

|LICENSE \license\iltools.lic

MAP USER_INPUT1
   DIALOG => FILE ! FILE | STRING | ODBC
   MESSAGE => 'Enter .xtf Input File'
   FILE_FILTER => xtf
   FILE_EXISTS => TRUE
   OPT => input
END_MAP

MAP IL2IN_PARAM
   INPUT_EXTENSION => xtf
   MODELS          => XTF
   MODEL_NAME      => OFF
   FORCE_COMPILE   => OFF
   TRACE           => OFF
   STATISTICS      => ON
END_MAP

MAP INPUT_SOURCES
   I1 => IL2IN,OPT.input
END_MAP

MAP INOUT
   I1 => DISPLAY_OBJECT1,IN
END_MAP

|INCL \script\util.lib
|INCL \script\il2in.mod
|INCL \script\run1.prg