Mapperコンポーネントを使ってレコードデータからXMLを生成するマッピング処理では、出力側XMLの繰り返し出現する要素に対して入力側レコードが同一内容である場合、出力は1つになります。
次のデータを【出力XML】のように生成する処理を例に説明します。
【データ例1】
2222,ビデオカメラ,3000
2222,デジカメ,4000
2222,スキャナー,5000
【出力XML】
<root>
<注文伝票 注文番号="2222">
<商品 商品名="ビデオカメラ" 金額="3000"/>
<商品 商品名="デジカメ" 金額="4000"/>
<商品 商品名="スキャナー" 金額="5000"/>
</注文伝票>
</root>
次の【データ例2】のように繰り返し部分が全く同じデータの場合、出力後のXMLでは1レコードとしてまとめられます。
そのため、データ例1とデータ例2の出力XMLのノード数は同じになります。
【データ例2】
2222,ビデオカメラ,3000
2222,デジカメ,4000
2222,デジカメ,4000
2222,デジカメ,4000
2222,スキャナー,5000
【出力XML】
<root>
<注文伝票 注文番号="2222">
<商品 商品名="ビデオカメラ" 金額="3000"/>
<商品 商品名="デジカメ" 金額="4000"/> ←★1レコードにまとめられる
<商品 商品名="スキャナー" 金額="5000"/>
</注文伝票>
</root>
フローサービスマニュアルの「はじめに」-「詳細なトピック」-「フローの構成要素」-「マッパー」で、レコードデータからXMLを生成するマッピング処理について解説しています。このページで「出力側でのXMLの構成」の5番目の項目で解説しているとおり、XMLの出力については「完全に構成要素が同一のノードは、同一レコードとみなしマッピングを行わない」というASTERIA Warpの仕様になります。
【データ例2】のケースで、次のようにレコード数分すべて別ノードとして出力したい場合には、ASTERIA Warpの特殊な名前空間『http://www.infoteria.com/asteria/mapper/void』を使います。名前空間を使って定義した属性は出力結果に反映されないため、一意の値を使ってレコード数分すべて別ノートに出力することができます。
詳しくは上記マニュアルの「特殊なNamespace」を参照してください。
【出力XML】
<root>
<注文伝票 注文番号="2222">
<商品 商品名="ビデオカメラ" 金額="3000"/>
<商品 商品名="デジカメ" 金額="4000"/> ←★別ノードで出力する
<商品 商品名="デジカメ" 金額="4000"/> ←
<商品 商品名="デジカメ" 金額="4000"/> ←
<商品 商品名="スキャナー" 金額="5000"/>
</注文伝票>
</root>
【データ例2】を使ってマニュアルの手順を説明します。
- Mapperコンポーネントのストリームタブの「名前空間」プロパティをクリックします。
- 表示された画面で次の情報を追加して「OK」をクリックします。
Prefix : x
URI : http://www.infoteria.com/asteria/mapper/void - ストリーム定義に定義されます。
- ストリーム定義のXMLで要素「商品」に属性を追加します。
以下は追加前です。 - 要素「商品」に属性名「@x:recNo」を追加します。
- マッピングウィンドウで、一意の値(例えばレコード番号など)を@x:recNoにマッピングします。
※上記のPrefix、属性名は例です。任意の名前をつけることができます。
※上記のレコード番号は例です。一意の値であればどのようなフィールドでも利用できます。