Altova MapForce 2024 Enterprise Edition

Wie bereits erwähnt, lautet die allgemeine Mapping-Regel: "Erstelle für jedes Datenelement in der Quellkomponente eines in der Zielkomponente". Mit "Datenelement" ist hier eines der folgenden gemeint:

 

ein einzelner Instanz-Node der Input-Datei oder Datenbank

eine Sequenz von null bis zu mehreren Instanz-Nodes der Input-Datei oder Datenbank

 

Wenn bei der Mapping-Ausführung bei einer Sequenz ein Ziel-Datenelement erreicht wird, wird eine Schleife erstellt, mit der so viele Ziel-Nodes generiert werden, wie Quell-Nodes vorhanden sind. Für diese Regel gibt es jedoch einige Ausnahmen:

 

Wenn es sich beim Zieldatenelement um ein XML-Root-Element handelt, wird dieses nur genau einmal erstellt. Wenn Sie damit eine Sequenz verbinden, ist das Ergebnis dem Schema gemäß möglicherweise nicht gültig. Wenn auch Attribute des Root-Elements verbunden werden, schlägt die XML-Serialisierung zur Laufzeit fehl. Vermeiden Sie es daher, eine Sequenz mit dem XML-Root-Element zu verbinden.

Wenn im Zieldatenelement nur ein einziger Wert zulässig ist, wird es nur einmal erstellt. Beispiele für Datenelemente, in denen nur ein einziger Wert zulässig ist: XML-Attribute, Datenbankfelder, einfache Output-Komponenten. So wird etwa mit dem unten gezeigten Mapping mit Hilfe der generate-sequence-Funktion eine Sequenz von drei Ganzzahlen (1, 2, 3) generiert. Trotzdem enthält die Ausgabe nur eine Ganzzahl, da es sich bei der Zielkomponente um eine einfache Output-Komponente handelt, in der nur ein einziger Wert zulässig ist. Die anderen beiden Werte werden ignoriert.

mf_semantics_02

Wenn im Quellschema festgelegt ist, dass ein bestimmtes Datenelement nur einmal vorkommen darf, die Instanzdatei aber viele davon enthält, extrahiert MapForce unter Umständen das erste Datenelement aus der Quelldatei (das laut Schema vorhanden sein muss) und erstellt in der Zielkomponente nur ein Datenelement. Um dieses Verhalten zu verhindern, deaktivieren Sie in den Komponenteneinstellungen das Kontrollkästchen Input-Verarbeitungsoptimierungen auf Basis von min/maxOccurs aktivieren, siehe auch XML-Komponenteneinstellungen.

 

Wenn die Sequenz leer ist, wird auf Seite der Zielkomponente nichts generiert. Wenn die Zielkomponente z.B. ein XML-Dokument ist und die Quellsequenz leer ist, werden in der Zielkomponente gar keine XML-Elemente erstellt.

 

Funktionen verhalten sich ähnlich: Wenn Sie als Input eine Sequenz erhalten, werden sie so oft aufgerufen (und erzeugen so viele Ergebnisse) wie Datenelemente in der Sequenz vorhanden sind.

 

Wenn eine Funktion als Input eine leere Sequenz erhält, gibt sie auch ein leeres Ergebnis zurück und erzeugt somit gar keine Ausgabe.

 

Es gibt jedoch einige Funktionskategorien, die aufgrund ihres Designs auch dann einen Wert zurückgeben, wenn Sie als Input eine leere Sequenz erhalten:

 

exists, not-exists, substitute-missing

is-not-null, is-null, substitute-null (Diese drei Funktionen sind Aliasnamen für die erstgenannten drei Funktionen)

aggregate-Funktionen (sum, count, usw.)

benutzerdefinierte Funktionen, die Sequenzen unterstützen und regulär sind (also nicht-inline-Funktionen)

 

Wenn Sie einen leeren Wert ersetzen müssen, fügen Sie die Funktion substitute-missing zum Mapping hinzu und ersetzen sie den leeren Wert durch den Ersetzungswert Ihrer Wahl. Dasselbe Ergebnis erzielen Sie auch mit Hilfe von Standardwerten und Node-Funktionen.

 

Funktionen können mehrere Inputs haben. Wenn eine Sequenz mit jedem einzelnen Input verbunden wird, wird dadurch ein kartesisches Produkt aller Inputs erzeugt, was normalerweise nicht das gewünschte Ergebnis ist. Um dies zu vermeiden, verbinden Sie nur eine Sequenz mit einer Funktion mit mehreren Parametern; alle anderen Parameter müssen von übergeordneten Elementen oder anderen Komponenten aus mit Einzeldatenelementen verbunden werden.

© 2017-2023 Altova GmbH