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
ImportSectionkö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
Hobbywird iteriert und auf ein einzelnesHobbyzurü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
Hobbydirekt 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.