XML-Import
Konzept¶
Der Implex ermöglicht den Import von XML-Dateien über eine manuelle Importkonfiguration.
XML-Dateien verwenden ein standardisiertes Format, das Informationen in einer textbasierten, hierarchischen Struktur darstellt. Diese Struktur besteht aus Elementen, Elementattributen und Elementinhalten, die wiederum weitere Elemente und Attribute enthalten können.
<xml version="1.0" ?>
<Elementname Attribut1=“1“ Attribut2=“abc“>
<Element>Element-Inhalt</Element>
</Elementname>
Basierend auf dem Beispiel im Abschnitt ReaderModule kann eine XML-Datei mit den gleichen Inhalten als Quelle verwendet werden:
<xml version="1.0" ?>
<People>
<Person Nr=“1“ Geschlecht=“M“ GebDat=“19670812“>
<Name>Meier</Name>
<Vorname>Max</Vorname>
<Hobbies>
<Hobby HobbyNr=“1“>Fußball</Hobby>
<Hobby HobbyNr=“2“>Hockey</Hobby>
</Hobbies>
</Person>
<Person Nr=“2“ Geschlecht=“W“ GebDat=“19781103“>
<Name>Müller</Name>
<Vorname>Sandra</Vorname>
<Hobbies>
<Hobby HobbyNr=“1“>Tanzen</Hobby>
<Hobby HobbyNr=“2“>Reiten</Hobby>
</Hobbies>
</Person>
</People>
Die Importfunktion des Implex kann jeden Inhalt eines Elements und jeden Wert eines Attributes nutzen. Hierfür steht eine spezifische Syntax zur Abfrage dieser Werte zur Verfügung.
Die Konfigurationsdatei folgt dem grundlegenden Aufbau mit den Bereichen Global, ReaderModule und ImportSection.
Global¶
Im globalen Bereich werden die CortexEngine-Verbindungsparameter und die generellen Arbeitsparameter für den Import festgelegt.
<xml version="1.0" encoding="UTF-8"?>
<CtxImport>
<Global>
<LoginIP>[....]</LoginIP>
<LoginPort>[....]</LoginPort>
<LoginUser>[....]</LoginUser>
<LoginPW>[....]</LoginPW>
<ImportMode>[....]</ImportMode>
</Global>
<xml version="1.0" encoding="UTF-8"?>
<CtxImport>
<Global>
<LoginIP>127.0.0.1</LoginIP>
<LoginPort>29000</LoginPort>
<LoginUser>importuser</LoginUser>
<LoginPW>myPassWd</LoginPW>
<ImportMode>nu</ImportMode>
</Global>
ReaderModule¶
Der Bereich ReaderModule
definiert die Leseparameter.
Bestimmen Sie hier
- die Quelldatei, das Haupt-Einstiegselement zum Auslesen der Datensätze
- das Element eines Datensatzes
<ReaderModule type= "xml">
<IN_FILE>[....]</IN_FILE>
<MAIN_TAG>[....]</MAIN_TAG>
<DATASET_TAG>[....]</DATASET_TAG>
</ReaderModule>
<ReaderModule type= "xml">
<IN_FILE>/Pfad/zur/Quelle/2013Mai XML
</IN_FILE>
<MAIN_TAG>People</MAIN_TAG>
<DATASET_TAG>Person</DATASET_TAG>
</ReaderModule>
ImportSection¶
Die ImportSection
enthält die Feldzuweisungen.
<ImportSection recordtype="[....]">
<FilterFunction>[....]</FilterFunction>
<Reference>[....]</Reference>
<Field>[....] = [....]</Field>
<RepGroup start="[....]">
<Field>[....] = [....]</Field>
</RepGroup>
</ImportSection>
- Alle Informationen innerhalb des
Person
-Elementes werden als ein Datensatz behandelt. - Achten Sie darauf, den Pfad zur Quelldatei als absoluten Pfad anzugeben!
Konfigurationsdatei¶
< xml version="1.0" encoding="UTF-8"?>
<CtxImport>
<Global>
<LoginIP>127.0.0.1</LoginIP>
<LoginPort>29001</LoginPort>
<LoginUser>importuser</LoginUser>
<LoginPW>myPasswd</LoginPW>
<ImportMode>nu</ImportMode>
</Global>
<ReaderModule type= "xml">
<IN_FILE>/Pfad/zur/Quelle/2013Mai XML
</IN_FILE>
<MAIN_TAG>People</MAIN_TAG>
<DATASET_TAG>Person</DATASET_TAG>
</ReaderModule>
<ImportSection recordtype="[....]">
<FilterFunction>[....]</FilterFunction>
<Reference>[....]</Reference>
<Field>[....] = [....]</Field>
<RepGroup start="[....]">
<Field>[....] = [....]</Field>
</RepGroup>
</ImportSection>
</CtxImport>
-
In der
ImportSection
können Sie nun die Feldzuweisungen vornehmen.Dazu greifen Sie auf einzelne Elemente und Attribut-Werte über eine definierte Syntax zu.
Syntax¶
Die definierte Syntax ermöglicht den Zugriff auf Inhalte einer XML-Datei.
Ausgehend von der Definition im ReaderModule
durchläuft der Import-Mechanismus die XML-Quelldatei und identifiziert einen Datensatz.
Die oben gezeigte Konfiguration des Reader-Moduls mit den Einträgen MAIN_TAG
und DATASET_TAG
legt den Einsprungspunkt in einen Datensatz fest.
People
gilt hier als umschließendes Element für weitere Inhalte und Person
als Einzeldatensätze, durch die iteriert wird.
< xml version="1.0" ?>
<People>
<Person Nr=“1“ Geschlecht=“M“ GebDat=“19670812“>
<Name>Meier</Name>
<Vorname>Max</Vorname>
<Hobbies>
<Hobby HobbyNr=“1“>Fußball</Hobby>
<Hobby HobbyNr=“2“>Hockey</Hobby>
</Hobbies>
</Person>
<Person Nr=“2“ Geschlecht=“W“ GebDat=“19781103“>
<Name>Müller</Name>
<Vorname>Sandra</Vorname>
<Hobbies>
<Hobby HobbyNr=“1“>Tanzen</Hobby>
<Hobby HobbyNr=“2“>Reiten</Hobby>
</Hobbies>
</Person>
</People>
Information per getChar
¶
Um auf bestimmte Informationen in jedem Datensatz zuzugreifen, wird, ähnlich wie bei CSV-Quellen, auf ein Feld per getChar
zugegriffen.
<ImportSection recordtype="PERS">
<Field>PerNam = getChar('Name')</Field>
</ImportSection>
</CtxImport>
Feldname¶
Die einfache Angabe des Feldnamens ermöglicht die direkte Nutzung des Elementinhaltes.
<ImportSection recordtype="PERS">
<Field>PerNam = getChar('Name')</Field>
<Field>PerGes = getChar('#Geschlecht')</Field>
<Field>PerNum = getChar('#Nr')</Field>
<Field>PerGeb = getChar('#GebDat')</Field>
</ImportSection>
</CtxImport>
- Das
\#
-Zeichen (Hash) ist notwendig, um Attribute eines Elementes zu nutzen. - Personennummer (
PerNum
), Geschlecht (PerGes
) oder Geburtsdatum (PerGeb
) können übernommen werden.
Mehrfachvorkommen¶
Wenn ein Element mehrfach vorkommt (z.B. Hobby
), muss es innerhalb einer Wiederholgruppe importiert werden. Es ist auch möglich, es zusammen mit anderen Feldern derselben Gruppe zu kombinieren.
<ImportSection recordtype="PERS">
<Field>PerNam = getChar('Name')</Field>
<Field>PerGes = getChar('#Geschlecht')</Field>
<Field>PerNum = getChar('#Nr')</Field>
<Field>PerGeb = getChar('#GebDat')</Field>
<RepGroup start="Hobbies.Hobby">
<Field>HobNr = getChar('#HobbyNr')</Field>
<Field>Hobby = getChar()</Field>
</RepGroup>
</ImportSection>
</CtxImport>
- Innerhalb des Elements
Hobby
wird iteriert und auf ein einzelnesHobby
zurückgegriffen. - Um auf ein Kind-Element zuzugreifen, wird das Zeichen
.
(Punkt) genutzt. - Dadurch werden alle Kind-Elemente gelesen und importiert.
- Zusätzlich wird das Feld
Hobby
direkt ausgelesen, indem die FunktiongetChar()
ohne weitere Parameter verwendet wird.
Hinweis
Unabhängig von den Beispielen ist es möglich, die Nutzung von \#
und .
zu kombinieren, wenn tiefer geschachtelte Strukturen vorliegen. Ein Zugriff per Hobbies.Hobby\#HobbyNr
wäre also möglich.