Logo.CortexAG

Anmelden +

Import von xml-Dateien

Mit Hilfe der manuellen Importkonfiguration des ImPlex ist ein Import von xml-Dateien möglich. Durch die unterschiedliche Komplexität dieser Art von Quelldateien wurde eine geführte Konfiguration per Plugin bisher nicht umgesetzt.

Bei xml-Dateien handelt es sich um ein standardisiertes Format, deren Inhalt in Form einer textbasierten, hierarchischen Struktur abgebildet wird. Der Inhalt besteht aus sog. "Elementen", "Element-Attributen" und "Element-Inhalten", die wiederum weitere Elemente und Attribute beinhalten können.

Beispiel einer einfachen xml-Datei:

<?xml version="1.0" ?>
<Elementname Attribut1=“1“ Attribut2=“abc“>
  <Element>Element-Inhalt</Element>
</Elementname>

 

 

Ausgehend von dem Beispiel im Abschnitt "manueller csv-Import" kann eine xml-Datei mit den gleichen Inhalten als Quelle genutzt 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>

 

Jeder Inhalt eines Elementes und jeder Wert eines Attributes kann von der Import-Funktion des ImPlex genutzt werden. Hierfür steht eine Syntax zur Abfrage dieser Werte zur Verfügung.

Generell gilt auch hier der grundlegende Aufbau der Konfigurationsdatei mit den Bereichen "Global“, "ReaderModul“ und "ImportSection“. Mit dem globalen Bereich werden die Datenbank und Login-Parameter festgelegt; der Bereich "ReaderModul“ definiert die Lese-Parameter und die "ImportSection“ die Feldzuweisung.

<?xml version="1.0" encoding="UTF-8"?>
<CtxImport>
  <Global>
    <LoginIP>[....]</LoginIP>
    <LoginPort>[....]</LoginPort>
    <LoginUser>[....]</LoginUser>
    <LoginPW>[....]</LoginPW>
    <ImportModus>[....]</ImportModus>
  </Global>

 

Der oben gezeigte Aufbau des globalen Bereiches kann beispielhaft wie folgt aussehen:

<?xml version="1.0" encoding="UTF-8"?>
<CtxImport>
  <Global>
    <LoginIP>127.0.0.1</LoginIP>
    <LoginPort>29000</LoginPort>
    <LoginUser>importuser</LoginUser>
    <LoginPW>myPassWd</LoginPW>
    <ImportModus>nu</ImportModus>
  </Global>

 

In dem Bereich "ReaderModul“ legen Sie die Quelldatei, das Haupt-Einstiegselement zum Auslesen der Datensätze und das Element eines Datensatzes fest.

<ReaderModul typ="xml">
    <IN_FILE>[....]</IN_FILE>
    <MAIN_TAG>[....]</MAIN_TAG>
    <DATASET_TAG>[....]</DATASET_TAG>
</ReaderModul>

 

Beispiel anhand der o.g. xml-Datei:

<ReaderModul typ="xml">
    <IN_FILE>/Pfad/zur/Quelle/2013Mai.xml</IN_FILE>
    <MAIN_TAG>People</MAIN_TAG>
    <DATASET_TAG>Person</DATASET_TAG>
</ReaderModul>

 

Alle Informationen innerhalb des "Person“-Elementes werden daher als ein Datensatz behandelt. Beachten Sie hierbei, dass der Pfad zur Quelldatei als absoluter Pfad angegeben wird.

Der Aufbau der Konfigurationsdatei für den Import zum Lesen einer xml-Datenquelle gliedert sich somit in die drei genannten Bereiche:

<?xml version="1.0" encoding="UTF-8"?>
<CtxImport>
    <Global>
    <LoginIP>127.0.0.1</LoginIP>
    <LoginPort>29001</LoginPort>
    <LoginUser>importuser</LoginUser>
    <LoginPW>myPasswd</LoginPW>
    <ImportModus>nu</ImportModus>
</Global>
<ReaderModul typ="xml">
    <IN_FILE>/Pfad/zur/Quelle/2013Mai.xml</IN_FILE>
    <MAIN_TAG>People</MAIN_TAG>
    <DATASET_TAG>Person</DATASET_TAG>
</ReaderModul>
<ImportSection datensatztyp="[....]">
    <FilterFunktion>[....]</FilterFunktion>
    <Referenz>[....]</Referenz>
    <Feld>[....] = [....]</Feld>
    <WiederholGruppe start="[....]">
        <Feld>[....] = [....]</Feld>
    </WiederholGruppe>
</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 für den Zugriff auf Inhalte einer xml-Datei

Ausgehend von der Festlegung im "ReaderModul“ 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 interiert 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>

 

Um bei jedem Datensatz an eine bestimmte Information zu gelangen, wird wie bei csv-Quellen per "getChar" auf ein Feld zugegriffen. Das folgende Beispiel zeigt die Übernahme des Feldes "Name" in das entsprechende Datenbankfeld.

<ImportSection datensatztyp="PERS">
    <Feld>PerNam = getChar('Name')</Feld>
</ImportSection>
</CtxImport>

Die einfache Nutzung des Feldnamens führt zur direkten Nutzung eines Element-Inhaltes.

 

Um Attribute eines Elementes zu nutzen, ist das "#"-Zeichen (Hash) notwendig. Somit können also beispielsweise auch die Person-Nr, das Geschlecht oder Geburtsdatum übernommen werden:

<ImportSection datensatztyp="PERS">
    <Feld>PerNam = getChar('Name')</Feld>
    <Feld>PerGes = getChar('#Geschlecht')</Feld>
    <Feld>PerNum = getChar('#Nr')</Feld>
    <Feld>PerGeb = getChar('#GebDat')</Feld>
</ImportSection>
</CtxImport>

 

Wird ein Element mehrfach genutzt (z.B. "Hobby"), ist dieses innerhalb einer Wiederholgruppe zu importieren. Die Kombination mit weiteren Feldern der selben Gruppe ist entsprechend möglich:

<ImportSection datensatztyp="PERS">
    <Feld>PerNam = getChar('Name')</Feld>
    <Feld>PerGes = getChar('#Geschlecht')</Feld>
    <Feld>PerNum = getChar('#Nr')</Feld>
    <Feld>PerGeb = getChar('#GebDat')</Feld>
    <WiederholGruppe start="Hobbies.Hobby">
        <Feld>HobNr = getChar('#HobbyNr')</Feld>
        <Feld>Hobby = getChar()</Feld>
    </WiederholGruppe>
</ImportSection>
</CtxImport>

Wie in diesem Beispiel zu sehen ist, wird innerhalb des Elements "Hobby" interiert und auf ein einzelnes "Hobby" zurückgegriffen. Um auf ein Kind-Element zuzugreifen, wird das Zeichen "." (Punkt) genutzt. Jedes einzelne Kind-Element wird somit gelesen und importiert.

Ergänzend dazu wird das Feld "Hobby" direkt ausgelesen. Hierfür wird die Funktion "getChar()" ohne weitere Parameter verwendet.

 

Hinweis: Unabhängig von den o.g. Beispielen ist es möglich, die Nutzung von "#" und "." zu kombinieren, wenn tiefergeschachtelte Strukturen vorliegen. Ein Zugriff per "Hobbies.Hobby#HobbyNr" wäre also möglich.

 

 

Delta-Import für Wiederholfelder

Wiederholfelder können ebenso wie komplette Datensätze per Deltaimport aktualisiert werden. Dieses hat zur Folge, das diejenigen Wiederholfelder gelöscht werden, wenn diese nicht mehr in der Quelle vorliegen.

Beispiel

<WiederholGruppe start="Hobbies">
    <Feld deltaliste='d'>PeHob = getChar(Hobby)</Feld>
</WiederholGruppe>

In diesem Beispiel wird aus einer XML-Datei die Inhalte zu dem Feld Hobby einer Person gelesen. Ist bereit ein Hobby in der Datenbank gespeichert, wird über die Quelle aber nicht mehr geliefert, wird das Feld entfernt.

Hinweis:

Die Kombination vom Parameter "deltaliste" und der Angabe einer Referenz, sowie die Verwendung der Deltaliste in mehrere Feldern einer Wiederholfeldgruppe kann zu unerwarteten ergebnissen führen und sollte vor der endgültigen Verwendung ausreichend getestet werden.

 

 Hinweise zur Online-Hilfe
 

© 2017 Cortex AG
(letzte Aktualisierung: 12.04.2017)

 Haftungsausschluss 

Impressum    AGB