Die gene­ri­sche Ver­ar­bei­tung kom­ple­xer XML-Struk­tu­ren in einer rela­tio­na­len Daten­bank oder einem Data Lake (auf Hadoop-Basis) ist eine anspruchs­volle Her­aus­for­de­rung für Soft­ware-Ent­wick­ler. saracus con­sul­ting hat seine Data Ware­house Auto­ma­ti­sie­rungs-Soft­ware DWau­to­ma­tic um diese Funk­tio­na­li­tät erweitert.

An fol­gen­den­dem Bei­spiel soll die Funk­tio­na­li­tät und Arbeits­weise dar­ge­stellt werden.

In der Logis­tik­bran­che ist das Track­ing von Trans­port­sen­dun­gen unver­zicht­bar für das Errei­chen einer hohen Lie­fer­treue. Dafür müs­sen Daten zwi­schen ver­schie­de­nen Infor­ma­ti­ons­sys­te­men aus­ge­tauscht wer­den. Dies geschieht häu­fig mit XML/XSD-Dateien. In unse­rem Bei­spiel beschrei­ben rekur­sive XSD-Dateien eine Struk­tur zur Beant­wor­tung von Fra­gen wie:

  • Wo ist mein Paket gerade?
  • Wo war es vorher?

Erwar­tun­gen

  • yna­mi­sches Map­ping der XML-Struk­tu­ren auf rela­tio­na­les Schema, Kre­ieren der Tabellen
  • Laden der zum XSD- gehö­ren­den XML-Dateien
  • Per­for­mance: 1.000 XML-Dateien in der Minute

Her­aus­for­de­run­gen

  • Wel­ches ist der geeig­nete Tabel­len-/Spal­ten­name?
    • Durch ‚Hoch­zie­hen‘ der 0:1‑Beziehungen ist der XML-Ele­ment-Name nicht eindeutig
    • Aber: Der Pfad­name ist eindeutig
  • ORA­CLE-Pro­blem
    • Namen dür­fen höchs­tens 30 Zei­chen umfassen
  • Beim Par­sen der XML-Dateien
    • Zuord­nung von XML-Ele­men­ten auf pas­sende Tabelle und Spalte

Lösungs­an­sätze

  • Ers­ter Ansatz
    • Je XSD-Struk­tur eine Tabelle (im Hin­blick auf Data Vault-Modellierung)
    • Pro­blem: meh­rere hun­dert Tabellen
  • Zwei­ter Ansatz
    • Nur noch 1:n Bezie­hun­gen aus­la­gern (Mas­ter-Detail)
    • Pro­blem: meh­rere hun­dert Tabellen
  • Drit­ter Ansatz
    • Mehr­fach genutzte Unter­struk­tu­ren nur noch ein­mal anlegen
    • In eine sol­che Tabelle den Pfad zum Parent auf­neh­men, um die ‚Les­bar­keit‘ zu erhöhen
    • Reduk­tion auf ca. 50 Tabellen

Imple­men­tie­rung

  • Um den initia­len Auf­wand klein zu hal­ten, 1. Imple­men­tie­rung für Schema-Kre­ierung mit JAXB
    • Über­setzt XSD-Schema in Java-Klas­sen, die dann mit Reflec­tion aus­ge­wer­tet wer­den können
  • Lade­phase mit STAX (schnel­ler XML-Par­ser), um Per­for­mance-Anfor­de­run­gen zu bewältigen
  • Zusätz­lich zu den XSD-Tabel­len ein Mini-Dic­tion­ary für
    • Erzeugte Tabel­len
    • Spal­ten
    • Hier­ar­chien

Zusam­men­fas­sung: XML-Ver­ar­bei­tung mit DWau­to­ma­tic (Gene­ri­sche Ver­ar­bei­tung kom­ple­xer XML-Struk­tu­ren in rela­tio­nale Strukturen)

  • Tabel­la­ri­sche Auf­lö­sung kom­ple­xer XML-Struk­tu­ren unter Bei­be­hal­tung der Relationen
  • Gene­rie­rung eines Daten­bank­sche­mas aus XSD-Dateien
  • Erzeu­gung vali­der Objekte in jewei­li­ger RDBMS
  • Hoch per­for­mante Imple­men­tie­rung in JAVA
  • Ver­ar­bei­tung der XML-Nach­rich­ten mit schnel­lem STAX-Par­ser aus einer Mes­sage Queue
  • Voll­stän­dige Schlüs­sel­ver­er­bung über alle Ebenen
  • Das Daten­mo­dell muss nach einer XSD Ände­rung wahl­weise kom­plett neu gene­riert wer­den können
  • Hohe Per­for­mance durch Parallelisierung
  • Aus­schluss bestimm­ter XML-Pfade über kom­for­ta­ble Konfigurationstabelle
  • Ein- und aus­schalt­bare XML-Validierung
  • Option: Gene­rie­rung iden­ti­scher Wie­der­ho­lungs­ele­mente (Typen) in unter­schied­li­chen Pfa­den ent­we­der in eine gemein­same oder je eine eigene Tabelle
  • Län­gen der Daten­ty­pen soll­ten der XSD ent­nom­men wer­den. Wenn dort keine Werte defi­niert sind, soll­ten Stan­dards aus einer Kon­fi­gu­ra­ti­ons­ta­belle genom­men werden.
  • Doku­men­ta­tion erzeug­ter Tabel­len über auto­ma­ti­sierte Dictionary-Erzeugung