Beispiel: Auslesen von Daten aus Protol Buffers

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

Startseite >  Datenquellen und -ziele > Protocol Buffers >

Beispiel: Auslesen von Daten aus Protol Buffers

In diesem Beispiel wird gezeigt, wie Daten aus einer im Protocol Buffers-Format kodierten Binärdatei ausgelesen werden. Die Binär-Quelldatei befindet sich unter dem folgenden Pfad: <Dokumente>\Altova\MapForce2019\MapForceExamples\assets.bin. Die .proto-Datei, die die Binärdatei beschreibt, befindet sich im selben Verzeichnis und sieht folgendermaßen aus:

 

syntax="proto3";

 

package mapforce.demo;

 

message CulturalAssets {

 repeated PaintingType painting = 1;

}

 

message PaintingType {

 string name = 1;

 string period = 2;        

 float height = 3; // in cm

 float width = 4; // in cm

 string remarks = 5;

 LocationEnum location = 6;

 

 enum LocationEnum {

         UNKNOWN = 0;

         MUSEUM = 1;

         TEMPLE = 2;

         PRIVATE = 3;                

 }

}

assets.proto

Die Binär-Quelldatei enthält Informationen über verschiedene Kulturschätze (in diesem Beispiel eine Gemäldesammlung). Wie Sie aus der obigen .proto -Datei ersehen, hat jedes Gemälde eine in Zentimetern definierte Höhe (height) und Breite (width). Es gibt eine Reihe weiterer Felder zur Beschreibung eines Gemäldes, darunter eine Enumeration, in der Aufbewahrungsort angegeben ist (Museum, private Sammlung oder Tempel). Diese Informationen sollen nun in eine kommagetrennte Datei (CSV-Datei) extrahiert werden. Außerdem sollen alle Abmessungen von Zentimetern in Zoll umgerechnet werden und in einem einzigen String in einem Format wie "24 in x 56.8 in" dargestellt werden.

 

Unten sehen Sie das Mapping, mit dem die Daten den Anforderungen gemäß extrahiert werden und das gewünschte Ergebnis erzeugt wird. Sie finden dieses Mapping im folgenden Verzeichnis: <Dokumente>\Altova\MapForce2019\MapForceExamples\. Sie können das Mapping öffnen und direkt ausführen oder die schrittweise Anleitung unten befolgen, um es von Grund auf neu zu erstellen.

mf_proto_07

ReadProtocolBuffers.mfd

Wie oben gezeigt, besteht das Mapping aus einer Binär-Quellkomponente (assets) und CSV-Zielkomponente (PaintingInfo). Des Weiteren enthält es die folgenden Zwischenkomponenten:

 

eine Wertezuordnungstabelle zur Konvertierung von Enumerationswerten wie 0, 1, 2, 3 in eine für Menschen lesbare Stringdarstellung (z.B., 0 = UNKNOWN, 1 = MUSEUM, usw.).
die Funktion ConvertCmToInch. Wie der Name vermuten lässt, handelt es sich um eine benutzerdefinierte Funktion, die Zentimeter in Zoll konvertiert. Diese Funktion wird im Mapping zwei Mal aufgerufen (für die Höhe und die Breite).
die concat-Funktion. Diese Funktion verkettet einen String im Format "# in x # in", wobei # die Höhe und Breite des Bildes in Zoll repräsentiert.

 

In der folgenden Anleitung wird beschrieben, wie Sie das obigen Mapping von Grund auf neu erstellen.

 

Schritt 1: Hinzufügen der Quell-Binärdatei

1.Klicken Sie im Menü Einfügen auf Protocol Buffers-Datei und navigieren Sie zur folgenden Datei: <Dokumente>\Altova\MapForce2019\MapForceExamples\assets.proto.
2.Wenn Sie dazu aufgefordert werden, wählen Sie "CulturalAssets" als Root Message aus und klicken Sie auf OK.
3.Doppelklicken Sie auf die Titelleiste der neuen Komponente. Daraufhin wird das Dialogfeld "Komponenteneinstellungen" geöffnet.
4.Klicken Sie neben Input-Binärdatei auf Durchsuchen und wählen Sie die folgenden Datei aus: <Dokumente>\Altova\MapForce2019\MapForceExamples\assets.bin.

mf_proto_08

Siehe auch Hinzufügen von Binärdateien zum Mapping.

 

Schritt 2: Hinzufügen der CSV-Zielkomponente

1.Klicken Sie im Menü Einfügen auf Textdatei.
2.Aktivieren Sie das Kontrollkästchen Einfache Verarbeitung für Standard-CSV...wählen und klicken Sie auf Weiter. Daraufhin wird das Dialogfeld "CSV-Komponenteneinstellungen" geöffnet.
3.Klicken Sie mehrmals auf die Schaltfläche Feld anhängen, um fünf Zielfelder für die erwarteten Daten zu erstellen.
4.Doppelklicken Sie optional auf die Feldüberschriften, um ihnen beschreibende Namen zu geben.

 

Nähere Informationen dazu finden Sie unter Definieren der CSV-Optionen.

 

Schritt 3: Hinzufügen der Wertezuordnung

1.Klicken Sie im Menü Einfügen auf Wertezuordnung.
2.Erstellen Sie für jeden gemappten Datensatz, wie unten gezeigt, einen Eintrag.

mf_proto_09

Mit Hilfe der "Andernfalls"-Bedingung können Sie festlegen, was geschieht, wenn die Binärdatei keinen Wert für das Feld Location enthält. In diesem Fall wird der Wert "Unbekannt" in die Zielkomponente geschrieben, anstatt diese leer zu lassen. Nähere Informationen dazu finden Sie unter Verwendung von Wertezuordnungen.

 

Schritt 4: Erstellen der benutzerdefinierten Funktion

1.Klicken Sie im Menü Funktion auf Benutzerdefinierte Funktion erstellen und geben Sie der Funktion den Namen "ConvertCmToInch". Belassen Sie alle anderen Optionen unverändert.
2.Ziehen Sie die vordefinierten Funktionen divide und round-precision aus dem Fenster "Bibliotheken" in das Funktionsmappingfenster. Siehe auch Hinzufügen einer vordefinierten Funktion zum Mapping.
3.Fügen Sie zwei Konstanten hinzu und ziehen Sie alle Verbindungen, wie unten gezeigt, siehe auch Hinzufügen einer Konstante zum Mapping. Die erste Konstante liefert die Dezimalkonstante zum Konvertieren von Zentimetern in Zoll gemäß der Formel und die zweite liefert die Rundungsgenauigkeit.

 

Im Prinzip dividiert die Funktion den Input-Wert durch 2,54 und rundet das Ergebnis dann auf eine Dezimalstelle, wie unten gezeigt:

mf_proto_10

Um etwaige Fehler zu vermeiden, setzen Sie den Datentyp der Input- und Output-Komponente auf "decimal". Um den Datentyp anzuzeigen oder zu ändern, doppelklicken Sie auf die Titelleiste der Komponente oder klicken Sie mit der rechten Maustaste auf die Titelleiste und wählen Sie im Kontextmenü den Befehl Eigenschaften.

 

Nach Definition der benutzerdefinierten Funktion klicken Sie auf Zurück zum Haupt-Mapping mf_ic_gotomainmapping und ziehen Sie die Funktion aus dem Fenster "Bibliotheken" in das Mapping. In diesem Beispiel wird die Funktion zwei Mal aufgerufen. Nähere Informationen finden Sie unter Benutzerdefinierte Funktionen.

 

Schritt 5: Hinzufügen der Verkettungsfunktion

Geben Sie im Fenster "Bibliotheken" die ersten Buchstaben von "concat" ein und ziehen Sie die concat-Funktion anschließend in das Mapping. Um alle erforderlichen Input-Argumente hinzuzufügen, klicken Sie mehrmals auf Parameter hinzufügen ( gui_add_function_parameter ) , siehe auch Hinzufügen oder Löschen von Funktionsargumenten. Die Konstanten " in" und " x " sind String-Werte. Das Ergebnis der Funktion ist die Höhe (height) des Bilds, gefolgt vom String " in ", gefolgt von " x ", gefolgt von der Breite (width) des Bilds, gefolgt von "in".

mf_proto_11

 

Ausführen des Mappings

Um eine Vorschau auf die generierte Datei zu sehen, klicken Sie in MapForce auf das Register Ausgabe. Beachten Sie, dass die dritte CSV-Spalte die Abmessungen des Gemäldes im gewünschten Format enthält.

mf_proto_12

Mapping-Ausgabe

 

So speichern Sie die Mapping-Ausgabe auf der Festplatte:

Klicken Sie im Menü Ausgabe auf Ausgabedatei speichern.

 

Automatisierung mit MapForce Server

Wenn Sie MapForce Server lizenziert haben, können Sie das Mapping auch über die Befehlszeile auf einem Linux-, macOS- oder Windows-Rechner ausführen:

 

1.Kompilieren Sie das Mapping mit dem Menübefehl Datei | Zu MapForce Server-Ausführungsdatei kompilieren zu einer MapForce Server-Ausführungsdatei (.mfx), siehe auch Kompilieren von Mappings zu MapForce Server-Ausführungsdateien.
2.Kopieren Sie die .mfx-Datei auf den Server-Rechner.
3.Führen Sie MapForce Server mit dem unten stehenden Befehl aus.

 

mapforceserver run ReadProtocolBuffers.mfx

 

Anmerkungen:

 

mapforceserver ist der betriebssystemspezifische Pfad zur ausführbaren MapForce Server-Datei.
Ändern Sie den Pfad zur .mfx-Datei nach Bedarf oder kopieren Sie die .mfx-Datei in denselben Ordner wie die ausführbare Datei.
Die .mfx-Datei enthält alle Informationen; die .proto-Datei wird für die Server-Ausführung nicht benötigt.

 

Sie können Mappings bei der Server-Ausführung als API-Aufruf oder als FlowForce Server-Auftrag (entweder bei Bedarf oder in regelmäßigen Abständen) ausführen. Nähere Informationen dazu finden Sie unter Automatisierung mit MapForce Server.


© 2019 Altova GmbH