Demo
Demo-Suite
Die Demo-Suite wird mit ilitransformer ausgeliefert (Ordner demo) und ist der beste Einstieg. Jedes der neun Beispiele ist in sich geschlossen und enthält Modell, Eingabedaten, Mapping und erwartetes Ergebnis.
| Demo | Thema | Schwerpunkt |
|---|---|---|
| 01 | Hello Copy | direkte Kopie, trim, upper, einfache Attribute |
| 02 | String-Funktionen | lower, replace, truncate, default |
| 03 | Zahlen und Einheiten | div, mul, round, toNumber |
| 04 | Enumerationen | enumMap, Defaults und strikte Werte |
| 05 | Bedingungen und Nulls | if, defined, Vergleiche, Filter |
| 06 | Datumswerte | XMLDate, XMLDateTime, Konvertierungen |
| 07 | Bags und Structures | BAG OF, LIST OF, parentRef |
| 08 | Assoziationen und Referenzen | ref, join, lookup, existsIn |
| 09 | OID, Basket, Loss | OID-Strategien, Metadaten, create, dokumentierter Verlust |
Empfehlung
Lesen Sie die Beispiele in Reihenfolge. Die ersten sechs Demos erklären die Ausdruckssprache. Die letzten drei zeigen die Teile, die für echte INTERLIS-Transformationen besonders wichtig sind.
Demo 01 – Hello Copy
Das erste Beispiel kopiert zwei Source-Objekte in Target-Objekte und demonstriert den grundlegenden Aufbau eines .ilimap-Profils.
INTERLIS-Modell (models/hello.ili)
INTERLIS 2.4;
MODEL HelloDemo (en)
AT "https://demo.ilinexus.ch" VERSION "2026-06-22" =
TOPIC Persons =
BASKET OID AS INTERLIS.UUIDOID;
OID AS INTERLIS.UUIDOID;
CLASS Source =
Name: MANDATORY TEXT*60;
Anzahl: 0 .. 9999;
Aktiv: BOOLEAN;
END Source;
CLASS Target =
Label: MANDATORY TEXT*60;
LabelGross: TEXT*60;
Anzahl: 0 .. 9999;
Aktiv: BOOLEAN;
END Target;
END Persons;
END HelloDemo.Eingabedaten (data/input.xtf)
<?xml version="1.0" encoding="UTF-8"?>
<ili:transfer
xmlns:ili="http://www.interlis.ch/xtf/2.4/INTERLIS"
xmlns:HelloDemo="http://www.interlis.ch/xtf/2.4/HelloDemo">
<ili:headersection>
<ili:models>
<ili:model>HelloDemo</ili:model>
</ili:models>
<ili:sender>demo</ili:sender>
</ili:headersection>
<ili:datasection>
<HelloDemo:Persons ili:bid="00000000-0000-0000-0000-0000000000b1">
<HelloDemo:Source ili:tid="00000000-0000-0000-0000-000000000001">
<HelloDemo:Name> Alice Mueller </HelloDemo:Name>
<HelloDemo:Anzahl>42</HelloDemo:Anzahl>
<HelloDemo:Aktiv>true</HelloDemo:Aktiv>
</HelloDemo:Source>
<HelloDemo:Source ili:tid="00000000-0000-0000-0000-000000000002">
<HelloDemo:Name>Bob Meier</HelloDemo:Name>
<HelloDemo:Anzahl>7</HelloDemo:Anzahl>
<HelloDemo:Aktiv>false</HelloDemo:Aktiv>
</HelloDemo:Source>
</HelloDemo:Persons>
</ili:datasection>
</ili:transfer>Mapping-Profil (profile.ilimap)
mapping v2 "demo-01-hello-copy" {
job {
description "1:1-Kopie mit skalaren Attributen und einfachen String-Expressions";
modeldir "models/";
}
input src {
path "data/input.xtf";
model "HelloDemo";
}
output tgt {
path "output.xtf";
model "HelloDemo";
}
oid {
strategy uuid;
}
rule copy {
target tgt class "HelloDemo.Persons.Target";
source s from src class "HelloDemo.Persons.Source";
assign {
Label = trim(s.Name);
LabelGross = upper(trim(s.Name));
Anzahl = s.Anzahl;
Aktiv = s.Aktiv;
}
}
}Transformation ausführen
Die folgenden Befehle werden aus dem Wurzelverzeichnis der entpackten ilitransformer-Distribution ausgeführt. Das Mapping-Profil deklariert modeldir, Eingabe- und Ausgabepfade relativ zu seiner eigenen Position – die Befehle funktionieren daher ohne cd in das Demo-Verzeichnis.
# 1. Mapping prüfen (Syntax und Semantik, Trockenlauf ohne Ausführung)
./bin/ilitransformer validate-mapping -m demo/01-hello-copy/profile.ilimap
# 2. Transformation ausführen (erzeugt output.xtf)
./bin/ilitransformer transform -m demo/01-hello-copy/profile.ilimap
# 3. Transformation ausführen und Ausgabe mit ilivalidator prüfen
./bin/ilitransformer transform -m demo/01-hello-copy/profile.ilimap --validatevalidate-mappingliest das Profil, kompiliert die Modelle und meldet Syntaxfehler sowie semantische Probleme – ohne eine Transferdatei zu schreiben.transformführt die Regeln aus und schreibtoutput.xtfin dasselbe Verzeichnis wie das Profil.--validateruft nach der Transformationilivalidatorals In-Process-Java-Bibliothek auf und meldet Modellverletzungen in der Ausgabe.
Erwartete Ausgabe (output.xtf)
Die Transformation erzeugt zwei Target-Objekte mit bereinigten Namen. Die OIDs werden automatisch vergeben (UUID-Strategie) und variieren bei jedem Lauf.
<?xml version="1.0" encoding="UTF-8"?>
<ili:transfer
xmlns:ili="http://www.interlis.ch/xtf/2.4/INTERLIS"
xmlns:HelloDemo="http://www.interlis.ch/xtf/2.4/HelloDemo">
<ili:headersection>
<ili:models>
<ili:model>HelloDemo</ili:model>
</ili:models>
<ili:sender>ilitransformer</ili:sender>
</ili:headersection>
<ili:datasection>
<HelloDemo:Persons ili:bid="4e5a1c80-0000-0000-0000-0000000000b1">
<HelloDemo:Target ili:tid="a1b2c3d4-0000-0000-0000-000000000001">
<HelloDemo:Label>Alice Mueller</HelloDemo:Label>
<HelloDemo:LabelGross>ALICE MUELLER</HelloDemo:LabelGross>
<HelloDemo:Anzahl>42</HelloDemo:Anzahl>
<HelloDemo:Aktiv>true</HelloDemo:Aktiv>
</HelloDemo:Target>
<HelloDemo:Target ili:tid="e5f6g7h8-0000-0000-0000-000000000002">
<HelloDemo:Label>Bob Meier</HelloDemo:Label>
<HelloDemo:LabelGross>BOB MEIER</HelloDemo:LabelGross>
<HelloDemo:Anzahl>7</HelloDemo:Anzahl>
<HelloDemo:Aktiv>false</HelloDemo:Aktiv>
</HelloDemo:Target>
</HelloDemo:Persons>
</ili:datasection>
</ili:transfer>Die gesamte Demo-Suite
Alle neun Beispiele befinden sich im Ordner demo/ der ilitransformer-Distribution. Jedes Unterverzeichnis enthält ein eigenes Modell, Eingabedaten, ein Mapping-Profil und eine ausführliche README mit allen Aufrufen.
demo/
01-hello-copy/
02-string-functions/
03-numbers-units/
04-enumerations/
05-conditionals-nulls/
06-dates/
07-bags-structures/
08-associations-refs/
09-oid-basket-loss-metadata/Hinweise
- Die Pfade zu
ilitransformer,ili2c.jarundilivalidator.jarmüssen an Ihre Umgebung angepasst werden. In den READMEs und Skripten sind Platzhalter wie/pfad/zu/ili2c.jarverwendet. - Mit
demo/validate.sh <verzeichnis>lässt sich ein einzelnes Beispiel komplett durchlaufen (Modell kompilieren, Eingabe validieren, transformieren, Ausgabe validieren).