サンプル: ノードのフィルターと番号付け

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

ホーム >  マッピングのデザイン > 変数の使用 >

サンプル: ノードのフィルターと番号付け

このサンプル内で説明されているマッピングのシーケンスは、 <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\ フォルダー内の PositionInFiltered.mfd で使用することができます。

 

このマッピングは、複数の個人の連絡先のデータを含む XML ファイルを読み取り、フィルターし、 ターゲット XML ファイルに書き込みます。このマッピングの目的は、ソース XML ファイルから、 「M」 または、以降のアルファベットから始まる姓を持つ個人をフィルターします。抽出された連絡先には、番号がつけられている必要があります。番号は、ターゲット XML ファイル内で各連絡先の一意の識別子としての役割を果たします。

mf_map_PositionInFilteredSequence

PositionInFilteredSequence.mfd

上の目的を達成するには、 次のコンポーネント型 がマッピングに追加されました:

 

フィルター (次を参照してください: フィルターと条件 )
複合型変数 (次を参照してください: 変数の追加)
関数 greaterposition (次を参照してください: 関数との作業)
定数 (定数を追加するには、 メニューコマンド「挿入 | 定数」を選択します )。

 

変数は、ソースコンポーネントとして同じスキーマを使用します。変数を右クリックして、コンテキストメニューからプロパティを選択すると、 この変数構造のためにルートノードとして ノード BranchOffices/Office/Contact が選択されていることを確認してください。

 

最初に、ソースコンポーネントのデータは、フィルターにパスされます。フィルターは、変数にフィルターの条件を満たすレコードのみをパスします。具体的には、フィルターは、最初の名前が 「M」 に等しい、または、大きい値を持つ Contact ノードのみを取得するように構成されています。この目的を達成するには、 関数 greater は、各 last アイテムを 定数値 「M」 と比較します。

 

変数には、ソースコンポーネント (BranchOffices) のルートアイテムに接続されている compute-when 入力があります。ランタイムでは、これは、ソースコンポーネント内のシーケンスから新規のアイテムが読み込まれる都度、変数を再評価するようにします。このマッピングでは、しかしながら、 compute-when アイテムの接続、または、未接続に違いはありません。この理由は、変数が(フィルターを使用して間接的に) Contact ソースアイテム に接続されており、フィルター条件を満たす Contact のインスタンスの数だけ計算がおこなわれるからです。

 

position 関数は、変数の各反復のために現在のシーケンスの番号を返します。8 件の連絡先がフィルターの条件を満たしています。ですから、マッピングをプレビューして、出力を確認すると、1 から 8 の ID が、ターゲットコンポーネントの ID 要素に書き込まれていることが確認することができます。

 

変数の必要性に関しては、すべてのレコードに番号付けをする必要性に応じるものです。フィルターの結果を直接ターゲットコンポーネントに接続すると、 Contact の各発生に番号を付けることができません。このマッピング内の変数の目的は、ですから、 Contact の各インスタンスを一時的にマッピングに保管し、ターゲットに書き込まれる前に番号を付けることです。


(C) 2019 Altova GmbH