Altova MapForce 2024 Enterprise Edition

In diesem Beispiel wird gezeigt, wie Sie Daten aus zwei XML-Strukturen auf Basis von Bedingungen mittels einer Join-Komponente miteinander verknüpfen. Das Mapping-Beispiel dazu finden Sie unter dem folgenden Pfad: <Dokumente>\Altova\MapForce2024\MapForceExamples\JoinPeopleInfo.mfd.

 

Ziel dieses Mappings ist es, Personendaten (Vorname, Familienname, Adresse, E-Mail und Telefonnummer) aus zwei XML-Quelldateien in einer einzigen XML-Zieldatei zu sammeln.

 

In der ersten XML-Datei sind Vor- und Zunamen der einzelnen Personen sowie ihre E-Mail-Adresse und Telefonnummer gespeichert (siehe Beispielcodefragment unten. Beachten Sie, dass die XML-Deklaration, der Namespace und einige Datensätze aus Gründen der Einfachheit weggelassen wurden):

 

<People>
  <Person>
    <FirstName>Marquita</FirstName>
    <LastName>Bailey</LastName>
    <Email>m.bailey@nanonull.com</Email>
    <Phone>555323698</Phone>
  </Person>
  <Person>
    <FirstName>Totie</FirstName>
    <LastName>Rea</LastName>
    <Email>t.rea@nanonull.com</Email>
    <Phone>555598653</Phone>
  </Person>  
</People>

People.xml

Die zweite XML-Datei enthält die Vor- und Zunamen der einzelnen Personen sowie deren Adressdaten:

 

<Addresses>
  <Address>
    <FirstName>Marquita</FirstName>
    <LastName>Bailey</LastName>
    <City>Bridgedell</City>
    <Street>Olive Street</Street>
    <Number>4</Number>
  </Address>
  <Address>
    <FirstName>Totie</FirstName>
    <LastName>Rea</LastName>
    <City>Roseford</City>
    <Street>Evergreen Lane</Street>
    <Number>34</Number>
  </Address>
</Addresses>

Addresses.xml

Ziel dieses Mappings ist es, die <Person>-Daten aus der ersten Datei mit den <Address>-Daten aus der zweiten Datei für die Datensätze, in denen der Vor- und Zuname (FirstName und LastName) übereinstimmt, zu kombinieren. Dazu müssen für jedes <Person>-Element in der ersten Datei und für jedes <Address>-Element in der zweiten Datei die Elemente FirstName und LastName verglichen werden. Wenn beide Werte gleich sind, so beziehen sich die entsprechenden <Person> und <Address>-Datensätze auf dieselbe Person und müssen miteinander verknüpft werden. Die XML-Zielstruktur sollte folgendermaßen aussehen:

 

<PeopleInfo>
  <Row>
    <FirstName>Marquita</FirstName>
    <LastName>Bailey</LastName>
    <City>Bridgedell</City>
    <Street>Olive Street</Street>
    <Number>4</Number>
    <Email>m.bailey@nanonull.com</Email>
    <Phone>555323698</Phone>
  </Row>
  <Row>
    <FirstName>Totie</FirstName>
    <LastName>Rea</LastName>
    <City>Roseford</City>
    <Street>Evergreen Lane</Street>
    <Number>34</Number>
    <Email>t.rea@nanonull.com</Email>
    <Phone>555598653</Phone>
  </Row>  
</PeopleInfo>

PeopleInfo.xml

Das gewünschte Ergebnis kann ganz einfach durch Hinzufügen einer Join-Komponente zum Mapping erzielt werden. Beachten Sie, dass Sie dasselbe Ergebnis auch mit Hilfe anderer Komponententypen erzielen; in der Anleitung unten wird hierfür jedoch eine Join-Komponente verwendet, was das Thema dieses Beispiels ist.

 

Um das erforderliche Mapping zu erstellen, gehen Sie folgendermaßen vor:

 

 

Schritt 1: Hinzufügen der XML-Quelldateien zum Mapping

1.Klicken Sie im Menü Einfügen auf XML-Schema/Datei und navigieren Sie zur folgenden Quelldatei: <Dokumente>\Altova\MapForce2024\MapForceExamples\People.xml.

2.Wiederholen Sie den obigen Schritt für die Datei Addresses.xml (zweite Quelldatei).

 

 

Schritt 2: Hinzufügen der Schema-Zieldatei zum Mapping

Klicken Sie im Menü Einfügen auf XML-Schema/Datei und navigieren Sie zur Datei <Dokumente>\Altova\MapForce2024\MapForceExamples\People.xsd (XSD-Schema-Zieldatei). Wenn Sie aufgefordert werden, eine XML-Beispieldatei bereitzustellen, klicken Sie auf Überspringen. Wenn Sie aufgefordert werden, ein Root-Element auszuwählen, wählen Sie PeopleInfo als Root-Element aus.

 

 

Schritt 3: Hinzufügen der Join-Komponente

1.Klicken Sie im Menü Einfügen auf Join. (Klicken Sie alternativ dazu auf die Symbolleisten-Schaltfläche Join mf_ic_join_button). Das Mapping sollte zu diesem Zeitpunkt folgendermaßen aussehen (Sie müssen die Komponenten mit der Maus ziehen und deren Größe anpassen, damit sie aussehen, wie unten gezeigt):

mf_map_JoinPeopleInfo1

Wenn Sie einen Blick auf die Join-Komponente werfen, sehen Sie, dass sie zwei nodes/rows-Datenelemente hat, über die sie mit den zwei zu vergleichenden Strukturen verbunden werden kann (in diesem Fall mit den Strukturen Person und Address).

 

2.Ziehen Sie eine Verbindung von Person zum ersten nodes/rows-Datenelement der Join-Komponente. Verbinden Sie auf die gleiche Weise Address mit dem zweiten nodes/rows-Datenelement.

mf_map_JoinPeopleInfo2

3.Wie bereits erwähnt, kann die Verknüpfung nur durchgeführt werden, wenn die Werte von FirstName und LastName in beiden Strukturen identisch sind. Klicken Sie auf die Schaltfläche Join-Bedingung definieren mf_ic_join_key , um diese Bedingung zu definieren.

4.Wählen Sie das Datenelementpaar zur Definition der ersten Join-Bedingung aus (FirstName unter Struktur 1 und FirstName unter Struktur 2).

5.Klicken Sie auf Bedingung hinzufügen und wiederholen Sie den Schritt für LastName.

mf_map_JoinPeopleInfo3

In einigen Mappings genügt eventuell eine aus einem einzigen Vergleich bestehende Bedingung für die Join-Verknüpfung. In diesem Beispiel müssen jedoch zwei Vergleiche erstellt werden:

 

1)FirstName in Struktur 1 = FirstName in Struktur 2

2)LastName in Struktur 1 = LastName in Struktur 2.

 

Wenn mehrere Bedingungen definiert werden, müssen alle davon "true" ergeben, damit die Join-Verknüpfung erstellt wird. In diesem Beispiel wird die Join-Verknüpfung daher nur erstellt, wenn beide Vergleiche "true" ergeben. Wenn nur eine der obigen Bedingungen definiert würde, würden auch Personen-Datensätze verknüpft, die denselben Vornamen (FirstName) aber einen anderen Nachnamen (LastName) haben.

 

Schritt 4: Mappen der Join-Komponente auf das Zielschema

Nachdem nun die beiden Strukturen miteinander verknüpft wurden, können Sie definieren, welche Datenelemente der miteinander verknüpften Struktur auf die Zielkomponente gemappt werden sollen. Ziehen Sie dazu, wie unten gezeigt, Verbindungen von Datenelementen beider verknüpften Strukturen auf die Zielkomponente. Die Verbindung zwischen joined und Row hat den folgenden Zweck: Immer wenn die Join-Bedingung erfüllt wird, wird in der Zielkomponente ein neues Row-Datenelement erstellt.

mf_map_JoinPeopleInfo

Klicken Sie auf das Fenster Ausgabe, um eine Vorschau auf das Mapping-Ergebnis zu sehen. Wie erwartet enthält jeder Personendatensatz (<Row>) nun die vollständigen, aus zwei verschiedenen Quelle miteinander verbundenen Adressdaten.

© 2017-2023 Altova GmbH