Kontext und Verarbeitungsreihenfolge
Der Kontext ist einer der wichtigsten Aspekte bei der Mapping-Ausführung. Den Kontext zu verstehen, ist der Schlüssel zur Erzielung des gewünschten Ergebnisses in der Ausgabe. Der Kontext legt fest, welche Daten für den aktuellen Ziel-Node und seine Nachfahren zur Verfügung stehen und welche Quelldatenelemente tatsächlich ausgewählt und aus der Quell- in die Zielkomponente kopiert werden.
MapForce ermittelt den aktuellen Kontext immer vom Root-Zieldatenelement (Node) aus. Die Mapping-Ausführung beginnt immer hier. Nachdem der Ziel-Node verarbeitet wurde, arbeitet sich MapForce von oben nach unten durch die Hierarchie durch. Für jeden Ziel-Node werden die Verbindungen durch alle etwaigen zwischengeschalteten Funktionen hindurch zu den Quell-Nodes zurückverfolgt.
Für jeden Ziel-Node wird ein neuer Kontext hergestellt, der anfangs alle aktuellen Quell-Nodes des übergeordneten Datenelements und alle Funktionsergebnisse enthält. Während MapForce die direkt oder indirekt zum Ziel-Node führenden Verbindungen auswertet, werden zusätzliche Quell-Nodes und Funktionsergebnisse zum Kontext hinzugefügt. Gleichrangige Ziel-Nodes sind daher voneinander unabhängig, haben aber Zugriff auf alle Quell-Nodes ihrer übergeordneten Datenelemente.
Eine Zusammenfassung der grundlegenden Regeln der Mapping-Ausführung finden Sie unter Grundlegende Regeln und Strategien.
Beispiel
Um die oben beschriebenen Regeln in die Praxis umzusetzen, wird hier das folgende Mapping behandelt: MapForceExamples\PersonListByBranchOffice.mfd (Abbildung unten). Hauptaufgabe des Mappings ist es, eine Liste der Angestellten einer bestimmten Niederlassung mit ihren persönlichen Daten zu erhalten.
Quell- und Zielstruktur
Das Mapping in unserem Beispiel enthält eine XML-Quellkomponente und eine XML-Zielkomponente. Zusätzlich dazu gibt es eine einfache Input-Komponente, die ebenfalls als Quellkomponente dient und den Namen der gewünschten Niederlassung, deren Angestellten wir benötigen, bereitstellt. Außerdem enthält das Mapping verschiedene Transformationskomponenten wie Filter und einige Funktionen.
Beachten Sie, dass in MapForce in Strukturkomponenten (z.B. XML) immer nur Schemahierarchien angezeigt werden. So wird etwa in der Komponente BranchOffices nur ein Contact-Element angezeigt, obwohl die Instanz-Quelldatei BranchOffices.xml mehrere Contact-Nodes mit unterschiedlichem Inhalt und in verschiedenen Office Parent-Nodes enthält. Unten sehen Sie einen Auszug aus der Datei BranchOffices.xml.
<results xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Scores.xsd"> <Name>Nanonull</Name> <Office> <Name>Nanonull, Inc.</Name> <EMail>office@nanonull.com</EMail> <Fax>+1 (321) 555 5155 - 9</Fax> <Phone>+1 (321) 555 5155</Phone> <Address> <city>Vereno</city> <state>CA</state> <street>119 Oakstreet, Suite 4876</street> <zip>29213</zip> </Address> <Contact> <first>Vernon</first> <last>Callaby</last> </Contact> <Contact>...</Contact> <Contact>...</Contact> <Contact>...</Contact> <...> </Office> <Office> <Name>Nanonull Partners, Inc.</Name> <EMail>nextoffice@nanonull.com</EMail> <Fax>+1 (927) 555 1845</Fax> <Phone>+1 (927) 555 0094</Phone> <Address> <city>Brenton</city> <state>MA</state> <street>9865 Millenium Center, Suite 456</street> <zip>5985</zip> </Address> <Contact> <first>Steve</first> <last>Meier</last> </Contact> <Contact>...</Contact> <Contact>...</Contact> <...> </Office> </BranchOffices> |
Kontext und Verarbeitungsreihenfolge
Die Verarbeitung beginnt in unserem Mapping beim Ziel-Root-Node PersonList. Wir können die Verbindung über den Filter und die equal-Funktion zurück zum Quelldatenelement Office verfolgen.
Eine einzelne Niederlassung (office) als Kontext für die Zielkomponente
Da unser Mapping einen Filter hat, werden nur die Daten, die die Boolesche Bedingung erfüllen, auf die Zielkomponente gemappt. Diese Bedingung trifft nur einmal zu, da die XML-Quelldatei nur eine Niederlassung (office) namens Nanonull, Inc. enthält. Folglich definiert die Verbindung von der PersonList-Liste durch den Filter zum Node Office eine einzige Niederlassung (office) als Kontext für das gesamte Zieldokument. D.h. alle weiteren Verbindungen zu den Nachfahren des Root-Elements sind vom Filter betroffen und haben nur Zugriff auf die Daten der Niederlassung Nanonull, Inc.. Im aktuellen Kontext gibt es keine weitere Niederlassung.
Ein Person-Element pro Contact-Element
Die nächste Verbindung ist die zwischen den Nodes Contact und Person. Gemäß der allgemeinen Mapping-Regel wird mit dieser Verbindung für jedes Contact.-Quelldatenelement ein Person-Zieldatenelement erstellt. Bei jeder Iteration wird durch die Verbindung ein einziges aktuelles Contact-Element für die Verbindungen zu den Children des Elements Person ermittelt. Daher werden für die Child-Verbindungen (first mit First, last mit Last) der Vor- (first) und Nachname (last) des aktuellen Contact-Elements ausgewählt und in die Zielkomponente geschrieben.
Benutzerdefinierte Funktion
Das Weiteren enthält das Mapping eine benutzerdefinierte Funktion namens LookupPerson. Aufgrund der übergeordneten Verbindung zwischen Contact und Person wird die benutzerdefinierte Funktion ebenfalls im Kontext der einzelnen Person-Datenelemente ausgeführt. So wird die Funktion jedes Mal, wenn in der Zielkomponente ein neues Person-Datenelement erstellt wird, aufgerufen, um das Element Details der jeweiligen Person zu befüllen.
Die Funktion hat drei Input-Parameter. Der Parameter OfficeName liest Daten aus der einfachen Input-Komponente aus. Die Quelldaten für diesen Parameter könnten genauso gut durch das Quelldatenelement Name bereitgestellt werden, ohne dass sich die Mapping-Ausgabe auf irgendeine Art ändern würde. Der Ausgangswert ist in beiden Fällen derselbe und stammt aus dem Parent-Kontext. Intern verkettet die Look-up-Funktion die als Argumente erhaltenen Werte und erzeugt einen einzigen Wert.
Nähere Informationen darüber, wie die Funktion LookupPerson konfiguriert wird, finden Sie unter Look-up-Implementierung.
Wenn die übergeordneten Elemente nicht verbunden werden
Gäbe es keine Verbindung zwischen Contact und Person, würde im Mapping nur ein Person-Datenelement mit mehreren First-, Last- und Details-Nodes erstellt. In solchen Fällen wird in MapForce im Fenster "Meldungen" eine Warnung angezeigt (Abbildung unten) und es wird vorgeschlagen, die Parent-Nodes zu verbinden, um das Problem zu beheben.