サンプル: CSV ならびに固定長テキストファイルから階層構造を作成

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

ホーム >  データソースとターゲット > CSV とテキストファイル >

サンプル: CSV ならびに固定長テキストファイルから階層構造を作成

このセクションにあるサンプルは <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\ フォルダー内部にある Tut-headerDetail.mfd に収められています。このサンプルにおける CSV ファイル(Orders.csv)では、以下にある通り各フィールドに対してそれぞれデータが定義されています:

 

フィールド 1 : H という値はヘッダーが記述されたレコードを表し、D は詳細情報が記述されたレコードを表します。
フィールド 2 : ヘッダーと詳細レコードの共通キーです。
各ヘッダー/詳細レコードは別々の行にて表されます。

 

Orders.csv ファイルの内容を以下に示します。

Head-detail-01

 

マッピングの目的を以下に示します:

 

フラットファイル CSV を階層構造の XML ファイルへマッピングする
H により表示されるヘッダーレコードをフィルタリングする
各ヘッダーレコードに対して D により表される詳細レコードを関連付ける

Tut-headerDetail-ENT

tut-headerDetail.mfd

上の目的を達成するには、ヘッダーと詳細レコードに共通のフィールドが与えられている必要があります。共通のフィールド(またはキー)とは、この場合 CSV ファイルのレコードである OrderNo のことになります。CSV ファイルの内容を見ると、最初のヘッダーレコードとそれ以降にある 2 つの詳細レコードに 111 という共通した値が与えられていることが分かります。

 

Order.csv ファイルが 2 度挿入され、マッピングがより直感的に表示されています。

 

Tut-headerDetail.xsd スキーマファイルは階層構造により構成されています。Order はルート要素で、子要素に Header を持ち、更に Header 以下に Detail 要素が配置されています。

 

最初の Orders.csv コンポーネントからは Header レコード(ならびにその他のフィールド)がスキーマターゲットファイルの Header アイテムにマッピングされます。フィルターコンポーネントを使用することで、H レコードのフィルタリングを行います。アイテムにより、フィルタリングされたレコードがスキーマファイル内にある Header アイテムに与えられます。

 

2 番目の Orders.csv コンポーネントからは、Header レコードにある OrderNo の値にマッチした Detail レコードが与えられます。以下の処理が行われます:

 

Header レコードにある OrderNo フィールドと、Detail レコードにあるフィールドが equal 関数により比較されます(パフォーマンスを向上させるため、優先コンテキストは a パラメーターにセットされています)。
logical-and 関数を使用することで、Header レコードの OrderNo と同じ値を含む Detail レコードだけが渡されるようになります。

 

アイテムからはフィルターコンポーネントの on-true パラメーターを介して、フィルタリングされたレコードがスキーマコンポーネントの Header ならびに Detail アイテムへ渡されます。

 

出力タブをクリックすることで、以下に示されるような XML ファイルが表示されます。各ヘッダーレコードには対応するデータが、そして Detail レコードには同じ OrderNo を持った詳細情報が表示されます。

Head-detail-2

 

2 番目の例では、別の CSV ファイルを使用します。サンプルは <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\ フォルダーにある Head-detail-inline.mfd にて確認します。以下に特徴を示します:

 

レコードの識別子(H または D)は利用できません。
共通/キーフィールドは CSV ファイル内の最初のフィールドに存在しており、ヘッダーならびに詳細レコード(Head-key、Detail-key)が収められています。フィールドはスキーマターゲットの OrderNo へマッピングされます。
ヘッダーと関連する詳細フィールドは全て同じ行に収められています。

csv-hier-1

 

マッピングは以下のようにデザインされます:

 

キーフィールドがスキーマターゲット内の対応する OrderNo アイテムへマッピングされます。
スキーマターゲットファイル内の Detail アイテムを複製します。この操作により 2 番目の詳細レコードセットをマッピングすることができるようになります。
このマッピングの結果として、上にあるサンプルと同様の XML ファイルが作成されます。

Head-detail-inline-ENT

Head-detail-inline.mfd


(C) 2019 Altova GmbH