Funktionsweise von Standardwerten und Node-Funktionen

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

Startseite >  Funktionen > Standardwerte und Node-Funktionen >

Funktionsweise von Standardwerten und Node-Funktionen

Wie bereits in der Anleitung zur Erstellung von Standardwerten und Node-Funktionen erläutert, können Sie für beinahe jedes Datenelement (Node) im Mapping Node-Funktionen oder Standardwerte definieren. Nennen wir diesen Vorgang das Definieren einer Regel. Regeln weisen die folgenden wichtigen Eigenschaften auf, wodurch sie extrem flexibel einsetzbar sind:

 

Vererbung. Wenn Sie für ein Datenelement, das untergeordnete Datenelemente hat, eine Regel definieren, wird die Regel standardmäßig an diese untergeordneten Datenelemente vererbt, es sei denn Sie deaktivieren diese Option. Wenn das Datenelement, für das Sie die Funktion definieren, mehrere Ebenen oder verschachtelte untergeordnete Datenelemente hat, können Sie auswählen, ob die Regel nur auf die direkten Sub-Einträge oder auf alle untergeordneten Datenelemente angewendet werden soll.
Filtern nach Typ. MapForce wendet Regeln anhand von Bedingungen auf Basis des Datentyps der einzelnen Datenelemente an. Auf diese Art kann z.B. ein bestimmter Standardwert (oder eine Funktion) auf alle Datenelemente vom Typ String und ein anderer Standardwert (oder eine Funktion) auf alle Datenelement des Datentyps numerisch angewendet werden. Sie können Regeln auch auf Nodes eines bestimmten Typs, der mit einem bestimmten Namen oder einer Regular Expression übereinstimmt, anwenden.

 

Das oben beschriebene Verhalten hat Auswirkungen: Es macht einen Unterschied, ob eine Regel definiert ist oder ob sie tatsächlich angewendet wird. Wenn Sie für ein bestimmtes Datenelement eine Regel definieren, bedeutet das nicht unbedingt, dass die Regel sich auf dieses Datenelement auswirkt. Die Regel wird nur dann auf das Datenelement und seine untergeordneten Datenelemente angewendet, wenn die Kriterien der Regel (Datentyp und Vererbung) es zulassen.

 

Damit Sie besser erkennen, welche Regeln definiert sind und welche angewendet werden, werden in MapForce die folgenden visuellen Hilfen im Mapping angezeigt.:

 

Symbol

Beschreibung

mf_ic_node_func_defined

Dieses Symbol (schwarz) gibt an, dass für dieses Datenelement eine Regel definiert ist, die sich eventuell auch auf dessen untergeordnete Datenelemente auswirkt. Klicken Sie auf das Symbol, um die Regel zu ändern oder zu löschen.

mf_ic_node_func_applied

Dieses Symbol (ziegelrot) gibt an, dass eine auf einer übergeordneten Ebene definierte Regel auf dieses Datenelement angewendet wird, d.h. es gibt eine Regel, die auf dieses Datenelement angewendet wird (und sich auf dieses auswirken könnte).

mf_ic_node_func_defined_applied

Dieses Symbol (fett, ziegelrot) gibt an, dass für dieses Datenelement eine Regel definiert ist und dass gleichzeitig eine Regel auf dieses Datenelement angewendet wird. Dieses Symbol wird normalerweise angezeigt, wenn für einen einzelnen Node ein Standardwert definiert ist.

mf_ic_node_function_blocked

Dieses Symbol gibt an, dass zwar eine Regel auf dieses Datenelement angewendet würde, diese aber absichtlich blockiert wurde. Sie können dies für bestimmte Datenelemente definieren, auf die diese Regeln nicht angewendet werden sollen.

 

Anmerkung: Dieses Symbol wird nur dann angezeigt, wenn die Vererbung blockiert wurde und für diesen Node keine anderen Regeln definiert sind. Wenn eine Regel von einem übergeordneten Datenelement angewendet wird, hat das Symbol mf_ic_node_func_appliedVorrang.

mf_ic_node_func_inactive

Dieses Symbol (ausgegraut) gibt an, dass zwar eine Regel auf dieses Datenelement angewendet würde, dass das Datenelement aber nicht aktiv ist. Dieses Symbol wird z.B. bei Datenelementen angezeigt, die im Mapping noch nicht verbunden wurden.

 

Wenn für ein und dasselbe Datenelement mehrere Node-Funktionen oder Standardwerte vorhanden sind, dann beachten Sie die folgende Daumenregel:

 

MapForce wendet auf jedes einzelne Datenelement im Mapping nur eine Node-Funktion und einen Standardwert an, unabhängig davon, wie viele Node-Funktionen und Standardwerte eigentlich auf dieses Datenelement angewendet würden.

 

In der Praxis bedeutet dies:

 

Wenn für ein und dasselbe Datenelement mehrere Regeln vorhanden sind, wendet MapForce diejenige Regel auf ein Datenelement an, die diesem Datenelement näher ist. Angenommen, Sie haben eine Node-Funktion drei Mal definiert: für einen XML-Root-Node namens Company, für seinen Sub-Node namens Department und für dessen Sub-Node Employee. In diesem Fall wendet MapForce die für das Datenelement Employee definierte Funktion auf Employee an, da diese näher ist. Gäbe es dort keine Funktion, würde die Funktion des unmittelbar übergeordneten Datenelements Department angewendet. Wenn es für Department keine Funktion gibt, wird weiter oben bis zum Root-Node, in diesem Fall Company, nachgesehen. Die Vererbung ist optional. Um sie zu deaktivieren, deaktivieren Sie das Kontrollkästchen Regeln von Vorfahren erben. Wenn dieses Kontrollkästchen deaktiviert ist, wird das Datenelement mit dem Symbol "blockierte Regel" mf_ic_node_function_blocked gekennzeichnet.
Wenn ein und dasselbe Datenelement mehrere Regeln hat, wendet MapForce die erste passende Regel aus dem Raster im oberen Bereich des Mappings an. Um die Reihenfolge der Regeln in diesem Raster zu ändern, klicken Sie auf eine Regel und ziehen Sie sie mit der Maus an eine neue Position im Raster. Beachten Sie, dass Sie eine Regel nur dann im Raster verschieben können, wenn sie für das aktuelle Datenelement definiert ist. Die Position von vererbten Regeln kann nicht geändert werden. Sie können die Vererbung nur aktivieren oder deaktivieren.

 

Um diese Funktionsweise besser zu veranschaulichen, verwenden wir das folgenden Mapping: <Dokumente>\Altova\MapForce2019\MapForceExamples\MissingFields.mfd.

mf_nodefunc_01

MissingFields.mfd

Wie Sie oben sehen, werden in diesem Mapping Daten aus einer XML-Quelldatei in eine Text-Zieldatei (Felder mit fester Länge) ausgelesen. Das Datenelement Article in der XML-Quelldatei hat Child-Elemente unterschiedlichen Typs: "integer", "string" und "decimal". Beachten Sie, dass jedes Child-Element optional (minOccurs="0") ist. Wenn daher eines der Elemente in der XML-Quelldatei nicht vorhanden ist, müssen Sie dafür einen Standardwert bereitstellen, da Sie in der CSV-Zieldatei andernfalls leere Felder sehen würden, z.B.:

 

  T-Shirt   25    Available in all sizes      

2            2.3                                

3  Pants           Limited stock                

4  Jacket    57.5                              

 

Weiter unten haben wir verschiedene Methoden beschrieben, wie man fehlende Daten mit Hilfe von Regeln behandeln kann. Dazu wurde erläutert, inwiefern sich die Regeln auf das Mapping-Ergebnis auswirken. Dies soll Ihnen helfen zu verstehen bzw. zu steuern, welche Regel Vorrang hat, wenn für ein bestimmtes Datenelement mehrere Regeln vorhanden sind.

 

Beispiel 1: Bereitstellen von Standardwerten für alle String-Datenelemente

Angenommen, Sie möchten im Mapping MissingFields.mfd die folgende Regel implementieren: Wenn ein untergeordnetes Datenelement von Article den Typ "string" hat und fehlt, soll als Standardwert "n/a" verwendet werden.

 

Gehen Sie dabei folgendermaßen vor:

 

1.Klicken Sie mit der rechten Maustaste auf das Datenelement Article und wählen Sie im Kontextmenü die Option Node-Funktionen und Standardwerte | Output-Node-Funktionen und Standardwerte.
2.Klicken Sie auf Standardwert hinzufügen ( mf_ic_add_default ).
3.Geben Sie unter Standardwert "n/a" ein und drücken Sie die Eingabetaste.

mf_nodefunc_02

Im obigen Mapping wurden die folgenden Regelkriterien definiert: Verwende für alle untergeordneten Datenelemente von Article den Standardwert "n/a", wenn der Datentyp "string" ist und wenn das XML-Quellelement fehlt. In diesem Beispiel sind zwei Datenelemente vom Typ "string" vorhanden, nämlich Name und Description, d.h. die Regel wird auf beide angewendet.

 

Wie bereits erwähnt, wird neben einem Datenelement, für das eine Regel definiert wurde, das Symbol mf_ic_node_func_defined angezeigt. Wenn Sie zu diesem Zeitpunkt eine Vorschau auf das Mapping anzeigen, sehen Sie, dass alle fehlenden Strings nun in der Ausgabe durch "n/a" ersetzt wurden:

 

  T-Shirt   25    Available in all sizes      

2  n/a       2.3   n/a                          

3  Pants           Limited stock                

4  Jacket    57.5  n/a                          

 

Beispiel 2: Bereitstellen von Standardwerten anhand von Bedingungen auf Basis des Datentyps

Angenommen, Sie müssen nun zusätzlich zu Standardwerten für String-Datenelemente auch einen Standardwert 0 für alle Datenelemente des numerischen Typs bereitstellen. Gehen Sie dazu folgendermaßen vor:

 

1.Klicken Sie auf das Datenelement Article.
2.Klicken Sie auf Standardwert hinzufügen ( mf_ic_add_default ) und fügen Sie eine zweite Regel mit den folgenden Kriterien hinzu:

mf_nodefunc_03

Im obigen Mapping wurden die folgenden Regelkriterien definiert:

 

Verwende für alle untergeordneten Datenelemente von Article den Standardwert "n/a", wenn der Datentyp "string" ist und das XML-Quellelement fehlt.
Verwende für alle untergeordneten Datenelemente von Article den Standardwert "0", wenn der Datentyp "numeric" ist und das XML-Quellelement fehlt.

 

Die Ausgabe sieht daher folgendermaßen aus:

 

0  T-Shirt   25    Available in all sizes      

2  n/a       2.3   n/a                          

3  Pants     0     Limited stock                

4  Jacket    57.5  n/a                          

 

Anmerkung:Der Datentyp "numeric" ist eigentlich eine Typkategorie, da er die Datentypen "integer" und "decimal" umfasst. Er enthält weiters die Datentypen "float" und "double", die hier allerdings nicht vorkommen. Die Regel wird daher sowohl auf das Element Number als auch auf SinglePrice angewendet. Wenn Sie als Datentyp "decimal" auswählen, wird die Regel dennoch auf Number und SinglePrice angewendet, da der Typ "integer" in der Typhierarchie von XML-Schema vom Typ "decimal" abgeleitet ist (siehe §3 in "XML Schema Part 2: Datatypes Second Edition", https://www.w3.org/TR/xmlschema-2). Wenn Sie hingegen als Datentyp "integer" auswählen, wird die Regel nur auf Number angewendet.

 

Beispiel 3: Blockieren einer Regel für ein bestimmtes Datenelement

Angenommen, Sie möchten wie im vorherigen Beispiel weiterhin Standardwerte auf alle Datenelemente vom Typ "string" und "numeric" anwenden. Allerdings möchten Sie für das Datenelement SinglePrice keinen Standardwert definieren.

 

Klicken Sie dazu auf das Datenelement SinglePrice und deaktivieren Sie das Kontrollkästchen Regeln von Vorfahren erben.

mf_nodefunc_04

Das Datenelement SinglePrice erbt im obigen Mapping nun nicht mehr die Regeln von seinem übergeordneten Datenelement Article. Daher wird neben diesem Element ein Symbol "blockierte Regel" mf_ic_node_function_blocked angezeigt.

 

Folglich erscheint das entsprechende Feld in der Ausgabe weiterhin leer:

 

0  T-Shirt   25    Available in all sizes      

2  n/a       2.3   n/a                          

3  Pants           Limited stock                

4  Jacket    57.5  n/a                          

 

Beispiel 4: Außerkraftsetzung einer geerbten Regel für ein bestimmtes Datenelement

Angenommen, Sie möchten weiterhin Standardwerte auf alle Datenelemente vom Typ "string" und "numeric" anwenden. Allerdings möchten Sie nur für das Datenelement SinglePrice den Standardwert 9999 definieren.

 

Gehen Sie dazu folgendermaßen vor:

 

1.Klicken Sie auf das Datenelement SinglePrice.
2.Klicken Sie auf Standardwert hinzufügen ( mf_ic_add_default ) und geben Sie den Standardwert 9999 ein.
3.Aktivieren Sie optional das Kontrollkästchen Regeln von Vorfahren erben. Dieser Schritt dient hier nur dazu zu zeigen, dass geerbte Regeln ohnedies außer Kraft gesetzt werden.

mf_nodefunc_05

Anmerkung:        Geerbte Regeln haben einen gelben Hintergrund.

 

Im obigen Mapping gibt es drei Regeln, die auf das Datenelement SinglePrice angewendet werden können: zwei geerbte und eine direkte. In diesem Fall hat die direkte Regel Vorrang. Die geerbten Regeln werden ignoriert. Die Ausgabe sieht daher folgendermaßen aus:

 

0  T-Shirt   25    Available in all sizes      

2  n/a       2.3   n/a                          

3  Pants     9999  Limited stock                

4  Jacket    57.5  n/a                          

 

Beispiel 5: Den Vorrang von Regeln definieren

Erweitern wir das vorige Beispiel weiter und nehmen wir an, Sie definieren für das Datenelement SinglePrice eine weitere Regel, nämlich den Standardwert 8888. Wie bereits oben erwähnt, hat die direkt für das aktuelle Datenelement definierte Regel Vorrang vor den anderen. Da nun aber (neben den geerbten Regeln) zwei Regeln für das aktuelle Datenelement vorhanden sind, ist die Frage: Welcher der beiden Standardwerte, 8888 oder 9999, wird angewendet?

mf_nodefunc_06

Wenn wie im obigen Mapping für dasselbe Datenelement mehrere Regeln vorhanden sind, können Sie die Regel, die Vorrang haben soll, manuell auswählen, indem Sie diese an die oberste Stelle im Raster ziehen. Die oberste Regel hat immer Vorrang. Daher wird als Standardwert für SinglePrice 8888 verwendet, wenn sich diese Regel in der obersten Zeile des Rasters befindet:

 

0  T-Shirt   25    Available in all sizes      

2  n/a       2.3   n/a                          

3  Pants     8888  Limited stock                

4  Jacket    57.5  n/a                          


© 2019 Altova GmbH