Bedingte Anwendung von Node-Funktionen und Standardwerten

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Funktionen > Standardwerte und Node-Funktionen >

Bedingte Anwendung von Node-Funktionen und Standardwerten

Wenn Sie eine Node-Funktion oder einen Standardwert (eine so genannte "Regel") erstellen, können Sie diese entweder für ein Datenelement, das untergeordnete Datenelemente hat, oder für ein "Leaf"-Datenelement erstellen. Beachten Sie, dass Sie einen Datentyp für die Regel definieren müssen, wenn das Datenelement untergeordnete Datenelemente hat. Dadurch wirkt sich diese Regel nur auf untergeordnete Datenelemente dieses Datentyps aus. Öffnen Sie zum besseren Verständnis dieser Funktion das folgende Demo-Mapping: <Dokumente>\Altova\MapForce2019\MapForceExamples\\OrderInUSD.mfd. Klicken Sie anschließend in der Zielkomponente auf das mf_ic_node_func_defined-Symbol neben dem Datenelement Rows.

mf_nodefunc_07

OrderInUSD.mfd

Im oben gezeigten Mapping werden Daten aus einer XML-Datei gelesen und in eine CSV-Zieldatei geschrieben. In der CSV-Zieldatei wurde auf der Input-Seite des Datenelements Rows eine Regel definiert. Beachten Sie, dass das Datenelement Rows Children vom Typ string und integer hat. Da der Datentyp der Regel string ist, wirkt sich die Regel nur auf Datenelemente dieses Typs aus, d.h. das Symbol mf_ic_node_func_applied ist nur bei Datenelementen vom Typ string, nicht aber bei solchen vom Typ integer vorhanden. Das Symbol mf_ic_node_function_blocked gibt an, dass die Regel für einige Datenelemente blockiert ist, was im Moment nicht von Belang ist. Nähere Informationen dazu finden Sie unter Funktionsweise von Standardwerten und Node-Funktionen.

 

Tipp:Damit neben jedem Datenelement der Datentyp wie im Mapping oben angezeigt wird, aktivieren Sie die Symbolleisten-Schaltfläche Datentypen anzeigen ic-show-types und deaktivieren Sie die Symbolleisten-Schaltfläche Annotationen anzeigen ic-show-annot. Diese Ein/Aus-Befehle stehen auch im Menü Ansicht zur Verfügung.

 

Um den Datentyp einer Regel zu ändern, klicken Sie im Raster oberhalb des Mappings auf die Auslassungszeichen-Schaltfläche mf_ic_ellipsis . Daraufhin wird ein Dialogfeld geöffnet, in dem Sie den gewünschten Typ auswählen können.

mf_nodefunc_08

Dialogfeld "Node-Funktionen und Standardwerte filtern"

Wenn Sie z.B. integer als Datentyp auswählen, wird die Regel nur auf das Datenelement Amount angewendet (da dies das einzige Datenelement vom Typ integer ist). Die Komponente wird nun entsprechend dieser Auswahl neu gezeichnet. Beachten Sie, dass nun keine anderen Datenelemente außer Amount von dieser Regel betroffen sind, da die anderen alle vom Typ string sind.

mf_nodefunc_09

 

Ändern Sie den Datentyp einer Regel nur dann, wenn dies für Ihre Node-Funktion sinnvoll ist. Die Node-Funktion im Demo-Mapping OrderInUSD.mfd soll vom Design her string-Daten und nicht numerische Daten verarbeiten (d.h. die Funktion verkettet zwei Strings miteinander), daher würde die Ausführung des Mappings fehlschlagen, wenn Sie den Datentyp der Node-Funktion in integer ändern.

 

Typvererbung

Da MapForce nicht nur mit XML-Daten arbeitet, entsprechen die im Dialogfeld "Node-Funktionen und Standardwerte filtern" zur Auswahl stehenden Datentypen nicht genau XML-Schema-Typen. Bei einigen handelt es sich vielmehr um Typkategorien, d.h. sie stimmen mit einer größeren Auswahl an Typen überein. So steht etwa der Typ string für verschiedene andere von string abgeleitete Datentypen wie z.B. normalizedString, token, NCName, NMTOKEN, IDREF, ENTITY und andere. Ebenso steht der Typ decimal für die abgeleiteten Typen integer, long, short und andere.

 

Die Typhierarchie entspricht der XML Schema W3C Recommendation. Ein Diagramm, in dem diese Hierarchie veranschaulicht ist, finden Sie unter §3 in "XML Schema Part 2: Datatypes Second Edition", https://www.w3.org/TR/xmlschema-2.

 

Komplexe Filter

Optional können Sie Regeln anwenden, die auf noch komplexeren Kriterien basieren:

 

Anwendung der Regel, wenn der Node einen bestimmten Typ hat UND der Node-Name mit einem benutzerdefinierten Text übereinstimmt.
Anwendung der Regel, wenn der Node einen bestimmten Typ hat UND der Typname mit einem benutzerdefinierten Text übereinstimmt.

 

So wird etwa mit den unten gezeigten Einstellungen eine Regel nur dann angewendet, wenn der Node-Typ string ist UND der Node-Name "Title" lautet. In der Abbildung auf der rechten Seite sehen Sie eine Beispielstruktur, in der eine solche Regel nützlich sein könnte (nur der Node "Title" stimmt überein und erhält daher dasmf_ic_node_func_applied-Symbol):

 

mf_nodefunc_11

mf_nodefunc_12

 

Alternativ dazu können Sie eine Regular Expression verwenden, um mehrere Node-Namen oder Typnamen zu finden, auf die die Regel angewendet werden soll. So wird etwa mit den unten gezeigten Einstellungen eine Regel auf alle Datenelemente vom Typ string, deren Namen mit "total" endet, angewendet. Beachten Sie, dass eine Regular Expression verwendet wird. Die Regular Expression .+total bedeutet: Finde eine oder mehrere Instanzen eines beliebigen Zeichens, gefolgt vom Text "total". Außerdem wird darin die Groß- und Kleinschreibung berücksichtigt, sodass sowohl "EINESUMME" als auch "EineSumme" gefunden wird. In der Abbildung auf der rechten Seite sehen Sie eine Beispielstruktur, für die eine solche Regel sinnvoll sein könnte (die Regel gilt für die drei "Total"-Datenelemente, die daher mit dem mf_ic_node_func_applied-Symbol versehen wurden):

 

mf_nodefunc_10

mf_nodefunc_13

 

Es wird derselbe Regular Expressions-Dialekt wie für XML-Schema verwendet, siehe auch Regular Expressions. Beachten Sie die folgenden Punkte:

 

Die Anker ^ und $ sind implizit und dürfen nicht in das Suchen nach-Feld eingegeben werden.
Über das Kontrollkästchen GROSS/klein beachten geben Sie an, ob die Groß- und Kleinschreibung berücksichtigt werden soll, daher wird das i Flag nicht unterstützt.
Die Suche in mehreren Zeilen spielt beim Filtern von Nodes keine Rolle, daher wird das m Flag nicht unterstützt.

© 2019 Altova GmbH