Zum Inhalt

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.

Einfache XML-Datei
<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-Datei
<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.

Globaler Bereich
<xml version="1.0" encoding="UTF-8"?>
<CtxImport>
  <Global>
    <LoginIP>[....]</LoginIP>
    <LoginPort>[....]</LoginPort>
    <LoginUser>[....]</LoginUser>
    <LoginPW>[....]</LoginPW>
    <ImportMode>[....]</ImportMode>
  </Global>
Beispiel globaler Bereich
<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
<ReaderModule type= "xml">
    <IN_FILE>[....]</IN_FILE>
    <MAIN_TAG>[....]</MAIN_TAG>
    <DATASET_TAG>[....]</DATASET_TAG>
</ReaderModule>
Beispiel 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
<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

Konfig
< 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.

Beispiel Syntax
< 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.

Übernahme des Feldes 'Name' mit getChar
<ImportSection recordtype="PERS">
    <Field>PerNam = getChar('Name')</Field>
</ImportSection>
</CtxImport>

Feldname

Die einfache Angabe des Feldnamens ermöglicht die direkte Nutzung des Elementinhaltes.

Beispiel Feldname
<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.

Beispiel Mehrfachvorkommen
<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 einzelnes Hobby 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 Funktion getChar() 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.