Konvertieren von XML in ein neues Schema

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

Startseite >  Tutorials >

Konvertieren von XML in ein neues Schema

In diesem Tutorial wird gezeigt, wie Sie Daten zwischen zwei XML-Dateien konvertieren. Dabei werden die grundlegenden Aspekte der MapForce Entwicklungsumgebung erläutert. In beiden XML-Dateien ist eine Liste von Büchern gespeichert, doch sind ihre Elemente etwas unterschiedlich benannt und strukturiert (d.h. die beiden Dateien haben unterschiedliche Schemas).

Tutorial_Convert_XML_to_New_Schema

Abstraktes Modell der Datentransformation

Im nachfolgenden Codefragment sehen Sie Beispieldaten aus der Datei, die als Datenquelle verwendet wird (aus Gründen der Einfachheit wurden die XML- und die Namespace-Deklaration weggelassen).

 

<books>
  <book id="1">
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <category>Fiction</category>
    <year>1876</year>
  </book>
  <book id="2">
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <category>Fiction</category>
    <year>1912</year>
  </book>
</books>

books.xml

So sollten die Daten in der Zieldatei aussehen:

 

<library>
  <last_updated>2015-06-02T16:26:55+02:00</last_updated>
  <publication>
    <id>1</id>
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <genre>Fiction</genre>
    <publish_year>1876</publish_year>
  </publication>
  <publication>
    <id>2</id>
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <genre>Fiction</genre>
    <publish_year>1912</publish_year>
  </publication>
</library>

library.xml

Wie Sie vielleicht bemerkt haben, sind einige Elementnamen in der XML-Quell- und Zieldatei nicht identisch. Unser Ziel ist, die Elemente <author>, <title>, <genre> und <publish_year> der Zieldatei aus den entsprechenden Elementen in der Quelldatei (<author>, <title>, <category>, <year>) zu befüllen. Das Attribut id in der XML-Quelldatei muss auf das Element <id> in der XML-Zieldatei gemappt werden. Schließlich müssen wir noch das Element <last_updated> der XML-Zieldatei mit dem Datum und der Uhrzeit der letzten Aktualisierung der Datei befüllen.

 

Um die Daten entsprechend diesen Vorgaben zu transformieren, gehen Sie folgendermaßen vor:

 

Schritt 1: Auswahl von XSLT2 als Transformationssprache

Sie haben die folgenden Möglichkeiten, um dies zu tun:

Klicken Sie auf die Symbolleisten-Schaltfläche XSLT2 ( toolbar_xslt2 ).
Klicken Sie im Menü Ausgabe auf XSLT 2.0.

 

Schritt 2: Hinzufügen der XML-Quelldatei zum Mapping

Die XML-Quelldatei für dieses Mapping befindet sich im folgenden Ordner: <Dokumente>\Altova\MapForce2019\MapForceExamples\books.xml. Sie können sie auf die folgenden Arten zum Mapping hinzufügen:

Klicken Sie auf die Symbolleisten-Schaltfläche XML-Schema/Datei einfügen ( ic-new-schema ).
Klicken Sie im Menü Einfügen auf XML-Schema/Datei.
Ziehen Sie die XML-Datei aus dem Windows Explorer in den Mapping-Bereich.

 

Nachdem Sie die Datei nun zum Mapping-Bereich hinzugefügt haben, sehen Sie ihre Struktur auf einen Blick. Diese Struktur wird in MapForce als Mapping-Komponente oder einfach Komponente bezeichnet. Sie können Elemente in der Komponente durch Klicken auf die Symbole "Reduzieren" ( gui_collapse ) und "Erweitern" ( gui_expand ) oder durch Drücken der +- und -+Taste auf der Tastatur erweitern bzw. reduzieren.

tut-01-BAS

Mapping-Komponente

Um die Komponente im Mapping-Fenster zu verschieben, klicken Sie auf die Komponentenüberschrift und ziehen Sie sie mit der Maus an die neue Position. Um die Größe der Komponente zu ändern, ziehen Sie die Ecke der Komponente ic-bestfit. Sie können auch auf die Ecke doppelklicken, damit MapForce die Größe automatisch anpasst.

 

Der oberste Node component_filerepräsentiert den Dateinamen; in diesem Fall wird als Titel der Name der XML-Instanzdatei angezeigt. Die XML-Elemente in der Struktur werden durch das Symbol component_element gekennzeichnet, während XML-Attribute durch das Symbol component_attribute gekennzeichnet sind.

 

Die kleinen Dreiecke an beiden Seiten der Komponente repräsentieren Daten-Inputs (wenn sie sich auf der linken Seite befinden) oder Outputs (wenn sie sich auf der rechten Seite befinden). Diese Dreiecke werden in MapForce als Input- bzw. Output-Konnektoren bezeichnet.

 

Schritt 3: Hinzufügen der XML-Zieldatei zum Mapping

Um die XML-Zieldatei zu generieren, werden wir eine bereits vorhandene XML-Schema-Datei verwenden. In einem realen Szenario haben Sie diese Datei möglicherweise von einem Dritten erhalten. Sie können sie aber auch selbst mit einem Tool wie XMLSpy erstellen. Wenn Sie für Ihre XML-Daten keine Schema-Datei haben, fragt MapForce jedes Mal, wenn Sie eine XML-Datei ohne dazugehöriges Schema bzw. ohne Schemareferenz zum Mapping hinzufügen, ob es eine Schema-Datei für Sie generieren soll.

 

In diesem Beispiel wird eine bestehende Schema-Datei aus dem Ordner <Dokumente>\Altova\MapForce2019\MapForceExamples\library.xsd verwendet. Um das Schema zum Mapping hinzuzufügen, gehen Sie vor, wie beim Hinzufügen der XML-Quelldatei (d.h. klicken Sie auf die Symbolleisten-Schaltfläche XML-Schema/Datei einfügen ( ic-new-schema )). Klicken Sie auf Überspringen, wenn Sie von MapForce aufgefordert werden, eine Instanzdatei bereitzustellen.

dlg_xml_supply_instance

Zu diesem Zeitpunkt sieht das Mapping-Design folgendermaßen aus:

tut-01-02-BAS

 

Schritt 4: Ziehen der Verbindungen

Wir wollen für jedes <book>-Element in der XML-Quelldatei ein neues <publication>-Element in der XML-Zieldatei erstellen. Daher werden wir nun eine Mapping-Verbindung zwischen dem <book>-Element in der Quellkomponente und dem <publication>-Element in der Zielkomponente erstellen. Klicken Sie dazu auf den Output-Konnektor (das kleine Dreieck) rechts vom Element <book> und ziehen Sie ihn auf den Input-Konnektor des Elements <publication> in der Zielkomponente.

 

Bei Ziehen der Verbindungslinie verbindet MapForce unter Umständen automatisch alle Child-Elemente von <book> in der Quelldatei mit gleichnamigen Elementen in der Zieldatei; dadurch werden gleichzeitig vier Verbindungen erstellt. Dieses Verhalten wird durch die Funktionalität "Idente Sub-Einträge automatisch verbinden" verursacht. Die Funktion kann auch deaktiviert und angepasst werden.

tut-01-03-BAS

Sie können das Verhalten "Idente Sub-Einträge automatisch verbinden" auf eine der folgenden Arten aktivieren bzw. deaktivieren:

 

Klicken Sie auf die Symbolleisten-Schaltfläche Aktiviert/Deaktiviert die automatische Verbindung von Sub-Einträgen ( ic-conn-child ).
Klicken Sie im Menü Verbindung auf den Befehl Idente Sub-Einträge automatisch verbinden.

 

Beachten Sie, dass einige der Input-Konnektoren der Zielkomponente vom MapForce orange markiert wurden. Dies bedeutet, dass diese Datenelemente zwingend erforderlich sind. Damit die XML-Zieldatei gültig ist, müssen Sie für die obligatorischen Datenelemente auf folgende Art Werte bereitstellen:

 

Verbinden Sie das Element <category> in der Quelldatei mit dem Element <genre> in der Zieldatei.
Verbinden Sie das Element <year> in der Quelldatei mit dem Element <publish_year> in der Zieldatei.

 

Sie müssen nun nur noch einen Wert für das Element <last_updated> bereitstellen. Wenn Sie die Maus über seinen Input-Konnektor platziert haben, sehen Sie, dass das Element den Typ xs:dateTime hat. Beachten Sie, dass die Symbolleisten-Schaltfläche Tipps anzeigen ( ic-show-lib-info ) aktiviert sein muss, damit Tipps angezeigt werden.

tut-01-05-BAS

Sie können den Datentyp der einzelnen Datenelemente auch immer sichtbar machen. Klicken Sie dazu auf die Symbolleisten-Schaltfläche Datentypen anzeigen ( ic-show-types ).

Sie können das aktuelle Datum und die aktuelle Uhrzeit (d.h. den Wert xs:dateTime) mit Hilfe einer Datums- und Uhrzeit-XSLT-Funktion abrufen. Um die XSLT-Funktion für das Mapping zu suchen, geben Sie "date" in das Textfeld im unteren Bereich des Fensters Bibliotheken ein. Doppelklicken Sie alternativ dazu auf einen leeren Bereich im Mapping und beginnen Sie mit der Eingabe von "current-date".

tut-01-06-BAS

Wenn Sie den Mauszeiger, wie oben gezeigt, über den "result"-Bereich der Funktion platzieren, sehen Sie die Beschreibung der Funktion. Damit Tipps angezeigt werden, muss die Symbolleisten-Schaltfläche Tipps anzeigen ( ic-show-lib-info ) aktiviert sein.

Um die Funktion zum Mapping hinzuzufügen, ziehen Sie die Funktion in das Mapping-Fenster und verbinden Sie ihren Output mit dem Input des Elements <last_updated>.

tut-01-07-BAS

Sie haben nun ein MapForce Mapping-Design (oder einfach "Mapping") erstellt, das Daten aus der Instanzdatei books.xml (mit dem Schema books.xsd) in die neue Datei library.xml (mit dem Schema library.xsd) konvertiert. Wenn Sie auf die Überschrift der jeweiligen Komponente klicken, sehen Sie diese und andere Einstellungen im Dialogfeld "Komponenteneinstellungen" (siehe Abbildung unten).

tut-01-10-BAS

Komponenteneinstellungen für die Quellkomponente

tut-01-11-BAS

Komponenteneinstellungen für die Zielkomponente

 

Schritt 5: Validieren und Speichern des Mappings

Die Validierung des Mappings ist ein optionaler Schritt, mit Hilfe dessen Sie potenzielle Mapping-Fehler- und Warnungen sehen und beheben können, bevor Sie das Mapping ausführen. Um zu überprüfen, ob das Mapping gültig ist, wählen Sie eine der folgenden Methoden:

 

Klicken Sie im Menü Datei auf Mapping validieren.
Klicken Sie auf die Symbolleisten-Schaltfläche Validieren ( ic-val-mapping ).

 

Die Validierungsergebnisse werden im Fenster "Meldungen" angezeigt:

gui_messages_window

Fenster "Meldungen"

Sie sollten das Mapping nun auch in einer Datei speichern. Wählen Sie dazu eine der folgenden Methoden:

 

Klicken Sie im Menü Datei auf Speichern.
Klicken Sie auf die Symbolleisten-Schaltfläche Speichern ( toolbar_btn_save ).

 

Sie finden das in diesem Tutorial erstellte Mapping unter dem folgenden Pfad: <Dokumente>\Altova\MapForce2019\MapForceExamples\\BooksToLibrary.mfd. Sie können nun entweder mit der Mapping-Datei, die Sie soeben erstellt haben, oder mit der Datei BooksToLibrary.mfd weiterarbeiten.

 

Schritt 6: Anzeigen einer Vorschau auf das Mapping-Ergebnis

Sie können direkt in MapForce eine Vorschau auf das Mapping-Ergebnis anzeigen. Klicken Sie dazu im unteren Bereich des Mapping-Fensters auf die Schaltfläche Ausgabe. MapForce führt die Transformation aus und zeigt das Ergebnis des Mappings im Fenster Ausgabe an.

 

tut-01-08-BAS

Fenster "Ausgabe"

Sie sehen nun das Ergebnis der Transformation in MapForce.

 

Standardmäßig werden die im Ausgabefenster in der Vorschau angezeigten Dateien nicht auf der Festplatte gespeichert. MapForce erstellt statt dessen temporäre Dateien. Um die im Ausgabefenster angezeigte Datei auf Festplatte zu speichern, wählen Sie den Menübefehl Ausgabe | Ausgabedatei speichern oder klicken Sie auf die Symbolleisten-Schaltfläche Generierte Ausgabe speichern ( ic-save-sel-string ).

 

Um MapForce so zu konfigurieren, dass die Ausgabe, anstatt in einer temporären Datei, direkt in einer endgültigen Datei gespeichert wird, gehen Sie zu Extras | Optionen | Allgemein und aktivieren Sie das Kontrollkästchen Direkt in die endgültigen Output-Dateien schreiben. Beachten Sie, dass nicht empfohlen wird, diese Option zu aktivieren, während Sie das Tutorial durchnehmen, da Sie dadurch die Originaldateien eventuell unabsichtlich überschreiben könnten.

 

Sie können auch eine Vorschau des generierten XSLT-Codes, der die Transformation durchführt, anzeigen. Klicken Sie dazu im unteren Bereich des Mapping-Fensters auf die Schaltfläche XSLT2.

tut-01-09-BAS

Fenster "XSLT2"

Um den XSLT2-Code zu generieren und in einer Datei zu speichern, wählen Sie den Menübefehl Datei | Code generieren in | XSLT 2.0. Wenn Sie dazu aufgefordert werden, geben Sie einen Ordner an, in dem der generierte Code gespeichert werden soll. Nach Fertigstellung der Codegenerierung enthält der Zielordner die folgenden beiden Dateien:

 

1.Eine nach dem Zielschema benannte XSLT-Transformationsdatei (in diesem Beispiel MappingMaptolibrary.xslt).
2.Die Datei DoTransform.bat. Mit Hilfe der Datei DoTransform.bat können Sie die XSLT-Transformation in RaptorXML Server ausführen (nähere Informationen dazu finden Sie unter https://www.altova.com/de/raptorxml.html ).

© 2019 Altova GmbH