サンプル: プロトコルバッファーからデータを読み取る

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  データソースとターゲット > プロトコルバッファー >

サンプル: プロトコルバッファーからデータを読み取る

このサンプルは、プロトコルバッファー書式でエンコードされているバイナリファイルからデータを読み取る方法について示しています。ソースバイナリファイルを次のパスで見つけることができます: <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\assets.bin。 バイナリファイルを説明する .proto ファイルは同じディレクトリで使用することができ、以下のようになります:

 

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

ソースバイナリファイルには、多種の文化財に関する情報が含まれています (このサンプルでは、絵画のコレクションが使用されています)。上記の .proto ファイルにより表示されているとおり、各絵画の 「高さ」「幅」 はセンチメートルで表示されています。 絵画についての説明が、(美術館、私蔵、寺院などの)場所を指定する一覧表などを含む、他のフィールドで説明されています。コンマで区切られた (CSV) ファイルでこの情報を抽出することが、業務の必要条件です。また、絵画の寸法はセンチメートルからインチに変換され、「24 インチ x 56.8 インチ」 などのフォーマットのように 単一の文字列で表示される必要があります。

 

上記の必要条件にしたがデータを抽出し、希望する出力を生成するするマッピングは下に表示される通りです。 このマッピングは次のディレクトリで使用することができます: <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\。マッピングを開き、直接実行、または、次のステップに従い始めから作成することが来ます。

mf_proto_07

ReadProtocolBuffers.mfd

上記のとおり、マッピングは、ソースバイナリコンポーネント (assets) とターゲット CSV コンポーネント (PaintingInfo) により構成されています。また、次の中間コンポーネントが含まれています:

 

0、1、2、3  などの列挙の値を人間が判読できる文字列表記 (例えば、 0 = UNKNOWN, 1 = MUSEUM など) に変換する value-map テーブル。
ConvertCmToInch 関数。タイトルが示す通り、これは、センチメートルをインチに変換するユーザー定義関数です。この関数はマッピング上で (それぞれ、「高さ」width「幅」 のために)2回呼び出されます。
concat 関数。 この連結関数は、 「# in x # in」 のフォーマットで文字列を返します。 # は絵画の実際の高さと幅をインチで示しています。

 

次の ステップはマッピングを最初から作る方法を表示しています。

 

ステップ 1: ソースバイナリファイルの追加

1.「挿入」メニューで「プロトコルバッファーファイル」をクリックし、次のファイルを参照します: <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\assets.proto
2.プロンプトされると、「CulturalAssets」 をルートメッセージとして選択し、「OK」をクリックします。
3.新規コンポーネントのタイトルバーをダブルクリックすると、「バイナリコンポーネントの設定」 ダイアログボックスが開かれます。
4.「入力バイナリファイル」の横の「参照」をクリックし、次の ファイル: <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\assets.bin を選択します。

mf_proto_08

バイナリファイルをマッピングに追加するも参照してください。

 

ステップ 2: ターゲット CSV コンポーネントの追加

1.「挿入」 メニューで「テキストファイル」をクリックします。 .
2.「標準 CSV に単純な処理を使用」 チェックボックスを選択し、「継続」 をクリックします。「CSV コンポーネント設定」 ダイアログボックスが開かれます。
3.「フィールドの追加」 ボタンを複数回クリックし、希望するデータを保管するために必要とされる5つのターゲットフィールドを作成します。
4.各フィールドのヘッダーをダブルクリックし、詳細を説明する名前を与えます。

 

詳細に関しては、CSV オプションの設定 を参照してください。

 

ステップ 3: value-map の追加

1.「挿入」 メニューで Value-Map」をクリックします。
2.下に示されるように各マップされたレコードのためにエントリを作成します。

mf_proto_09

「Otherwise」条件は、バイナリのファイルが Location フィールドのために値が含まれない場合を処理します。このイベントが発生すると、マッピングは、結果を生成しない代わりに、値 「Unknown」 をターゲットに書き込みます。詳細に関しては、 Value-Maps の使用 を参照してください。.

 

ステップ 4: ユーザー定義関数の作成

1.関数 メニューで「ユーザー定義関数の作成」をクリックし、 "ConvertCmToInch" と名前を付けます。他のオプションをそのままにします。
2.divideround-precision ビルトイン関数をライブラリウィンドウからドラッグし、関数のマッピングウィンドウにドロップします。 マッピングにビルトイン関数を追加するも参照してください。
3.下に示されるとおり2つの定数を追加し、マッピングに定数を追加するを参照してください。 最初の定数は、書式に従いセンチメートルをインチに変換するための小数定数を提供します。2番目の定数は、四捨五入の精度を提供します。

 

基本的には、以下に示される通り関数は、入力値を 2.54 で割り、結果を小数点の一桁まで四捨五入します:

mf_proto_10

エラーを回避するために、入力と出力コンポーネントのデータ型を小数に設定します。データ型の変更を確認するには、 コンポーネントのタイトルバーをダブルクリック、または、タイトルバーを右クリックし、コンテキストメニューから「プロパティ」を選択します。

 

ユーザー定義関数が準備されると、「メインマッピングに戻る」 mf_ic_gotomainmapping をクリックし、呼び出すためにライブラリウィンドウから関数をマッピングにドラッグします。このサンプルでは、関数は2度呼び出されます。詳細に関しては、ユーザー定義関数 を参照してください。

 

ステップ 5: 結合関数の追加

ライブラリウィンドウに 「concat」 を入力し、マッピングに concat 関数 をドラッグします。必要とされる入力引数をすべて追加するには、 「パラメーターの追加」 ( gui_add_function_parameter ) を複数回クリックします。関数引数の追加または削除を参照してください。  定数  「in」と「x」 は文字列の値です。基本的には、関数は、絵画の「高さ」を 「 x 」 が後に続く文字列「 in 」と共に返し、「高さ」を「 in 」と共に返します。

mf_proto_11

 

マッピングの実行

MapForce 内で生成されたファイルをプレビューするには、「出力」 タブをクリックします。 三番目の CSV 列には必要とされたフォーマットのディメンションが含まれていることに注意してください。

mf_proto_12

マッピングの出力

 

マッピングの出力をディスクに保存する方法:

「出力」 メニューで「出力ファイルを保存」をクリックします。

 

MapForce Serve を使用した自動化

ライセンスされた MapForce Server を使用する場合、 Linux、macOS、または、 Windows マシン上のコマンドラインでマッピングを実行することができます:

 

1.メニューコマンド 「ファイル |  MapForce Server 実行ファイルにコンパイルする」、を使用してマッピングを MapForce Server 実行ファイル (.mfx)にコンパイルします。 MapForce Server 実行可能ファイルにマッピングをコンパイルするを参照してください。
2..mfx ファイルをサーバーマシンにコピーします。
3.MapForce Server を下のコマンドを使用して実行します。

 

mapforceserver run ReadProtocolBuffers.mfx

 

メモ:

 

mapforceserver は使用中のオペレーティングシステムのために適用できる MapForce Server 実行可能ファイルへのパスです。
適用できる通り、 .mfx ファイルへのパスを変更、または、実行可能ファイルと同じフォルダーに .mfx をコピーします。
.mfx ファイルは内蔵されており、 .proto ファイルはサーバー実行のために必要ありません。

 

サーバー実行の際は、 API 呼出、または、 FlowForce Server ジョブとしてマッピングを実行することができます。 詳細に関しては、MapForce Serve を使用した自動化 を参照してください。


(C) 2019 Altova GmbH