Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

Innerhalb von JAXForms existiert ein generisches universelles Konstrukt zum Transformieren von Quellen auf Senken basierend auf dem ETL-Prinzip (Extract-Transform-Load).

Anforderungen

  • universell einsetzbar
  • einfach Anwendbar
  • offen für Erweiterungen (OCP)
  • sauberes OO Design
  • Typsicher
  • DB Mapping Support (Mixed Mode)
  • XML Konfiguration
  • Multi Source Multi Sink (n:m Tranformation Erweiterung bis anhin war 1:1 beschränkt (2:1) möglich)
  • Performant
  • Abwärtskompatibel
  • Testbar mit guter Testabdeckung
  • Dokumentiert

Anwendungen

  • DOM → DOM
  • W3C Document → DOM
  • DOM → W3C Document
  • W3C Document → W3C Document
  • JSONObject → JSONObject
  • CSV → XML
  • Java Object

Funktionsprinzip

  • Input
  • Transformationskontext (erstellt aus der Transformationskonfiguration)
  • Transformer
  • Output
  • optional Context DOM

Image Modified

Transformationskonfiguration

  • die Konfiguration besteht aus folgenden Elementen properties, converter, simple, group, list
  • Transformationsregeln (simple, group, list)
  • die Transformation läuft strikt sequentiell wie in der Transformationskonfiguration hinerlegt ab
  • simple - Mapping von einfach Werten
  • group - Bildung von logischen Transformationsgruppen (z.B. ganzer XML-Ast)
  • list - Mapping von Listen (atomar oder spezifisch mittels Unteranweisungen)

ETL - Extract Transform Load

Für jede Quelle muss ein entsprechender Extraktor (Leser) vorhanden sein resp. für jede Senke muss ein entsprechner Loader (Schreiber) verfügbar sein.

Der Extraktor weis wie er anhand der Quellpfade aus der Transformationskonfiguration die Daten aus der Quelle extrahiert, im Normalfall wird dies durch eine entsprechende Path-Engine ermöglicht.

Der Loader weis wie er anhand der Zielpfade aus der Transformationskonfiguration die Daten auf die Senke schreibt, im Normalfall wird dies auch hier durch eine entsprechende Path-Engine ermöglicht.

Die Transformationslogik ist universell und somit unabhängig von Quelle und Senke. Die Extraktoren, Loader und Transformationslogik sind zustandsunabhängig, der Zustand wird ausschliesslich im Transformationskontext geführt.

Der Transformationkontekt enthält die durchzuführenden Transformationsschritte und auch den Evaluationskontext, welcher für die Ausführung der JEP-Ausdrücke verwendet wird.

Aufgrund der Möglichkeit für den Einsatz von JEP-Formeln ist es Möglich während der Transformation auch auf die Quelle zu schreiben.

Werden mehrere Quellen resp. Senke für eine Transformation verwendet, so können diese durch die Vergabe einer sourceId sowie targetId eindeutig identifiziert werden. Dadurch ist es möglich auch aus mehreren

...

heterogenen Quellen resp. Senken eine Transformation durchzuführen.

Was als Quelle und/oder Senke verwendet wird ist offen, es braucht einzig ein entsprechende Loader resp. Extraktor.

Anwendung

Die Anwendung innerhalb JAXForms erfolgt wie folgt:

...

  • Transformationsschritte: 1. Formel 2. Converter 3. Default 4. Substitution 5. Evaluation context aktualisieren (Fehlt die Konfiguration wird der entsprechende Schritt übersprungen)
  • wird nur der Zielpfad (target) angegeben, bleibt der Quellpfad undefiniert und wird als Condition#sourceAbsent gewertet.
  • wird nur der Quellpfad (source) angegeben, wird dieser implizit auch für den Zielkpfad (target) verwendet, dies erspart die Redundante Pfadangabe bei homogenen Transformationen (z.B. XML → XML)
  • der Fallbackwert (default) wird gesetzt, wenn kein sourceValue, kein Formel (formula), kein Formelresultat und kein Konverter resp. kein Konverterresultat vorliegt.
  • mittels as kann das Transformationsresultat als Variable für die Formelaustwertung verendet werden

list

List Events

EventAuslöseereignisAnmerkungen
clearListList Transformation Rule mit addMode=clearListe löschen
setListList Transformation Rule ohne UntertransformationenVerwendung: ganze Liste kopieren
beforeListList Transforamtion Rule mit UntertransformationenAnlegen einer Datenstruktur auf dem Target
afterListList Transforamtion Rule mit Untertransformationen
beforeListElementList Transforamtion Rule mit Untertransformationen wird bedingungslos vor jedem Listen Element der Source aufgerufen
(ungeachtet ob die Transformationsregeln angewendet werden oder nicht)
Anlegen eines neuen Listeneintrages (Es ist nicht möglich vorgängig zu Prüfen ob eine oder mehrere Transformation Rules innerhalb des aktuellen Listenelementes aktiv sind, da diese Zustandsbehaftet formuliert werden können.)
afterListElementList Transforamtion Rule mit Untertransformationen wird bedingungslos nach jedem Listen Element der Source aufgerufen 
(ungeachtet ob die Transformationsregeln angewendet worden sind oder nicht)
Abräumen (Falls keine Transformation für dieses Listenelement stattgefunden hat, kann hier das angelegte Listenelement wieder entfernt werden.)

Szenarios:

List ohne Subtransformation: [clearList] setList

...

Codeblock
languagexml
titleLI-OMS (order2fullsearch)
collapsetrue
<transform>
   <simple source="//orderType" target="/FullSearchOrder/orderType" converter="surveillanceMeasureType" as="orderType"/>
   <simple target="/FullSearchOrder/order/type" formula="orderType"/>
   <simple enabled="orderType == &quot;ipFull&quot; || orderType == &quot;natFull&quot;" source="//processingDateStart" target="/FullSearchOrder/order/dateTime"/>
   <simple enabled="orderType != &quot;ipFull&quot; &amp;&amp; orderType != &quot;natFull&quot;" source="//processingDateStart" target="/FullSearchOrder/order/startDate"/>
   <simple enabled="orderType != &quot;ipFull&quot; &amp;&amp; orderType != &quot;natFull&quot;" source="//processingDateEnd" target="/FullSearchOrder/order/endDate"/>
   <simple enabled="EndsWith(nodeValue(&quot;//processingDateStart&quot;), &quot;Z&quot;)" target="/FullSearchOrder/order/timeZone" default="utc"/>
   <simple source="//targetType" target="/FullSearchOrder/order/targetType" as="targetType"/>
   <simple source="//targetType" target="/FullSearchOrder/order/type/${orderType}/fieldSelection" />
   <simple source="//targetId" target="/FullSearchOrder/order/type/${orderType}/${targetType}" />

   <converter id="surveillanceMeasureType" default="">
      <from regex=".*_IP" to="ipFull"/>
      <from regex=".*_NAT" to="natFull"/>
      <from regex=".*_NA" to="naFull"/>
      <from regex=".*_TEL" to="telFull"/>
      <from regex=".*_EMAIL" to="emailFull"/>
   </converter>
</transform>

Anwendungen

...


XML Schema Dokumentation

View file
nameTransformator-Spezifikation-V-6_2.doc.pdf
height250
View file
nametransformation.xsd
height250

...