社内SEの徒然なる日記

ASTERIAでxml文書を扱ってみたNo9 配列の定義3

■ ASTERIAxmlファイルの配列

今回は成功事例。前回のお話(ASTERIAでxml文書を扱ってみたNo8 配列の定義2)で間違った配列の定義方法を書いた結果、妙な出力結果になってしまいました。

今回は、配列(繰返し)があるデータの正しい(と思う)定義方法を書いていきます。テストデータは前回の記事と同じものなので、今回は省略します。

■ フロー(正解)

テストデータをFileGetで読み込んで、Mapperで同じレイアウトに転記するだけのフローを作ります。レイアウト上、record、繰返、field1が全て繰返し項目なのですが、ASTERIA側では1行を表すrecordのみを配列として、繰返とfield1は最大要素数の2件を個別に定義します。
ASTERIAでxml文書を扱ってみたNo9 - 1

Mapperコンポーネントのマッピングは、データが入っているfield1を最大数(繰返タグ2件 × field1タグ2 = 4)の数だけ全て連結します。
ASTERIAでxml文書を扱ってみたNo9 - 2

これで、入力データと同じ状態のストリームが作成されました。
ASTERIAでxml文書を扱ってみたNo9 - 3

ということで、ASTERIAでxmlファイルの配列(繰返し項目)を定義する場合は、データ1行を表すタグだけを配列にして、それ以外は最大要素分定義した方が良さそうです。

記述が冗長になるのが気になりますが、まぁ仕方ないです。

■ 補足

xmlファイルについて先入観というか、ちょっと特殊なものって思い込みがあったせいで嵌ったのですが、MapperコンポーネントをCSVにでもして実験していたら分かった話だった気がします。

Mapperのストリーム型をCSVにして、xmlファイルと同じようにレイアウトを作ります。1レコードの項目数の最大となる4項目ですね。
ASTERIAでxml文書を扱ってみたNo9 - 4

そして、それをMapperで連結します。
ASTERIAでxml文書を扱ってみたNo9 - 5

そう、xmlで 繰返、field1 を配列にしていると、このマッピングが出来ないんです。つまり、これを可能にする書き方をしないとダメだったってことのようです。

実行結果はこんな感じ。テストデータをCSVにするならこうなりますよね。
ASTERIAでxml文書を扱ってみたNo9 - 6

■ 後書き

ASTERIAの考え方は「1レコード内に同じ名称で複数の項目があった場合、最大要素数の数だけ同じ名前で項目を用意する」ということは理解しました。

まぁ、確かに他の形式への変換とか、実際の取り扱いを考えるとレコード以外の単位で同じ項目が何十何百と繰り返されることは考えにくいし、そんなデータ構造になっているなら、データベースでいう正規化をするべきでしょうね。

それにしても、ASTERIAで配列の定義ができるのだから、その要素数の範囲を指定できても良い気がします。最少1、最大4とかって定義にして、Mapperのレイヤー画面では最大の値の件数分の項目が表示されるとか。

1レコード内に10程度の配列はあっても不思議じゃないし、そっちの方が記述がスッキリすると思うのですが。

前回:ASTERIAでxml文書を扱ってみたNo8 配列の定義2

最新の記事:http://harikofu.blog.fc2.com/
投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end --- スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する