Talend�Data�Mapper ユーザーガイド 5.5.1 Talend�Data�Mapper v5.5.1に対応しており、以前のリリースの更新版となります。 発行日�2014年6月24日 製作著作�©�2003-2014 商標について すべてのブランド、商品名、会社名、商標、およびサービスマークは各所有者に帰属します。 エンドユーザーライセンス契約 このドキュメンテーションで記述されているソフトウェアは、Talendの商用製品向けエンドユー ザーライセンス契約(EULA)の下で提供されます。ソフトウェアを使用することで、EULAのすべての 条項および規約を十分に理解し無条件に受け入れているものとみなされます。 EULAを参照するには、http://www.talend.com/legal-terms/us-eulaにアクセスしてください。 目次 序文� .................................................................................................................� ix 1.� 一般情報� ............................................................................................................ � ix 1.1.� 目的� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . � ix 1.2.�対象読者�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �ix 1.3.�表記方法�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �ix 2.�フィードバックとサポート�....................................................................................... �ix 1.� 概要� ..............................................................................................................� 1 1.1.�Talend�Data�MapperのGUI�................................................................................... �2 2.� 概念� ..............................................................................................................� 5 2.1.� 構造� ............................................................................................................... � 6 2.2.� 表記� ............................................................................................................... � 7 2.3.�モジュール�........................................................................................................�7 2.4.� マップ� ............................................................................................................. � 7 2.5.� 関数� ............................................................................................................... � 8 2.6.� 式� .................................................................................................................. � 8 2.7.� ループ� ............................................................................................................. � 8 3.� はじめに� ........................................................................................................� 9 3.1.�Talend�Data�Mapperの使い方�.............................................................................. �10 4.� 例� ............................................................................................................... � 11 4.1.� XMLの例� ........................................................................................................ � 12 4.2.�ルーピングの例�................................................................................................. �12 4.3.�Javaの例�........................................................................................................ �12 4.4.�フラットの例(CSVを含む)�.................................................................................... �12 4.5.�複数の表記の例�................................................................................................. �12 4.6.�レポートの例�................................................................................................... �13 5.�Studioの一般情報�......................................................................................... �15 5.1.� 一般情報� .........................................................................................................� 16 5.1.1.�ツリーの使用�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �16 5.1.2.�元に戻す/やり直し�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �17 5.1.3.�戻る/進む�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �17 5.1.4.�ドラッグ/ドロップ、切り取り/コピー/貼り付け�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �17 5.1.5.�プロパティ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �17 5.2.� 検索� .............................................................................................................. � 17 5.2.1.�Object�Types�(オブジェクトの種類)�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �18 5.2.2.�Examine�(検証)�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �18 5.2.3.�Match�(一致)�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �19 5.2.4.�Additional�Searching�(高度な検索)�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �19 5.2.5.�Scope�(スコープ)�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �19 5.2.6.�検索の実行�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �20 5.3.�依存関係の管理とメタデータ�................................................................................. �20 5.3.1.�依存関係の管理�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �20 5.3.2.�プロジェクトのメタデータ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �21 6.� 構造� ............................................................................................................ � 23 6.1.� 概要� .............................................................................................................. � 24 6.2.�構造の操作�...................................................................................................... �26 6.2.1.�モジュールの操作�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �27 6.3.� 表記� .............................................................................................................. � 28 6.3.1.�共通するプロパティ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �28 6.4.�構造定義のインポート�......................................................................................... �28 6.4.1.�マップを使った、定義のインポート�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �29 6.5.�構造のモジュール�.............................................................................................. �29 6.5.1.�モジュールの一般的なプロパティ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �29 6.5.2.�フラットプロパティ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �34 6.5.3.�継承プロパティ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �36 6.5.4.�EDIプロパティ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �37 6.5.5.� 式� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . � 38 6.6.� 継承� .............................................................................................................. � 38 6.6.1.�継承された構造からのモジュールの伝播�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �39 6.7.�再帰的に定義されたモジュール�.............................................................................. �40 6.8.�構造定義に対する実行時インスタンスの検証�.............................................................. �40 7.� マップ� ......................................................................................................... � 43 7.1.�マップと構造�................................................................................................... �44 7.2.�マップの作成�................................................................................................... �44 7.3.�マップの編集�................................................................................................... �44 7.3.1.�ドラッグ/ドロップ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �44 7.3.2.�値の式パネル�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �46 7.3.3.�ループ式パネル�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �46 7.3.4.�式のコピー(マッピング)�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �46 Talend�Data�Mapper 7.3.5.�式参照の移動�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �46 7.3.6.�ループからのモジュールの展開�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �47 7.3.7.�ループの分割�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �47 7.3.8.�コード値のマッピング�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �47 7.3.9.�定数のマッピング�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �47 7.4.�NULL値のサポート�............................................................................................ �47 7.5.�式の自動生成�................................................................................................... �48 7.5.1.�ループ式�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �48 7.5.2.�発行式�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �48 7.5.3.�NULL式�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �48 7.6.�マッピングされたモジュールとマッピングされていないモジュール�.................................... �49 7.6.1.�入力にマッピングされたモジュールの検索�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �49 7.6.2.�出力にマッピングされたモジュールの検索�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �49 7.7.�データタイプのチェックと互換性�............................................................................�49 7.8.�マップのテスト�................................................................................................. �50 7.8.1.�テストドキュメントの表示�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �50 7.8.2.�マップの実行と出力の表示�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �50 7.9.�他のマップからの継承�......................................................................................... �50 7.9.1.�親のマップの追加�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �51 7.9.2.�継承されたマップモジュール�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �51 7.10.�マップの検証�.................................................................................................. �51 7.10.1.�構造比較�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �52 7.10.2.�マップ比較�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �52 7.11.�結果の実行または検証�....................................................................................... �52 7.12.�ランタイムのマッピングに関する考慮事項�............................................................... �53 7.13.�ストリーミングの実行�....................................................................................... �53 7.14.�マップ実行のプロパティ�.....................................................................................�53 7.15.�特別な目的のマップ�.......................................................................................... �53 7.16.�何も出力されない場合のトラブルシューティング�....................................................... �54 8.�サンプルインスタンスドキュメント�................................................................. �55 8.1.� 概要� .............................................................................................................. � 56 8.2.�サンプルドキュメントと構造�................................................................................. �56 8.3.�サンプルドキュメントとマップ�.............................................................................. �57 8.4.�サンプルドキュメントのバインディング�....................................................................�58 8.5.�サンプルドキュメントの表示�................................................................................. �58 8.6.�複数のサンプルドキュメント�................................................................................. �59 8.7.�Javaサンプルデータオブジェクト�........................................................................... �59 9.� 式� ............................................................................................................... � 61 9.1.� 式の基本� .........................................................................................................� 62 9.2.� 式ツリー� .........................................................................................................� 62 9.3.�式のタイプ�...................................................................................................... �64 9.4.� 条件式� ........................................................................................................... � 64 9.5.�複雑な式の例�................................................................................................... �64 9.6.�テキスト式の表記�.............................................................................................. �65 10.�ループ式�.................................................................................................... �67 10.1.�クックブックのルーピング�.................................................................................. �68 10.1.1.�一致ループ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �68 10.1.2.�ネストされたループ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �68 10.1.3.�非ルーピングからルーピングへのマッピング�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �69 10.1.4.�ルーピングから非ルーピングへのマッピング�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �70 10.1.5.�2つのループを1つにマージ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �71 10.1.6.�再帰的ループ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �72 10.2.�自動ループ計算�............................................................................................... �73 10.3.�フィルタリングとソート�.....................................................................................�73 10.4.�ルーピングコンテキスト:エンクロージングとネスト�.................................................... �74 10.4.1.�ネストされたコンテキスト�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �74 10.4.2.�内包コンテキスト�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �74 10.5.�集計ルーピング�............................................................................................... �74 10.6.�ループの互換性�............................................................................................... �75 10.7.�再帰的モジュールのマッピングまたはルーピング�....................................................... �76 10.8.�ループ関数�.................................................................................................... �76 11.� 検証� .......................................................................................................... � 77 11.1.� 検証� ............................................................................................................ � 78 11.1.1.�検証制限�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �78 11.1.2.�検証エラーのグループ化�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �79 11.1.3.�検証報告�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �79 12.�入力/出力(複数入力/出力ドキュメント)�...........................................................�81 12.1.� 一般� ............................................................................................................ � 82 12.1.1.�デフォルトI/O�(I/O式なし)�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �82 12.1.2.�URL式の使用�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �82 12.1.3.�複数のソースオブジェクトや結果オブジェクトの使用�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �83 iv Talend�Data�Mapper 12.1.4.�複数の表記の埋め込み�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �83 12.2.�I/O関数�........................................................................................................ �83 12.2.1.�Read関数�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �83 12.2.2.�Write関数�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �83 13.�XMLのマッピング�........................................................................................�85 13.1.� 概要� ............................................................................................................ � 86 13.2.�プロパティ�.................................................................................................... �86 13.3.�XSDの問題�.....................................................................................................�86 14.�JSONのマッピング�......................................................................................�89 14.1.� 概要� ............................................................................................................ � 90 14.2.�JSON定義のインポートおよび作成�........................................................................ �90 14.2.1.�数値タイプ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �90 14.2.2.� 配列�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . � 90 14.2.3.� 日付�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . � 91 14.3.�JSONのマッピング�...........................................................................................�91 14.3.1.�動的な名前のサポート�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �91 15.�Javaオブジェクトのマッピング�.....................................................................�93 15.1.� 概要� ............................................................................................................ � 94 15.2.�Javaクラスの考慮事項�...................................................................................... �94 15.3.�Javaオブジェクトのマッピング�............................................................................ �96 15.4.�オブジェクトのタイプの処理�............................................................................... �96 15.5.�Javaクラスのインポート�.................................................................................... �96 15.6.�Javaサンプルデータオブジェクト�......................................................................... �97 15.7.�Javaサブクラスの生成�...................................................................................... �97 15.8.�既知のJavaクラスのマッピング�............................................................................ �98 15.9.�制限事項�....................................................................................................... �99 16.�フラット(区切り記号付きまたは固定長)オブジェクトのマッピング�....................�101 16.1.� 概要� ........................................................................................................... � 102 16.2.�コンマ区切り値(CSV)�.......................................................................................�104 16.3.�COBOLの考慮事項�.......................................................................................... �105 16.4.�文字エンコーディング�......................................................................................�107 17.�EDIのマッピング�....................................................................................... �109 17.1.� 概要� ........................................................................................................... � 110 17.2.�EDI仕様�...................................................................................................... �111 17.2.1.�インストール�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �111 17.2.2.�使用方法�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �111 17.2.3.�コンテンツ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �111 18.�データベーステーブルのマッピングとデータベースルックアップ�...................... �115 18.1.� 概要� ........................................................................................................... � 116 18.2.�データベースからのインポート�........................................................................... �116 18.3.�データベースドライバー�................................................................................... �116 18.4.�データベース情報�........................................................................................... �117 18.4.1.�データベースプロパティ�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �117 18.4.2.�データベース構造/テーブル�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �120 18.4.3.�データベース表記プロパティ(Single�Row�Table構造)�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �121 18.4.4.�データベースからの定義のリロード�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �122 18.5.�データベースルックアップ関数�........................................................................... �122 18.6.�データベースからの読み取り�.............................................................................. �123 18.7.�データベースへの書き込み�................................................................................ �124 18.8.�結合処理�......................................................................................................�124 19.�XMLネームスペースとネームスペースコンテナ�.............................................. �127 19.1.�ネームスペースとXMLスキーマのインポート�........................................................... �129 19.2.�デフォルトネームスペース�................................................................................ �129 19.3.�ネームスペース問題のトラブルシューティング�.........................................................�129 20.�環境設定�.................................................................................................. �131 20.1.�Data�Mapperの環境設定�.................................................................................. �132 21.�ランタイムへのデプロイ�............................................................................. �135 21.1.�プロジェクトのデプロイ�................................................................................... �136 21.1.1.�Mavenの使用�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �136 21.1.2.�Eclipseエクスポートの使用�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �136 22.�ランタイムの概要�...................................................................................... �137 22.1.�ランタイム実行方式�........................................................................................ �138 22.2.�インストール�................................................................................................ �138 22.2.1.�ローカルファイルシステムへの自動インストール�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �138 23.�Java�APIランタイム�.................................................................................. �139 23.1.� 概要� ........................................................................................................... � 140 23.2.�インストール�................................................................................................ �140 23.3.� ログ� ........................................................................................................... � 140 23.4.� 例� ............................................................................................................. � 140 v Talend�Data�Mapper 23.5.�ランタイムAPI参照�......................................................................................... �141 24.�OSGi/Blueprintランタイム�........................................................................ �143 24.1.� 概要� ........................................................................................................... � 144 24.2.�インストール�................................................................................................ �144 24.3.� 例� ............................................................................................................. � 144 24.3.1.�例の実行�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �144 24.4.�Blueprint/OSGiサポートの使用�.......................................................................... �145 24.5.�デプロイメントプロセス�................................................................................... �145 24.6.�ランタイムAPI参照�......................................................................................... �145 25.�Apache�Camelランタイム�..........................................................................�147 25.1.� 概要� ........................................................................................................... � 148 25.2.�cMapメディエーションコンポーネント�................................................................. �148 25.3.�tdmコンポーネント�........................................................................................ �148 25.3.1.�URI形式�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �148 25.4.�TdmProcessorプロセッサー�............................................................................. �149 25.5.�tdmsampleコンポーネント�............................................................................... �150 25.5.1.�URI形式�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �150 25.6.�インストール�................................................................................................ �151 25.7.�標準のJavaでの使用�....................................................................................... �151 25.8.�OSGi/Blueprintでの使用�.................................................................................. �151 25.9.� 例� ............................................................................................................. � 151 25.9.1.�例の実行�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �152 25.10.�デプロイメントプロセス�................................................................................. �152 25.11.�ランタイムAPI参照�........................................................................................ �152 25.11.1.�org.talend.transform.runtime.api�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �152 25.11.2.�org.talend.transform.camel�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �152 26.�関数のリファレンス�................................................................................... �153 26.1.�関数の記述�................................................................................................... �154 26.2.�プロパティと引数の両方を指定�........................................................................... �154 26.3.�引数と戻り値のタイプ�......................................................................................�154 26.4.� 関数� ........................................................................................................... � 154 26.4.1.�Add�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �154 26.4.2.�AddToDateTime�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �155 26.4.3.�AgAverage�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �155 26.4.4.�AgConcat�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �155 26.4.5.�AgConcatFirstPresentValue�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �156 26.4.6.�AgCount�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �156 26.4.7.�AgMaximum�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �156 26.4.8.�AgMinimum�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �157 26.4.9.�AgSum�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �157 26.4.10.�And�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �157 26.4.11.�AnyConcat�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �158 26.4.12.�AscendingSort�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �158 26.4.13.�Choice�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �158 26.4.14.�ChoiceValue�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �159 26.4.15.�Compare�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �159 26.4.16.�CondValidateReport�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �159 26.4.17.�Constant�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �160 26.4.18.�ConstIfBlank�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �160 26.4.19.�Concat�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �160 26.4.20.�ConcatFirstPresentValue�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �161 26.4.21.�ConvertFromBinary�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �161 26.4.22.�DatabaseColumn�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �161 26.4.23.�DatabaseFunction�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �162 26.4.24.�DatabaseInsert�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �162 26.4.25.�DatabaseJoin�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �162 26.4.26.�DatabaseLookup�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �163 26.4.27.�DatabaseLookupAndUpdate�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �164 26.4.28.�DatabaseSelect�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �165 26.4.29.�DatabaseUpdate�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �166 26.4.30.�DescendingSort�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �166 26.4.31.�Divide�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �166 26.4.32.�EnclosingContext�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �167 26.4.33.�Equal�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �167 26.4.34.�ExecuteMap�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �167 26.4.35.�ExtractBytes�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �168 26.4.36.�FixedLoop�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �168 26.4.37.�FlatToHierarchyLoop�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �168 26.4.38.�GetBytesFromURL�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �169 26.4.39.�GetCurrentDateTime�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �169 26.4.40.�GetEnclosingElementProperty�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �169 vi Talend�Data�Mapper 26.4.41.�GetMapProperty�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �170 26.4.42.�GetSequenceFromLocalFile�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �170 26.4.43.�GetVariable�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �170 26.4.44.�Greater�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �170 26.4.45.�GreaterOrEqual�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �171 26.4.46.�HasValue�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �171 26.4.47.�IfThen�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �171 26.4.48.�IfThenElse�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �171 26.4.49.�IndexOf�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �172 26.4.50.�IndexRangeLoop�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �172 26.4.51.�IsNull�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �173 26.4.52.�IsPresent�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �173 26.4.53.�IsValid�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �173 26.4.54.�Java�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �174 26.4.55.�Left�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �174 26.4.56.�Lesser�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �174 26.4.57.�LesserOrEqual�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �175 26.4.58.�LoopCopy�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �175 26.4.59.�LoopIndex�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �175 26.4.60.�LoopReference�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �176 26.4.61.�LoopVariable�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �176 26.4.62.�Property�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �176 26.4.63.�MakeDateTime�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �177 26.4.64.�MapValues�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �177 26.4.65.�Multiply�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �177 26.4.66.�NameValuePairLookup�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �177 26.4.67.�NestedContext�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �178 26.4.68.�NormalizeSpace�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �178 26.4.69.�Not�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �179 26.4.70.�NotEqual�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �179 26.4.71.�Or�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �179 26.4.72.�ParseDateTime�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �179 26.4.73.�ReadMapInput�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �180 26.4.74.�ReadMessage�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �181 26.4.75.�ReadMessageProperties�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �182 26.4.76.�ReadNested�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �182 26.4.77.�ReadURL�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �182 26.4.78.�RecursiveLoop�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �183 26.4.79.�Right�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �184 26.4.80.�SimpleLoop�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �184 26.4.81.�SetEnclosingElement�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �185 26.4.82.�SetVariable�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �185 26.4.83.�SingleIndex�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �185 26.4.84.�Substring�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �186 26.4.85.�Subtract�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �186 26.4.86.�Trim�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �186 26.4.87.�ValidateGroup�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �186 26.4.88.�ValidateReport�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �187 26.4.89.�ValueMapping�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �188 26.4.90.�WriteMapOutput�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �188 26.4.91.�WriteMessage�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �188 26.4.92.�WriteMessageProperties�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �189 26.4.93.�WriteURL�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �189 26.4.94.�XPathFunction�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �189 付録�A.�互換性�................................................................................................ �191 A.1.� 互換性� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . � 192 A.1.1.�以前のバージョンからのマップ/構造�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �192 A.1.2.�デザイナーとランタイムの互換性�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . �192 付録�B.�謝辞�...................................................................................................�193 vii 序文 1.�一般情報 1.1.�目的 このユーザーガイドでは、通常の操作状況でTalend�Data�Mapperの機能を管理する方法に ついて説明します。 このドキュメントに記載されている情報は、Talend�Data�Mapper�5.5.1に適用されます。 1.2.�対象読者 このガイドはTalend�Data�Mapperのユーザーと管理者を対象としています。 このドキュメントに含まれているGUI画面のレイアウトは、実際のGUIと多少異なる場合がありま す。 1.3.�表記方法 このガイドでは、次の表記方法を採用しています。 • bold�(太字)のテキスト:�ウィンドウおよびダイアログボックスのボタンとフィールド、 キーボードのキー、メニュー、メニューのオプション • [bold]�(太字)のテキスト:�ウィンドウ、ウィザード、およびダイアログボックスのタイ トル • courier�のテキスト:�ユーザーが入力するシステム�パラメーター • italics�(斜体)のテキスト:ファイル、スキーマ、列、行、および変数名 • • �アイコンは、重要な点について追加情報を提供するアイテムを示します。また、表 や図に関するコメントを追加する場合にも使用されます。 �アイコンは、実行要件や推奨タイプに関する情報を提供するメッセージを示しま す。また、エンドユーザーが特に注意を払う必要がある状況や情報を示す場合にも使用 されます。 2.�フィードバックとサポート お客様からのフィードバックは大変貴重です。本ドキュメントや本製品に関するご意見、 ご提案、ご要望や、チームのサポートにつきましては、フォーラムの次のWebサイトをご 覧ください。 フィードバックとサポート http://talendforge.org/forum x 1.概要 Talend�Data�MapperのGUI 1.1.�Talend�Data�MapperのGUI Talend�Data�Mapperによって、データレコード間やドキュメント間で変換(マップ)を定義、および実 行することができます。この製品では、ドキュメントとデータレコードは同一のものとして扱われま す。 Talend�Data�Mapperは、主に次の3つの部分に分けられます。 • Repository�navigator�(リポジトリナビゲーター)�-�[Repository]�(リポジトリ)ナビゲーターは左枠 にあるツリービューで、構造、マップ、ネームスペースコンテナで構成されています。これらのい ずれかのワークスペースオブジェクトを表示するには、ブラウザで選択して開きます。 Talend�Studioでは、[Repository]�(リポジトリ)ナビゲーターは[Mapping]�(マッピング)パースペ クティブにある[Data�Mapper]�(データマッパー)タブの[Hierarchical�Mapper](階層マッパー)の 下に配置されています。[Integration]�(統合)パースペクティブや[Mediation]�(メディエーション) パースペクティブの場合は、[Repository]�(リポジトリ)タブの[Metadata]�(メタデータ)ノードの 下に配置されています。Talend�StudioなしでEclipseでTalend�Data�Mapperが実行されている場合 は、[Project�Explorer](プロジェクトエクスプローラー)に配置されています。 • Functions�(関数)�-�左側の[Functions]�(関数)タブには、式の作成に使用できるすべての関数が含ま れています。 • Editor�Area�(エディターエリア)�-�エディターエリアには、開いている構造、マップ、ネームス ペースコンテナそれぞれのエディターが含まれています。エディターは、タブにある[X]アイコン をクリックすれば閉じることができます。 マッピングを作成するには、データを入力ドキュメントからドラッグして出力ドキュメントにドロッ プします。より高度なマッピングとして、出力モジュールの値を指定する式を作成する方法がありま す。入力値(または出力値)を実行する関数から式が生成されます。 マッピングはサンプルドキュメントを使うと、その全体や一部をいつでも表示できます。また、サン プルドキュメントも全体または一部を表示できます。さらに、パワフルな検索機能が含まれているの で、変換マップ、式、ドキュメント定義にあるどのようなテキストでも検索できます。 2 Talend�Data�MapperのGUI ドキュメント定義は構造とも呼ばれ、仕様ファイル(XMLスキーマ、ガイドラインXML、サンプルな ど)からインポートしたり、手動で入力することができます。構造は他の構造を参照できるため、ド キュメントのどのような部分も再使用が可能です。さらに、ある構造が他の構造(EDIやXML仕様の 特定の実装ガイドライン)から派生しているケースに対応するため、構造は他の構造から派生できま す。 構造にはドキュメントインスタンスの例を関連付けることができます。この例は直接編集できます。 ドキュメントインスタンスの例はまた、構造に関連付けられたマップのテストでも使用されます。 studioから独立してマップを実行できる環境で、(個別に提供された)さまざまなランタイムプロジェ クトを使用できます。 3 2.概念 この章では、studioの使用方法を理解するために必要ないくつかの概念を説明します。 構造 2.1.�構造 構造メカニズムでは、Javaオブジェクト、EDI、XML、フラット(区切り記号付きまたは固定長)、 データベースが定義されます。XMLドキュメントと同じく、構造にはモジュール(1つはルートとして) の階層が含まれています。構造のモジュールは概念的にXMLドキュメントのモジュールと同じで、構 造がXMLドキュメントを表記する場合、構造モジュールはXMLモジュールに完全に対応します。 構造の作成は通常、CSVサンプル、XMLスキーマ、ガイドラインXML�(gXML)など他のプログラムに よって作成された定義をインポートすることで行います。また、構造を手動で作成および維持するこ ともできます。 定義を再使用する場合、構造は他の構造を参照できます。これは構造継承と呼ばれます。たとえば、 住所を定義する構造を1つ持つことができます。そして、その住所構造を使用する他の構造(発注書送 付先や送り届け先を持つ発注書構造など)を作成できます。住所構造を使用する場合は、発注書構造 でその構造を請求書送付先モジュールから送り届け先モジュールにドラッグするだけです。構造継承 のメカニズムは、XMLスキーマなど他の仕様から構造を作成する時に自動的に使用されます。 構造はまた、サンプルドキュメントのインスタンスも参照できます。このドキュメントはマップの実 行時にテスト入力ドキュメントとして使用したり、サンプル出力ドキュメントとしてマップを定義す ることができます。 6 表記 構造は複数の表記を持つことができます。これによって、Javaオブジェクト、XML、フラットファ イルなど、特定の形式で構造のデータを伝達する問題が定義されます。たとえば、構造は2つの表記 (XML用とフラットファイル用)を持つことができる一定のフラットファイル定義として定義できま す。 2.2.�表記 表記には、ドキュメントの具体的なタイプ(XMLやJavaなど)の構造を表すために必要な情報が含まれ ています。サポートされている表記は、XML、Java�(POJO)、EDI、�フラット(固定長および区切り記 号用)、データベースです。 各構造には、XML表記と非XML表記を1つずつ含めることができます。表記がない場合はXMLとされ ます。 2.3.�モジュール モジュールはデータフィールドで、構造の一部です。通常、構造内のモジュールは、XMLドキュメン ト内のモジュールやデータベース内のカラムに相当します。モジュールはそれぞれ、フィールドの長 さ、出現数、レコード内での位置などの情報に関連付けられています。 モジュールは構造とマップの両方に関連付けられます。マップ内のモジュールは常に、構造内のモ ジュールから自動的に派生します。構造にはぞれぞれルートモジュールが1つあり、その他すべての モジュールがここに含まれています。XMLドキュメントのように各モジュールに他のモジュールが含 まれる場合もあれば、文字データのみが含まれる場合もあります。 XML属性はモジュールとして定義されています。 コード値は、特別にマークされたモジュールとして定義されています。コード値のセットをコード テーブル構造にグループ化する場合は通常、構造の継承が使用されます。このコードテーブル構造は 必須モジュールによって継承されます。 2.4.�マップ マップは2つの構造間の変換の定義です。マップは1つの入力構造と1つの出力構造を持つことがで き、そのモジュールは�マップの構造に関連付けられたモジュールに正確に対応します。単一のマッ 7 関数 プは、明示的ドキュメントの入力/出力メカニズムを使用して任意の数の入力または出力ドキュメン トを処理できます。 マップがドキュメントの検証に使用される場合など、一部のマップは入力構造しか持たない場合があ ります。 マップには、出力ドキュメントの作成や入力ドキュメントの検証に使用する式が含まれています。こ れらの式は、各出力モジュールの値を生成し、ルーピング処理の規則を定義し、入力モジュール検証 の規則を定義し、出力/入力モジュールの作成/読み取りを制限できます。 マップはその他のマップから継承できるので、2つのタイプのドキュメント間の通常の変換を定義す る基本マップを作成し、基本マップ内のすべての変換を複製することなくこのマップをカスタマイズ できます。 入力を出力構造に変換する式を備えるマップは標準マップと呼ばれます。変換以外の機能を実行する その他の特別な目的のマップがあります。たとえば、XSLTレポートマップは、入力構造からデータ を処理するXSLTスクリプトを実行できます。 2.5.�関数 関数は、固定個または可変個の引数を受け取り、単一の値を返すコードの単位です。関数は、式を作 成するために使用されます。デザイナーには、多数の組み込み関数が用意されています。 2.6.�式 式は、関数または、変換を定義するために使用されるマップモジュールへの参照のインスタンス です。関数はアクション(2つの数値の加算など)を定義する一方、式は、たとえば、出力マップモ ジュールの値を定義する一部としてその関数を使用します。 式はツリーに配置され、ツリーでは、各式の結果が親式の引数値になります。式ツリーは、出力マッ プモジュールの値を定義するために使用されます。出力値式ツリーのルート式は、出力マップモ ジュールの値になります。 2.7.�ループ モジュールが単一のオブジェクトで複数回出現する場合は、そのモジュールに�ループを設定しま す。ループは、出力ドキュメント内でそのモジュールのループがどのように処理されるかを定義する 式ツリーです。通常、これは、入力ドキュメントからモジュールを参照したときに自動的に計算され ます。多くの場合、モジュールループは一部の入力モジュールに対応しています。 8 3.はじめに Talend�Data�Mapperの使い方 3.1.�Talend�Data�Mapperの使い方 ここでは、ゼロから開始することを前提に、あるタイプのドキュメントを別のタイプにマップする 基本的な手順を説明します。また、[Help]�(ヘルプ)�>�[Cheat�Sheets]�(参照シート)、さらに[Data Mapper]を選択して、参照シート(チュートリアル)も体験できます。 1. [Repository]�(リポジトリ)ナビゲーターを右クリックし、[New]�(新規)�>�[Structure]�(構造)を選 択して、構造定義をインポートまたは作成します。使用可能な構造のソースは次のとおりです。 a. XMLスキーマ(XSD)/DTD/XMLサンプル/WSDL�-�XMLドキュメントを処理するためにこれらのい ずれかをインポートします。詳細は、「XML表記」を参照してください。 b. CSVサンプル�-�CSVサンプルドキュメントをインポートします。詳細は、「フラット表記」を参 照してください。 c. 手動�-�構造エディターでモジュールを追加することで、構造を手動で作成できます。通常は、 フラット(区切り記号付き/固定長)データで使用されます。詳細は、「フラット表記」を参照し てください。 d. COBOL�-�COBOLコピーブックをインポートします。詳細は、「COBOLの考慮事項」を参照し てください。 e. データベース�-�データベースから直接テーブル定義をインポートします。詳細は、「データ ベース」を参照してください。 f. Java�-�JavaクラスまたはJarファイルをインポートします。詳細は、「Java表記」を参照して ください。 g. EDI�-�EDIガイドラインXML�(gXML)ファイルをインポートします。詳細は、「EDI表記」を参照 してください。 h. プロジェクト�-�以前にエクスポートされたプロジェクトをインポートします。この場合、 [Import]�(インポート)メニューアイテムを使用します。 2. [Repository]�(リポジトリ)ナビゲーターを右クリックし、[New]�(新規)�>�[Map]�(マップ)を選択し てマップ作成ウィザードを実行し、マップを設定します。マップが作成されたら、入力ドキュメ ントに対応する構造をマップのエディターの入力パネルにドラッグし、出力ドキュメントに対応 する構造をマップのエディターの出力パネルにドラッグします。 3. 入力モジュールを出力モジュールにドラッグして、モジュールを入力パネルから出力パネルに マップします。これにより、入力モジュール値が出力モジュール値にコピーされます。 入力モジュールを出力モジュールにドロップした後、出力モジュールが選択され、[Output Value]�(出力値)パネルに[Concat]�(連結)が含まれ、続いて入力モジュールの名前が示される点に注 意してください。これは、指定した入力モジュールをコピーすることで、出力モジュールが作成 されたことを示しています。 4. [Test]�(テスト)�>�[Test�Run]�(テストの実行)を選択しテストドキュメントを指定して、変換をテス トします。出力が画面上に表示されます。 また、豊富な例も用意されています。 10 4.例 studioには、豊富な例が用意されています。これらは、常にワークスペースに表示される読み取り専 用プロジェクトの[Examples]�(例)プロジェクトに収められています。studioが更新されると、自動的 に更新されます(ソフトウェアの更新後、[Examples]�(例)プロジェクトを右クリックし、[Refresh] (更新)を選択して、更新する必要が生じることもあります)。 Examplesプロジェクトは読み取り専用であるため、自由に変更できるコピーを使用して作業するの がもっとも効率的です。参照シートを使用して、別のプロジェクトに例をコピーできます。 XMLの例 4.1.�XMLの例 • Maps/PayPal/POPayPal_PO2�-�(実際にPayPal�CSVデータに正確に対応する)XML構造を単純な発注 を表す別のタイプのXML構造にマッピングする簡単な例です。 4.2.�ルーピングの例 Looping�Cook�Bookで説明しているすべてのケースには、例が関連付けられています。これらの例 は、ExamplesプロジェクトのMaps/Loopingフォルダーにあります。また、Looping�Cook�Bookのセ クションには、各ケースに関連付けられている例へのリンクが記載されています。 4.3.�Javaの例 • Maps/Java/AcmePOToJava�-�一連のXML発注書と、それらに関連付けられた納品書を表すJavaオ ブジェクトのマッピングを表示します。 • Maps/Java/JavaInvoiceToXML�-�納品書を表す上記のJavaオブジェクトを、まったく同様に 関連付けられたXMLに変換したものを表示します。この例の出力構造のStructures/Java/XML/ XMLInvoices�は、Javaの納品書のStructures/Java/Invoiceの定義と同じ構造を継承しています。 4.4.�フラットの例(CSVを含む) • Maps/CSV/POPayPalCsv_PO2�-�PayPalでの購入記録のCSVデータを、発注書を定義するシンプル なXML構造にマッピングする単純な例です。 • Maps/Simple/AcmePOToFlat�-�Acmeの発注書のXMLを、対応するバイナリフラットファイルに マッピングします。フラットファイルの構造では最初の4バイトにデータのタイプを示すタグが 含まれます。POは新しい発注書、DELは納品、ITEMはアイテムをそれぞれ示します。構造の定義 は、以下のマップに示したものとまったく同じです。出力構造(Structures/Simple/AcmeRetailer/ AcmePOFlat)には、区切り記号付きイニシエーターを持つモジュール(たとえば/POs/POモジュー ル)があります。これは、フラットファイルに各レコードのタイプを示すタグを含めるためのもの です。 4.5.�複数の表記の例 • Maps/MultiInputOutput/PurchaseOrdersToMandPは、複数の表記を使用した1つのマップを示して います。 これは一般的に、複数の無関係なXMLドキュメントを1つの入力で処理する場合に使います。場合 によってはそのようなドキュメントを連結したり、入力で指定したコンテンツに基づいて1つのド キュメントを選択したりすることもあるでしょう。 この例は、異なるXMLドキュメントを表記する2つの構造を処理し、自動的にいずれかを選択す る仕組みを示しています。この仕組みを作るには、目的の各XML構造から継承したモジュールを 12 レポートの例 持つエンクローズ構造(マップの入力構造)を作成します。エンクローズ構造はFlat表記を使用し、 選択(Rootモジュールのグループタイプ)を持ちます。選択の各メンバーはイニシエーター文字列 を指定します。この文字列が、メンバーのXMLドキュメントのモジュールの最初の部分になりま す。ReadNested関数は、表記をエンクローズ構造の表記に変更するように信号を送ります(デ フォルトでは、表記をReadNested関数のプロパティで指定する必要はありません)。 この例では、Map�Inheritanceの使い方についても示しています。ここで は、AcmePOToMaAndPaマップのFrom句がPOFile構造とMandPPOFile構造の間に使用されてい ます。これにより、2つのXMLドキュメントの間にマップを構築してテストを行い、(このような)別 のケースでマップを完全に再利用することができます。 • もう1つの例では、XML内部にFlatコンテンツを埋め込んでいます。その様子は、/Examples/ Maps/Simple/POMap�exampleで示しています。POs/PO/Vendorモジュールを見てみる と、ReadNested機能がI/O式として使用されているのがおわかりいただけるでしょう。 4.6.�レポートの例 Maps/Reports/POToHtmlレポートマップは、入力に対してXSLTスタイルシートで実行するレポー トマップの実行を示します。この例は、サンプルの発注書ファイルの1つからHTMLを作成していま す。 13 5.Studioの一般情報 この章では、すべてのタイプのオブジェクトに適用されるstudioの一般的なトピックについて説明し ます。 一般情報 5.1.�一般情報 studioは、パースペクティブの切り替え、アイテムのインポートやエクスポート、ヘルプコンテンツ へのアクセスを行うなど、すべてのパースペクティブでインターフェイスモジュールを共有します。 ここでは、studioのインターフェイスモジュールについて説明します。 5.1.1.�ツリーの使用 ツリーは直感的に使用でき、studioで幅広く採用されています。ツリー内のノード(構造やモジュー ル)をドラッグアンドドロップしたり、同じツリー内や別のツリーにノードを切り取り、コピーや貼 り付けをすることができます。たとえば、モジュールのコレクションを別の構造エディターにコピー することができます。 新しいノードは、右クリックしてノードの種類を選択するだけで作成できます。ノードを表示する場 所にカーソルを置き、新しいノードの名前を入力して新しいノードを作成します。同名のノードがあ る場合や名前が無効の場合は(コンテキストによる)、別の名前を入力するように促すエラーダイアロ グが表示されます。 ツリー内の子モジュールをフィルターするには、親モジュールに条件を入力します。これは、子モ ジュールがたくさんある中で、名前や説明が特定のテキストに一致するモジュールだけを表示する 場合に便利です。入力した文字は括弧に囲まれて表示されます。たとえば、emplと入力すると親モ ジュールに[empl]と表示され、モジュールの名前や説明にemplという文字が含まれている子モジュー ルだけが表示されます。1字ずつ削除するにはBackspaceキーを使い、フィルター条件をすべて削除 するにはEscキーを使います。 16 元に戻す/やり直し 5.1.2.�元に戻す/やり直し ツリーで行った操作はすべて[Undo]�(元に戻す)ボタンをクリックして元に戻すことができます。こ れには、プロパティの変更やノードの削除も含みます。[Undo]�(元に戻す)ボタンを数回クリックし て複数の操作を元に戻すこともできます。[Redo]�(やり直し)をクリックすると、最後に元に戻した 操作をやり直すこともできます。[Edit]�(編集)メニューをクリックすると、元に戻す操作を確認する ことができます。 5.1.3.�戻る/進む [Back]�(戻る)ボタンと[Forward]�(進む)ボタンを使って、ノード間を簡単に切り替えることができま す。たとえば、あるノードを表示していて、別のノードをクリックした場合は、[Back]�(戻る)をク リックすると前のノードに戻り、[Forward]�(進む)をクリックするともう一方のノードに進みます。 これは、2つのノードを比較する場合に便利です。 5.1.4.�ドラッグ/ドロップ、切り取り/コピー/貼り付け ノードをドラッグアンドドロップすると、元の場所から切り取られて、新しい場所に貼り付けられま す。ノードを移動するのではなく、コピーするには、Ctrlキーを押したままノードをドラッグし、新 しい場所にドロップします。このドキュメントで「ドラッグアンドドロップ」と記している場合は、 ノードの移動とコピーの両方を意味します。ノードを右クリックしてポップアップメニューから該当 するコマンドを選択することで、ノードの切り取り、コピー、貼り付けを行うこともできます。 5.1.5.�プロパティ 一般的なツリーノードにはプロパティが関連付けられています。ノードのプロパティにアクセスす るには、そのノードをダブルクリックするか、右クリックして[Properties]�(プロパティ)を選択しま す。 ノードによっては、プロパティを変更できないこともあります。たとえば、マップモジュールのプロ パティを表示している場合は、実際には該当する構造モジュールのプロパティが読み取りモードで表 示されています。 5.2.�検索 studioには、構造、マップ、構造モジュール、マップモジュール、式などを名前や説明からテキス ト検索できるパワフルな検索機能が備わっています。検索するには、[Search]�(検索)�>�[Mapper...] (マッパー...)を選択します。次に、[Search]�(検索)ダイアログボックスの各種オプションについて説 明します。 17 Object�Types�(オブジェクトの種類) 5.2.1.�Object�Types�(オブジェクトの種類) 検索するオブジェクトの種類は、次のうち1つまたは複数を選択します。 • Structure�(構造)�-�構造内のモジュールや名前を検索します。 • Map�(マップ)�-�マップ内のモジュールや名前を検索します。 • Namespace�Container�(ネームスペースコンテナ)�-�ネームスペースやネームスペースコンテナの 名前を検索します。 • User�Function�(ユーザー関数)�-�[Functions]�(関数)パネルにあるユーザー関数や、ユーザー関数に 関連付けられた式を検索します。 • Report�(レポート)�-�レポート名を検索します。 5.2.2.�Examine�(検証) 次のいずれかを選択します。 18 Match�(一致) • Name�(名前)�-�名前だけを検索します。 • Description�(説明)�-�説明だけを検索します。 • Inherited�Structure�Name�(継承された構造名)�-�構造から継承したモジュールと、継承された構 造のフルパス名だけを検索します。特定の構造がどこから継承されたかを検証する場合に便利で す。 • Invalid�Map�Elems�(無効なマップモジュール)�-�無効なマップモジュールを検索します。これにつ いて詳しくは、マップの検証を参照してください。 5.2.3.�Match�(一致) 次のいずれかを選択します。 • Full�String�(完全一致)�-�名前や説明が、指定した検索文字列に完全に一致するアイテムだけを選択 します。 • Starts�With�(次で始まる)�-�名前や説明が、指定した検索文字列から始まるアイテムだけを選択し ます。 • Contains�(次を含む)�-�名前や説明に、指定した検索文字列が含まれるアイテムだけを選択します。 また、[Ignore�Case]�(大文字と小文字を区別しない)をオンにすると、大文字と小文字を区別せずに 検索が行われます。 5.2.4.�Additional�Searching�(高度な検索) 次のいずれかを選択します。 • Search�Expressions�(式の検索)�-�検索する構造やマップのモジュールに関連付けられた式の名前 を検索します。 • Search�Inherited�Elements�(継承モジュールの検索)�-�デフォルトの検索は、継承されたモジュー ルを除外します。たとえば、構造の子が親から継承したものである場合は、親の構造から継承さ れた子のモジュールは、子を検索しても見つかりません。子で明示的に定義したモジュールに加え て、親から継承されたモジュールを含める場合は、このオプションをオンにします。 5.2.5.�Scope�(スコープ) 次のいずれかを選択します。 • Workspace�(ワークスペース)�-�ワークスペース内のすべてのもの(すべてのプロジェクト)を検索し ます。 • Selected�Resources�(選択したリソース)�-�選択したオブジェクト内だけを検索します。 • Enclosing�Projects�(内包プロジェクト)�-�選択したオブジェクトに囲まれているプロジェクト内の みを検索します。 19 検索の実行 • Working�Set�(作業セット)�-�選択した作業セット内のみを検索します。 5.2.6.�検索の実行 検索を実行するには、[Search]�(検索)ボタンをクリックします。結果は、下記のように[Search]�(検 索)ビューに表示されます。結果のエントリーをダブルクリックすると、そのエントリーが選択され ます。 5.3.�依存関係の管理とメタデータ 5.3.1.�依存関係の管理 ほとんどのオブジェクト(マップ、構造など)には、他のオブジェクトとの依存関係があります。たと えば、マップは入出力を定義する構造に依存しています。これらの依存関係は自動的に管理されてい るので、依存しているオブジェクト(この例では構造)への変更は、構造オブジェクトを保存しなくて もマップオブジェクトにただちに反映されます。依存関係の管理は、関連するすべてのオブジェクト に適用されます。たとえば別の構造から継承している構造や、構造で使用しているネームスペースコ ンテナなども管理されます。 たとえば、マップエディターを開いており、もう1つ別のマップエディターでマップの構造を開いて 変更し、その構造を保存すると、最初のマップエディターに戻ったときに構造が変更されたことが検 出され、その構造に基づいてマップが再検証されます。問題がある場合は報告されます。 パフォーマンス上の理由により、依存関係の情報は別のメタデータで追跡されているため、潜在的な オブジェクトをすべて検証せずに参照できます。このメタデータは自動的に計算され、必要な場合は 手動で容易に再構築することもできます。 20 プロジェクトのメタデータ 5.3.1.1.�依存関係の情報の表示 それぞれのオブジェクトには、[Repository]�(リポジトリ)ナビゲーターメニューに、[Used�By]�(使 用されている子)メニューとUses�(使用している親)メニューがあります。これらを基にオブジェクト 間の関係を調べ、オブジェクトをダブルクリックしてダイアログボックスを表示し、参照先のオブ ジェクトをすばやく開くことができます。 5.3.1.2.�検証の必要なオブジェクトの表示 オブジェクト(主に構造)を変更した場合は、検証を行って依存しているダウンストリームのオブジェ クトを変更しなければならないことがよくあります。たとえば、Javaにプロパティを追加し、Java クラスをインポートし直した場合、変更した構造を使っている可能性があるマップをそれぞれ開い て、マッピング情報が正しいかどうかを確認したり、必要に応じて新しいマッピングを追加する必要 があります。 これを行うには、プロジェクトの[Repository]�(リポジトリ)ナビゲーターポップアップか ら、[Show�Objects�Needing�Validation]�(検証の必要なオブジェクトの表示)メニューを選択しま す。依存するオブジェクトが変更されたために検証が必要なオブジェクトが表示されます。これらを 開いて警告がなくなるまで保存します。たとえば、Javaクラスからプロパティを削除し、検証が必 要なマップを開いた場合は、関連付けられたマップモジュールを削除してマップに表示されている警 告を排除するまで、このマップは検証が必要なオブジェクトのリストに表示されます。 5.3.2.�プロジェクトのメタデータ マップや構造などは、ワークスペースでリソースとして管理されます。これらは基本的に、 マップや構造を定義するXMLを含んだファイルです。これらのファイルに加えて、プロジェク ト全体に適用されるメタデータが必要になります。このデータは、各プロジェクトの.settings/ com.oaklandsw.base.projectPropsというプロパティファイルに格納されています。プロジェクトの プロパティファイルは自動的に管理されるので、通常は何もする必要がありません。ただし、ソース コントロールシステムを使用している場合は、プロジェクトのオブジェクトに変更を加えたときにプ ロジェクトのプロパティファイルをチェックインする必要があります。 プロジェクトのプロパティファイルには、次の情報が含まれています。 • プロジェクトのクラスパス�-�プロジェクトのData�Mapperプロパティに含まれているプロジェクト に関連付けられたクラスパス。 • 依存情報�-�オブジェクトを保存したときに自動的に計算されます。 • フォルダーの順序情報�-�プロジェクトに関連付けられているフォルダーの順序が表示されます。 一般的にプロジェクトのプロパティファイルは、オブジェクトを保存したときに自動的に構築・更 新されます。ただし、依存関係の情報は手動で再構築しなければならないときもあります。その場 合は、[Repository]�(リポジトリ)ナビゲーターでプロジェクトを右クリックし、[Rebuild�Project Properties�File]�(プロジェクトのプロパティファイルの再構築)ポップアップメニューをクリックし ます。 21 6.構造 概要 6.1.�概要 構造には、ドキュメントタイプの内容を記述するモジュールのコレクションが含まれます。構造は継 承メカニズムを通じて接続できます。このメカニズムにより、モジュールは別の構造から定義を継承 できます。構造の定義とそのモジュールは抽象的であり、構造がインスタンスドキュメントで表記さ れる特定の方法に依存していません。 一般的に定義は、ある種の仕様ファイル(XMLスキーマのようなもの)またはサンプルドキュメント をインポートして作成できます。モジュールを手動で作成したり、マップを使ってインポーター構 造にマッピングして、定義を作成することもできます。これは、モジュールがスプレッドシートで記 述されるような固定長構造の定義にとっては特に便利です。 構造はstudioの[Repository]�(リポジトリ)ナビゲーターに表示されます。各構造には名前があり、 フォルダーに格納できます。ファイルに似ています。[Repository]�(リポジトリ)ナビゲーターで構 造を展開すると、Document�Bindings�(ドキュメントバインディング)とRepresentations�(表記)の ヘッダーがあります。 [Document�Bindings]�(ドキュメントバインディング)ヘッダーには、現在構造にバインドされてい るドキュメントが含まれます。ドキュメントは、サンプル入力など、さまざまな目的でバインドでき ます。また、I/O関数を使用していて、複数のドキュメントサポートが必要な場合、構造の別の部分 にバインドすることもできます。 [Representations]�(表記)ヘッダーには、構造の表記(異なる出力形式に対するプロパティセット)が 含まれます。[Representations]�(表記)を右クリックし、新規表記を作成できます。 24 概要 25 構造の操作 6.2.�構造の操作 構造の内容を表示または操作するには、構造をダブルクリックするか、右クリックして[Open]�(開 く)を選択します。構造エディターが開いて、構造のモジュールとプロパティが表示されます。 構造エディターの左上のペインには、モジュールの階層が示されます。右上のペインには、その階層 で現在選択されているモジュールのプロパティが示されます。このプロパティは最初は読み取り専用 のビューで表示され、よりコンパクトで読みやすくなっています。モジュールのプロパティを変更す るには、ドロップダウンリストで編集可能なビューを選択すると、ビューを変更できます。 構造エディターの下部には、次のタブがあります。 • Loop�(ループ)�-�この構造をマッピングする際に、選択したモジュールで使用するデフォルト のループ式を選択します。 • Validate�(検証)�-�この構造をマッピングする際に、選択したモジュールで使用するデフォルトの検 証式を選択します。 • Emit�(発行)�-�この構造をマッピングする際に、選択したモジュールで使用するデフォルトの発行 式を選択します。 • IO/Database�(IO/データベース)�-�この構造をマッピングする際に、選択したモジュールで使用す るデフォルトの入力/出力またはデータベースを選択します。 • Consume�(取得)�-�この構造をマッピングする際に、選択したモジュールで使用するデフォルト の取得式を選択します。 • Value�(値)�-�この構造をマッピングする際に、このモジュールで使用するデフォルトの値を選択し ます。構造がマップで出力構造として使用されている場合は、マップの値式にこの値がコピーされ ます。 • Document�(ドキュメント)�-�この構造に関連するサンプルドキュメントが表示されます。使用して いる製品と環境設定によって異なりますが、構造が開くとドキュメントも自動的に開きます。選択 したドキュメントは変更できます。 26 モジュールの操作 6.2.1.�モジュールの操作 モジュールは、右クリックして[New�Element]�(新規モジュール)を選択すると追加できます。これ により、モジュールは子として追加されます。モジュールには標準のツリー操作が適用されます。 ドラッグアンドドロップ、またはメニューやキーボードから切り取り、コピー、貼り付けを使ってモ ジュールの位置を変更できます。 通常、新規モジュールを追加すると、それに関連するプロパティが自動的に正しく設定されます。 たとえば、新規モジュールをリーフモジュールに追加すると、以前のリーフ(現在の親)モジュール のグループタイププロパティが自動的にnone�(なし)からsequence�(シーケンス)に変更されます。モ ジュールタイプは、これでグループモジュールになったため、none�(なし)に変更されます。場合に よっては、自動的に設定されたプロパティを見直して変更する必要があります(たとえば、グループ タイプをchoice�(選択)にしたい場合など)。 27 表記 6.3.�表記 表記により、ドキュメントの基本的な形式が定義されます。一般的に、構造にはXML表記(どの構造 にも使用可)と最大でもう1つ別の表記が使用できます。 次の表記がサポートされています。 • XML�-�標準の(JXerces2)パーサーを使って、XMLドキュメントをサポートします。インポート形式 はXMLスキーマ(XSD)、DTD、WSDL、XMLサンプルドキュメントです。 • フラット�-�バイナリおよびCOBOLデータ型など、固定長ファイルと区切り記号付きファイル(CSV を含む)をサポートします。インポート形式はCSVサンプルとCOBOLコピーブックです。 • Java�-�Javaオブジェクト(ランタイムAPIとの使用)をサポートします。インポート形式はJavaクラ ス、フォルダー、またはJarファイルです。 • EDI�-�X12とEDIFACT�EDIをサポートします。インポート形式はEdifecsガイドラインXML�(gXML) バージョン1.0です。 • データベース�-�さまざまなデータベースでの読み取りと書き込みをサポートします。インポート形 式はデータベースです。 6.3.1.�共通するプロパティ 次のプロパティはすべての表記に共通しています。 • Trim�whitespace�on�Input?�(入力データからホワイトスペースの除去)�-�このプロパティを選択す ると、すべてのモジュールの入力データから、最初または最後にあるホワイトスペースが自動的に 除去されます。最初または最後以外のホワイトスペースには影響がありません。 • Pad�to�minimum�length�on�output?�(出力で最小サイズに増大)�-�このプロパティを選択すると、 スペース(文字)またはゼロ(バイナリ)を追加して出力が最小サイズに増大されます。 • Import�File/Version/Date�(インポートされたファイル/バージョン/日付)�-�これらは読み取り専用 で、インポートが行われた日付、場合によってはインポートされたソースのバージョンを記録する ためにのみ使用されます。 6.4.�構造定義のインポート 通常、構造は定義ファイルをインポートして作成します。エディターは次のインポート形式をサポー トしています。 • XMLスキーマ(XSD)�-�これにより、XMLスキーマ定義で記述される多くの構造が作成できます。 • XMLデータ型定義(DTD)�-�これにより、XMLデータ型定義で記述される多くの構造が作成できま す。 • WSDL�-�WSDLファイルのXSD部分を使用して、構造が作成されます。 • Javaクラス�-�フォルダーまたはJARファイルに含まれる1つのクラスまたは複数のクラスに基づい て、構造が作成されます。 • データベース�-�データベースに接続する場合、データベースインポートメカニズムを使って、デー タベース定義をインポートし、接続プロパティを作成できます。これにより、データベーステーブ ルに対応する構造が作成されます。 28 マップを使った、定義のインポート • EDIガイドラインXML�(gXML)�-�EDI表記を使った構造記述のためのEdifecs形式です。gXML文書 のルートモジュールは、DocumentType属性を含むgXMLモジュールです。EDIドキュメントに はDocumentType�EDIが必須です。 • COBOLコピーブック�-�COBOLレコード定義(または定義セット)。これにより、各トップレベルの レコード定義に対して構造が作成されます。 • XMLサンプル�-�XMLドキュメントをインポートし、そのドキュメントのすべてのモジュールを含む 構造を作成できます。 • CSVサンプル�-�1行目にフィールド名を含むCSVファイルをインポートし、指定したすべてのフィー ルドを各行に含む構造を作成できます。 6.4.1.�マップを使った、定義のインポート マップを使って、どのような入力構造からでも構造定義を作成できます。たとえば、スプレッドシー トで記述される固定長構造があるとします。スプレッドシートにはモジュール名、サイズ、開始カラ ム、詳細記述のリストが含まれています。このスプレッドシートをCSVファイルとしてエクスポート し、スプレッドシートの内容をインポーター構造にマッピングするマップを作成できます。 インポーター構造は、ビルトインプロジェクト(Builtin/Structures/Executable�Structures/ Importer)であらかじめ定義された構造です。インポーター構造をマップで実行すると、1つ以上の 構造が作成されます。構造のモジュールはマッピングによって定義されています。インポーター構 造を使用するには、標準マップを作成し、出力構造としてインポーター構造を指定します。入力構 造を指定し、モジュールをマッピングして、目的とするモジュールを構造に生成できます。通常行 うように、studioでマップを構築してテストすると、マップの出力がテスト用にXMLで生成されま す。[Test�Run]�(テストの実行)メニューにより、[Test�Run�to�Importer�Structure]�(インポーター 構造のテストの実行)というオプションが追加されます。このオプションにより実際に構造が作成さ れます。必要な回数だけマップを再実行すると、毎回構造が作成され、その内容が新しいものに置き 換えられます。 6.5.�構造のモジュール 各構造には1つのルートモジュールがあり、それには子モジュールをいくつでも含めることができ ます。子モジュールはXMLモジュールに対応します。XML属性もモジュールとして扱われます。モ ジュールをクリックすると、そのプロパティが表示されます。 6.5.1.�モジュールの一般的なプロパティ 各モジュールには次の一般的なプロパティがあります。 6.5.1.1.�名前 モジュールの名前です。XMLを使用すると、これがXMLドキュメントに表示される名前です。XML の名前には、構造に関連付けられたネームスペースコンテナのネームスペースを参照するネームス ペースプレフィックスを指定できます。通常のXML構文であるprefix:nameの形でネームスペースプレ フィックスを指定します。 29 モジュールの一般的なプロパティ 6.5.1.2.�説明 モジュールの簡単な説明です。この説明は、モジュールの名前と同じ行に表示されます。モジュール の名前が記述的でわかりやすい場合、この説明は省略できます(多くのXMLモジュール名と同様)。た だし、EDIの場合などは、モジュールの名前は記述的ではないため、記述が含まれています。 6.5.1.3.�出現 モジュールがドキュメント内に出現する回数を指定します。最小と最大の2つの値があります。たと えば、モジュールが最低1回出現することを求める場合、最小値を1に設定します。出現の最大数を制 限しない場合は、最大値を-1に設定します。 次に示すのは、必須モジュール、オプションモジュール、ループモジュールの値です。 � 最小値 最大値 オプション 0 1 必須 ループ 1 0 1 -1 6.5.1.4.�サイズ 出現のように、サイズにも最小値と最大値があります。これは、モジュールの文字数の制限を指定 します。いずれの値も-1にすることができます。これはサイズに制限がないことを意味します。デ フォルトで、サイズは最小値、最大値ともに-1になっています。モジュールのサイズを指定すること は、検証フィーチャーを使用する場合に便利です。 6.5.1.5.�グループまたはモジュールの可視タグはドキュメントで非表 示 グループ化の目的において、構造の定義の一部であるモジュールを定義することが望ましいので すが、モジュールタグはドキュメントの一部として表示されません(モジュールの内容、つまりモ ジュールの子など)。たとえば、2つのXMLモジュールが次のように繰り返すよう指定するとします: <a/><b/><a/><b/>。これを指定するには、aとbを囲む不可視グループモジュールを作成し、最大出現 値を1よりも大きな値に設定します。モジュールの定義は次のようになります。 abHolder (non-visible group, loops) a b XMLスキーマをインポートすると、いくつかのタイプの不可視グループモジュールが作成されます。 これには、特定のXMLモジュールのXMLの属性を格納するAttributesモジュールなどがあります。1つ のモジュールの下でXML属性をグループ化すると、構造を容易に操作できるようになります。 これは、XMLのようなタグ付きモジュールや場合によってはEDIなどのモジュール表記をサポートす る表記にのみ有意義です。 6.5.1.6.�Null モジュールにnull値を設定できることを示します。これはXML、Java、データベースのモジュールに のみ使用できます。詳細は、null値のサポートを参照してください。 30 モジュールの一般的なプロパティ 6.5.1.7.�グループタイプ モジュールの子をどのようにグループ化するかを示します。 • None�(なし)�-�モジュールにはテキストのみが含まれます。これには追加の構造を定義する子モ ジュールはありません。 • Sequence�(シーケンス)�-�すべての子モジュールは指定した順序で出現する必要があります(子モ ジュールが出現する場合)。 • Choice�(選択)�-�子の中の1つのみが出現します。モジュールがループする場合、ループの各インス タンスに対して、異なる子モジュールの出現が可能です。 • All�(すべて)�-�順序を問わず、すべてのモジュールが出現しなければなりません。 6.5.1.8.�モジュールタイプ モジュールがドキュメントでどのように使用されるかを定義します。これはほとんどXMLドキュメン トに関連することです。このドキュメントの中でモジュールはXMLモジュール、XML属性、テキスト などで示すことができます。 • 標準�-�特別な処理がないモジュール(例、標準XMLモジュールなど)。XMLドキュメントの場合、モ ジュールの値は、モジュールに含まれるすべてのテキストの値を参照します。ただし、子モジュー ルがない場合のみです。混在する内容にアクセスする場合、XMLテキストのモジュールタイプを 使用して、子XMLモジュールと別のXML子モジュールの間のテキストにアクセスする必要がありま す。 • XML属性�-�(XMLドキュメントのみ)�モジュールはXML属性として示されます。このタイプの子モ ジュールは値のタイプでなければなりません。 • XMLコメント�-�(XMLドキュメントのみ)�モジュールはXMLコメントとして示されます。このタイプ のモジュールには子モジュールを含むことはできません。 • XML処理命令�-�(XMLドキュメントのみ)�モジュールはXML処理命令として示されます。このタイプ のモジュールには子モジュールを含むことはできません。 • XMLテキスト�-�(XMLドキュメントのみ)�このモジュールはテキスト値にアクセスします。テキスト がXMLモジュールと交互配置されている、XMLの混在する内容のテキスト値にアクセスする場合に のみ必要です。このタイプのモジュールには子モジュールを含むことはできません。 • 値�-�このモジュール名を使って、内包モジュールのテキスト値に一致させます。検証とマッピング のために、可能なコード値を定義するために使用します。1つのモジュールには、それぞれの可能 なコード値に対して、モジュールタイプが値である子モジュールが含まれます。このタイプのモ ジュールには子モジュールを含むことはできません。 • 指定なし�-�このモジュールの内容はどのようなモジュールのコレクションにもでき、全く指定され ていません。このタイプのモジュールには子モジュールを含むことはできません。 6.5.1.9.�データ型 データ型は、モジュールのテキストの内容のタイプを定義します。データ型は、グループタイプ がnoneのモジュールにのみ適用されます。次のデータ型が定義されます。 31 モジュールの一般的なプロパティ • String�-�文字列 • Byte�-�符号なし8ビット(1バイト) • Short�-�符号付き16ビット整数 • Integer�-�符号付き32ビット整数 • Long�-�符号付き64ビット整数 • Float�-�32ビット浮動小数点数 • Double�-�64ビット浮動小数点数 • Date/Time�-�日付と時間の値。これにはタイムゾーンの情報も含まれます。 • Date�-�日付の値 • Time�-�時間の値 • Duration�-�経過時間。これはPnYnMnDTnHnMnSのようにISO�8601形式で表されます。Pで開始す る必要があり、残りの大文字は期間のタイプを示します。特定の期間を使用しない場合、それに該 当する大文字は省略できます。たとえば、P4Yは4年、P6Y7M2Dは6年7か月2日、P30Sは30秒を示 します。 • Boolean�-�true�(真)またはfalse�(偽)のいずれか • Binary�-�バイナリ値 • QName�-�オプションのプレフィックスとローカル名で構成される修飾名。プレフィックスは、構 造に関連付けられたネームスペースコンテナの1つに必ず定義されていなければなりません。 これは現在モジュールのデータ型として使用すべきではなく、Constant�(定数)関数でのみ使用します。 6.5.1.10.�データ形式 データ形式は、データ型がどのように具体的に示されるかを記述します。デフォルトのデータ形式で は、表記の最適な形式が選択されます。たとえば、EDI表記では、入力ドキュメントのデータ識別子 に基づいて、日付のデータ型とデフォルトの形式に正しいデータ形式が選択されます。表記では、構 造全体で使用されるバイトの順が指定されるため、個々にバイト順のデータ形式を指定する必要はあ りません。ただし、特定のモジュールに対してバイト順をオーバーライドする場合、バイト順を指定 できます。 次のデータ形式が定義されます(適用されるデータ型ごとにまとめられています)。 • 整数 • デフォルト�-�数値は表記で指定するようにエンコードされます。 • リトルエンディアン(PC)�-�数値はリトルエンディアンバイト形式のバイナリでエンコードされま す。Intelプロセッサで使用されています。 • ビッグエンディアン�-�数値はビッグエンディアンバイト形式のバイナリでエンコードされます。 • 小数点 • デフォルト�-�数値は表記で指定するようにエンコードされます。 32 モジュールの一般的なプロパティ • 文字�-�数値はASCII文字でエンコードされます。 • パック10進数�-�数値はパック10進数でエンコードされます。 • ゾーン10進数�-�数値はゾーン10進数でエンコードされます。 • 単精度/倍精度 • デフォルト�-�値はIEEE�754規格を使ってエンコードされます。 • IBM方式浮動小数点数�-�値はIBM�360メインフレーム規格を使ってエンコードされます。 • 日付と日付/時間 • デフォルト�-�日付は表記で指定するようにエンコードされます。 • 残りの日付および日付/時間形式では、世紀にCC、世紀の年にYY、数で表す月にMM、テキス トで表す月(英語の月名の最初の3文字)にMMM、1年を通した週にWW、月の週にW、月の日 にDD、1年を通した日にDDDを使用します。その他の特別な指定は記載のとおりです。1年を通 した週(WW)はISO�8601規則の週の表記方法に従っています。日付/時間形式にも、以下の時間タ イプの省略形を使用します。 • 時間 • デフォルト�-�表記の規則に従ってエンコードされます。 • それ以外の時間では、時間にHH、分にMM、秒にSS、10分の1秒にDDを使用します。 • バイナリ • デフォルト�-�バイナリ形式でデータが表示されることを指定します。 • Base64�-�ベース64エンコード方式で文字にエンコードします。(現在サポートされていません) • 16進法�-�16進法エンコード方式で文字にエンコードします。(現在サポートされていません) • 文字列 • 文字列(ヌル終端)�-�値が0バイトで終わる文字列。 世紀がないエンコーディングから世紀を必要とするエンコーディングに日付を変換する場合、世紀を 導き出すJavaの標準規則が使用されます。これは、現在の日付よりも80年前に開始する世紀に年を 挿入します。 6.5.1.11.�少数位 これは数値データに使用して、暗黙の小数点位置の数を示します。たとえば、この値が2で、モ ジュールに1234という値が含まれる場合、モジュールの値は12.34です。 6.5.1.12.�Use�Children�Of�(子を使用) これは再帰的モジュールの定義に使用します。つまり親モジュールと同じ内容を有するモジュールで す。モジュールが再帰的である場合、親モジュールにuse�children�of�(子を使用)プロパティを設定 します。 33 フラットプロパティ 6.5.1.13.�その他のテキストの説明 テキストフィールドでは、モジュールの完全なドキュメンテーションを取得し、EDIのようなイン ポートした仕様からドキュメンテーションをキャプチャすることができます。テキストフィールドに 次の記述タイプのいずれかを使ってタグを付けることができます。 • コメント�-�インポートされた構造定義で指定する、モジュールに関するコメント • 詳細説明�-�インポートされた構造定義で指定する、モジュールに関する詳細説明 • 目的�-�インポートされた構造定義で指定する、モジュールの目的 • セマンティクス�-�インポートされた構造定義で指定する、モジュールのセマンティクス • ユーザーのメモ�-�モジュールの使用に関するメモ • 例�-�モジュールの値の例。構造に関連付けられたサンプルまたはテストドキュメントの使用と混同 しないようにします。ここでの値の例はドキュメンテーションとしてのみ機能します。 6.5.2.�フラットプロパティ 次のプロパティはフラット構造のみに使用します。 6.5.2.1.�イニシエーター イニシエーターは文字のシーケンスで、モジュールの開始を示します。イニシエーターはどのレベル のモジュールにも使用でき、どのグループタイプに定義することもできます。たとえば、いくつか のモジュールのうちの1つが出現し、各モジュールにはそれに先行する特定の文字シーケンスがある とします。この場合、これらのモジュールの親モジュールを、choiceのグループタイプを使って定義 し、各子モジュールでイニシエーター文字を定義できます。 ここでは特殊文字が適用されます。 イニシエーター文字は、以下のInclude�Initiator�(イニシエーターを含む)プロパティの設定によって は、モジュールテキストの一部とはみなされません。 6.5.2.2.�イニシエーターとターミネーターの特殊文字 イニシエータープロパティまたはターミネータープロパティで指定される特殊文字は以下のとおりで す。 • \n�-�1つの改行文字。ただし、プラットフォームによって異なります。これは必ずしも実際の改行 文字(ASCII�10)を意味するわけではなく、フラット表記プロパティで定義される改行文字を指定し ます。 • \t�-�タブ文字が予想され、出力で発行されます。 • \uXXXX�-�16進法で指定される1つのUnicode文字。 • \w�-�1つのホワイトスペース文字(改行、スペース、またはタブ)。出力で1つのスペースが発行され ます。 34 フラットプロパティ • \W�-�ゼロ以上の連続するホワイトスペース文字(改行、スペース、またはタブ)。ホワイトスペース 以外の文字が見つかるまで、連続するホワイトスペース文字が取得されます。そのためスペースを 1つ以上指定する場合、\w\Wと指定し、この逆は指定しないでください。出力では何も発行されま せん。 • \\�-�1つのバックスラッシュが予想され、出力で発行されます。 6.5.2.3.�Include�Initiator�(イニシエーターを含む) このプロパティを設定すると、イニシエーターの値がモジュールのテキスト値に含まれます。これは グループタイプがnoneのモジュール(コンテナなしのモジュール)にとってのみ有意義です。 つまり、入力の際にイニシエーター値がモジュールのテキスト値の最初に追加され、出力の際にイニ シエーター値はモジュール値の一部とみなされて書き出されません。 6.5.2.4.�ターミネーター ターミネーターは文字のシーケンスで、モジュールの終端を示します。 ここでは特殊文字が適用されます。 ターミネーター文字は、以下のInclude�Terminator(ターミネータを含む)プロパティの設定によっ ては、モジュールテキストの一部とはみなされません。 6.5.2.5.�Include�Terminator�(ターミネーターを含む) このプロパティを設定すると、ターミネーターの値がモジュールのテキスト値に含まれます。これは グループタイプがnoneのモジュール(コンテナなしのモジュール)にとってのみ有意義です。 つまり、入力の際にターミネーター値がモジュールのテキスト値の最後に追加され、出力の際にター ミネーター値はモジュール値の一部とみなされて書き出されません。 6.5.2.6.�開始のオフセット 開始のオフセットは、モジュールの最後の文字の後に次のモジュールの最初の文字が即座に挿入され ない固定長ドキュメントを操作する際に使用します。これはモジュールを開始する前にスキップする 文字数です。カラムプロパティとともに使用すると、特定のカラムに進んだ後に文字がスキップされ ます。 6.5.2.7.�カラム カラムはモジュールが開始するカラムを示します。これにより、現在の場所がどの行であっても、次 に特定のカラムが出現する場所に移動できます。たとえば、カラム20が指定されている場合に、前の モジュールのカラム5で終了すると、同じ行のカラム20に進みます。ただし、モジュールを終了した 場所がカラム47の場合は、次の行のカラム20に進みます。 35 継承プロパティ 6.5.2.8.�引用符の処理 コンマ区切り(CSV)ファイルの処理に使用します。モジュールの引用符の処理に関する定義済みのオ プションには次のものがあります。次のいずれかを選択します。 • None�(なし)�-�引用符に関して特別な処理は行われません。 • Optional�Quotes�(オプションの引用符)-�モジュールには二重引用符がある場合とない場合があり ます。二重引用符がある場合、二重引用符はモジュールを抑制し、データには含まれません。二重 引用符がない場合、モジュールは通常のイニシエーターまたはターミネーターに抑制されます。 • Required�Quotes�(必須の引用符)�-�Optional�Quotes�(オプションの引用符)と同じですが、各モ ジュールには二重引用符が必須な点が異なります。二重引用符がないと、エラーが発生します。 6.5.2.9.�リリース イニシエーターまたはターミネーターが認識されないようにする1文字を定義します。たとえば、 ターミネーター文字が二重引用符の場合、リリース文字としてバックスラッシュを指定すると、バッ クスラッシュを二重引用符の前に入力することで、モジュールの値の中に二重引用符を含めることが できます。リリース文字がバックスラッシュで、値にバックスラッシュを含める場合、バックスラッ シュを2つ入力します。 6.5.3.�継承プロパティ モジュールが別の構造から継承される場合、次のプロパティを使用します。 6.5.3.1.�継承元 モジュールの継承元となる構造を指定します。指定した構造は親構造と呼ばれ、このモジュールを含 む構造は子構造と呼ばれます。 6.5.3.2.�継承されるルート 親構造からのルートモジュールとこのモジュールを一致させる方法を指定します。構造からモジュー ルのプロパティを継承する際に、子構造の現在のモジュールから継承するか、親構造のルートモ ジュールから継承するか、またはその2つの組み合わせにする場合があります。次のオプションがあ ります。 • Use�Only�Children�(子のみを使用)�-�このモジュールでは、子モジュールからのプロパティのみが 子構造に含まれます。継承される親構造のルートモジュールのプロパティは無視されます。 • Use�Everything�(すべてを使用)-�現在のモジュールのプロパティは無視され、そのすべてのプロパ ティは継承される親構造のルートモジュールから引き継がれます。 • Use�All�Except�Name/Occurs�(名前と出現以外のすべてを使用)�-�継承される親構造のルートモ ジュールのすべてのプロパティが引き継がれます。ただし、名前、説明、出現のプロパティは含ま れません。これらのプロパティは、子構造のモジュールにより定義されます。これは、パーティク ルによりXMLスキーマで定義された継承タイプに対応します。 36 EDIプロパティ 6.5.3.3.�コンフリクト このプロパティは継承のコンフリクトを検出するために設定します。手動でリセットするまでこの設 定は継続し、構造が検証されるたびに検証の警告を発します。通常、コンフリクトが存在すると、コ ンフリクトを解消するために何らかの対処を行い、プロパティをリセットするでしょう。それにより 検証の警告は表示されなくなります。 6.5.3.4.�継承される追加を無視 一般的に、親構造でモジュールを変更すると、その変更は子構造にも適用されます。ただし、子構造 にすでに変更を行っていた場合は、親構造の変更が子構造に継承されないようにします。たとえば、 子構造を変更し、使用していないコードを削除したとします。親構造を新しいバージョンの規格に移 行する場合、コードのリストが更新されないようにする必要があります。子構造にこの更新が適用さ れないようにするには、[Ignore�Inherited�Adds]�(継承される追加を無視)チェックボックスをオン にします。子構造で値タイプのモジュールを削除した場合、自動的にこの設定がオンになります。 [Ignore�Inherited�Adds]�(継承される追加を無視)チェックボックスをオンにしていると、親構造に 追加されたモジュールは、このモジュールには追加されません。 6.5.4.�EDIプロパティ 次のプロパティはEDIのみに使用します。 6.5.4.1.�構文規則 構文規則は、セグメントに必要なモジュールの有効な組み合わせを定義するために、セグメントレ ベルで指定します。構文規則にはX12という仕様があり、各ルールはセミコロン(;)で区切られていま す。構文規則の仕様はX12で定義されていますが、EDIFACTとX12�EDIにも使用できます。 6.5.4.2.�シーケンスId EDIモジュールのみに使用します。これにより、モジュールのシーケンス番号がnnの形で定義されま す。通常、この番号はモジュール名に含まれるシーケンス番号に一致します。これは、モジュールの データをEDI構文規則に比較して検証するためにのみ使用します。 6.5.4.3.�EDIモジュールタイプ モジュールで表記されるEDIモジュールのタイプを定義します。可能な値には次のものがあります。 • None�(なし)�-�これはEDIモジュールではありません。 • Transaction�(トランザクション)�-�トランザクションのルートモジュールです。トランザクション を定義します。このモジュールの名前はEDIトランザクションの名前です。たとえば、832また はPRICATのようになります。 37 式 • Segment�(セグメント)�-�EDIセグメントを定義します。このモジュールの名前はセグメントで、3文 字以下でなければなりません。たとえば、DTMのようになります。 • Element�(モジュール)�-�EDIモジュールを定義します。このモジュールの名前は内包セグメントの名 前です。名前にはセグメント内の2桁の連続番号が付加されます。たとえば、DTM02のようになり ます。 • Composite�(コンポジット)�-�EDIコンポジットを定義します。コンポジットの親がEDIセグメントの 場合、コンポジットの名前にはEDIモジュールと同じ命名規則が使用されます。コンポジットの親 がEDIモジュールの場合、コンポジットの名前は、モジュールの名前にハイフンと2桁の数字を付け たものになります。たとえば、SEG05-01のようになります。 • Loop�(ループ)�-�EDIループを定義します。このモジュールの名前はLoop-で開始しなければなりませ ん。 • Code�Value�Part�(コード値部分)�-�コード値に2つの部分がある場合に使用します。1つの要素がコー ド値のそれぞれの部分を定義します。 6.5.5.�式 構造モジュールで式を指定できます。式を主に使用するのは、構造に関連付けられたデフォルトの値 と検証式を指定するためです。どのような場合においても、構造がマップに関連付けられていると、 構造の式はマップにコピーされます。マップの式の明示的な仕様によりオーバーライドされない限 り、構造で式が変更された場合、再コピーされます。詳細は、式を参照してください。 6.6.�継承 構造の継承は、その他の構造内で構造を再利用する強力な方法です。これは2つの主な理由で使用さ れます。 • 重複を避ける�-�EDIのセグメントまたは複雑なタイプのXMLスキーマのコンセプトに似ています。 たとえば、住所構造を定義して、請求先住所および送付先住所に再利用することができます。 • カスタマイズ�-�多くのビジネス文書の定義では、標準文書のほんの一部のサブセットのみを使用す ることがよくあります。構造の継承を使って、オリジナルの標準文書のカスタマイズバージョンを 作成し、未使用のモジュールを削除または変更できます。 • バージョンの移行�-�ある標準構造(内部標準または外部標準のいずれか)を参照していて、いずれそ の標準構造から新規バージョンに移行する場合にも、構造の継承を使って、カスタム構造を作成で きます。標準構造の新しいバージョンを使用する際に、新しい標準構造をポイントするように継承 を変更し、構造エディターで異なる点を調整します。次に、Show�Objects�Needing�Validation�(検 証の必要なオブジェクトの表示)メカニズムを使って影響を受けたマップを開いて調整します。 構造の継承により、モジュールは構造から継承することができ、モジュールの子は継承された構造の モジュールから作成されます。継承された構造でモジュールが追加または変更されると、継承する構 造に自動的に変更が適用されます。 構造の継承は、モジュールが構造から継承されることを指定することで機能します。これを行うには 3つの方法があります。 • 新規構造ウィザード�-�カスタム構造の作成�-�これにより、別の構造をカスタマイズして新規構造が 作成されます。これは、[File]�(ファイル)メニューまたは[Repository]�(リポジトリ)ナビゲーター 38 継承された構造からのモジュールの伝播 から[New]�(新規)�->�[Structure]�(構造)を選択して行うことができます。[Create�a�structure�that is�a�customization...]�(カスタム構造の作成...)を選択し、作成する構造とカスタマイズする構造 (通常標準の構造)を指定します。カスタム構造は、最初は継承元の構造と同一の構造として表示さ れます。必要に応じて、このカスタム構造のモジュールを追加、削除、変更します(通常、多くの モジュールやコード値を削除することになります)。 • モジュールの継承プロパティを設定する�-�[Inherits�From]�(継承元)の横にある[...]ボタンをクリッ クして参照し、モジュールに継承するプロパティを持つ親構造を指定します。 • 親構造をモジュールにドラッグする�-�[Repository]�(リポジトリ)ナビゲーターから親構造を構造エ ディターの目的の構造に直接ドラッグします。 6.6.1.�継承された構造からのモジュールの伝播 構造からモジュールを継承する場合、構造のモジュールを使って、継承を受けるモジュールである子 モジュールを作成できます。継承を受ける構造は子構造と呼ばれ、モジュールの継承元の構造は親構 造と呼ばれます。 別の構造から継承されたモジュールは、黒色の矢印アイコンで示されます。 親構造でモジュールが変更されると、変更は自動的にすべての子構造に伝播されます。この伝播は即 座に発生します。そのため、たとえばエディターで親と子の両方の構造を開いていて、親構造に新規 モジュールを追加した後に、エディターで子構造に切り替えると、新規モジュールはすでに子構造に 追加されています。 継承されたモジュールを子構造で変更すると、この変更は金色の三角アイコン(デルタ、つまり変 更を意味する)で示されます。これにより、子モジュールが親モジュールとは異なることが示されま す。具体的な違いを確認するには、子モジュールを右クリックし、メニューから[Show�Differences from�Inherited�Element]�(継承されたモジュールの違いを表示)を選択します。 (継承モジュールの子孫としての)子構造にモジュールを追加すると、黄色の星が表示され、子構造の モジュールが新しいものであり、親構造にはないことが示されます。 6.6.1.1.�継承点のモジュール 継承点のモジュール(親構造を指定するモジュール)には、特別な注意が必要です。親構造のルートモ ジュールからモジュールのプロパティを全く継承したくない場合や一部またはすべてを継承したい場 合があるでしょう。モジュールの継承されたルートプロパティ(編集可能モードになっていると、モ ジュールのプロパティで利用可能)で、親構造のモジュールのどのプロパティを使用するかを定義し て、これを指定できます。次のオプションがあります。 • Use�Only�Children�(子のみを使用)�-�子構造のモジュールは親構造によって変更されません。親構 造から継承されたモジュールのみが、そのルートの子モジュールと子孫です。 • Use�Everything�(すべてを使用)�-�親のルートモジュールのすべてのプロパティが子モジュールに使 用されます。 • Use�All�Except�Name/Occurs�(XSD)�(名前と出現以外のすべてを使用(XSD))�-�モジュール名と最小 出現数および最大出現数を除く、すべてのプロパティが親モジュールから使用されます。モジュー ル名と最小出現数および最大出現数については、子モジュールのものがそのまま使用されます。こ れはXSDスキーマサポートのために使用します。 • Use�All�Except�Name/Occurs/SeqId�(EDI)�(名前、出現、シーケンスID以外のすべてを使用(EDI)) -�モジュール名、最小出現数および最大出現数、シーケンスIDを除く、すべてのプロパティが親モ 39 再帰的に定義されたモジュール ジュールから使用されます。モジュール名、最小出現数および最大出現数、シーケンスIDについて は、子モジュールのものがそのまま使用されます。これはEDIサポートのために使用します。 • Use�All�Except�Occurs/SeqId�(EDI)�(出現とシーケンスID以外のすべてを使用(EDI))�-�最小出現数 および最大出現数、シーケンスIDを除く、すべてのプロパティが親モジュールから使用されます。 最小出現数および最大出現数、シーケンスIDについては、子モジュールのものがそのまま使用され ます。これはEDIサポートのために使用します。 6.6.1.2.�コンフリクト�-�親と子の両方を変更する 構造の継承では、モジュールとプロパティを組み合わせて子構造に継承できます。ただし、親構造と 子構造でモジュールの同一のプロパティが個々に変更される場合があります。たとえば、最大出現数 が両方で変更される場合があります。これが行われると、モジュールのプロパティにコンフリクトイ ンジケーターが設定され、その構造を使ってマップを実行した場合に警告が発せられるようになりま す。このコンフリクトは手動で解決する必要があります。それには、子構造を変更し、モジュールプ ロパティのコンフリクトインジケーターを削除します。 構造のモジュールのコンフリクトは、親構造と子構造の両方のシーケンスにモジュールが追加された ときにも、モジュールの最終的な順番が明確ではないために、発生します。新規モジュールは、コン フリクト発生と印が付けられます。 6.7.�再帰的に定義されたモジュール XMLでは、モジュールを再帰的に定義することができます。そのため、あるモジュールの子は、祖先 のモジュールの子と同じになります。 再帰は次の方法で定義できます(XSDまたはDTDインポート機能を使うと自動的に判断されます)。 • Use�Children�Of�(子を使用)�-�Use�Children�Of�(子を使用)プロパティを設定して、子を使用するモ ジュールを指定します。 • 継承�-�あるモジュールの祖先が、そのモジュールを含む構造から直接的に継承する場合、または中 間構造を通じて間接的に継承する場合、そのモジュールは再帰モジュールとして扱われます。これ はモジュールプロパティで、Children�not�shown�-�recursive�inheritance�at�[link]�(子非表示�[リンク]で再帰的継承)と示されます(読み取り専用ビューを使用している場合) たとえば、社員構造を想定してください。この社員構造には部門構造から継承される部門モジュー ルが含まれます。部門構造にはマネージャーと呼ばれるモジュールがあり、マネージャーモジュー ルは社員構造から継承されます。この場合、他のモジュールを含む社員モジュールがあり、この再 帰的継承の一部をなすため、マネージャーモジュールは効果的に再帰的継承をしていると言えま す。 再帰モジュールのマッピングは完全にサポートされています。 6.8.�構造定義に対する実行時インスタンスの検 証 構造の検証は、構造で定義されたモジュール仕様に対して、インスタンスドキュメントの値をチェッ クすることです。たとえば、モジュール内の文字数がサイズ制限を超えていないことのチェックなど があります。カスタム検証チェックは検証式を使って行えます。 40 構造定義に対する実行時インスタンスの検証 構造の検証に関連する追加のチェックにより、処理時間が著しく増大する可能性があり、特に大型の 構造ではそれが顕著なため、構造の検証はデフォルトで無効になっています。[Preferences]�(環境設 定)を使って、構造の検証を有効にできます。 41 7.マップ この章では、マップを作成、編集、およびテストする方法について説明します。 マップと構造 7.1.�マップと構造 マップは、1つの入力構造と出力構造を参照します。 マップは、入力/出力(複数入力/出力ドキュメント)メカニズムを使用して1つの構造内にある複数のタイプのド キュメントに実行できます。 マップで作業している時は、入力パネルまたは出力パネルからマップモジュールを選択します。通 常、これらのモジュールは構造モジュールと同一で、変更や削除はできません。変更や削除のため には構造モジュールの変更が必要です。マップの検証、ループからのモジュールの展開、ループの分 割で説明されているように、これらのモジュールが構造モジュールと異なる場合があります。 マップモジュールに関連付けられているプロパティは、該当する構造モジュールのプロパティです。 ただし、マップで作業している場合、これらの該当プロパティは変更できません。構造モジュールの プロパティ変更は、構造エディターで行う必要があります。また、マップモジュールの追加や削除は できません。つまり、構造モジュールへの対応が必要であるため、マップエディターを使ってマップ モジュールの定義を変更することはできません。 7.2.�マップの作成 マップの作成は、[Repository]�(リポジトリ)ナビゲーターでいずれかのリソースを右クリック し、[New]�(新規)�>�[Map]�(マップ)メニューアイテムを選択して行います。また、スタンドアロン バージョンでは[New�Map]�(新規マップ)ボタンをクリックすることもできます。[New�Map]�(新規 マップ)ウィザードを使って、マップのタイプを指定して名前を入力し、そのマップの入力構造と出 力構造を選択します。あるいは、マップに名前を付け、入力構造と出力構造をマップエディターの各 パネルにドラッグした後に、このウィザードを終了することもできます。[Link�with�Contents]�(コ ンテンツとのリンク)ボタン が選択されていないことを確認してください。このボタンが選択され ている場合、マップにドラッグする構造をクリックすると、エディターウィンドウでマップのビュー が構造プロパティのビューに切り替わるため、構造をマップにドラッグできなくなります。 7.3.�マップの編集 既存のマップで作業するには、[Repository]�(リポジトリ)ナビゲーターでそのマップをダブルクリッ クするか、そのマップを右クリックして[Open�Map]�(マップを開く)を選択します。マップエディ ターが開き、入力パネルに入力構造が、出力パネルに出力構造がそれぞれ表示されます。 入力パネルや出力パネルでマップモジュールを選択すると、そのマップモジュールで使用できる式ツ リーが、マップエディターの下にある式ツリーパネルですべて有効になります。それぞれの式ツリー の説明は次のとおりです。 7.3.1.�ドラッグ/ドロップ ドラッグ/ドロップのメカニズムは、マップの大半の側面を指定するために使用されます。最も簡単 な操作は、入力マップモジュールを出力マップモジュールにドラッグすることです。出力マップモ ジュールに前の値の式が存在しなかった場合、これによって入力を出力にコピーする値の式が作成さ れます。 マップの編集時にドラッグ/ドロップを使用して、次のことを行うことができます。 44 ドラッグ/ドロップ • 入力マップモジュールを次のアイテムにドラッグします。 • 出力マップモジュール�-�式の値が存在しない場合は、入力を出力にコピーする値の式が作成され ます。 • 空の値の式パネル�-�出力マップモジュールへのドラッグと同じ動作を行います。ただし、前に出 力マップモジュールを選択したことで値の式タブが有効になっているものと仮定します。 • 式�-�入力マップモジュールを式の最後の子として追加します。式が関数の引数である場合、1つ の関数に許可される引数は1つだけです。 • 関数を次のアイテムにドラッグします。 • 出力マップモジュール�-�式の値が存在しない場合は、その関数が値の式ツリーのルートになりま す。それ以外の場合は影響ありません。 • 空の値の式パネル�-�出力マップモジュールへのドラッグと同じ動作を行います。ただし、前に出 力マップモジュールを選択したことで値の式タブが有効になっているものと仮定します。 • 式�-�関数を式の最後の子として追加します。式が関数の引数である場合、1つの関数に許可され る引数は1つだけです。 • 式を次のアイテムにドラッグします。 • 他の式�-�ソース式をターゲット式の最後の子として追加し、ソース式を削除します。これは、ド ラッグ/ドロップが切り取り/貼り付けと同一であるためです。コピー/貼り付けも動作は同じで すが、ソース式が削除されない点が異なります。 • 出力マップモジュールを次のアイテムにドラッグします。 • 出力マップモジュール�-�値の式が出力先に存在しない場合は、ソース出力への参照とともに値の 式を作成します。 • 空の値の式パネル�-�出力マップモジュールへのドラッグと同じ動作を行います。ただし、前に出 力マップモジュールを選択したことで値の式タブが有効になっているものと仮定します。 • 式�-�出力マップモジュールを式の最後の子として追加します。式が関数の引数である場合、1つ の関数に許可される引数は1つだけです。 • 値のマップモジュール(入力または出力)を次のアイテムにドラッグします。 • 出力マップモジュール�-�特定の値で定数式を作成します。 • 空の値の式パネル�-�特定の値で定数式を作成します。 • 式�-�特定の値で定数式を作成します。 マップの編集時は、その他のドラッグ/ドロップ操作は効果を持ちません。 7.3.1.1.�マップモジュールの展開 前述のように、マップモジュールは構造モジュールに対応します。ただし、非常に多くのモジュール を持ち、その大半がマップされていない場合は構造が巨大になることがあります。パフォーマンス上 の理由により、マップモジュールはマッピングで実際に使用される場合にのみ実体化されます。これ は、デザイナーでマップモジュールを展開するときに行われます。 そのため、マップを編集する時や単にマップモジュールを展開する時は、そのマップが未保存(エ ディタータブにアスタリスクが表示)となります。これは正常な動作で、新しいマップモジュールが 実体化されたことを示します。 45 値の式パネル マップ内を検索する時、(検索されている)すべてのマップモジュールは一時的に実体化され、未使用 のモジュールの数が大きくならないよう、検索の最後に破棄されます。 7.3.2.�値の式パネル このパネルには、出力マップモジュールに値を提供するために使用される式が含まれています。これ は、出力マップモジュールが選択された時だけ有効になります。 7.3.3.�ループ式パネル このパネルでは、出力マップモジュールのループ方法を指定します。通常、この仕様はモジュールを 入力から出力にマップする時に自動的に生成されます。ループ式パネルは、ループできる出力マップ モジュールを選択する時にのみ表示されます。 ループ式のルートは関数であることが必要です。メインのループ関数はSimpleLoopで、ループ式が 含まれている出力マップモジュールのルーピングを定義する入力マップモジュールの仕様が必要で す。詳細は、ループ式を参照してください。 7.3.4.�式のコピー(マッピング) マップモジュールの式は他のマップモジュールにコピーできます。そのためには、マップモジュー ルを選択し、右クリックして[Copy]�(コピー)を選択してターゲットマップモジュールを選択 し、[Paste�Expressions�(Mappings)]�(式の貼り付け(マッピング))を選択します。これによって式の すべて(ループ式や値の式など)がソースマップモジュールからターゲットマップモジュールにコピー されます。ターゲットモジュールに式が既に存在する場合は変更されません。また、式のコピーは、 マップモジュール名によって一致するソースモジュールやターゲットモジュールのすべての子に適用 されます。コピーの方法は、子を持つ入力マップモジュールから子を持つ出力マップモジュールに マッピングする場合と完全に同一です。 モジュールのレベルを追加または削除、あるいはモジュールのブロックを移動した場合など、マッ プの下で出力構造が変更された場合に特に便利です。式をモジュールの古い場所から新しい場所にコ ピーすれば、マッピングを簡単に移動させることができます。 7.3.5.�式参照の移動 マップの入力構造が変更され、入力構造のモジュールが移動された場合は、このモジュールを参照す るようマップを修正できます。この操作は、移動後のマップで[Move�Expression�References]�(式 参照の移動)を使えば簡単に行えます。この操作を行うと、元のモジュールへの参照がすべて、移動 後のモジュールへの参照に変更されます。この操作は元のモジュールの子や移動後のモジュールの子 にも適用され、名前で一致させます。 マップモジュールの参照を移動させるには、移動させた元のマップモジュール(赤で囲まれた無効な マップモジュール)を選択し、右クリックして[Move�Expression�References]�(式参照の移動)を選択 します。これによって、マップモジュールの移動先に選んだ場所でダイアログボックスが表示されま す。 元のマップモジュールへの参照をすべて検索して削除した後、移動しているモジュールに新しい参照 を追加します。何らかの理由でモジュールの移動に問題が発生した場合は、エラーのダイアログボッ クスが表示され、何も移動されません。また、式の移動は、マップモジュール名によって一致する 46 ループからのモジュールの展開 元のモジュールや移動後のモジュールのすべての子に適用されます。コピーの方法は、子を持つ入力 マップモジュールから子を持つ出力マップモジュールにマッピングする場合と完全に同一です。 7.3.6.�ループからのモジュールの展開 ループ式を指定する手間が省けるよう、ループの反復を非ルーピングモジュールとしてマッピング するとさらに便利な場合があります。これは、ルーピングモジュールからのモジュールを展開すれば 簡単に処理できます。この操作は、モジュールを右クリックし、[Unroll�from�Loop]�(ループから展 開)を選択して行います。ループからモジュールを展開すると、より簡単にマップできる非ループモ ジュールが新しく作成されます。このモジュールは必要な数だけ作成できます。ルーピングモジュー ルは、モジュールがすべて展開された後も維持されます。展開されたマップモジュールが必要なく なった場合は削除します。 7.3.7.�ループの分割 ループを2つに分割し、それぞれのループを別々の入力モジュールに基づいて反復させると便利な場 合があります。そのためには、モジュールを右クリックして[Split�Loop]�(ループの分割)を選択しま す。 たとえば、あらゆるタイプの住所のループが出力に存在し、さまざまな住所がサポートされていると します。そして、勤務先住所のループと自宅住所のループが入力にあるとします。このループを簡単 にマッピングするには、出力ループを2つのループに分割し、最初のループを勤務先住所に、2番目の ループを自宅住所にマッピングします。ループは必要な数のループに分割できます。不要になった分 割されたループは削除できます。 7.3.8.�コード値のマッピング コード値(モジュールが持つことができる値のセット)の指定は、値のモジュールタイプがあるモ ジュールを子として持つことで行われます。これらのいずれかの値モジュールを右クリックすると、 コンテキストメニューに[Map�Value]�(値のマップ)オプションが表示されます。これを選択すると、 内包モジュールを選択された値にマッピングするConstant関数が作成されます。前出のコード値の マッピングで説明したドラッグ/ドロップも使用できます。 7.3.9.�定数のマッピング マップモジュールや構造モジュールに定数値をすばやくマッピングするには、そのモジュールを右ク リックして[Map�to�Constant]�(定数にマッピング)を選択します。これによってConstant関数が追 加され、値を指定できるプロパティシートが表示されます。 7.4.�NULL値のサポート 表記によっては、データの明示的不在を示す特別値であるNULL値の概念がサポートされていま す。XML、Java、データベースがそれに該当します。 • XML�-�XMLでのNULL値は、TRUE�(真)であるxsi:nil属性の存在で表記されます。例:�xsi:nil�=�"true" 47 式の自動生成 • Java�-�JavaでのNULL値は、NULL値を持つオブジェクトのフィールドやプロパティで表記されま す。 • データベース�-�データベースでのNULL値は、行にあるカラムのSQL�NULL値を使って表記されま す。 NULL値は、モジュールでNULLプロパティを設定すれば、そのモジュールに限って有効になります。 これは、NULL値をサポートする表記でのインポートプロセス中に自動的に行われます。 NULL値は透過的マッピングを通じて渡されます。そのため、値をJavaフィールドモジュールから XMLモジュールにマッピングし、両方ともNULLプロパティをサポートしている場合は、正しいNULL 値が出力に表示されます。Constant関数を使ってNULL値を明示的に指定したり、IsNULL関数を 使ってNULLをテストすることができます。 また、コンテナモジュールをNULLとして発行したい場合は、NULL表記を使ってこれをコントロール できます。NULL式も自動的に生成されます。 7.5.�式の自動生成 入力モジュールを出力モジュールにマッピングすると、式が自動生成され、マッピング作業が正確に 行われます。自動生成は、(生成される)式がこれまでに指定されていない場合のみ行われます。ほと んどの場合は目的の式が自動生成されますが、そうでない場合もあります。そのような場合は、手動 で変更する必要があります。 7.5.1.�ループ式 詳細は、自動ループ計算を参照してください。 7.5.2.�発行式 発行式は、オプションのモジュールや選択のメンバーの発行の条件を指定します。発行式は、コンテ ナである出力マップモジュールについてのみ自動生成されます。これは、出力内のコンテナモジュー ルが入力の一部のコンテナモジュールに基づいて表示されていることを確認するために使用されま す。このようなデフォルト式では、入力モジュールでIsPresent関数が使用されます。入力モジュー ルが存在する場合は、該当する入力モジュールが発行されます。それ以外の場合は発行されません。 入力を出力にマッピングする時に、内包のオプションメンバーまたは選択メンバーは、出力マップモ ジュールの親から順に検査され、出力を入力マップモジュールのコンテナに一致させながらツリーを 上がっていきます。それぞれの内包マップモジュールの一致では、IsPresentが生成されます。 出力モジュールがオプションであるもののNULLプロパティを持たず、入力モジュールにNULLプロパ ティがある時は、発行生成に関して特別な場合があります。この場合、上に示したように入力が存在 するかどうかではなく、入力がNULLではない場合にのみ発行式が生成され、出力モジュールが発行 されます。 7.5.3.�NULL式 NULL式は、内包モジュール(グループタイプがNONEではないモジュール)でのみ、そしてモジュー ルがそのプロパティにNULLプロパティを設定した時のみ使用されます。リーフモジュール(グルー 48 マッピングされたモジュールとマッピングされていないモジュール プタイプがNONEのモジュール)の場合、NULL式は必要ありません。そのモジュールにマッピング されている入力がNULLの場合、出力もNULLになります。NULLの発行で特別な条件を設ける場合 は、Constant関数を使ってNULLを発行したり、IsNull関数を使ってNULLのテストを行うことがで きます。 発行式の生成と同様、入力を出力にマッピングする時に、内包モジュールは、出力マップモジュール の親から順に検査され、出力を入力マップモジュールのコンテナに一致させながらツリーを上がって いきます。出力用のNULLの生成が対応する入力によってコントロールされるよう、一致するそれぞ れの内包マップモジュールでIsNullが生成されます。 7.6.�マッピングされたモジュールとマッピング されていないモジュール 最初はどのマップモジュールもマッピングされていません。"マップされた"という言葉は省略表現と して使われます。出力マップモジュールの場合はマップモジュールに値の式があることを意味し、入 力マップモジュールの場合はそのマップモジュールが一部の出力マップモジュールの値の式に参照さ れていることを意味します。 マッピングされたモジュールは太字フォントで、マッピングされていないモジュールは通常のフォン トで表示されます。マッピングされたマップモジュールが含まれているマップモジュールも太字で示 されます。 7.6.1.�入力にマッピングされたモジュールの検索 入力マップモジュールにマッピングされた出力マップモジュールは、その入力マップモジュールを右 クリックして[References�to�Output�Elements]�(出力モジュールの参照)メニューアイテムを選択す ればすぐに見つかります。目的の出力マップモジュールに基づいてメニューアイテムを選択すると、 その出力マップモジュールが選択されます。 7.6.2.�出力にマッピングされたモジュールの検索 出力マップモジュールをクリックすると、出力マップモジュールの作成に使用される式が[Output Value�expression]�(出力値式)パネルに表示されます。この式に含まれているマップモジュール参照 を見つけるには、マップモジュール参照式を右クリックし、[Show�Map�Element]�(出力モジュール の参照)メニューアイテムを選択すればすぐに見つかります。これによって、関連する入力マップモ ジュールや出力マップモジュールが選択されます。 7.7.�データタイプのチェックと互換性 構造モジュールはそれぞれデータタイプに関連付けられています。データタイプはまた、関数の戻り 値と関数の引数にも関連付けられています。 式を作成する時、エディターはデータタイプに互換性があるかどうかチェックします。あるタイプか ら他のタイプへ自動的に変換できる場合は、データタイプに互換性があります。たとえば、文字列の 49 マップのテスト 表記は日付の表記(Dateのタイプ)に変換できるので、文字列データタイプは日付データと互換性があ ります。ただし、数値データタイプは日付に変換できないため、互換性はありません。 子の式のデータタイプ(構造モジュールやマップモジュールであることが多い)がその親の式のデータ タイプと一致しない場合(および両者が互換性を持つデータタイプであると仮定した場合)、コードが マップとともに自動生成され、子のタイプが親のタイプに変換されます。 ドキュメント内のデータがタイプ変換には有効でない形式の場合は、ランタイムエラーが発生しま す。たとえば、文字列を日付にマッピングしているとします。文字列が有効な日付形式でない場合は ランタイムエラーが表示されます。 7.8.�マップのテスト マップで作業する時は、テストドキュメントを使ってそのマップの全体または一部を実行し、結果を 表示できます。テストドキュメントは検査することも可能です。テストドキュメントを選択するに は、[Test]�(テスト)�>�[Select�Test�Document]�(テストドキュメントの選択)メニューアイテムを選 択します。次のオプションを使ってテストドキュメントを表示し、最後に選択したテストドキュメン トでマップを実行することができます。テストドキュメントが選択されなかった場合は1つ選択する よう求められます。 7.8.1.�テストドキュメントの表示 テストドキュメント全体を表示するには、[Test]�(テスト)�>�[Show�Test�Document]�(テストドキュ メントの表示)メニューアイテムを使用します。 テストドキュメントを部分的に表示するには、表示させる入力マプモジュールを右クリックし (これがコンテナマップモジュールの場合はそのすべての子が表示されます)、[Show�Test�Input element]�(テスト入力モジュールの表示)メニューアイテムを選択します。 7.8.2.�マップの実行と出力の表示 マップ全体を実行したり、出力ドキュメント全体を表示するには、[Test]�(テスト)�>�[Test�Run]�(テ ストの実行)メニューアイテムを使用します。 マップを部分的にのみ実行し、出力ドキュメントの該当部分を表示するには、表示させる出力マップ モジュールを右クリックし(これがコンテナマップモジュールの場合はそのすべての子が表示されま す)、[Test�Run�element]�(テストを実行したモジュール)メニューアイテムを選択します。 7.9.�他のマップからの継承 1つのマップにキャプチャされた2つのドキュメントタイプ間には、標準変換セットが存在する場合 があります。小規模なカスタマイズが必要な場合は、1つのマップにもう1つのマップを参照させると 便利です。標準のマップが親のマップとなり、小規模なカスタマイズが行われるマップが子のマップ となります。このカスタマイズは子のマップでのみ行われ、以降の親のマップへの変更は自動的に子 のマップに反映されます。これによって、マップの完全コピーを作成し、そのコピーに変更を行うと いったメンテナンスの手間を省くことができます。 50 親のマップの追加 また、ドキュメントの一部を変換する小型のマップがあり、それを使ってより大型のマップを構築す る場合も便利です。そういった小型のマップ(たとえばEDIセグメントに対応するもの)は、より大型 のさまざまなマップの作成に使用できます。 マップが他のマップから継承する場合、これによって2つのマップ間に親/子の関係が形成されます。 親のマップと子のマップは両方とも同じ構造に関連付けられます。この場合、両方のマップに同じ マップモジュールが必要です。マップモジュールに関連付けられている値の式が子のマップにない場 合は、親のマップに関連付けられている値の式(存在する場合)が使用されます。ただし、子のマップ に値の式がある場合は、親のマップの出力値式は使用されません。 また、親のマップが子のマップの一部の構造とのみ関連付けられている可能性もあります。この場合 は、親のマップを関連付ける時に、親のマップをアンカーする子のマップでモジュールを指定しま す。 7.9.1.�親のマップの追加 親のマップの追加方法は2つあり、状況に応じてより便利なほうを選択します。 1. [Offer�map�inheritance/extract�on�drag/drop�in�map�editor]�(マップエディターのドラッグド ロップでマップの継承/抽出を提供)環境設定が有効になっていることを確認してください(デフォ ルトは有効になっていません)。そしてマップエディターで、モジュールを入力から出力にドラッ グします。この場合、入力と出力は継承元のマップに対応する構造から継承されます。同じ入力/ 出力構造を持つ(または構造継承によって互換性がある)マップを利用できる場合は、マップの継承 のために提供されます。 2. [Repository]�(リポジトリ)ナビゲーターで子のマップを展開し、親のマップを子のマップの下に 表示される[Inherits�From]�(継承元)ツリーノードにドラッグするか、コピーしてその場所に貼 り付けます。この操作を行う時は、入力マップモジュールまたは出力マップモジュール用に親の マップをアンカーするよう求められます。 7.9.2.�継承されたマップモジュール 他のマップモジュールから継承するマップモジュールは、黒い矢のアイコンのデコレーター(構造 エディターのモジュールの継承を示すデコレーターと同じもの)で示されます。継承されたマップ モジュールにアクセスする場合は、子のマップモジュールを右クリックし、[Go�to�Inherited�Map Element]�(継承されたマップモジュールに移動)を選択します。 子のマップのマップモジュールが親のマップから変更された場合は、金色の三角のアイコンのデコ レーター(構造エディターで対応する理由に使われるデコレーターと同じもの)で示されます。子の マップモジュールでの変更を削除する場合は、そのモジュールを選択し、右クリックして[Revert�to Inherited�Map�Element]�(継承されたマップモジュールに戻す)を選択します。選択されたモジュー ル、またはすべての子孫マップモジュールを元に戻すことができます。 7.10.�マップの検証 エディターは、大量のマップや構造がある環境で動作するよう設計されています。そのため、そのよ うな構造やマップが相互に独立して変更される可能性があります。そのような変更の場合は、丁寧に 処理して報告することが大切です。 51 構造比較 マップを開き、そのプロパティにアクセスし、ランタイムAPIを使って実行する時、このマップは自 動的に検証されます。この検証に関連するエラーや警告があれば表示されます。 編集中のマップは、その構造や親のマップの1つが編集中で変更が行われた場合は自動的に再検証さ れます。 マップの検証では、現在のマップモジュールをその入力構造と出力構造、および親のマップと比較し ます。 7.10.1.�構造比較 マップから独立して構造が変更された場合は、構造に追加されてマップには存在しないモジュール、 そしてマップにある構造から削除されたモジュールを考慮することが必要です。検証プロセスはこの どちらの場合にも対応します。 構造でモジュールの順序が変更された場合、マップモジュールは通知なしで自動的に調整されます。 構造モジュールが追加された場合はマップに追加され、警告が一度表示されます。 構造モジュールが削除された場合、関連付けられているマップモジュールは無効( アイコンで表 示)とマークされます。無効なマップモジュールは、検索機能を使って見つけることができます。無 効なマップモジュールはマップの実行時に無視されます。そのようなモジュールは明示的に削除でき る唯一のマップモジュールです。そのようなモジュールを自動的に削除しない目的は、関連付けられ ている式の情報を保存することです。マップモジュールに維持するものがないことが確認できたら、 そのモジュールを削除する必要があります。モジュールが削除されるまで、マップを開いたり実行す るたびに無効なマップモジュールに関する警告が表示されます。 マップモジュールにある[Delete�Invalid�Map�Elements]�(無効なマップモジュールの削除)メニュー アイテムを使って、選択されたマップモジュールかその下で、無効なマップモジュールを削除できま す。これは、無効なマップモジュールについて保存すべきマッピング情報がない場合に便利なことが あります。 構造内のモジュールが移動された場合は、追加または削除されたモジュールとしてマップに表示され ます。マップの出力側では、マップ式をコピーして貼り付け、新しい場所にその式をすばやく移動さ せることができます。マップの入力側では、式参照を移動させ、移動した入力モジュールの新しい場 所を参照するようマップ出力を直ちに調整できます。 7.10.2.�マップ比較 これは、親のマップからの最新の式で子のマップを更新するために使用されます。完全に自動で行わ れるので、関与は必要ありません。 7.11.�結果の実行または検証 マップを実行または検証すると、エラーや警告が発生することがあります。このようなエラーや警告 は、エディターの[Problems]�(問題)ビューに(IDEで製品を使用している場合はMapperの問題に)表 示されます。製品のランタイム部分で、すべてのエラーや警告とともにExecutionStatusオブジェ クトが作成されます。このオブジェクトは、マップの実行や検証のメソッドの呼び出し側に返され ます。ExecutionStatus.exportToXml()メソッドを使って、このオブジェクトをXMLに変換できま す。 52 ランタイムのマッピングに関する考慮事項 7.12.�ランタイムのマッピングに関する考慮事項 Data�Mapperが存在しない場合にランタイムで実行されるマップは、構造に関連付けられたデータが すべてマップのメタデータに格納されているため、その構造に基づいて検証されることは通常ありま せん。これは、大型の構造に基づいて検証を行うとマップの起動初期に大量のメモリが消費されるこ とが理由です。 ただし、この最適化が正しく行われるよう、構造によるマップの検証結果は完全にクリーンである こと(つまりエラーや警告がないこと)が必要です。Data�Mapperで最後に行ったマップの検証でエ ラーや警告が発生した場合は、すべての問題が正しく報告され、ランタイムによるマップの実行結 果がData�Mapperのものと同一になるよう、構造に基づいてランタイムで検証が必要である旨がその マップにマークされます。 7.13.�ストリーミングの実行 ストリーミングの実行は、無数のデータを処理するために使用されます。ストリーミングを実行しな い場合、変換が実行される前に変換の入力全体がメモリに格納されます。そのため、送信されるデー タの量が利用可能なメモリに収まる量に制限されます。 ストリーミングは、入力データの群を集積し、各群を個別に変換を実行することによって実行さ れます。この理由から、変換で指定できるものには制限があります。SimpleLoop関数で[Stream Input]�(ストリーム入力)プロパティをチェックし、変換がストリームするよう指定します。この操作 が行われると、ループは自動的に、各群に割り当てられたメモリに応じて群へパーティショニング されます。各群は個別に処理されます。そのため、集計関数を使用してループの全出現数にまたがら せることは許可されていません。変換を複数回実行しても状態が維持されるため、GetVariable関数 やSetVariable関数を使った集計は可能です。 7.14.�マップ実行のプロパティ マップを起動するいずれかのメカニズムを使ってマップを実行する時は、プロパティ(値)を指定でき ます。そのようなプロパティは、GetMapProperty関数を使い、マップ実行中に読み取ることがで きます。 マップの実行でESB�(Muleなど)を使用している場合、そのマップの実行をトリガーするメッセージの プロパティは、マップ実行プロパティとして自動的に含められます。 次のプロパティは自動的に指定されます。oaklandswで始まるプロパティは予約されています。 • oaklandsw.source.url�-�マップを実行するソースドキュメントのURLです。 • oaklandsw.result.url�-�マップを実行する結果ドキュメントのURLです。 7.15.�特別な目的のマップ 次のマップは特別な目的のために提供されています。 • XSLTレポート�-�入力構造によって指定されたデータをXSLTレポートを使って処理し、結果を出 力文字列に発行します。このレポートの典型的な用途としては、マップの実行から実行ステータ 53 何も出力されない場合のトラブルシューティング スを処理し、HTMLに形式化することがあります。これは、入力構造が/Builtin/Structures/Status/ ExecutionStatusで、/Builtin/Reports/ExectionStatus/ExecStatusToHelpというレポートを持つXSLT レポートマップを使って実行できます。マップの出力構造には、XSLT実行の文字列結果である フィールドが1つだけ含まれます。これはマップの出力として処理できます。または、I/O関数を 使ってメッセージを送信したりすることもできます。 7.16.�何も出力されない場合のトラブルシュー ティング マップを実行した時に、何も出力されない場合があります。この問題は主に入力ドキュメントがXML である時に発生し、そのマップの入力ドキュメントの全体、または一部が認識されていないという原 因がほとんどです。次の点を確認してください。 • 構造エディターの使用�-�構造エディターに切り替えて、問題のサンプルドキュメントを現在のド キュメントにします。強調表示されているドキュメントが選択されたモジュールに対応しているこ とを確認します。また、モジュールを選択して[Show�Sample]�(サンプルの表示)を右クリックし、 そのモジュールが予定どおりに表示されるかどうか確認することもできます。モジュールが表示さ れない場合は次のアイテムを参照してください。 • 構造は一致するか?�-�XMLでは、モジュールの階層が、構造で定義されている階層と完全に一致す ることが求められます。構造定義にあるルートモジュールから始め、サンプルドキュメント内のモ ジュールが完全に一致するかどうか確認してください。 • 大文字と小文字の区別�-�XMLでは大文字と小文字が区別されるため、モジュールとマップエディ ターの文字表記が一致するかどうか確認してください。 • ネームスペースの問題�-�ドキュメントでXMLネームスペースが使用されている場合は、ネームス ペースのトラブルシューティングの説明に従ってください。 • 正しい可視性、モジュールタイプ、グループタイプ�-�各モジュールのこれらのプロパティが期待さ れているものであること、そして実際のドキュメントに一致することを確認してください。 • 発行式�-�FpMLバージョン4.xなどのように、構造の種類によってはルートが非表示の選択である場 合があります。選択のどのメンバーにもTRUE�(真)を返す発行式が存在しない場合、取得できる出 力はありません。 54 8.サンプルインスタンスドキュメント 概要 8.1.�概要 studioはサンプルドキュメントの万全サポートを備えているので、構造の理解や定義、およびマッ プの作成に役立てることができます。通常、サンプルドキュメントは構造に関連付けられており、 必要に応じて出力の表示などを要求されます。デフォルトでは、構造が含まれているプロジェクト の[Sample�Data]�(サンプルデータ)フォルダーに永続的に格納されています。構造の名前が入ってい るこの構造のパスは、サンプルドキュメントが含まれている[Sample�Data]�(サンプルデータ)フォル ダーの下にあるパスです。たとえばStructure1という名前の構造がある場合、その構造のサンプル ドキュメントは、構造が含まれているプロジェクトの[Sample�Data/Structure1]フォルダーにありま す。 また、構造のプロパティでその構造へ明示的に関連付けられているサンプルドキュメントにパスを設 定することもできます。これは、多くの構造でサンプルドキュメントのプールを共有する場合に便利 です。 BuiltinやExamplesなど読み取り専用の構造では、サンプルドキュメントを構造に関連付けることはで きません。このような場合、サンプルドキュメントはマップに関連付けられています。 サンプルドキュメントは、構造エディターとマップエディターの両方で、さまざまな方法によって表 示できます。部分的表示(構造モジュールやマップモジュールに関連付けられている部分)、および全 体表示が可能です。また、マップの実行結果としてサンプルドキュメントを作成することもできま す。 構造に関連付けられているマップをテストする時は、その構造に関連付けられているサンプルドキュ メントがそのマップで利用できます。 サンプルオブジェクトはJava用の場合もあります。Javaサンプルデータオブジェクトでは、これら の作成方法を説明しています。 8.2.�サンプルドキュメントと構造 構造モジュールを表示または編集する時にサンプルインスタンスドキュメントが使用されるよう、こ のドキュメントを構造にインポートして編集することができます。デフォルトでは、サンプルドキュ メントは[Sample�Data]�(サンプルデータ)フォルダーのワークスペースに(サブフォルダーとしての構 造へのパスとともに)格納されるので、一度インポートされた元のサンプルドキュメントファイルを 参照する必要はありません。また、サンプルドキュメントのこのデフォルトの場所は、構造のプロパ ティでパスを指定すれば上書きできます。構造のインスタンスドキュメントは、マップのテスト時に も使用できます。 構造に関連付けるサンプルドキュメントの数に上限はありません。構造を編集または表示している 時は、1つのサンプルドキュメントだけが現在のドキュメントとなります。[Show]�(表示)�>�[Select Sample�Document]�(サンプルドキュメントの選択)メニューアイテムを使って、現在のドキュメ ントを設定したり、新しいドキュメントをインポートすることができます。ただし、[documents] (ドキュメント)ヘッダーの下に表示される最初のサンプルドキュメントが、構造の表示または編 集時に開かれるデフォルトドキュメントとなります。このサンプルドキュメントは、構造エディ ターの[Documents]�(ドキュメント)タブに表示されます。[Automatically�load�the�default�sample document]�(デフォルトサンプルドキュメントを自動的にロード)環境設定を選択している場合、ク リックされたモジュールはサンプルドキュメントで強調表示されます。 56 サンプルドキュメントとマップ 8.3.�サンプルドキュメントとマップ サンプルドキュメントは、マップに関連付けることもできます。サンプルドキュメントをワークス ペースに追加する場合、構造は読み取り専用であるため、このドキュメントは自動的にマップに関連 付けられます。構造の場合と同じく、マップに関連付けられたドキュメントは[Sample�Data]�(サンプ ルデータ)フォルダー内のワークスペースに格納されます。 57 サンプルドキュメントのバインディング ドキュメントがマップに関連付けられている場合は、マップのプロパティに示されます。構造の場合 と同じく、マップの各側(入力と出力)のサンプルドキュメントが含まれているフォルダーを選択しま す。デフォルトのフォルダーを選択しない場合は、Sample�Data/<map�name>_<input|output>とされ ます。 8.4.�サンプルドキュメントのバインディング 構造やマップは複数のポイントを持つことが可能です。そのポイントで構造やマップをサンプルド キュメントに関連付けることができます。最もシンプルなケースは、I/O関数を通じて利用できる複 数ドキュメントのサポートを使用しない構造です。この構造では、ルートモジュールにあるドキュメ ントバインディングは1つだけです。マップの場合、ドキュメントは入力目的用(入力側で構造に関連 付けられている)、およびサンプル出力用(出力側の構造に関連付けられている)にバインディングされ ます。 ドキュメントバインディングは、構造またはマップの下にある[Repository]�(リポジトリ)ナビゲー ターに表示されます。それぞれのドキュメントバインディングには、バインディングされる構造や マップのモジュール、バインディングのタイプ(入力とサンプル出力のいずれか)、該当のインスタン スにバインディングされている現在のサンプルドキュメントが表示されます。後者は、ドキュメン トバインディングのエントリーを右クリックし、[Properties]�(プロパティ)を選択すると表示されま す。 8.5.�サンプルドキュメントの表示 サンプルドキュメントのコンテンツは、[Sample]�(サンプル)�>�[Select�Sample�Document]�(サンプ ルドキュメントの選択)メニューアイテムを使って表示できます。構造には、インスタンスドキュメ ントのコンテンツを記述するモジュールのコレクションが含まれています。構造は継承メカニズムを 通じて接続されます。このメカニズムにより、モジュールは別の構造から定義を継承できます。構造 の定義とそのモジュールは抽象的であり、構造がインスタンスドキュメントで表記される特定の方法 に依存していません。 58 複数のサンプルドキュメント 8.6.�複数のサンプルドキュメント 複数のドキュメントサポートでI/O関数を使用する時は、サンプルドキュメントもサポートされま す。サンプルドキュメントは、I/O式を持つモジュールによって継承される構造に関連付けられてい ます。そのため、サンプルドキュメントの表示や、マップのテストを行う時に、それぞれのI/O式で サンプルドキュメントを提供できます。 8.7.�Javaサンプルデータオブジェクト Javaオブジェクトのインスタンスからサンプルドキュメントを作成し、Javaオブジェクトを入力と して使用するマップをテストできます。XStreamプロジェクトのデフォルトのシリアル化で定義され ているように、これらのドキュメントはXMLとして格納されます。ただし正確に言うと、ほぼデフォ ルトのシリアル化です。唯一の違いは、オブジェクト間参照の場合にオブジェクトグラフが保存され るようID_REFERENCESオプションを指定する点だけです。 XMLにシリアル化されたこのようなJavaオブジェクトは、次の方法で生成できます。 • 出力として�-�目的のJavaオブジェクトに書き込むマップがある場合は、これが最も簡単な方法で す。デザイナーにあるマップをサンプル出力ドキュメントでテスト実行するだけです。この操作 は、[Test�Run]�(テストの実行)ボタンのメニュー、またはメインメニューバーにある[Test�menu] (テストメニュー)で[Test�Run�to�Sample�Document]�(サンプルドキュメントでテストの実行)を 選択して行います。これによってXMLドキュメントが生成され、マップの出力構造に関連付けられ ます。 • ランタイムAPIの使用�-�[Runtime�API]�(ランタイムAPI)でRuntimeEngine.addSampleData()メ ソッドを使用し、指定されたJavaオブジェクトのインスタンスを目的の構造のサンプルドキュ 59 Javaサンプルデータオブジェクト メントに追加します。com.mycompany.accting.AddJavaObjectSampleというサンプルプ ロジェクトのJavaフォルダーに、サンプルプログラムがあります。このサンプルプログラム を変更してオブジェクトを作成し、Data�Mapper内でJavaアプリケーションとして実行できま す。実行するには、ランタイムAPIが含まれているJARファイルをクラスパスに提供する必要が あります。また、サンプルドキュメントを取得するプロジェクトが含まれているEclipseワーク スペースのファイルパスかURL�(ファイルスキームを使用)に、Javaシステムのプロパティであ るODT_DEV_WORKSPACEを指定することも必要です(これは起動設定で実行できます)。 • スタンドアロンコードの使用�-�次の抜粋コードはサンプルドキュメントの生成に使用できます。こ れは一部のXStreamクラスに依存していますが、それ以外の依存関係はありません。 HierarchicalStreamWriter javaWriter; StringWriter sw = new StringWriter(); javaWriter = new PrettyPrintWriter(sw); XStream xsShow = new XStream(null); xsShow.setMode(XStream.ID_REFERENCES); xsShow.marshal(yourObject, javaWriter); javaWriter.flush(); 文字列をファイルに配置し、そのファイルをワークスペースのJava構造に対応するSample Dataフォルダーにコピーします。 60 9.式 式は、値、ループ、オプションのモジュールを発行する条件(強制的に表示)、およびNull値を発行す る条件を指定するために使用されます。これらの式は、基本的に実行ロジックを定義します。 上記のタイプの式パネルは、構造モジュールとマップモジュールに関連付けられています。各式パネ ルがツリーを形成し、ツリーでは各式が従属式に関して評価されます。式パネルの各ツリーノードが 1つの式です。 式はツリーノードとして示される場合(この章の後述の例に示すように)もあれば、入力して直接操作 できるテキスト形式で示される場合もあります。テキスト形式は、エクスポート形式の一部として、 および印刷用としても使用されます。 環境設定を使用して、いつでも式のテキスト表示またはツリー表示のいずれかを選択できます。 式の基本 9.1.�式の基本 式はパワフルながらもシンプルです。どの式も1つの値を返し、その値は親の式で使用されます。式 パネルのルートにある式の値は、パネルの目的に基づいて使用される最終値です。たとえば、値の式 パネルにあるルート式の値が出力マップモジュールの値になります。 例9.1�単純な式の例 Transaction-856/Segment-ISA/Element-I01 入力マップモジュール参照�-�入力マップモジュールの値を提供します。 この例にある式パネルの値の場合、ルート式は入力パネルのElement-I01を参照しているマップモ ジュールの参照式です。これは、入力マップモジュールを出力マップモジュールにドラッグした場合 に得られる式ツリーです。 例9.2�より複雑な式の例 Concat Person/LastName Constant ", " Person/FirstName 連結関数�-�すべての引数を連結します。この場合は、ラストネーム、定数コンマ、ファースト ネームという3つの引数があります。 入力マップモジュール参照�-�入力マップモジュールの値を提供します。 定数式�-�定数値を与えます。この場合はコンマとそれに続くスペースです。 この例では、ルートの式は3つの引数を持つ連結関数です。最初と3番目の引数は入力モジュールを参 照しています。2番目の引数はコンマを含んでいる定数式です。この式の結果はSmith,�Johnのように なります。 9.2.�式ツリー 式ツリーにはそれぞれ、マップや構造モジュールに目的が関連付けられています。使用される式ツ リーは次のとおりです。 1. Value�(値)�-�モジュールの値を定義します。式ツリーのルートの結果は、マップにある出力モ ジュールの値です。値の式が構造モジュール用に指定されている場合、該当するマップモジュー ルにデフォルト値としてコピーされます。構造がマップで出力構造として使用されている場合 は、値の式によって出力のデフォルト値が決定します。構造が入力構造で使用される時、メタ データを含めるためにJavaなどの表記リーダーによって、構造モジュール値がデフォルト値とし て使用されます。入力値の式はマップで変更されるものではなく、該当する構造モジュールから の値の式を反映するための存在に過ぎません。 2. Loop�(ループ)�-�出力マップモジュールの場合は、モジュールのループ方法を定義します。この式ツ リーのルートはループ関数であることが必要です。 3. Validate�(検証)�-�任意の検証論理をモジュールに関連付けることができます。この式の結果 がFALSE�(偽)であれば、検証エラーが報告されます。 4. Emit�(発行)�-�モジュールがオプション、または選択のメンバーである場合、そのモジュールが発 行される(強制的に表示される)条件を定義します。出現数が0回と1回の間であるモジュールはオ プションとなります。この式の結果がTRUE�(真)の場合、または式が指定されていない場合はモ ジュールが発行されます。それ以外の場合は発行されません。特別な条件に基づいてオプション 62 式ツリー のモジュールを発行する必要がある時に便利です。ただし、値が空であるオプションのモジュー ルは自動的に表示されなくなるので、大抵の場合は必要ありません。 これは選択の場合にも便利です。たとえば、XMLを使い、そこから拡張する他のタイプを持つXML スキーマタイプにマップする場合などです。この場合、xsi:type属性には、入力ドキュメントに表 示される実際のモジュールのタイプが含まれます。Emit�(発行)式はxsi:type値を参照できます。選 択のメンバーからのモジュールが出力のどこかにマップされると、入力からの発行式が自動的に 出力内の内包メンバーにコピーされます。これによって、入力のタイプに基づいて出力メンバー を選択できるようになります。Emit�(発行)式は、出力側にコピーし、(上の説明にあるように)入力 からの選択条件を出力に伝える目的でマップの入力側に自動生成されます。 Emit�(発行)式は、モジュールがマップされる時に、出力内包マップモジュールを該当する入力マッ プモジュールに関連付けるために自動生成されます。 5. IsPresent�(存在)�-�このモジュールが存在し、それによって入力プロセッサーでコンシュームされる と考えれられる条件を定義します。この条件が省略されていたりTRUE�(真)の場合、モジュールは コンシュームされます。条件が指定されたりFALSE�(偽)の場合、モジュールは無視されます。これ はフラット�(COBOLを含む)やEDIでのみ使用されます。これらは自己記述型ではないデータのスト リームを処理する必要があるため、リーダーは、処理するデータやスキップするデータを記述す る追加情報を必要とします。XML、Java、データベース表記は入力データに基づいて提供するモ ジュールを決定できるため、通常、これらの表記についてはIsPresent式は必要ありません。この 式ツリーで指定できるものには、次の制限があります。 • 集計関数は使用されません。 • モジュールを参照する時は、ループの現在の反復内に存在する値となります。 • 参照されているどの構造モジュールも、モジュールツリーのIsPresent式に含まれているモ ジュールで(またはその前に)出現することが必要です。 これらの制限に違反すると、マップや構造の実行時にエラーが発生します。 6. NULL�-�この出力マップモジュールをNULL値として発行する時期を決定します。この式ツリーの結 果がTRUE�(真)の場合、モジュールはNULL値として発行されます。NULL式ツリーは、コンテナで あるモジュール(None以外のモジュールグループのタイプ)のためだけに存在します。非コンテナ モジュールは、Constant関数を使用するだけでNULL値を取得できます。 NULL値は、サポートしている表記(Java、XML、データベース)用に入力から出力に渡されます。 入力モジュールと出力モジュールの両方にNULLモジュールのプロパティセットがあり、入力モ ジュールの値がNULLの場合、マップ時は出力モジュールの値がNULLとなります。 モジュールがマップされる時に、出力内包マップモジュールが該当する入力マップモジュールに 関連付けられるよう、NULL式が自動生成されます。 7. IO/Database�(I/Oデータベース)�-�入力や出力の操作(たとえば読み取りや書き込みを他のドキュ メントインスタンスにリダイレクトする)を提供します。さらに、モジュールがデータベー スと対話する方法をコントロールするデータベース関数も提供します。DatabaseJoin関数 とDatabaseSelect関数はここで使用されます。 8. Util�(ユーティリティ)�-�出力マップモジュールに関連付けられているユーティリティ式です。現 在、サポートされている関数はSetEnclosingElement関数のみです。 式ツリーは構造モジュールとマップモジュールのために存在します。構造モジュールで定義された式 ツリーは、該当するマップモジュールにコピーされます。これによって、たとえば構造でループ式を 事前定義し、その構造を使用するどのマップでも、事前定義されたループ式が使用されるようにする ことができます。マップはまた、特定のモジュールに自分のループ式ツリーを提供することで自由に 上書きできます。 入力モジュールが出力マップモジュールにマップされると、ループ発行の式ツリーが入力マップモ ジュールから出力マップモジュールにコピーされます。これは、入力に関連付けられているこれらの カテゴリーで使用されるデフォルトの式を作成するという考えを継続するものです。 63 式のタイプ 9.3.�式のタイプ 上の例のCopy関数のように、大半の式は関数で構成されています。式のタイプは次のとおりです。 1. Functions�(関数)�-�関数が式ツリーや出力マップモジュールにドラッグされた時に作成されます。 2. Map�Element�Reference�(マップモジュール参照)�-�マップモジュールが関数式の引数である時に作 成されます。入力マップモジュールへの参照と出力マップモジュールの参照のいずれかがありま す。 3. Function�Argument�(関数引数)�-�仮引数を関数に表記します。これによって、引数の値である子の 式の結果が返されます。 関数は固定引数と可変引数のいずれかを持つことができます。関数に可変引数がある場合、式ツリー に関数をドロップする時は関数引数式はありません。可変引数の関数式は子の式をいくつでも持つこ とができます。 固定引数の関数では、引数ごとに関数引数式を持つ関数式となります。これらの引数はそれぞれ、子 の式を1つだけ必要とします。子の式が指定されていない場合はマップを実行できず、問題を説明す るエラーが表示されます。 9.4.�条件式 IfThen関数とIfThenElse関数は、式の条件実行で使用されます。そのような式は他のタイプの式と 同じ方法で評価されます。 IfThen関数には次の2つの引数があります。 1. Condition�-�ブール値を返す式を必要とします。ブール式の結果がTRUE(真)であれば、IfThen関数 式の結果はThen式です。結果がFALSE(偽)であれば、IfThen関数では結果が返されません。 2. Then�-�条件がTRUE(真)であれば値をIfThen関数に提供する式です。 IfThenElse関数は、3番目のElse引数をIfThen関数に追加します。条件引数がFALSE�(偽)と評価され た場合、Else引数の式の値が返されます。 9.5.�複雑な式の例 このセクションでは、複数の式を併用できる例を示します。 例9.3�複雑な式の例 Concat Add First Value Transaction-856/Segment-ISA/Element-I01 Second Value Const "2" Const "-" LoopIndex Looping Output Element Transaction-856/LoopHL ルート式はConcat関数式で、これは可変引数の関数式です。 Concat関数式の最初の引数はAdd関数式です。2番目の引数はLoopIndex関数式です。どちら の引数も固定引数の関数なので、持つことができる子の式はそれぞれ1つだけです。 固定引数の関数(AddとLoopIndex)の関数引数式です。持つことができる子の式はそれぞれ1つ だけです。 64 テキスト式の表記 値が2�(式プロパティで指定)のConstant関数式です。これはAdd関数式の2番目の引数の値で す。 値が-�(式プロパティで指定)のConstant関数式です。これはConcat関数式の2番目の引数の値で す。 LoopIndex関数式です。これによって、特定の出力マップモジュールのLoop式のインデックス 値が返されます。これはConcat関数式の3番目の引数の値です。 出力マップモジュール参照、そしてLoopIndex関数式の唯一の引数です。 この例では、入力マップモジュールへの参照に2を加え、その後に-とLoop-HL出力マップモジュール のループインデックスが続く値を構築するとします。Element-I01の値が5で、現在がLoop-HLの10番 目の反復である場合、式ツリーの値は7-10です。 式ツリーを読む方法は上から下です。ルートがConcatを実行し、直下のレベル で、Add、Constant、LoopIndexの結果値をコピーしていることがわかります。その後、それぞれ の式を観察し、各自の値を取得するためにどのように構築されているかに注目します。 9.6.�テキスト式の表記 [Preferences]�(環境設定)でテキスト式の表記が選択されると、それぞれの式パネルに、式であるテキ スト文字列が含まれるようになります。 式のテキストフォームの定義は次のとおりです。 Function = FunctionName [ '[' Properties ']' ] '(' Argument ',' Argument ',' ... ')' Properties = ( [ PropertyName '=' ] '"' PropertyValue '"' ',' ... )Argument = Function | ElementRef | ElementRef = ( 'in$:' | 'out$:' | 'elem$:' | 'inv $:' ) ElementName PropertyName = Name of the property of the function.PropertyValue = Value of the property of the function.ElementName = Path name of map/structure element.Example: /Transaction-856/BEG/BEG01 FunctionName = Name of built-in function, or full path name of user function. メモ: 1. 関数のプロパティが1つである場合は、PropertyNameを省略できます。 2. モジュールの参照の場合、in参照は入力マップモジュールを、out参照は出力マップモジュー ルを、elem参照は構造モジュール(構造に関連付けられた検証式で使用)をそれぞれ参照しま す。invは、存在しないマップモジュール(マップ定義後の構造変更によって発生することがある) への参照を表します。 3. 関数が組み込み関数を参照する場合、その関数の名前のみを指定します。たとえば、Concatがあ ります。ただし、ユーザー関数が指定されている場合は、関数のディレクトリ名も含めて完全修 飾名を指定する必要があります。例:�/userDir/userFunc1 例: • Concat(in$:/a/b)�-�マップの入力で、マップモジュールである/a/bとともにCopy関数を呼び出しま す。 • Equal(in$:/a/b,Constant["14"])�-�2つの引数とともにEqual関数を呼び出します。最初はマップの入力 での/a/bモジュールで、2番目は14の(値)プロパティを伴うConstant関数です。これによって、入 力マップモジュールであるa/bの値が14に等しい場合はTRUE�(真)が返されます。 65 10.ループ式 ループは、モジュールを出力モジュールにマッピングするときに、複数回出現する可能性のある(つ まり、[Occurs�Maximum]�(最大出現回数)が「1」より大きい数値に設定されている)モジュールを処理 する方法を指定します。これには、一部の入力、フィルタリング、およびソートに対応するループが 含まれます。ループメカニズムは、たとえばモジュールのカウントと合計に使用される集計も処理し ます。 ループの仕様はループ式パネルに示され、モジュールを入力から出力にマッピングすると、自動的に 生成されます。大半の場合、自動的に生成されたループで十分です。ただし、フィルタリングやソー トが必要な場合、または出力ループを別の方法でループさせる場合は、ループ式を変更する必要があ ります。 集計をサポートするために、専用のループ式を含む特別な集計関数が提供されており、それらを使用 してどこからでもモジュールを処理できます。ただし、デフォルトループは、それらが指定されてい る出力ループに含まれています。 ループ関数では、さまざまなループ方法と、フィルタリングおよびソートの手段が提供されていま す。 ループされていないかのようにモジュールをマッピングできるように、マップモジュールをループか ら展開する際に役立つことがあります。別の場合では、複数のループにループを分割すると役立ちま す。 クックブックのルーピング 10.1.�クックブックのルーピング このセクションでは、ルーピングに共通する問題とそのマップ方法について説明します。下に説明さ れている大半のケースでは、Examplesプロジェクトに例があります。 10.1.1.�一致ループ 一致ループ(例:�Maps/Looping/LoopSimpleに表示)は、最も簡単なループの場合です。この場合、 (ルーピングの同じレベルで)出力と入力にそれぞれ1つずつループがあり、各入力モジュールで出力 モジュールが必要となります。入力値を出力値にマップする時は、一致ルーピングが正確かつ自動的 に計算されることがほとんどです。ここでは、入力のPurchaseOrder�モジュールが出力のNoticeルー プに一致しています。 出力内のループを入力内のマップと一致させるには、ルーピング出力マップモジュールの[Loop] (ループ)式タブでSimpleLoop関数を使用します。Input�Map�Element�(入力マップモジュール)引数 は、ルーピング入力マップモジュールを必要とします。ほとんどのルーピング関数では、必要であれ ばフィルターとソートを追加できます。 10.1.2.�ネストされたループ ネストされたループ(例:�Maps/Looping/LoopSkipLevelに表示)は、出力内のループが入力内のループ を参照しています。この入力内のループは、同じく入力内の祖先ループの内側にネストされていま す。この場合、出力のNoticeループは入力のDeliveryループとしてループするとします。Deliveryルー プは入力のPOループ内でネストされています。 一致するループの場合、ネストされたループも、値を入力から出力にマッピングすると自動的に計算 されます。 68 非ルーピングからルーピングへのマッピング ネストされたループをマッピングするには、ルーピング出力マップモジュールの[Loop�expression] (ループ式)タブで、SimpleLoop関数を使用します。Input�Map�Element�(入力マップモジュール)引 数は最上位のルーピング入力マップモジュールを選択し、ネストされた各ルーピング入力マップモ ジュールのためにNestedContext関数を使用し、ネストされたルーピング入力マップモジュールの ために他のSimpleLoop�を使用します。ほとんどのルーピング関数では、必要であればフィルター とソートを追加できます。 10.1.3.�非ルーピングからルーピングへのマッピング この場合、マッピングするための値が入力に1つしかないため、出力のループがループすることは望 ましくありません。ここでは2つの選択肢があります。 69 ルーピングから非ルーピングへのマッピング • ループの展開�-�ループの展開は、出力ルーピングマップモジュールを右クリックし、[Unroll Loop]�(ループの展開)を選択して実行できます。これによってループしない個別モジュールが作成 され、その後は普通にマッピングできます。このループは元のマップモジュールに存在し続けてお り、マッピングする必要はありません。 • FixedLoop�の使用�-�このループ関数は固定の回数だけループを発行します(デフォルトで一度の み)。この関数を出力モジュールのループ式として使い、モジュールを普通にマッピングしてくだ さい。 10.1.4.�ルーピングから非ルーピングへのマッピング 多くの値の合計や連結をマッピングすることがほとんどであるこの場合、集計関数(例:�Maps/ Looping/LoopAggregateに表示�-�/Notices/Notice/TotalsItems�モジュールを参照)が使用されます。集 計関数のその他の用途としては、入力ループから特定のインスタンスを選択することがあります。 集計関数を使用するには、出力マップモジュールの値の式にマッピングします。次の場合は、出力内 のTotalItemsが入力内のすべてのアイテム(PartNumberで表記)のカウントとなるようにします。 次の例では、集計関数の各引数についてループ式が求められていることがわかります。このループ式 によって、引数のコンテキストが提供されます。この場合は、ItemループにあるPartNumberの値を すべて取得する単純ループを実行しています。このループのコンテキストは暗黙的に内包する出力 マップモジュールのループコンテキストで、この場合は[Notice]です。たとえば全POの全アイテム をカウントしたい場合、EnclosingContext関数を使い、コンテキストを変更してさらに上レベルの ループを使用するようにできます。 70 2つのループを1つにマージ 10.1.5.�2つのループを1つにマージ 例:�Maps/Looping/LoopMergeTwoLoopsには、出力の唯一のループにマージするループが入力側に2 つあることがわかります。そのためには、最初のループ(モジュールが多いほうのループ)をStreet�(番 地)、City�(都市)、State�(州)で普通にマッピングします。 そして2番目のループ(Detail)にあるモジュールについては、集計関数を使い、次の例のように入力 ループから目的のインデックスの値を引き出す必要があります。 71 再帰的ループ 10.1.6.�再帰的ループ 例:�Maps/Looping/LoopRecursiveFromCustomでは、RecursiveLoop関数のユーザーが任意の深度に 再帰するコンポーネントを簡単にマッピングしていることがわかります。 72 自動ループ計算 例:�Maps/Looping/LoopRecursiveToFlatでは、再帰的構造を(最初の3レベルのみを使用して)区切り記 号付き(CSV)構造にフラット化していることがわかります。入力構造は、出力CSV構造にある一行に のみ対応します。各行は単にコンポーネントのセットであるため、出力構造には各CSV行についての ループとコンポーネントについてのループが存在します。 10.2.�自動ループ計算 入力マップモジュールが出力マップモジュールにマップされ、その入力マップモジュールがルーピン グマップモジュール内に含まれたり、ルーピングマップモジュールそのものになったりする場合、明 示的に指定されていない限り、最も近い内包ルーピング出力マップモジュール用のループ式が自動的 に構築されます。この出力ループ式はSimpleLoop関数を使い、入力マップモジュールを通じてルー プします。 これによって次の内包ルーピング入力マップモジュールに上がり、次の出力内包ルーピングマップモ ジュールと一致させます。この処理は出力ルーピングマップモジュール用のループ式が見つかるまで 繰り返されます。デフォルトでは、どの入力ドキュメントにも出力ドキュメントが1つずつ存在する と仮定されるため、ルート出力マップモジュール用にループ式が作成されます。 入力側の内包ループが出力側よりも多い場合、生成されるループ式には、ネストされたループとして 余分なループが含まれます。入力側の内包ループが出力側よりも少ない場合は、出力ループ式の生成 は入力が枯渇した時に停止します。残った内包ルーピング出力モジュールはループ式がないままとな り、マップの実行時に警告が表示されます。この警告で、出力用のループ式(FixedLoop関数など)を 指定するよう求められます。 10.3.�フィルタリングとソート どのループ関数も、ブール式を1つ必要とするFilter�(フィルター)引数を持っています。この引数は、 ループのフィルタリング基準を提供するために使用できます。インデックス値によるループのインス タンスを1つ抽出する場合は、SingleIndex関数を使用します。 ソートはSort�(ソート)引数を使って実行されます。このSort�(ソート)引数では、AscendingSort関数 とDescendingSort関数の変数値が必要となります。これらの関数はそれぞれ、実際のソートキーで ある値を必要とします。 73 ルーピングコンテキスト:エンクロージングとネスト 10.4.�ルーピングコンテキスト:エンクロージン グとネスト ループ式は特定の出力マップモジュールのループ方法を指定します。これは入力マップモジュールへ の参照とも言えます。そのため、出力マップモジュールのいずれかの従属(依存)モジュールで使用さ れている入力マップモジュールは、ルーピング入力マップモジュールからの値を参照します。 ルーピングコンテキストの指定は、NestedContext�関数やEnclosingContext関数を、ループ関数 のContexts�(コンテキスト)引数とともに使用して行います。 10.4.1.�ネストされたコンテキスト 出力のルーピング入力マップモジュールを参照する時は、入力にあるすべての祖先ルーピングマップ モジュールに出力マップモジュールのループ式が関連付けられている必要があります。大半の場合、 これは出力ルーピングが入力ルーピングに対応する場合に自然に発生します。ただし、この対応に ギャップが生じる場合もあります。このギャップは、NestedContext関数を使い、出力モジュール によって参照されなかったルーピング入力モジュールの処理手順を入力すれば埋めることができま す。 ネストされたループ式を作成するには、次の操作を行います。 • 外部ループ式の作成�-�目的のループ関数をループ式ツリーにドラッグした後、目的の入力マップモ ジュールを入力マップモジュール引数にドラッグします。 • ネストされたコンテキストの作成�-�NestedContext関数をループ式のContexts引数にドラッグしま す。 • ネストされたループの指定�-�目的の内部ループ関数をNestedContext式にドロップした後、目的 の内部入力マップモジュールを入力マップモジュール引数にドラッグします。 10.4.2.�内包コンテキスト 内包コンテキストは、集計関数("Ag"で始まる関数)に関連付けられたループ式によって使用されま す。通常、このタイプのルーピングは、現在の出力マップモジュールのルーピング内で行われます。 たとえば請求書用の出力にループがあり、すべての行アイテムの合計を計算する時は、AgSum関数 を使用し、その行アイテムでループを指定します。これによって、内包の請求書からこれらの行アイ テムだけを取得するものと自動的に仮定されます。ただし、他の請求書からの行アイテムも含める場 合は、内包コンテキストを使用してその請求書よりも高いループ(この場合はルートの出力モジュー ル)を指定すると、AgSum関数によって全請求書のすべての行アイテムを見ることができます。 10.5.�集計ルーピング 非集計関数は、内包式と出力マップモジュールのルーピングコンテキストで実行されます。入力から すべての値の合計を取得する時など、場合によっては、関連しないループからデータにアクセスしな ければならないことがあります。その場合は集計関数を使用します。集計関数ではそれぞれ、引数ご とにループ式を指定し、新しいループコンテキストを作成することができます。 74 ループの互換性 集計関数のループ式は常に、関数の各引数の最初の引数となります。LoopAggregateの例で は、TotalNoticesの値の式は出力にあるNotices/Notice/Numモジュール数をカウントします。 マップモジュールの下のループ式がNotices/Notice/Numを参照しています。ループ式はここに配 置されます。この場合、ループ式は出力モジュールであるNotices/Notice/Numのループ式への参照 (LoopReference)となります。 10.6.�ループの互換性 ループの互換性を示す例をいくつか見ていきましょう。次のような入力構造があるとします。 Document Element1 LoopA (0:-1) ElementA1 ElementA2 LoopB (0:-1) ElementB1 この構造ではLoopAとLoopBがループし、その他のモジュールはループしていません。この構造を入 力および出力として持つマップを作成するとします。入力ElementA1から出力ElementA1にマッピン グしながら、入力ElementB1から出力ElementA2にマッピングするとどうなるでしょうか?最初に入 力ElementA1を出力ElementA1にマッピングすると、エディターは出力LoopAが入力LoopAを使って ループすると判断するため、これは意味がありません。そしてElementB1を�ElementA2にマッピング すると、エディターはElementB1のどの値を選択すべきかわからなくなります。これは、互換性がな いループを持つ2つのマップモジュールのインスタンスです。このようなマッピングを作成しようと すると、エディターでエラーが表示され、マッピングできなくなります。 他の場合を考えてみましょう。まず、入力Element1を出力ElementA1にマッピングするとしま す。Element1に最も近い内包ルーピングモジュールがDocumentであるため、エディターは出 力LoopAがDocumentモジュールとともにループすると判断します。次に、入力ElementA2を出 力ElementA2にマッピングします。目的は、出力LoopAが入力LoopAを使ってループするようにする ことですが、現在、出力LoopAは入力Documentとともにループしています。この場合、エディター はこの事実を指摘し、出力LoopAが入力LoopAとしてループできるように変更するかどうかを尋ねま す。 入力マップモジュールAがルーピングマップモジュールAIに含まれている時、および入力マップモ ジュールBがルーピングマップモジュールBIに含まれている時はループの互換性があります。そし てBIがAIの同じモジュールか祖先マップモジュールであれば、マップモジュールAはマップモジュー ルBとループの互換性があります。それ例外の場合はループの互換性はありません。 75 再帰的モジュールのマッピングまたはルーピング 10.7.�再帰的モジュールのマッピングまたはルー ピング XMLでは、再帰的モジュール(子が祖先と同じ子であるモジュール)を定義できます。再帰的モジュー ルは次のいずれかの方法でマッピングできます。 • Recursive�Expansion�(再帰的展開)�-�マップエディターでは、それぞれの再帰的モジュール に[Expand�Recursive�Elements]�(再帰的モジュールの展開)というメニューアイテムがありま す。このアイテムをクリックすると、特定モジュールの子の展開が1レベル追加されます。これら のモジュールは普通にマッピングでき、目的のレベル数まで展開できます。展開が不要に成った場 合は、[Remove�Recursive�Child�Elements]�(再帰的子モジュールの削除)メニューアイテムを使 用します。 再帰的モジュールのマッピングが必要な固定深度がある場合は、この操作を行います。 • Recursive�Mapping�(再帰的マッピング)�-�この場合、入力の一部の再帰的モジュールにマッピン グする必要があるモジュールが出力に存在します。再帰的モジュールを動的に対応させたい場合 は、RecursiveLoop関数を使います。これによって、該当する入力で再帰的レベルが発見され、 出力で動的な再帰的レベルが作成されます。 • Flat�to�Recursive�Mapping�(再帰的マッピングにフラット)�-�この場合、再帰的出力にマッ ピングする非再帰的入力が存在します。入力にはレベル数があり(入力の状態に基づいた 計算も可能)、これによって出力の再帰的モジュールの深度が定義されます。そのために は、FlatToHierarchyLoop関数を使います。 10.8.�ループ関数 ループ関数はすべて、関数ビューのLoop�(ループ)ヘッダーに表示されます。ループ式ツリーのルート 式になれるのは、このようなルート関数のみです。 FixedLoop FlatToHierarchyLoop IndexRangeLoop LoopReference SimpleLoop RecursiveLoop 76 11.検証 検証 11.1.�検証 検証は、ドキュメントが一定の制限を必ずパスするようランタイムで行われます。この章では、制限 の作成方法と、検証報告の動作について説明します。 11.1.1.�検証制限 検証制限は構造の定義で暗黙的に指定されます。これには、データタイプ、出現数、モジュールの長 さなどが含まれます。また、各マップモジュールの[Validate]�(検証)式タブで、式に関する構造定義 やマップ定義でも検証制限を指定できます。 検証制限は構造やマップで指定できます。構造で制限を指定すると、その構造がマップされるときに 制限がマップにコピーされます。後で検証制限が構造で更新されてもマップには影響しません。 11.1.1.1.�検証式 検証式は、マップモジュールと構造モジュールの両方に関連付けられます。この式は[Validate]�(検 証)式タブで指定できます。このような式にはブール値が必要です。値がTRUE�(真)の場合は有効なモ ジュールであると判断されます。FALSE�(偽)の場合は検証レポートが生成されます。検証レポート は、モジュールの検証が失敗したことと失敗の場所を表示するだけの汎用的なものです。 78 検証エラーのグループ化 詳細を提供する場合はCondValidateReport関数を使います。この関数は検証式のルートに配置でき ます。 11.1.1.2.�検証レポート関数 ValidateReport関数は無条件で検証の失敗を示し、あらゆるタイプの式で使用できま す。CondValidateReportも同じですが、FALSE�(偽)の場合に検証の失敗を示す条件を指定できる点 が異なります。 どちらの関数でも、重大度、エラー番号、エラーメッセージのテキストを提供することができます。 さらに、レポートのコンテキストを与えるために必要なその他のデータ(マップモジュールの値など) を提供することもできます。これらはすべて検証レポート用に収集されます。 11.1.2.�検証エラーのグループ化 たとえばOrderモジュールのバッチを処理しており、検証エラーを持つOrderモジュールを拒否 し、エラーがないモジュール、または検証警告だけのモジュールを処理するとします。そのために は、ValidateGroup関数を使い、Ordersレベルで検証報告のグループ化を行う必要があります。グ ループ化するモジュール(この場合はOrdersモジュール)の[Validate]�(検証)式タブで、この関数を指 定します。従属するモジュールのどの検証レポートによっても、この検証グループがトリガーされ、 (トリガーされるレポートに関連付けられている)グループに関する検証レポートも作成されます。 IsValid関数を使って、ループで検証グループをフィルターとして使用できます。 11.1.3.�検証報告 検証報告は、検証制限が満たされない時に発生する動作を処理します。 マップが実行されるたびに実行ステータスオブジェクトが作成されます。このオブジェクトには、 マップモジュールに関連付けられているあらゆる種類の例外情報が含まれています。これには検証エ ラーも含まれます。実行ステータスオブジェクトはExecutionStatusというビルトイン構造で定義さ れ、自動的にステータスマップに提供されて、実行マップの完了後に処理エラーに対応します。実行 ステータスマップは、各マップについて、またはランタイム全体について指定できます。 79 12.入力/出力(複数入力/出力ドキュメント) この章では、マップとの間でファイルの読み取りや書き込みを行う方法、および、マップ内で複数の データソース(入力と出力の両方)や複数のメッセージを処理する方法について説明します。 一般 12.1.�一般 1つのソース(通常はファイルまたはメッセージのペイロード)から読み取り、1つの結果に書き込む マップは通常、I/O式を持つ必要が全くありません。このようなマップは、マップ実行時に与えられ るドキュメントから読み取りや書き込みを行うだけです。 I/O式の使用は、単一のマップで複数の入力または出力のドキュメントやオブジェクトを処理する必 要があったり、ドキュメントのURLをマップに組み込んだり、マップ内でさまざまな表記(たとえば XMLに埋め込まれたフラットファイル)を処理する場合のみです。 I/O式を使って、次の操作を実行できます。 • 1つのマップにある複数のデータソース(ファイル、オブジェクト、メッセージ)に対して読み取り および書き込みを行う • マップ内で読み取りまたは書き込みを行うデータの場所を指定する(ファイルの名前やURLの指定 など) • 1つのマップ内で他の表記に切り替える マップは1つの入力構造がと1つの出力構造だけで構成されていますが、これらの構造には構造継承メ カニズムを使って他の構造を組み込むこともできます。デフォルト(I/O式の明示的使用がない場合)で は、マップが実行されると、ソースデータと出力結果が指定されます。たとえばマップをテスト実行 する時にソースドキュメントを指定すると、結果がウィンドウやテスト出力ドキュメントに表示され ます。 I/O式は構造から継承されるモジュールでのみ実行できるため、各ドキュメントのインスタンスは(他 の複数の構造から継承できる)1つの構造に対応します。 I/O式は、定義されるモジュールについてのみ処理されます。モジュールが終了した後は、処理に よって、最も近い内包祖先モジュールのI/O式へと戻されます。これはつまり、単一の外部ドキュメ ントインスタンスでさまざまな従属ドキュメントインスタンスを処理し、従属するインスタンスの間 で外部ドキュメントのインスタンスを引き続き処理できるという意味です。 I/O式を使うと、複数のソースを持つ(つまり複数のファイルから読み取る)ことができたり、マップの 実行で複数の結果を生成することができます。I/O式を指定する場合は、Read関数またはWrite関数 (ReadURLなど)をI/O式パネルにドラッグします。入力マップモジュールでI/O式を指定する場合、そ のマップモジュールとその子はすべて、指定されたRead関数を使って読み取られます。出力マップ モジュールでI/O式を選択する場合、そのマップモジュールとその子はすべて、指定されたWrite関数 を使って書き込まれます。 マップの入力側または出力側でI/O式を指定する場合、そのマップに関連付けられているI/Oはすべて その式を通じて行われます。I/O式で囲まれないモジュールに対しては、読み取りも書き込みも行わ れません。 12.1.1.�デフォルトI/O�(I/O式なし) マップの入力側または出力側でI/O式が指定されていない場合は、ReadMapInput関数また はWriteMapOutput関数がルートでI/O式として指定されたように処理されます。ランタイムで指定 される単一のドキュメントが読み取られ、単一のドキュメントが書き込まれます。 12.1.2.�URL式の使用 複数のドキュメントを処理する場合は、ReadUrl関数またはWriteUrl関数を使用します。プロパ ティ、または関数の引数としてURLを提供する必要があります。必要であれば、これによってランタ イムでURLを計算することもできます。 82 複数のソースオブジェクトや結果オブジェクトの使用 12.1.3.�複数のソースオブジェクトや結果オブジェクトの 使用 複数のソースオブジェクトや結果オブジェクトを処理する場合は、ReadUrl関数また はWriteUrl関数を使用します。この場合、URLを指定する必要はありません。ソースオブ ジェクトと結果オブジェクトは、それぞれMapExecutionContext.addInputSource()メソッド とMapExecutionContext.addOutputResult()メソッドを使って割り当てることができます。これに よって、たとえば1回のマップ実行で複数のJavaオブジェクトに対する読み取りや書き込みが行われ ます。 12.1.4.�複数の表記の埋め込み 同じドキュメントインスタンス内では別の表記に切り替えることが可能なので、埋め込みデータを処 理できます。関係がない複数のXMLドキュメントを単一のドキュメントインスタンスで処理する時な どに特に便利です。XMLドキュメントにはさまざまなネームスペースのセットが含まれることがあり ますが、フラット表記を持つ構造で内包すれば単独のドキュメントのように処理することができま す。 表記を埋め込むメカニズムは、切り替え後となる表記の構造から継承するモジュール でReadNestedを使用します。その方法については、最初の例を参照してください。 ReadNested関数を使用する時は、その関数を内包する他のI/O関数を使用する必要がありま す。ReadNestedを超えて処理する特別なI/Oが存在しないマップでは、ReadMapInputを使用してくださ い。 ReadNested関数もネストできます。最初の例では外部表記がフラットで、これには2つのXML構造 が含まれています。そのいずれかに、XMLに埋め込まれているCSVの小さな部分を処理するフラット ファイルに戻す他の構造が含まれています。2番目の例では、この外部表記は分離されています。 12.2.�I/O関数 I/O関数は、[Input�Output](入力�出力)の下の関数タブに表示されます。I/O関数には、入力マップモ ジュールでのみ使用できるRead関数と、出力マップモジュールでのみ使用できるWrite関数の2つが あります。 12.2.1.�Read関数 ReadURL�-�URLでドキュメントインスタンスを読み取ります。 ReadNested�-�継承された構造の表記を使ってモジュールを処理します。 ReadMapInput�-�指定されたドキュメントをマップの入力として読み取ります。 ReadMessage�-�ESBメッセージからドキュメントインスタンスを読み取ります 12.2.2.�Write関数 WriteURL�-�URLでドキュメントインスタンスを書き込みます。 83 Write関数 WriteMapOutput�-�マップの出力で指定されたドキュメントを書き込みます。 WriteMessage�-�マップの出力で指定されたドキュメントを書き込みます。 84 13.XMLのマッピング 概要 13.1.�概要 XML表記によって、構造とともにXMLドキュメントを処理できます。構造はすべてXML表記で正しく 動作します。構造用に定義されている表記がない場合はXMLとされます。 13.2.�プロパティ XML表記のプロパティ: • Generate�xsi�namespace?�(xsiネームスペースの生成)�-�http://www.w3.org/2001/XMLSchemainstanceネームスペースに関連付けられているxsiネームスペースプレフィックスの標準定義を発行 するために使用されます。これは、XMLドキュメントでNULL値サポートを使用しており、xsiネー ムスペースを定義するだけのためにネームスペースコンテナを持ちたくない場合に便利です。 表記に関連付けられている共通プロパティも参照してください。 13.3.�XSDの問題 XMLサポートには、XMLスキーマ(XSD)、WSDL、DTD用のインポート機能も含まれます。XSDスキー マはそのスキーマを明確に反映する構造に変換され、他の構造の処理方法と一貫しているので、通常 はXMLドキュメントをマップするためにXSDの詳しい動作方法を理解する必要はありません。 ここで、一部のXSD機能と、そのXSD機能がインポート時にどのように構造に変換されるかを説明し ます。 86 XSDの問題 • Abstract�Types�(抽象的タイプ)�-�抽象的タイプは、生成された不可視の内包選択モジュールによっ て表記されます。選択のメンバーは、特定の抽象的タイプの下にあるすべての具体的タイプで す。また、選択のブランチごとにxsi:type属性と発行式が生成されます。xsi:typeモジュールの値を チェックしてください。 選択のメンバーは通常、出力にある選択の一部のメンバーにマッピングされます。それによって 発行式が入力からコピーされるため、特別な操作は必要ありません。より複雑なマッピングの場合 は、選択のメンバーを選ぶ条件を提供するための発行式に生成された論理と同じものを使用できま す。 出力の場合は値の式が生成され、正しく入力されたことが確認できるようxsi:typeモジュールのデ フォルト値を提供します。 87 14.JSONのマッピング 概要 14.1.�概要 JSON表記は、Javascript�Object�Notation�(JSON)ドキュメントとともに使用されます。JSON定義は JSONサンプルドキュメントに基づいてインポートでき、JSONドキュメントは入力または出力とし てマッピングできます。 JSON表記に関連付けられているJSON特定のプロパティはありません。表記に関連付けられてい る共通プロパティを参照してください。 14.2.�JSON定義のインポートおよび作成 JSONにはXMLスキーマなどのスキーマを指定する標準手段がないため、JSON構造を自動的に作成す る通常の方法は、サンプルJSONドキュメントをインポートすることです。このサンプルドキュメン トには、いずれかのJSONインスタンスのドキュメントに出現しうるオブジェクトや非オブジェクト の値がすべて含まれていることが必要です。含まれていない場合は、必要となるモジュールが構造に 存在しなくなるため、JSONインスタンスのドキュメントを処理する時にランタイムエラーが発生す る可能性があります。 このセクションの表記に従うことで、JSON構造を手動で作成したり、インポートしたJSON構造を 同じく手動で変更し、不足しているモジュールを追加することができます。 14.2.1.�数値タイプ JSONは数値の範囲を決定するメカニズムを指定しないため、JSONをインポートする時に実際の値 を確認してこの数値を派生させる必要があります。インポーターは、e�(指数)の存在や不在に基づい て、10進数データタイプ、または倍精度データタイプを使用します。数値のサイズが整数より大きく なる(または64ビット長に)可能性があるため、整数よりも10進数が想定されます。さらに、この数値 には実際のデータで断片的コンポーネントが含まれることがあります。よって、10進数はこのような 状況では常に動作します。倍精度は(指数値を持つ)浮動小数点数と見なされます。 14.2.2.�配列 JSON内の配列は、構造ではループとして表示されます。その他のモジュールはJSONオブジェクト に基づいた階層で、望むとおりに定義されます。JSON内の配列では、数値によって次の状況が発生 します。 • 同じタイプの非オブジェクト�-�配列のどのメンバーも非オブジェクト(10進数、倍精度、文字 列、ブール値のいずれか)で、すべて同じタイプ(たとえば10進数と倍精度の混合ではない)です。こ の場合、配列のモジュールはループし、検出された非オブジェクトタイプに基づいたデータタイプ を持ち、コンテナとはなりません。 • すべてのオブジェクト�-�配列のどのメンバーもオブジェクトです。これは、ネストしている他のオ ブジェクトのように処理されます。 • オブジェクトと非オブジェクトの混合�-�配列の一部のメンバーがオブジェクトで、他のメンバーが 非オブジェクトである"混合"の場合です。また、すべてのメンバーが非オブジェクトとなることが ありますが、たとえば10進数と文字列の混合のように、そのタイプは同じではありません。 これはループとしては扱われず、配列で指定されているようにオブジェクトと非オブジェクトの 特定コレクションとして扱われ、それぞれ個別のモジュールが作成されます。通常のメンバーモ 90 日付 ジュールが各オブジェクトで作成されます。非オブジェクトの場合、存在する非オブジェクトの 各タイプで_anonDecimal�(10進数を文字列、倍精度、ブール値に置換)という名前を持つ匿名メン バーが作成されます。この"混合"配列にある各モジュール名には、その配列におけるモジュールの 位置が末尾に付きます。 14.2.3.�日付 JSONは、非オブジェクト値が日付タイプであると指定する手段を提供しません。ただし、日付が含 まれているモジュールについて、構造エディター内のデータタイプを日付、日付/時間、時間に変更 すればこの操作を簡単に実行できます。また、標準のISO�8601日付形式でない場合は、適用できる日 付形式を選択することもできます。この操作を行うと、日付は正しく認識され、マップされる時に自 動的に変換されます。 14.3.�JSONのマッピング JSONはXMLとほとんど違いがないため、マップでの使用について特筆することはありません。唯一 の留意点は、Rootモジュールをトップレベルに置く必要があることです。その理由は、JSONの場 合、トップレベルのオブジェクトには複数のフィールドを含めることができ、構造定義ではルートモ ジュールが1つ必要となるためです。このルートモジュールがJSONデータに実際に表示されることは ありません。 14.3.1.�動的な名前のサポート 場合によっては、JSON名が変換の一部のデータに該当する動的値となることがあります。ただし、 構造定義では静的なモジュール名が必要です。これを処理するには、該当モジュールのjsonName属 性を使用します。このjsonName属性が入力で指定されている場合は、その位置にあるモジュールに 別の名前が付けられ、モジュールの値が正しく読み取られることが示されます。出力では、この属性 を使用して、JSON内のモジュールの名前を、必要とされる値に設定します。 91 15.Javaオブジェクトのマッピング 概要 15.1.�概要 Java表記では、Javaオブジェクトのインスタンスを変換できます。Javaクラスは、フォルダーから 個別に、またはJarファイルからインポートできます。Javaインポーターによって各クラスから構造 定義が作成されます。実行時は、Javaオブジェクトを変換のソースとして提供したり、結果として 承認することができます。 15.2.�Javaクラスの考慮事項 Javaインポーターは、Javaクラスに関連付けられているフィールドやBeanがすべて含まれる構造を 生成します。各クラスについて構造が1つ作成されますが、構造どうしは継承メカニズムによって接 続し、Javaポインターを使った場合のように相互参照します。次の図は、Invoicesクラスを外部オブ ジェクトとして持つ(例からの)構造を表しています。このクラスは、Invoice、LineItem、Contactな ど、他のクラスを参照しています。 94 Javaクラスの考慮事項 Javaクラス用に構造定義を作成する時は、Javaフィールド用、またはJava�Beanプロパティ用に構造 モジュールが作成されるよう選択できます。これはJavaクラスをインポートする時に指定され、再 インポートしない限り変更できません。 • リストとマップには各自のタイプを含める必要があります。java.util.Listやjava.util.Mapの みのフィールドやBeanプロパティは動作しません。java.util.List<ClassName>また はjava.util.Map<ClassName,�ClassName>を使用してください。 フィールドやBeanがサブクラスを持つクラスを参照している場合は、選択のグループタイプを持 ち、それぞれ既知のサブクラスをメンバーとして持つモジュールを生成できます。この方法であれ 95 Javaオブジェクトのマッピング ば、目的の具体的サブクラスを簡単にマップできます。各メンバーにはシンプルなクラス名(つまり パッケージを持たない名前)が使用されます。 15.3.�Javaオブジェクトのマッピング Javaオブジェクトのグラフ(ポインターで連結させたオブジェクト群)では、同じオブジェクトに 複数のポインターを持たせることができます。たとえば、Personオブジェクトのリストととも にDepartmentオブジェクトを持たせ、Personオブジェクトのリストにも含まれているマネージャー のプロパティを個別に持たせることもできます。マネージャーのPersonオブジェクトは2か所に表示 されますが、単一のオブジェクトです。Javaオブジェクトを入力として使用すると、このJavaオブ ジェクトは複数回表示される場合でも、構造定義にすべて完全に展開されます。これによって、どの 場所のオブジェクトからでもマップできるようになります。オブジェクトのフィールドのルートのid 属性を使って、オブジェクトの一意のアイデンティティを識別できます。 再帰的ループを作成する場合に限り、オブジェクトは展開されません。上の例で、Personオブジェ クトにDepartmentオブジェクトへのポインターが含まれているとします。この場合、Departmentオ ブジェクトはPersonオブジェクトの内包オブジェクトなので展開されません。このオブジェクト は、フィールドがない状態で、内包のDepartmentオブジェクトを参照するid属性とともに表示されま す。 15.4.�オブジェクトのタイプの処理 Talend�Data�Mapperを使って直接操作し、モジュールにマッピングできるのは、数値、日付、文字列 などのプリミティブ値だけです。これは、他のソースとの間で行われるデータのマッピングを一律サ ポートする必要があることが理由です。そのため、Javaオブジェクトのコンテンツ全体を直接マッ ピングする概念がありません。つまり、Java間でマッピングしており、入力にObject�(オブジェクト) タイプのプロパティを持つ場合、オブジェクトは直接操作することができないため、そのプロパティ に含まれているオブジェクトを出力にある一部のプロパティにマッピングすることはできません。 通常はObject�(オブジェクト)よりも特定的なプロパティをタイプとして定義した後、出力に発行する タイプを決定するメカニズムを処理するサブクラスを使って目的の値をそのタイプに入力するため、 このマッピング操作が問題になることはまずありません。 プロパティやフィールドでObject�(オブジェクト)タイプが発生した場合は、構造に生成されたモ ジュールにSequence�(シーケンス)のグループタイプが作成され、モジュールがマッピングされるの を防ぎます。 15.5.�Javaクラスのインポート Java表記では、Javaオブジェクトのインスタンスを変換できます。Javaクラスは、フォルダーか ら、またはJarファイルに個別にインポートできます。Javaインポーターによって、各クラスから構 造定義が作成されます。Javaオブジェクトは、実行時に変換のソースとして提供するか、結果とし て承認できます。 • 選択対象�-�ここで、インポートするクラスを選択します。各クラスが読み取られ、このクラスが 依存するその他のクラスも処理されます(参照クラスやスーパークラスなど)。これらの依存クラス はクラスパス(プロパティの下部で指定される)を使用して解決されます。当初、クラスパスはイン ポート用に選択したクラスパスと同一に設定されますが、この設定では対応できない場合ありま す。たとえば、インポートするクラスを含むフォルダーを選択する場合、特定のフォルダーのみ必 96 Javaサンプルデータオブジェクト 要になりますが、クラスを正しく解決するためにクラスパスが内包されるトップレベルフォルダー (binフォルダーなど)をポイントする必要があります。 Javaサブクラスの生成(下記を参照、デフォルトで選択されている)を使用してサブクラスごとに選択肢を生 成する場合、ここで希望するすべてのサブクラスを選択する必要があります。 選択エリアの横にあるボタンを使って、リソース(フォルダーまたはファイル)、外部Jarまたはク ラスファイル、あるいは外部フォルダーのいずれかを追加します。フォルダー(リソースまたは外 部)が指定される場合、それに含まれるJARまたはクラスファイルあるいは子孫のフォルダーも検証 されます(下記に示す[Include�Subpackages]�(サブパッケージを含む)を無効にする場合、子孫の フォルダーは検証されません)。 通常、目的のプロジェクトのbinフォルダーを指定して、すべてのクラスをプロジェクトに取り込 みます。ただし、パッケージレベルを指定して、そのパッケージ内のクラスのみ取り込むことがで きます。 クラスパスに他のものを指定しない場合、ここで指定したものが自動的にクラスパスになります (下記を参照)。 デフォルトでは、選択したフォルダー内のすべてのクラスがインポートされます。選択したレベ ルにある、サブパッケージを含まないクラスのみインポートする場合は、クラスを含むフォルダー (複数可)を選択し、[Include�Subpackages]�(サブパッケージを含む)オプションをオフにします。 • Create�Elements�From�(モジュールの作成元)�-�クラスのフィールドから構造モジュールを作成する フィールドを指定するか、JavaBeanプロパティから構造モジュールを作成するBeanプロパティを 指定できます。 • Include�Deprecated�Fieds/Properties�(非推奨フィールド/プロパティを含む)�-�デフォルトで非推奨 フィールド/プロパティが含まれます。これらが含まれないようにするには、このオプションを無 効にします。 • Create�Structures�As�(構造の作成方法)�-�オブジェクトのクラスに基づいて構造に名前を付ける方法 を制御できます。オブジェクトが少数の場合、単純なクラス名を使用すると管理がより容易になる ことに注意してください。 • Handling�References�to�Classes�Having�Subclasses�(サブクラスを持つクラスの参照の処理)�-�下記 「Javaサブクラスの生成」を参照してください。 • Classpath�(クラスパス)�-�インポート用のクラスを処理する場合、クラスパスに対して依存クラス を解決する必要があります。これは、JARファイルまたはフォルダー(外部またはリソース)をクラ スパスに追加できる場所です。何も指定しない場合、選択したインポート対象のファイル/リソー ス/フォルダーがクラスパスになります。 表現に関連付けられている共通プロパティも参照してください。 15.6.�Javaサンプルデータオブジェクト テストに使用するJavaサンプルオブジェクトを作成する手順については、Javaサンプルデータオブ ジェクトを参照してください。 15.7.�Javaサブクラスの生成 通常Javaクラスでは、フィールドまたはプロパティは、1つ以上のサブクラスを持つクラス(おそらく 抽象)を参照します。このフィールド/プロパティをマッピングする場合、どの具体的クラスが入力に 指定されていたかを判別し、希望する具体的クラスを出力に指定できることが重要です。サブクラス 97 既知のJavaクラスのマッピング 処理は、インポートに認識される(インポートされるJarファイルまたはフォルダーに含まれる)すべ てのサブクラスに適用されることに注意する必要があります。指定されていないため、存在するがイ ンポートに認識されないサブクラスがある場合があります。 サブクラス化の処理には、次の2つの異なる方法があります。 1. すべてのサブクラスを順次発行する�-�これは、Javaサブクラスと組み合わされたマップの継承を 使用する場合に便利(かつ必要)です。このメカニズムを使って、親のマップ内のスーパークラスに モジュールをマップし、子の(継承された)マップ内のサブクラスにモジュールをマップし、マッ ピングしたサブクラスは正しく継承されます。この方法の短所は、出力用に発行するクラスの 定義を手動で行う割合が増えることです。出力クラスの定義は、スーパークラスに関連付けられ たclassモジュールの値でChoice関数を変更することによって実行されます。これは自動的には実 行されません。これはデフォルトオプションです。 このオプション使用すると、(各Javaクラス用に生成されるすべての構造に加えて)_Compositeで 終わる名前を持つ継承ツリーのルート用の構造が生成されます。このコンポジット構造には、 フィールド/プロパティの継承ツリー内に継承された構造がすべて含まれるので、継承されたマッ プ内の構造として使用できます。 2. 各サブクラスの選択肢を発行する�-�可能な各サブクラスは、サブクラス(およびすべてのスーパー クラス)に関連付けられたすべてのプロパティを持つ選択モジュールのメンバーとして発行されま す。これは、スーパークラスのプロパティが選択のメンバー間で複製されることを意味します。 マップの継承を使用しない場合、この方法で十分でしょう。また、出力サブクラスに何かをマッ プするときに、どのサブクラス(メンバー)を出力にするかを指定するための適切な発行式が自動的 に生成されるので、サブクラス化をより簡単に行えるでしょう。 次のオプションがサブクラスの生成用に提供されます。 • [Generate�a�sequence�of�elements�for�all�possible�subclasses�(Default)]�(すべての可能なサブクラ スにモジュールのシーケンスを生成する(デフォルト))�-�すべての可能な直接および子孫のサブクラ スに上記の最初の方法を実装します。 • [Generate�only�the�elements�for�the�specified�class]�(指定したサブクラスにのみモジュールを生成 する)�-�フィールド/プロパティによって指定されたクラスにのみ生成します。マッピングにサブク ラスを使用しない場合、このオプションを使用します。 • [Generate�a�choice�and�a�child�for�each�direct�and�descendent�subclass]�(直接および子孫のサブ クラスごとに選択肢および子を生成する)�-�フィールド/プロパティのクラスおよびすべての子孫の サブクラス間の選択肢を生成することにより、上述の2番目の方法を実装します。マッピングに子 孫のサブクラスを含めることができる場合、このオプションを使用します。 • [Generate�a�choice�and�a�child�for�each�direct�subclass]�(直接のサブクラスごとに選択肢および子 を生成する)�-�フィールド/プロパティのクラスおよびそのクラスの直接のサブクラスのみの間に選 択肢を生成することにより、上記の2番目の方法を実装します。マッピングに直接のサブクラスの み使用する場合、このオプションを使用します。 15.8.�既知のJavaクラスのマッピング このセクションでは、既知のJavaクラス(String(文字列)、Date(日付)など)とモジュールのデータ型と の間の対応について説明します。 String(文字列)およびプリミティブな数値型は、同じ名前を持つモジュールのデータ型に正確に対応 します。 java.util.Calendarクラスは、Date/Time�(日付/時間)であり、タイムゾーン情報を伝達します。この機 能をサポートする唯一の実装クラスはjava.util.GregorianCalendarです。java.util.DateクラスもDate/ Time�(日付/時間)です(ただし、タイムゾーン情報は含まれていません)。 98 制限事項 java.sql.Date、java.sql.Time、およびjava.sql.TimestampクラスはそれぞれDate(日付)、Time(時間)、 およびDate/Time(日付/時間)として示されます。 java.util.Listインターフェイスは、リストに指定されるタイプが何であれ、ループとして生成されま す。インターフェイスは、Javaオブジクトの発行時にjava.util.ArrayListによって実装されます。 java.util.Mapインターフェイスは、マップエントリのキーであるkeyモジュールと値を提供す るvalueモジュールの2つのモジュールを含むループとして生成されます。これらのモジュール は、Javaオブジェクトのサポート対象サブクラスになることができます。java.util.Mapインターフェ イスは、Javaオブジェクトの発行時にjava.util.HashMapによって実装されます。 15.9.�制限事項 次のJava構造体は現在サポートされていません。 • 多次元配列(MyType[][]�myField) • java.util.Listおよびjava.util.Map以外のコレクション 99 16.フラット(区切り記号付きまたは固定長)オブ ジェクトのマッピング 概要 16.1.�概要 フラット表記によって、構造とともに区切り記号付きまたは固定長フラットドキュメントを処理でき ます。区切り記号付き/固定長のサポートにより、あらゆる種類の文字またはバイナリデータが処理 されます。この表記が正しく動作するためには、フラットモジュールプロパティを設定する必要があ ります。最も一般的な区切り記号付き表現はCSV(カンマ区切り値)です。CSVサポート用モジュール を自動的に設定するCSVサンプルドキュメントをインポートできます。COBOLレコードも、フラット 表記を使用してサポートされます。 102 概要 フラット表記は、モジュールのプロパティおよびフラット表記のプロパティの両方から、次の設定を 使用してデータを解釈することによって動作します。次にフラットに使用するプロパティを示しま す。 • [Element�Initiator/Terminator]�(モジュールのイニシエーター/ターミネーター)�-�区切り記号付きに 使用する場合、モジュールの前/後のいずれかに表示する必要がある文字を指定します。[Include Element�Initiator/Terminator]�(モジュールのイニシエーター/ターミネーターを含む)の設定に応じ て、これらの文字がモジュールの一部とみなされます。これらの値はどのレベルのモジュールにも 指定できます。 • [Include�Element�Initiator/Terminator]�(モジュールのイニシエーター/ターミネーターを含む)�-�区切 り記号付きに使用する場合、イニシエーター/ターミネーター文字をモジュールの一部とみなす かどうかを指定します。この値がTRUE(真)の場合、文字は入力でモジュールの値に追加され、区 切り記号付きイニシエーター/ターミネーターはモジュールの値の一部ととみなされるため、出力 で書き込まれません。このオプションは、グループタイプがnoneのモジュール(非コンテナのモ ジュール)にとってのみ有意義です。 • [Element�Release�Character]�(モジュールリリース文字)�-�イニシエーター/ターミネーター文字の一 部とみなされない文字を指定できます。 • [Element�Occurrence]�(モジュールの出現)�-�モジュールの最小出現数および最大出現数回数を定義 します。 • [Element�Size]�(モジュールのサイズ)�-�モジュールの最大サイズおよび最小サイズ。サイズ0のモ ジュールは、イニシエーターまたはターミネーターのみを指定する場合に有用です。 • [Element�Group�Type]�(モジュールグループタイプ)�-�モジュールのシーケンスまたは選択としてモ ジュールを整理できます。シーケンスは、現在の各子モジュールが順に出現する必要があります。 一方、選択は1つのモジュールのみが出現できます。イニシエーターとターミネーターは、選択お よびシーケンス内に存在するモジュールを判定するのに役立ちます。 • [Element�Column]�(モジュールカラム)�-�データが特定のカラムから開始することを示すために使用 されます。カラムは、最後の改行文字の後の文字数です。 • [Element�Start�Offset]�(モジュール開始オフセット)�-�前のモジュールの最後とこのモジュールの最 初の間のギャップを示すために使用されます。固定長データに便利です。 • [Element�Quote�Handling]�(モジュール引用符の処理)�-�モジュール両側の引用符の自動処理を行いま す。引用符を必須とするか、オプションとするかを指定できます。これはCSVデータに便利です。 • [Consume�Expression]�(取得式)�-�モジュールが読み取られる場合の条件を指定するために使用しま す。たとえば、先行モジュールの値によって特定のモジュールが示されない場合があるため、モ ジュールに関連付けられたConsume�(取得)式でIfThen関数によってこれを指定できます。 次にフラット表記プロパティを示します。 • [Newline�Character]�(改行文字)�-�構造エディターでは、改行文字は抽象型改行である\nと指定さ れます。フラット表記プロパティでは、改行が表す実際の文字列シーケンスを指定できます。これ により、異なる実際の改行シーケンスに同じ構造仕様を使用できます。 • [Physical�Encoding]�(物理エンコーディング)�-�バイナリデータが完全にサポートされます。バイ ナリエンコーディングを使用する場合、数値はバイナリ形式を使って形式化されます。たとえば、 データ型Integer�(32)は4バイトとして形式化されます。データ形式を使って、モジュールごとにこ れをオーバーライドできます。たとえば、通常文字データとしてエンコードされているファイルに 少数のバイナリモジュールが含まれている場合、データ形式を使ってバイナリであるモジュールを 指定できます。 • [Number�Encoding]�(数字エンコーディング)�-�ビッグエンディアンまたはリトルエンディアンの いずれかがすべてバイナリ数値に指定されます。 103 コンマ区切り値(CSV) • [Is�Positional]�(固定長)�-�すべてのモジュールのサイズを最大サイズとして扱い(最小サイズを無 視)、すべて必須として扱います(最小出現回数1)。このオプションは、固定長の使用を指定するた めに便宜的に使用されます。 • [Pad�Repeating�Elements�to�Minimum�Occurs]�(繰り返しモジュールを最小出現回数まで埋め込 む)�-�実際の繰り返し回数が必要な最小回数を下回る場合、出現するモジュールに空の(適切な埋め 込み文字が埋め込まれた)モジュールを自動的に追加します。これは、COBOLインポーターによっ て作成される構造に対してデフォルトでTRUE(真)に設定されます。 • [Ignore�Ambiguous�Initiator/Terminators]�(不明確なイニシエーター/ターミネーターを無視)�オプションモジュールが表示される順序に従って処理されるものと仮定します。つまり、次に処理 対象と考えられるオプションモジュールに不明確な点がある場合、次のオプションモジュールとみ なします。その他のオプションモジュールは考慮されません。これは、CSVデータで最後のフィー ルドとその区切り記号をオプションにする場合、およびすべての区切り記号(コンマ)を指定せずに レコード(行)を早期に終了する場合に便利です。これは、CSVインスタンスから構造を生成する場 合にデフォルトです。 • [Character�Encoding]�(文字エンコーディング)�-�変換のための文字エンコーディング全体はフ ラット表記プロパティで指定されます。 表記に関連付けられている共通プロパティも参照してください。 16.2.�コンマ区切り値(CSV) CSVファイルは、その簡易性とスプレッドシートプログラムがこれらをエクスポートしたり、直接操 作したりできるため幅広く使用されています。Data�Mapperは、CSVファイルをインポートし、ファ イルに基づいて構造定義を作成できます。この場合、ファイルの最初の行が列の名前である必要があ り、標準的な設定です。 インポートされた構造はフラット表記を持ち、スキップする行数を1に指定します(ヘッダー情報をス キップします)。また、行の末尾に__osdtTerminatorモジュールを生成します。これは、改行の終了を 処理できるように柔軟である必要があります。一部のファイルでは最後の行が改行によって終了し、 その他のファイルではそうでない場合があります。オプションで__osdtTerminatorモジュールを生 成すると、これらの状況の両方が処理されます。__osdtTerminator名には特別な意味はありません。 ファイル内に指定された列の名前と競合しない名前がつけられているだけです。 また、インポートされた構造には、引用符の処理がオプションで設定されているので、モジュールを 引用符の有無に関わらず使用できます。 104 COBOLの考慮事項 16.3.�COBOLの考慮事項 次にCOBOLインポーターのプロパティを示します。 • [Newline�(is�each�record�separated�by�a�newline�character)](改行(各レコードが改行文字によって 区切られている場合))�-�各レコードがCOBOL定義で指定されていない改行によって区切られている 場合(比較的まれなケース)、これを指定します。つまり、データは、それぞれが改行文字によって 区切られた一連の固定長レコードの組み合わせです。このプロパティを使用する場合、生成された 構造内のRecordモジュール�には改行がモジュールターミネーターとして含まれます。必要に応じ て、これを別の文字のシーケンスに変更できます。 105 COBOLの考慮事項 • [Character�Encoding]�(文字エンコーディング)�-�処理対象のデータに文字エンコーディングを指定 します。IBM�COBOLでは、通常CP037またはIBM037などのEBCDICエンコーディングになります。 その他の環境では、より標準的なASCII�(UTF-8)エンコーディングになる可能性があります。詳細に ついては、「文字エンコーディング」を参照してください。 • [Copybook�format]�(コピーブック形式)�-�コピーブックのソースの形式を指定します。シーケンス 番号が存在しない場合、[Free�form]�(自由形式)オプションを使用してください。シーケンス番号が 存在する場合、列仕様を使って実際のソースが開始する場所を指定します(シーケンス番号と継続 文字の後)。標準カラム値はデフォルトです。 COBOLインポーターは、インポートされるコピーブックの各トップレベルのレコード定義に対して 構造を生成します。 次の表は、基本的なCOBOLデータアイテムがUSAGEおよびPICTURE句に基づいてどのようにデー タ型にマップされるかを示します。単純化するために、この表では次の略語を使用します。 • BINARY�-�COBOL�USAGE�BINARY、COMP、COMP-4、またはCOMP-5を持つアイテム。 • PACKED-DECIMAL�-�COBOL�USAGE�COMP-3またはPACKED-DECIMALを持つアイテム。 • ZONED-DECIMAL�-�PICTURE句が9、V、S、またはP記号のみを含むCOBOL�USAGE�DISPLAYを 持つアイテム。 � データ型 データ形式 BINARY、符号なし、totalDigits�<�5 符号なしShort�(16) BINARY、符号付き、totalDigits�<�10 整数(32) � BINARY、符号なし、totalDigits�<�10 符号なし整数(32) BINARY、totalDigits�<�19 Long�(64) PACKED-DECIMAL、符号付き 10進数 PACKED-DECIMAL、符号なし 10進数 COMP-1 浮動小数点(32) COMP-2 倍精度(64) BINARY、符号付き、totalDigits�<�5 Short�(16) ZONED-DECIMAL、符号付き、SIGN 10進数 LEADING�SEPARATE ZONED-DECIMAL、符号付き、SIGN 10進数 LEADING ZONED-DECIMAL、符号付き、SIGN 10進数 TRAILING�SEPARATE ZONED-DECIMAL、符号付き、SIGN 10進数 TRAILING ZONED-DECIMAL、符号なし 10進数 DISPLAY、BLANK�WHEN�ZERO 10進数 DISPLAY、その他のPICTURE記号 文字列 COBOLインポーターは、次のCOBOL機能をサポートします。 � � � � DF_DEC_PACKED_SIGNED DF_DEC_PACKED � � DF_DEC_ZONED_LEADING_SEP DF_DEC_ZONED_LEADING DF_DEC_ZONED_TRAILING_SEP DF_DEC_ZONED � DF_DEC_BWZ � • Numeric�Scaling�(数値スケーリング)�-�PICTURE句の暗黙の小数点文字Vは、モジュールのDecimal Places(小数位)プロパティを使って実装されます。 • Level�88�-�Level�88句はモジュールにValue(コード値など)のモジュールタイプを使ってサポートさ れます。Level�88句の名前は値モジュールの説明として含められます。 • REDEFINES�-�REDEFINES句はChoiceのグループタイプを使って実装されます。REDEFINES句を 含むモジュールの親モジュールのグループタイプはChoiceに設定されます。REDEFINES句を持つ 各モジュールは選択のブランチです。これに関する制限については下記を参照してください。 106 文字エンコーディング IsPresent式を使って、入力の読み取り時に使用可能なREDEFINES(Choiceのメンバー)を決定す るために使用する条件を定義できます。デフォルトでは、Constant�IsPresent式が各Choiceメン バーに生成されます。最初のメンバーが値TRUE�(真)を取り、残りのメンバーが値FALSE�(偽)を取 ります。これにより、無条件で別のメンバーを選択する場合、変更が容易になります。 • REDEFINES�Record�Types�(REDIFINESレコードタイプ)�-�Choiceの各メンバーに対し てREDEFINESを使ってレコードを再定義する際に(上記を参照)、最初のフィールドが単一の88レ ベル定数を持つ場合、区切り記号付きイニシエーターがフィールドに生成され、フィールドの長さ が88レベル定数のサイズ(通常ゼロ)によって縮小されます。これにより、フラットリーダーおよび ライターが、正しいレコードを提供するために、これらを自動的に取得または生成できます。 • Binary�vs.Character�-�Newline�(バイナリvs文字�-�改行)�-�データのエンコーディングがすべて文字と なるように指定されている場合、インポート時にレコードを区別する改行の検出がオプション(お よびデフォルト)で構造に追加されます。表記プロパティ内の改行文字がインポートするデータの タイプに適していることを確認してください。デフォルトで、改行文字は行送り文字に設定されま す。 次にCOBOLコピーブックのインポートに関する一部の問題と制限事項を示します。 • OCCURS�DEPENDING�ON�(次の場合に出現)�-�これは直接サポートされません。モジュールの最小 および最大出現回数を、指定された出現数の範囲内で設定します。DEPENDING�ON部分を実装す るには、出現するモジュールが依存する値を取るFixedLoop関数を使用します。 • Alignment�or�SYNCHRONIZED�(整列またはSYNCHRONIZED)�-�SYNCHRONIZED値が検出されたと きに調整は行われません。特定のアーキテクチャに必要なバイナリデータの調整も行われません。 これらは、レコード内で最も近い32ビットの範囲と整列するよう調整する必要がある場合がありま す。ただし、これは使用されたコンパイラとプラットフォームによって異なります。調整が必要な 場合、適切なフィラーを追加して手動で実行する必要があります。 • Level�88�for�Non-leaf�Elements�(非リーフモジュールのLevel88)�-�Level�88の値は非リーフモジュー ルではサポートされません。警告が表示されますが、無視されます。 • REDEFINES�Padding�(REDEFINES埋め込み)�-�REDEFINESに関与する任意のモジュールのサブツ リーに追加される埋め込みはありません。行区切り文字を持たない位置指定固定長レコードに対処 する場合、処理が正しく行われるよう、適切な埋め込みが提供されていることを確認する必要があ ります(通常FILLER定義が使用されます)。 16.4.�文字エンコーディング 利用可能な文字セットのリストから文字エンコーディングを選択できるいくつかの場所があります。 利用可能な文字セットのリストはJava�Runtime�Environment�(JRE)によって決まります。ほとんど の場合、JREには必要な文字セットが用意されています。ただし、EBCDICを使用している場合、JRE に付属するデフォルトの文字セットにEBCDIC文字セットは含まれていません。EBCDICに単一の文 字セットはなく、さまざまなロケールに対応するEBCDIC文字セットがあります。たとえば、英語版 EBCDICエンコーディングはIBM037またはCP037と呼ばれています。文字セットについて説明する下 記のリンクを参照する場合、通常EBCDIC文字セットはIBMとして特定される文字セットに含まれて いますが、実際にはEBCDICではない数多くのIBM文字セットがリストに含まれています。 文字セットが存在しない場合、Java�Runtime�Environment�(JRE)に自動的にインストールされない 拡張文字セットの一部である可能性があります。これらのリンクはJRE�5またはJRE�6でサポートされ る文字セットを一覧で示します。拡張文字セットをインストールするには、Javaインストールのオ プションであるcharsets.jarファイルを取得し、それをJREのlibディレクトリに配置します。サポート が必要な場合は、システム管理者に問い合わせてください。 文字セットがリストのどれにも存在しない場合、文字セットは無効であり、リストに記載されている 値に変更する必要があります。 107 17.EDIのマッピング 概要 17.1.�概要 EDI表記はX12(HIPAAを含む)またはEDIFACT�EDIドキュメントのいずれかをサポートします。この表 記を使用する場合、モジュールの名前は、EDIセグメントに対応するためにEDI命名規則に従う必要が あります。EDI表記はEDI定義をインポートする際に作成されます。 表記に関連付けられている共通プロパティも参照してください。 110 EDI仕様 17.2.�EDI仕様 Talend�Data�MapperはEDI仕様を含むプロジェクトを提供します。これらの定義を使って、EDIトラ ンザクションとやり取りするマップを作成できます。これらのプロジェクトは読み取り専用プロジェ クトとしてインストールされ、プロジェクトの標準デプロイメントメカニズムを使ってData�Mapper Runtimeにデプロイできます。 17.2.1.�インストール 場合によっては、目的のEDI仕様がTalend�Data�Mapperによって自動的にインストールされることが あります。その他の状況では、標準Eclipseソフトウェアインストールメカニズム([Help]�(ヘルプ)�-> [Install�New�Software]�(新規ソフトウェアのインストール)を使用して、これらを含むアップデート サイトからインストールする必要があります。 17.2.2.�使用方法 実際にトランザクションセットをカスタマイズする意図がない場合でも、これらから継承する(独自 のプロジェクトで新しい構造ウィザードを使用して別の構造をカスタマイズする構造を作成する)こ とにより、これらの定義を使用する必要があります。この主な理由は、新しいバージョンへの移行の ために柔軟性を持たせるためです。新しいバージョンに移行するには、1か所を変更する必要しかあ りません。それは、カスタム構造が仕様プロジェクトで定義された標準構造から継承する場所です。 もう1つの理由は、iこれらの仕様の定義が読み取り専用プロジェクトでは不変であるため、このプロ ジェクトの構造に独自のサンプルドキュメントを直接関連付けることができないことです。 17.2.3.�コンテンツ このセクションでは、EDI仕様プロジェクトのコンテンツについて説明します。 17.2.3.1.�プロジェクト名 プロジェクトの名前は、X12_4010のようにEDI標準名の後にバージョン名を付けたものです。バー ジョンに追加の修飾が存在する場合、X12_4010_HIPAAのようにバージョン名の後に表示されます。 17.2.3.2.�トランザクション トランザクションは、Transactionsと呼ばれるフォルダーに含まれています。 17.2.3.3.�エンベロープ(交換、機能グループ) Envelopesフォルダーには、交換を定義する構造が含まれています。これは、交換セグメント (ISA、GS、GE、IEA)が必要な場合に使用されます。これを使用するには、このフォルダーから独自 のプロジェクトに継承します(交換をカスタマイズする構造を作成します)。次に、独自のカスタム構 111 コンテンツ 造で、Transactionモジュールが表示されるまで展開します。その後、カスタムトランザクション構 造(たとえば、270-A1)をTransactionモジュールにドラッグし、その時点で継承することができます。 これでカスタム交換構造を使用できるようになります。 17.2.3.4.�コントロール番号の生成とマッピング X12�EDIでは、他の方法でマッピングされない限り、コントロール番号(ISA13/IEA02、GS06/ GE02、ST02/SE02)は自動的に生成されます。自動生成はモジュールごとに個別に処理されます。た とえば、交換コントロール番号(ISA/IEA)をマップして、機能グループ(GS/GE)およびトランザクショ ンセット(ST/SE)のコントロール番号に自動生成を使用します。 交換コントロール番号(ISA13/IEA02)は、GetSequenceFromLocalFile関数と同じロジック を使用し、ローカルファイルシステムに次のシーケンス番号を保存するために使用するパ ス${user.home}/odtEdiControl.txtを使用して生成されます。必要に応じて、コントロール番号 をDatabaseLookupAndUpdateなどの別の関数にマップし、その生成をより詳細に制御できます。 機能グループのコントロール番号(GS06/GE02)は、交換コントロール番号に100を乗じ、ゼロから 始まるグループのシーケンス番号を追加することによって生成されます。交換コントロール番号 が17の場合は、最初のグループのコントロール番号は1700になります。これは、X12�Functional Acknowledgment(機能肯定応答)トランザクション(997)が機能グループを一意に識別することによる 肯定応答を要求するために行われます。 トランザクションセットのコントロール番号は、グループの最初のセットが1で始まり、その後セッ トごとに1ずつ増加するように生成されます。 17.2.3.5.�サブモジュール(コンポジット)および反復セパレータの自動 マッピング X12�EDIでは、ISA16モジュールがマッピングされない場合、サブモジュールセパレータが自動的に 発行されます。他の方法でマッピングされない限り、反復セパレータもISA11モジュールに自動的に 発行されます。ISA11に反復セパレータが使用されない4030より前のバージョンを使用している場合 は、セパレータを適切な値にマップします。 17.2.3.6.�肯定応答(997、999、TA1) HIPAAトランザクションの使用時に処理する必要が生じることのある肯定応答には、3つのタイ プがあります。Functional�Acknowledgment�(機能肯定応答)(997)トランザクションは、機能グ ループまたはトランザクションセットレベルで問題をレポートするために使用されます。これ は、Transactions/997にあります。Implementation�Acknowledgment�(実装肯定応答)(999)は、追 加の実装仕様検証レポートを提供するために使用されます。これは、Transactions/999-A1にありま す。997と999はどちらも、X12エンベロープセグメント付きまたはなしで提供されます。交換また は機能グループ(ISA/GS)に問題がある場合、TA1セグメントが使用されます。これは、Segments/ TA1にあります。 17.2.3.7.�その他 これらのEDIコンポーネント用の構造定義を含むその他のフォルダー (Segments、Composites、Elements)があります。必要なものはすべてトランザクション構造に存 112 コンテンツ 在するので、これらを直接使用する必要はありません。これらは、EDI標準によって指定されたとお り、仕様メタデータが正確に作成されるためです。トランザクション構造では、一部のモジュールに 変更表示アイコン(金色の小さな三角アイコン)が表示されることにも注意してください。これは、ト ランザクション仕様内の定義が基盤となるセグメント/コンポジット/モジュールの定義を上書きまた は拡張する場合を表します。繰り返しますが、これは参考までに提供するものであり、ユーザーは何 も操作する必要はありません。 113 18.データベーステーブルのマッピングとデータ ベースルックアップ 概要 18.1.�概要 データベースサポートにより、マップを使ってデータベースとの間で読み取りおよび書き込みを行 えます。データベースサポートを使用するには、まずstudioでインポートメカニズム([File]�(ファイ ル)�->�[[Import]�(インポート)を使用して、データベースをインポートする必要があります。この操作 により、データベースのすべてのテーブルがテーブルごとに1つの構造セットに読み込まれます。各 データベース構造には、選択または書き込まれた各行に対応するループ(Rowと呼ばれるモジュール を持つ)が存在します。 データベースから読み取るには、マップの入力構造として、テーブルに対応する構造を使用し ます。データベース結合を使用して複数のテーブルから読み取る場合、[New�Structure]�(新 規構造)ウィザードを使って、結合されたテーブルを表す新しい構造を作成できます([create�a database�join�table]�(データベース結合テーブルの作成)オプションを選択します)。マップの作成 時に、DatabaseSelect関数を使用してSQL�selectステートメントを指定できます。必要に応じ て、DatabaseJoin関数を使用して結合の条件を指定できます。データベース関数は、すべて[IO/ Database�expression]�(IO/データベース式)タブにあります。 データベースに書き込むには、マップの出力構造として、テーブルに対応する構造を使用します。必 要に応じて、DatabaseInsertまたはDatabaseUpdate関数を使用します。 目的のデータベーステーブル構造から継承するエンクローズ構造を作成することにより、単一のマッ プ内の任意の数のデータベーステーブルとの間で読み取りまたは書き込みを行えます。 データベーステーブルの値を検索し更新するための、ルックアップ関数も用意されています。これら を使用するには、以下に説明するようにデータベースをインポートし、マッピング式で関数を使用し て、必要なデータベースとテーブルを指定します。 18.2.�データベースからのインポート • [File]�(ファイル)�->�[Import]�(インポート)を選択し、Data�Transformation�(データ変換)フォル ダーを開き、[Database]�(データベース)を選択します。 • データベーステーブル構造を含むディレクトリを選択します。デフォルトの選択では、トップレベ ルの構造フォルダーのデータベース名の下にデータベースが配置されます。 • データベースへの接続に必要なデータベースプロパティを入力します。この情報を入力した ら、[Test�Connection]�(接続のテスト)ボタンを押してデータベースへの接続を確認します。接続 に問題がある場合、正しいデータベース名、ユーザーおよびパスワード情報を指定するか、基本的 な接続の問題を解消することによって解決します。[Next]�(次へ)をクリックしてインポートを続行 します。すべてのテーブルがインポートされます。 18.3.�データベースドライバー studioおよびRuntimeはどちらも、MySQLを除く、サポートされるデータベース用のJDBCドライ バーをすべて備えています。MySQLの場合、MySQLサイトからドライバーJarファイルをダウンロー ドし、studioによって指定されたディレクトリに配置する必要があります。このディレクトリは、 データベースのプロパティで接続テストを試行するときに表示されます。これは、Data�Mapperのイ ンストールで一度だけ実行する必要があります。また、このJarファイルは実行時クラスパスに含め る必要があります。 カスタムデータベースドライバーも使用可能です(下記を参照)。これらを使用するには、プロジェク トクラスパスメカニズムを使用し、Jarファイルを実行時クラスパスに含める必要があります。 116 データベース情報 18.4.�データベース情報 データベースは、[Repository]�(リポジトリ)ナビゲーターに表示されるデータベースオブジェクト と、データベースからインポートされた各テーブルを表す構造のセットを使用して記述されます。 18.4.1.�データベースプロパティ このプロパティシートでは、データベース接続情報を記述し、データベースへの接続をテストできま す。これは、データベースをインポートするときと、[Repository]�(リポジトリ)ナビゲーターにデー タベースのプロパティを表示するときの両方で使用されます。 117 データベースプロパティ 18.4.1.1.�基本プロパティ データベース情報の基本プロパティは次のとおりです。 • [Database�Name]�(データベース名)-必要に応じて参照するためのデータベースの名前。これ は、[Repository]�(リポジトリ)ナビゲーターに表示されるオブジェクトの名前です。 • [Database�Type]�(データベースタイプ)-リストを使用するデータベースのタイプを指定します。 • [Database�Name�or�Instance�Id]�(データベース名またはインスタンスID)-データベースの名前ま たはサーバーのインスタンスIDを指定します。このラベルは選択したデータベースのタイプに応じ て変わります。 • [Schema/User�Name]�(スキーマ/ユーザー名)-Oracleの場合はスキーマ名です。他のすべてのデー タベースの場合は、ユーザー名として表示されます。 • [Password]�(パスワード)-上記ユーザーのパスワード。 118 データベースプロパティ • [Host]�(ホスト)-接続先のホスト名。現在のホストは空白のままにします。 • [Port]�(ポート)-接続先のポート番号。データベースのデフォルトのポート番号はゼロのままとし ます。 • [Schema]�(スキーマ)-一部のデータベース(SQL�ServerおよびSybase)には、データベース内にス キーマの概念が含まれています。ここに、データベースから抽出されたテーブルをフィルターする ために使用するスキーマ値(dboなど)を指定できます。 • [Test�Connection]�(接続のテスト)-これを使用すると、即座にデータベースに接続し、エラーをレ ポートできます。 • [Show�More]�(詳細)-これをクリックすると、詳細なプロパティ(下記)が表示されます。 • [Structure�Folder]�(構造フォルダー)(スクリーンショットでは非表示)-インポート時に生成された データベースの構造定義を含むフォルダー。これは、データベースオブジェクトのプロパティを表 示した場合のみ現れます。インポートウィザードには表示されません。 18.4.1.2.�詳細プロパティ 詳細プロパティは、通常、変更する必要はありません。それらは、データベースタイプの選択に応じ て自動的に設定されます。ただし、異なるデータベースタイプをサポートする場合でも、必要に応じ て、詳細プロパティを変更できます。 • [URL�pattern]�(URLパターン)-接続URLを構成するために使用されるパターン。大半の場合、こ れを変更する必要はありませんが、必要に応じてカスタマイズできます。${databaseName}およ 119 データベース構造/テーブル び${hostPort}プレースホルダーには、実行時に実際の値が代入されます。これは、ドライバーマ ネージャーメカニズムを使用して、デフォルトのドライバークラスを使用して動作するように自動 的に設定されます(下記参照)。データソースを使用する場合は、これを、JIDIでデータソースを参 照するために使用されるURLに設定します。 • [Default�primary�key�columns]�(デフォルトのプライマリキー列)-データベースによってプライ マリキーが指定されていない(稀な)場合に、テーブル内の主要な列に基づいてプライマリキーを設 定できます。たとえば、1を指定した場合、プライマリキーはテーブル内の最初の列に設定されま す(データベースによってそれ以外が指定されていない場合)。-1�(デフォルト)を指定すると、テー ブル内のすべての列がプライマリキーとみなされます。 • [Driver�selection]�(ドライバーの選択)-クラスパス上、または組み込みのJDBCドライバークラス を使用するようにドライバーマネージャーを指定します。指定したURLパターンを使用したJNDI ルックアップによってデータソースを取得する場合は、データソースを指定します。 • [Driver�class]�(ドライバークラス)-使用するJDBCドライバーのクラス名。データベースタイプご とにデフォルトのドライバークラスがあり、設計時と実行時の両方で、ドライバーを含むJarファ イルが自動的に製品に組み込まれます。独自のドライバーを使用する場合は、デザイナーでテス トできるようにプロジェクトのクラスパスを変更します(下記の[Edit�Classpath]�(クラスパスの編 集)を参照)。実行時に、ドライバークラスがクラスパス上で使用可能であるように確保します(プロ ジェクトのクラスパスは設計時にのみ使用されます)。 • [XA�DataSource�driver�class]�(XAデータソースドライバークラス)-分散型トランザクションの サポートが必要な場合に提供されるXAデータソースのクラス名。ドライバークラスと同様に、デ フォルトでは、自動的に内包されたクラスに設定されます。 • [Hibernate�dialect�class]�(Hibernate言語クラス)-データベースのSQL変換を処理するために使用 されるHibernateの言語クラスのクラス名。 • [Hibernate�metadata�dialect�class]�(Hibernateメタデータ言語クラス)-データベースのメタデー タの読み取り時に問題を処理するためのHibernateメタデータ言語クラスのクラス名。 • [Edit�Classpath]�(クラスパスの編集)-これを使用して、データベースを含むプロジェクトに関連付 けられたクラスパスを変更できます。また、プロジェクトのプロパティでプロジェクトのクラスパ スを変更することもできます([Repository]�(リポジトリ)ナビゲーターから)。たとえば、組み込ま れていないデータベースドライバーをテストする場合は、クラスパスを変更します。 18.4.2.�データベース構造/テーブル データベースがインポートされると、次のカテゴリ(それぞれフォルダーによって表される)の各テー ブルに対応した2つの構造が作成されます。 • Tables�-テーブルの行を表すループを含む構造。この構造を直接マップで使用できます。また、こ の構造を構造エディターで開き、[Show�Document]�(ドキュメントを表示)ボタンまたは[Show Sample]�(サンプルを表示)メニューアイテムを使用して、データベースデータを表示できます。 データベースとの間で読み取りまたは書き込みが行われている場合は、これが使用される構造とな ります。読み取りの場合は、RowモジュールでDatabaseSelect関数を使用します。書き込みの場 合は、Rowモジュールで、DatabaseInsert関数またはDatabaseUpdate関数のいずれかを使用し ます。 • Single�Row�Tables�-テーブルの列を定義する構造。Tables構造は、この構造を継承します。さら に、これらの構造それぞれに、プライマリキーや自動ID生成などのテーブルに関連付けられたプロ パティを定義するデータベース表記があります。最後に、これは結合されたテーブルを構成するた めにも使用されます。 120 データベース表記プロパティ(Single�Row�Table構造) • Joined�Tables�-これは最初は空で、結合を表すテーブルが結合ウィザードによって配置される場 所です。 18.4.3.�データベース表記プロパティ(Single�Row�Table 構造) データベース表記は、各テーブルに関連付けられたプロパティを表します。 次のプロパティが使用可能です。 • [Database]�(データベース)-データベースのグローバル情報を含むデータベースノードを指しま す。 121 データベースからの定義のリロード • [Database�Table]�(データベーステーブル)-この構造に対応するデータベース内のテーブル。 • [Primary�Key�Columns]�(プライマリキー列)-このテーブルのプライマリキーを形成する列を選択 します。これらは、インポート時に自動的に設定されます。 • [Primary�Key�Generation]�(プライマリキー生成)-このテーブルのプライマリキーの生成方法を制 御します。次のオプションのいずれかを選択します。 • [None]�(なし)-プライマリキーに関して何も生成しません。値はマップされるものと予期されま す。 • [Native]�(ネイティブ)-データベースに最適なプライマリキー生成を自動的に選択します。 • [Identity]�(ID)-�DB2、MySQL、MS�SQL�Server、SybaseおよびHypersonicSQLのID列をサポー トします。Long型、Short型またはInt型のID列に対して使用されます。 • [Increment]�(インクリメント)-アイテムを挿入する前にローカル値をインクリメントすること で、連番を生成します。 これは、複数のプロセス/スレッドが1度に同じテーブルに挿入されることがあるマルチユーザー(マルチ スレッド化を含む)環境には適していません。 • [Sequence]�(シーケンス)-�DB2、PostgreSQLまたはOracleでシーケンスを使用します。Long 型、Short型またはInt型のID列に対して使用されます。 • [Generation�Sequence�Name]�(シーケンス名の生成)-�[Primary�Key�Generation]�(プライマリ キー生成)が[Sequence]�(シーケンス)または[Native]�(ネイティブ)のいずれかである(および、ネイ ティブ実装が[Sequence]�(シーケンス)を使用している)場合に使用されます。使用されるシーケン ス名を指定します。指定しない場合は、hibernate_sequenceが使用されます。 表記に関連付けられている共通プロパティも参照してください。 18.4.4.�データベースからの定義のリロード しばしば、データベースが変更され、その都度、最新のテーブル定義を取得する必要があります。こ れは、データベースオブジェクトを右クリックして、[[Re]Load�Table�Definitions]�(テーブル定義 のリロード)を選択するだけで実行できます。この操作によって、すべてのデータベース構造が最新 の値に基づいて再作成されます。これらの構造に依存している他の構造やマップを阻害しないよう に、構造は適切な位値に再作成されます。変更がある場合、これらの変更は、その構造に依存する マップによって自動的に認識されます。 18.5.�データベースルックアップ関数 データベースルックアップ関数によって、指定した条件に基づいて、単一行の単一列の値を参照でき ます。DatabaseLookupは値を返し、読み取り専用です。DatabaseLookupAndUpdateは、同時 にデータベース更新を実行するために使用されます。これは、行を処理し、その後、その行を示す値 を更新する一般的な場合を処理するために使用されます。 データベースルックアップ関数は、データベーステーブルの読み取りか、書き込みかに関係なく使用 できます。 122 データベースからの読み取り 18.6.�データベースからの読み取り データベースからテーブルを読み取る場合は、Tables内の構造をマップへの入力として使用します。 デフォルトでは、テーブルからすべての行を読み取ります。選択した行のみを読み取る場合は、テー ブルのルートモジュール(Rowモジュールに関するモジュール)でDatabaseSelectを使用します。 複数の無関係なテーブル(同じデータベース内または異なるデータベース内)をマップへの入力として 読み取る場合は、読み取るテーブルごとにモジュールを使用してエンクローズ構造を作成します。さ らに、各テーブルモジュールで、Tables構造から継承した後に、通常どおりDatabaseSelectを指定 します。 結合によって関連付けられた複数のテーブルから読み取る場合は、下記の結合処理セクションを参照 してください。 上のスクリーンショットでは、EMPLOYEESテーブルから、EMPLOYEE_IDが200以上のすべての行 が読み取られていることがわかります。その後、それらのモジュールは、出力のためにXML構造に マップされます。 123 データベースへの書き込み 18.7.�データベースへの書き込み データベースへ書き込むには、Tables内の構造を使用します。新しい行をデータベースに挿入する か、既に存在する行を更新することができます。更新する場合は、テーブルに指定されたプライマリ キー列(通常はデータベースのインポートで検出される)によって更新する行が検索されます。 挿入または更新するためにTables内の構造から継承することで、マップの出力で複数のテーブルを挿 入または更新できます。その後、必要に応じて、Tables構造のルートモジュール(Rowモジュールの 親)にDatabaseInsert関数またはDatabaseUpdate関数を指定します。 マップの出力の表記がデータベースで、出力構造がTables内の構造の場合は、デフォルトでデータ ベースに挿入されます(関数は不要です)。 18.8.�結合処理 結合処理は、SQLクエリの場合と同様に、データベースから読み込んで複数のテーブルを結合し、 データベース結合メカニズムを使用してそれらを関連付けるメカニズムを拡張します。これを実行 するには、選択されるテーブルと結合されるテーブルの両方を含む結合構造を作成する必要がありま す。SQLの場合と同様に、テーブルを結合構造に追加することで、必要な数のテーブルを結合できま す。慣習により、結合構造は、データベースに関連付けられたJoin�Structuresフォルダーに存在しま す。 New�Structure�(構造の新規作成)ウィザードを使用して、[Create�a�database�join�structure]�(デー タベース結合構造の作成)を選択すると、結合構造の作成は自動化されます。プロンプトで関連する テーブルを入力すると、構造は自動的に作成されます。 124 結合処理 上の図では、各従業員を対応する部門に結合しています(多対1結合)。これは、構造から最初に 継承する結合構造をTables(この場合はEMPLOYEES)内から選択し、その後、結合先のSingle Tables�Structure(DEPARTMENTS)から継承する新しいモジュール(DEPARTMENTS_JOINと呼ば れる)を設けることで実行されます。この新しいモジュールのIO/データベース式は、選択する構造 (EMPLOYEES)と結合される構造(DEPARTMENTS)内の列間の接続を指定するDatabaseJoin関数を 使用します。 DatabaseSelect関数と同様の方法で、DatabaseJoin関数のプロパティ(式のタブをダブルクリック するとプロパティが表示される)で、結合に関するさらなる制約を指定できます。 125 結合処理 上の図では、各部門の従業員を検索するために、部門から結合しています(1対多結合)。結合モ ジュール(EMPLOYEES_JOIN)がループである必要がある(つまり、出現最大回数が-1である)点を除 き、まったく同様に動作します。 126 19.XMLネームスペースとネームスペースコンテ ナ ネームスペースコンテナは、XMLネームスペースの集合と、それらの推奨されるプレフィックス値を 定義するために使用されます。任意の数の構造を特定のネームスペースコンテナに関連付けることが できます。 XMLネームスペースは、XMLモジュールの名前にコンテキストを提供するために使用される単なる URIです。これによって、名前の競合を心配することなく、個別に定義された複数のモジュールセッ トを含む大きなサイズのドキュメントを生成できます。XMLドキュメントでは、ネームスペースは ネームスペースプレフィックスを使用して各モジュール内で表されますが、フルネームスペース URIへのポインタにすぎません。ネームスペースプレフィックス自体には何の意味もありません。モ ジュールの名前を比較する場合は、フルネームスペースURIのみが使用されます。 ネームスペースコンテナは、ネームスペースURIとそれらのプレフィックスのリストを提供します。 構造を表示すると、ネームスペースプレフィックスはモジュール名の一部として示されます。特定の ネームスペースURIに異なるネームスペースプレフィックスを使用するには、ネームスペースコンテ ナ内のネームスペースプレフィックス値を変更するだけです。構造エディターで使用されているネー ムスペースプレフィックスは、関連付けられたネームスペースコンテナ内の現在値によって定義され ます。ネームスペースコンテナ内のプレフィックスを変更すると、変更内容は構造エディター内に表 示されているモジュールに自動的に反映されます。 XMLスキーマインスタンスのネームスペースhttp://www.w3.org/2001/XMLSchema-instanceのみを使 用している場合は、ネームスペースコンテナを作成する必要はありません。XML表記でプロパティを 選択するだけで済みます。 128 ネームスペースとXMLスキーマのインポート 19.1.�ネームスペースとXMLスキーマのインポー ト XMLスキーマのインポートにより、自動的にネームスペースコンテナが作成され、インポートした XMLスキーマ内で見つかったネームスペースが保持されます。ネームスペースコンテナの名前は、ス キーマをインポートするディレクトリの名前を連結したものになります。連結名のネームスペースコ ンテナが存在する場合は、必要に応じて、それが使用または更新されます。 XMLスキーマのインポートプロセスでは、XMLスキーマ内で見つかった各ネームスペースのネームス ペースコンテナにエントリが追加されます(存在しない場合)。ネームスペースプレフィックスがネー ムスペースに定義されていることが検出された場合は、それが使用されます。複数のプレフィックス が定義されている場合は、最初に検出されたプレフィックスのみが使用されます。プレフィックスが 定義されていない場合は、一意のプレフィックスが作成され、"made�up"�(構成)プロパティによって 示されます。 XMLスキーマのインポートには、必要に応じて、インポートされた構造をネームスペース別に編成で きる多数のオプションがあります。オプションの1つでは、ネームスペースに対応するディレクトリ 名をユーザーが指定できます。これは、ネームスペースエントリでディレクトリプロパティを指定す ることで実行されます。 19.2.�デフォルトネームスペース ネームスペースコンテナは、デフォルトネームスペースに関連付けられることがあります。これ は、ネームスペースコンテナのプロパティで指定されます。これらのプロパティにアクセスするに は、[Repository]�(リポジトリ)ナビゲーターでネームスペースコンテナを選択し、右クリックし て[Properties]�(プロパティ)を選択します。 デフォルトネームスペースはマップの出力側のみで使用され、発行されたXMLは、ネームスペース のプレフィックスなしのxmlns属性と、出力ドキュメントのルートモジュールに指定されたデフォル トネームスペースURIの値を使用します。これによって、すべての内包モジュールのネームスペース URIが、モジュールごとのネームスペースプレフィックスは不要のデフォルトネームスペースのURI に設定されます。マップの出力構造で複数のネームスペースコンテナが使用されている場合は、最初 に指定されたデフォルトネームスペースのみが使用されます。 19.3.�ネームスペース問題のトラブルシューティ ング ネームスペースの使用時によく生じる問題は、ネームスペースが予期したネームスペースと一致しな いために、XMLモジュールを読み取れないことです。この結果、マップを実行しても何も出力されな いことがあります。これは特に、XMLインスタンスドキュメントのルートモジュールで顕著です。一 般に、XMLスキーマ/DTD/WSDLをインポートして作成された構造を使用している場合は、XMLイン スタンスドキュメントが正しく対応するネームスペースを保持しているか心配する必要はありませ ん。 モジュールを手動で追加したり構造を手動で作成した場合は、構造とネームスペースコンテナ内の ネームスペース定義が正しいことを念入りに確認する必要があります。 次に確認事項を示します。 129 ネームスペース問題のトラブルシューティング • デフォルトネームスペース�-�通常、XMLドキュメントはデフォルトネームスペースを使用するた め、モジュールにはプレフィックスは付加されませんが、ネームスペースを定義するxmlns属性が あります。これが当てはまる場合は、構造定義内のモジュールが同じネームスペースを使用してい ることを確認します。これを行うには、次の点を確認します。 • XML表記(ネームスペースコンテナ)�-�マップ入力によってポイントされた構造のXML表記にネーム スペースコンテナへの参照が含まれていますか?これは、構造のXML表記を見つけ、そのプロパ ティを表示(ダブルクリック)することで判別できます。含まれていない場合は、必要に応じてネー ムスペースコンテナを作成し、表記でそれをポイントするように指定します。 • ネームスペースコンテナ�-�ネームスペースコンテナで定義されたデフォルト(または、その他の) ネームスペースは、マップの入力構造と関連付けられていますか?関連付けられていない場合は、 それに適切なプレフィックスを追加します。それがデフォルトのネームスペースである場合は、プ レフィックスとして「default」を使用できます。また、デフォルトネームスペースの場合は、ネー ムスペースコンテナのプロパティを変更して(右クリック->[Properties]�(プロパティ))、デフォル トネームスペースURIを指定する必要があります。ネームスペースURIをデフォルトURIとして指定 した場合は、ネームスペースに関連付けられたプレフィックスは、構造エディターまたはマップエ ディターには表示されません。 • モジュールのネームスペース�-�モジュールごとにネームスペースを関連付けることができます。 これは、ネームスペースプレフィックスを使用するXMLドキュメントと同様に、正確に実行さ れます。たとえば、デフォルトネームスペースURIがurn:defaultで、プレフィックスがdefaultの 場合は、モジュール(たとえば、elementNameと呼ばれる)を構造エディターで編集し、その名前 をdefault:elementNameに変更します。モジュールのプロパティ(構造エディターの右側)で、現在 のモジュールのネームスペースURIを確認します(モジュールのプロパティの読み取り専用ビューを 使用して確認できます)。 130 20.環境設定 studioの環境設定には、標準のEclipse環境設定を介してアクセスできます。 Data�Mapperの環境設定 20.1.�Data�Mapperの環境設定 • [Show�deleted�structure�elements]�(削除された構造モジュールを表示する)�-�これは、別の構造 から継承されたモジュールで作業している場合のみ使用されます。通常、構造モジュールを削除 すると、表示されなくなります。この環境設定をオンにすると、[(deleted)]�((削除))と示されてモ ジュールが表示されます。デフォルトでは、削除された構造モジュールは表示されません。 • [Automatically�load�the�default�test�document]�(デフォルトのテストドキュメントを自動的に ロードする)�-�構造に関連付けられたサンプル入力ドキュメントが1つ以上あり、この環境設定がオ ンの場合は、構造を開いたときに、最初のサンプル入力ドキュメントが構造エディターにロードさ れます。この環境設定をオフにすると、ドキュメントは自動的にはロードされません。デフォルト では、ドキュメントは自動的にロードされます。 • [Wrap�text�in�document�display/dialog]�(ドキュメントの表示/ダイアログ内でテキストを折り 返す)�-�これがオンの場合、インスタンスドキュメントのテキストは、水平スクロールが不要となる ように折り返されます。これは、一度に行全体が表示されるため、長い行から成るインスタンスド キュメントの場合に便利です。これがオフの場合、行は本来の長さで表示され、スクロール機能が 使用されます。デフォルトでは、インスタンスドキュメントのテキストは折り返しません。 • [Show�test�results�even�if�an�error�occurs]�(エラーが発生した場合でもテスト結果を表示する)�マップをテストした際に、マップの実行中または検証中(またはインスタンスデータの検証中)にエ 132 Data�Mapperの環境設定 ラーが生じた場合でもマップの出力を表示します。ときには、エラーがマップの実行を停止させる ほど深刻な場合があります([Fatal]�(致命的)として示される)。これがオフの場合、マップの実行中 にエラーが生じると、出力が抑制されます。デフォルトでは、この環境設定はオンです。 • [Pretty�print�test�output]�(テスト出力を形式化する)�-�これがオンの場合、XMLドキュメントはモ ジュールがインデントされ、改行が追加されて見やすいように形式化されます。また、XMLネーム スペース定義によって、出力の表示がかなり乱雑になることがあるため、XMLネームスペース定義 は抑制されます。デフォルトでは、この環境設定はオンです。 • [Show�startup�dialog]�(スタートアップダイアログを表示する)�-�スタートアップダイアログに は、使用を開始するために役立つチュートリアルとアクションへのリンクが含まれています。 • [Maximum�number�of�database�rows�to�show]�(表示する最大データベース行数)�-�これは、 マップのテスト時に選択されたテーブルあたりのデータベース行の制限です。これは、サイズの大 きいデータベースに対して不要な遅延なくテストを実行できるようにするために使用されます。 • [Maximum�number�of�output�characters�to�show]�(表示する最大出力文字数)�-�これは、テスト 出力ドキュメントの最大サイズです。 • [Maximum�characters�to�read�for�structure�highlighting]�(強調表示された構造について読み取 る最大文字数)�-�構造エディターでサンプルドキュメントを自動表示する際に読み取る最大文字数で す。これは、非常にサイズの大きいサンプルドキュメントの強調表示を計算するときに時間とメモ リの消費量を抑えるために使用されます。 • [Maximum�execution�status�items�to�show]�(表示する最大実行ステータスアイテム数)�-�これら は、マップおよび構造の検証または実行時のエラーや警告を示す[Problems]�(問題)ビューまたは ダイアログ内のアイテムです。非常に大きいマップでは何百というエラーが生じることがあり、場 合によってはそれらをすべて表示するためにかなり時間がかかります。そのため、デフォルトでは 表示するエラー数が制限されています。 • [Maximum�loop�iterations�to�show]�(表示する最大ループ繰り返し数)�-�マップのテスト時に、管 理可能なデータ量でテストできるように、処理するループ数を制限したい場合があります。これ は、テスト目的で、すべてのループの繰り返し数を制限します。 • [Map�Lines]�(マップの線)�-�入力マップモジュールと出力マップモジュールを接続する線を表示 できます。デフォルトでは、選択されたモジュールと、マップの他の側にあるそれに関連するモ ジュールとの間の線のみが表示されます。また、すべてのモジュール間で線を表示することも、線 の表示を完全にオフにすることもできます。 • [Open�elements�in�the�structure�editor�as]�(構造エディターで次のようにモジュールを開く)�構造エディターでは、モジュールプロパティを2通りの方法で表示できます。読み取り専用表示で は、表示に最適な非常にコンパクトな形式でプロパティを表示します。編集可能表示では、プロパ ティを変更できるように、より多くのスペースが必要です。プロパティを変更しない場合は、読み 取り専用(デフォルト)を選択します。 • [Show�expressions�as]�(次のように式を表示する)�-�式は、グラフィカルツリー(デフォルト)とし て、またはテキスト形式を使用して式を入力するテキストとして表示(および作成)できます。デ フォルトでは、グラフィカルツリーで表示されます。 133 21.ランタイムへのデプロイ この章では、プロジェクトをデプロイし、ランタイムで使用する方法を示します。 プロジェクトのデプロイ 21.1.�プロジェクトのデプロイ ランタイムへのデプロイメントの単位がプロジェクトです。必要なプロジェクトをすべてランタイム にデプロイする必要があります。これは、Mavenまたは標準のEclipseエクスポートメカニズムのい ずれかを使用して実行できます。 プロジェクトをデプロイするには、それをZipファイルにエクスポートします。これはプロジェクト アーカイブと呼ばれています。ランタイムでのプロジェクトアーカイブファイルの場所は、使用して いるランタイムのタイプによって異なります。ランタイムのタイプによっては、プロジェクトがイン ストール内の特定のディレクトリに含まれており、簡単に参照できます(たとえば、Muleランタイム 対応のODTではdata-int/projectsディレクトリなど)。すべてのランタイムタイプで、ファイル、標準 Java�URLハンドラー内の任意のスキーマ(HTTP、classpathなど)、またはOSGiバンドル(OSGiベース のランタイムタイプの場合)を参照可能なURIを使用して、プロジェクトアーカイブを参照できます。 プロジェクトアーカイブへのアクセス方法の詳細は、使用しているランタイムタイプのドキュメン テーションを参照してください。 21.1.1.�Mavenの使用 Data�Transformation�(データ変換)プロジェクトが作成されている場合は、pom.xmlファイルも作成さ れています。POMを編集してグループIDとバージョンを設定し、その後、それと通常のMavenター ゲット(パッケージとインストール)を使用して、デプロイメントアーティファクトを作成およびイン ストールできます。 21.1.2.�Eclipseエクスポートの使用 プロジェクトを右クリックし、[Export]�(エクスポート)を選択(または、[File]�(ファイル)メニュー から[Export]�(エクスポート)を選択)し、その後、[General]�(一般)の下のウィザードダイアログ で[Archive�File]�(アーカイブファイル)を選択することで、プロジェクトをエクスポートできます。 136 22.ランタイムの概要 ここでは、ランタイムでマップを実行するために使用可能な方法を一覧し、デプロイメントプロセス の概要を説明します。 このドキュメントでは、すべてのランタイム製品を取り上げています。各ランタイム製品は個別にインストー ルされるため、これらの機能はインストールされているランタイム製品によって異なります。 ランタイム実行方式 22.1.�ランタイム実行方式 Talend�Data�Mapperでは、Data�Mapperで定義されたマップを実行できます。マップは、次の方式の いずれかを使用して実行できます。 • Java�API�-�Java�APIを呼び出すことで、アプリケーションに変換プロセスを組み込むことができま す。 • Blueprint/OSGi�-�Blueprintコンテナ仕様とOSGiを使用。Apache�Karafの特別なサポートも提供さ れています。 • Apache�Camel�-�Apache�Camel内のコンポーネントまたはプロセスとして。 22.2.�インストール ランタイム製品をインストールするには、プロジェクトのセクションに記載されている固有の指示に 従います。 22.2.1.�ローカルファイルシステムへの自動インストール ランタイムがそれを実行するタイミングは、ローカルファイルシステム内に存在する各種ファイル によって異なります。これを行うため、これらのファイルは自動的に作成され、まだ存在しない場 合には、ランタイムJarファイル内のコンテンツから製品がインストールされます。これらのファ イルはいったん作成されると、読み取られるだけです。このエリアにはマップの実行に関連する ものは何も保存されず、同じマシン上のどのユーザーとも自由に共有できます。このインストール ディレクトリは、ODT_INSTALL_DIR�Javaシステムプロパティによって命名されたローカルディレ クトリになるものと予期されます。このディレクトリは、ランタイムの初回実行時に存在しない場 合には、自動的に作成されます。インストールは、製品ID�(Talend製変換製品のバリエーションと ブランディングすべて)、ユーザー名(パーミッション問題を避けるため)、およびフルバージョン文 字列によって限定されたサブディレクトリにインストールされるため、すべてのインストールで同 じODT_INSTALL_DIRプロパティを使用できます。 ODT_INSTALL_DIR�Javaシステムプロパティが設定されていない場合は、一時ディレクトリにイン ストールされます。 ODT_INSTALL_DIRプロパティが指定されているかどうかに関係なく、これらのファイルは(製品が 稼働していないときに)いつでも自由に削除できます。そして、自動的に暗黙のうちに再作成されま す。これらのファイルが作成される正確な場所と作成されるタイミングの詳細を把握するには、トラ ンスフォーマーまたはサービスの設定でlog="all"属性を指定します。 138 23.Java�APIランタイム 概要 23.1.�概要 tdm-api-(version).jarファイルはランタイムJava�APIを実装します。これを使用して、マップを実行で きます。実行可能ファイルと同様に、マップの実行時に入力ドキュメントまたは出力ドキュメント、 もしくは両方を指定できます。ランタイムAPIは、完全にマルチスレッド化されています。 ランタイムJava�APIについては、ランタイムインストールディレクトリのjavadocsディレクトリにあ るJavadocで説明されています。tdm-api-(version).jarファイルには、Data�Mapper�Runtimeが依存す るすべてのコードが含まれており、APIを使用するために必要となるのはこのファイルだけです。 データベースサポートを使用している(つまり、マップ内で任意のデータベースにアクセスしている) 場合は、Oracle、MySQL、およびDB2の各データベースのクラスパスにJDBCドライバーファイルを 含める必要があります。 Java�APIでランタイムを実行する際は、APIメソッドを使用して、プロジェクトを含める場所を指定 します。 マップを実行する以外に、APIを使用してマップを明示的に検証できます。マップが実行されると、 検証は自動的に実行されるため、明示的な検証方式の使用はオプションです。 マップの検証と実行の結果は、ExecutionStatusオブジェクトの形式で返されます。このオブジェク トには、選択した検証のレベルに応じて、マップの検証に関連する警告とエラーの両方、および入力 または出力ドキュメントの処理中に発生したすべての問題が含まれます。ExecutionStatusオブジェ クトは、プログラムを使用して分析できるように設計されています。 23.2.�インストール インストールするには、任意の場所にインストールアーカイブを解凍します。例とドキュメントの ディレクトリを確認できます。Mavenを使用している場合は、 mvn install を実行してローカルMavenリポジトリにJarファイルをインストールし、次の依存関係を追加するこ とでAPI�Jarを実行できます。 <dependency> <groupId>org.talend.transform</groupId> <artifactId>tdm-api</ artifactId> <version>(desired TDM version)</version> </dependency> 23.3.�ログ Data�Mapper�Runtimeでのログは、APIの呼び出し側のクラスパスに含まれるLog4jインスタンスを使 用して実行されます(スレッドコンテキストクラスローダーを使用)。Log4jがクラスパスに存在しな い場合、ログは実行できません。ログは、Log4jの通常のメカニズムを使用して設定されます。 ランタイムAPIでのログに関連する方式は他にもありますが、これは、前述のとおり、Log4jを使用し た特定タイプのログを有効にする便利な方式です。 23.4.�例 簡単な例が、ランタイムインストールキットのexamplesディレクトリに用意されています。手順 は、README.txtファイルに記載されており、Mavenを使用してそれを構築および実行できます。 140 ランタイムAPI参照 23.5.�ランタイムAPI参照 ローカルJavadocにあるorg.talend.transform.runtime.apiを参照してください。 141 24.OSGi/Blueprintランタイム 概要 24.1.�概要 Equinox�OSGi実装をサポートするOSGiコンテナ内のData�Mapper�RuntimeランタイムAPIにアクセス できます。Blueprintコンテナ仕様を使用して、これを実行できます。また、Talend�ESB�Runtimeを 含め、Apache�Karafを使用している場合は、features.xmlファイルが用意されています。このファイ ルは、必要なOSGiバンドルをすべてロードする便利な手段を提供します。 OSGiランタイムは、Equinox�OSGi実装のみでの実行をサポートします。これは、Equinoxで動作するように プログラムに組み込まれたEclipseランタイムの一部を使用するためです。 この章では、Blueprint�Data�Mapper�Runtimeのインストール方法と、例の実行方法を説明しま す。Equinox�OSGi実装を実行するApache�Karaf�OSGiコンテナを使用します。 24.2.�インストール インストールするには、任意の場所にインストールアーカイブを解凍します。例とドキュメントの ディレクトリを確認できます。 その後、 mvn install を実行して、すべてのOSGiバンドルをローカルリポジトリにインストールします。これにより、 付属のfeatures.xmlファイルまたはfeatures.talend-esb.xmlファイルは、Apache�Karafとの連携時 に、mvn�URIプロトコルを使用してバンドルをロードできます。 features.xmlファイルには、目的が異なる2つのバージョンがあります。 • Talend�ESB�Runtime�-�これは、features.talend-esb.xmlという名前で、Talend�ESB�Runtimeにイン ストールされる必要なバンドルと、Data�Mapper�Runtimeによって要求されるフィーチャーへの参 照が含まれます。 • Apache�Karaf�-�これは、features.xmlという名前で、未変更のApache�Karafディストリビューショ ンにインストールされる必要なバンドルが含まれています。これには、Data�Mapper�Runtimeが依 存するバンドルが含まれます。 24.3.�例 Data�Mapper�Runtimeでは、examplesで始まるディレクトリに例が用意されています。例では、 Examplesプロジェクトを使用して簡単な変換を実行できます。Data�Mapperを使用して、Examples プロジェクトを習熟できます。 24.3.1.�例の実行 例では、Mavenを使用して構築します。例を構築し実行するには、使用する例のexamplesディレク トリにあるREADME.txtファイルを参照してください。 144 Blueprint/OSGiサポートの使用 24.4.�Blueprint/OSGiサポートの使用 OSGi�Blueprintは、OSGiバンドル内に定義されている実行コードを検索するための簡単で強力な手段 です。RuntimeEngineオブジェクトは、org.talend.transform.runtime.api.RuntimeEngineインターフェ イスを実装するBlueprintサービスとして登録されます。RuntimeEngineを使用して、プロジェクト アーカイブを追加し、マップを検索および実行できます。RuntimeEngineインターフェイスの使用方 法の詳細は、Javadocを参照してください。 Blueprintで作業する場合は、一部のOSGiバンドル内でクライアントを保持します。すべて が同じ場所に存在するように、プロジェクトアーカイブをそのバンドル内にリソースとして 含めることを推奨します。RuntimeEngine.addProjectUri(URI)を使用してアーカイブをラン タイムにロードし、platform�URIスキーマを使用してプロジェクトアーカイブを参照できま す。たとえば、バンドルorg.talend.transform.examples.blueprintについては、platform:/plugin/ org.talend.transform.examples.blueprint/Examples.zipを使用して、Examples.zipプロジェクトアーカ イブを取得できます。 24.5.�デプロイメントプロセス デプロイするには、Data�Mapper内のエクスポートウィザード([Export]�(エクスポート)�->�[General] (一般)、さらに[Archive�File]�(アーカイブファイル)を選択)を使用して、トランスフォーマーオブ ジェクト(マップ、構造など)を含むプロジェクトをZipファイルにエクスポートします。その後、zip ファイルをクライアントOSGiバンドルにバンドルするか、ファイルシステムまたはURLを介してそ れにアクセスできる場所に配置します。 24.6.�ランタイムAPI参照 ローカルJavadocにあるorg.talend.transform.runtime.apiを参照してください。 145 25.Apache�Camelランタイム 概要 25.1.�概要 tdmコンポーネントを使用してApache�Camel内でマップを実行するか、またはTdmProcessorクラス を直接呼出すことができます。 さらに、テスト目的でマップに関連付けられたサンプルドキュメントのインスタンスを生成できま す。これには、要求されたドキュメントを発行するtdmsampleコンポーネントを使用します。パ フォーマンステストの場合は、指定した回数分サンプルドキュメントを発行するように設定できま す。 この章では、Mapper�Runtime�for�Camelのインストール方法、例の実行方法、マップとともに使用さ れるCamelコンポーネントまたはプロセッサーの設定方法について説明します。 Mapper�Runtime�for�Camelは、Apache�Camelバージョン2.8.2で動作が保証されています。提供され ている明確に定義された一部のインターフェイスのみを使用しているため、それ以前の大半のエディ ションでも良好に動作すると考えられます。以前のバージョンでの動作保証を希望する場合は、サ ポート窓口にお問い合わせください。 25.2.�cMapメディエーションコンポーネント cMapメディエーションコンポーネントによって、マップをメディエーションルートの一部と して使用してデータ変換を実行できます。cMapコンポーネントの詳細は、『Talend�Mediation Components�Reference�Guide』を参照してください。 25.3.�tdmコンポーネント tdmコンポーネントは、マップを実行することでメッセージを変換するエンドポイントを作成しま す。 マップの実行ステータスは、マップの実行に伴う問題の詳細情報を含むJavaオブジェクトで判 別できます。ランタイムキット内にあるJavadocで、ExecutionStatusクラスについて説明され ています。マップの実行ステータスに警告またはより深刻なアイテムが含まれる場合、それは、 キーcom.oaklandsw.transform.executionstatusを使用するプロパティとしてExchangeに関連付けられ ます。 25.3.1.�URI形式 tdm://pathToMap?options pathToMapは、起動するマップへの完全修飾パスで、マップの最初のコンポーネントがプロジェクト 名になります。例:�//Examples/Maps/Java/AcmoPOToJava 表25.1�tdmコンポーネントのオプション 名前 exceptionThreshold 148 値 WARNING�(警 告)、ERROR�(エ ラー)、FATAL�(致命 的) 必須 × デフォルト FATAL 説明 結果として例外がス ローされるマップ実行 ステータスの重大度の 値。 TdmProcessorプロセッサー 名前 projectArchives projects log 値 必須 デフォルト 説明 コンマで区切られた文 × 字列のリスト なし 文字列 � マップを実行するた めに必要なプロジェ クトの名前のリス ト。これは、Mapper Runtime�for�Camelが Eclipse内部で実行さ れ、Eclipseワークス ペース内にあるプロ ジェクトを使用する場 合に使用されます。こ れが指定されている場 合、projectArchivesオ プションは使用されま せん。 コンマで区切られた文 × 字列のリスト × なし マップを実行するため に必要なプロジェクト アーカイブのURLのリ スト。これには、マッ プと他の必要なプロ ジェクト(マップまた は構造の継承による) を内包するプロジェク トが含まれます。URL は、fileスキーマま たはclasspathのい ずれかを保持できま す。classpathスキー マの場合、URLのパス はクラスパス上のプロ ジェクトアーカイブに なります。 ランタイムのログを 定義するために使用 されます。この値は、 ログに必要なコンテ ンツを定義するため にランタイムに渡さ れます。infrequentを 使用すると、警告レベ ル以上のイベントとス タートアップ/シャッ トダウンイベントの みがログに記録され ます。frequentを使用 すると、実行された各 変換に関するメッセー ジがログに記録されま す。allを使用すると、 完全なデバッグトレー スが取得されます。こ れは、問題の診断に役 立つ場合があります。 25.4.�TdmProcessorプロセッサー TdmProcessorは、マップを実行するProcessorインターフェイスの実装です。これは、tdmコン ポーネントによって呼び出されます。 TdmProcessorは、前述のURIオプションに対応するプロパティを保持するJava�Beanです。さら に、前述のとおり、実行するマップへのパスを指定するmapPathプロパティも保持しています。 149 tdmsampleコンポーネント 25.5.�tdmsampleコンポーネント tdmsampleコンポーネントは、現在特定のマップに関連付けられているサンプルドキュメントのイ ンスタンスを発行する取得エンドポイントを作成します。 25.5.1.�URI形式 tdmsample://pathToMap?options pathToMapは、サンプルドキュメントを検索するためのマップへの完全修飾パスで、マップの最初の コンポーネントがプロジェクト名になります。例:�//Examples/Maps/Java/AcmoPOToJava 表25.2�tdmsampleコンポーネントのオプション 名前 numberTimes projectArchives projects log 150 値 デフォルト 説明 コンマで区切られた文 × 字列のリスト なし コンマで区切られた文 × 字列のリスト なし マップを実行するため に必要なプロジェクト アーカイブのURLのリ スト。これには、マッ プと他の必要なプロ ジェクト(マップまた は構造の継承による) を内包するプロジェク トが含まれます。URL は、fileスキーマま たはclasspathのい ずれかを保持できま す。classpathスキー マの場合、URLのパス はクラスパス上のプロ ジェクトアーカイブに なります。 整数 文字列 必須 × × 1 スレッドあたりのサン プルドキュメントを発 行する回数。 マップを実行するた めに必要なプロジェ クトの名前のリス ト。これは、Mapper Runtime�for�Camelが Eclipse内部で実行さ れ、Eclipseワークス ペース内にあるプロ ジェクトを使用する場 合に使用されます。こ れが指定されている場 合、projectArchivesオ プションは必要ありま せん。 ランタイムのログを 定義するために使用 されます。この値は、 ログに必要なコンテ ンツを定義するため にランタイムに渡さ れます。infrequentを 使用すると、警告レベ ル以上のイベントとス タートアップ/シャッ トダウンイベントの インストール 名前 値 必須 デフォルト 説明 みがログに記録され ます。frequentを使用 すると、実行された各 変換に関するメッセー ジがログに記録されま す。allを使用すると、 完全なデバッグトレー スが取得されます。こ れは、問題の診断に役 立つ場合があります。 25.6.�インストール インストールするには、任意の場所にインストールアーカイブを解凍します。例とドキュメントの ディレクトリを確認できます。また、tdm-camel-(version).jar�(標準のJavaアプリケーションで使用) および�(OSGiアプリケーションで使用)も提供されています。 データベースサポートを使用している(つまり、マップ内で任意のデータベースにアクセスしている) 場合は、Oracle、MySQL、およびDB2の各データベースのクラスパスにJDBCドライバーファイルを 含める必要があります。 mvn install を実行してローカルMavenリポジトリにJarファイルをインストールし、次の依存関係を追加するこ とでそれらを参照できます。 <dependency> <groupId>org.talend.transform</groupId> <artifactId>tdm-camel</ artifactId> <version>(desired TDM version)</version> </dependency> Mapper�Runtime�for�Camelは、クラスパスに含まれるかぎり、特定の場所にあるtdm-camel(version).jarファイルに依存しない点に注意してください。 25.7.�標準のJavaでの使用 Apache�Camelとともに、tdm-camel-(version).jarをクラスパスに含めるだけです。これにより、必要 なTDMコンポーネントが自動的にCamelに追加されます。 25.8.�OSGi/Blueprintでの使用 OSGi/Blueprint環境でCamel対応のTDMサポートを使用するには、TDM�Blueprintランタイムをイン ストールして起動する必要があります。これにCamel�OSGiバンドルが含まれているためです。TDM ランタイムキット内の手順を参照してください。 その後、ODTとCamelを要求するバンドルを起動できます。付属の例を参照してください。それらは すべてOSGi/Blueprint環境で稼働します。READMEファイルに実行方法が記載されています。 25.9.�例 Mapper�Runtime�for�Camelでは、それぞれexamplesで始まるディレクトリにいくつかの例が提供さ れています。各例は、標準のExamplesプロジェクトに含まれるマップとサンプルドキュメントに 151 例の実行 基づいて異なる変換を実行します。Data�Mapperを使用して、Examplesプロジェクトを習熟できま す。 大半の例では、現在マップに関連付けられているサンプルドキュメントを提供するためのテストに使 用できるtdmsampleコンポーネントが使用されています。 25.9.1.�例の実行 例では、Mavenを使用して構築および実行します。例を実行するには、拡張キットのexamplesディ レクトリにあるREADME.txtファイルを参照してください。また、各例に固有の詳細は、各例のディ レクトリのREADME.txtファイルを参照してください。 例を構築する際に、tdm-camel-(version).jarが見つからない旨のエラーが発生した場合は、Jarをロー カルMavenリポジトリにインストールするためのインストール手順に従っていることを確認してくだ さい。 25.10.�デプロイメントプロセス デプロイするには、Data�Mapper内のエクスポートウィザード([Export]�(エクスポート)�-> [General]�(一般)、さらに[Archive�File]�(アーカイブファイル)を選択)を使用して、トランス フォーマーオブジェクト(マップ、構造など)を含むプロジェクトをZipファイルにエクスポートしま す。tdmまたはtdmsampleコンポーネントを呼び出す場合は、URIのprojectArchivesオプションを使 用してこれらのZipファイルの場所を参照します。 25.11.�ランタイムAPI参照 ローカルJavadocに含まれるTalend�Data�Mapper�APIの概要を参照してください。 25.11.1.�org.talend.transform.runtime.api ローカルJavadocにあるorg.talend.transform.runtime.apiを参照してください。 25.11.2.�org.talend.transform.camel ローカルJavadocのorg.talend.transform.camelを参照してください。 152 26.関数のリファレンス この章では、マッピングに使用可能な各組み込み関数について説明します。 関数の記述 26.1.�関数の記述 関数の記述には次のものが含まれます。 • Loop�Type(ループタイプ)�-�関数でAggregateルーピングをサポートする場合にのみ指定します。 • Return�Type(戻り値のタイプ)�-�関数から返されるデータ型。 • Argument(引数)�-�関数の引数の名前と説明。この引数は、関数を指定したときに式パネルに名前順 に表示されます。 • Argument�Type(引数のタイプ)�-�引数のデータ型。 • Variable�Arguments(可変引数)�-�この関数に使われている引数の数が変わることを示します。引数 は、式パネルの関数式のすぐ下で指定します。 • Variable�Argument�Type(可変引数のタイプ)�-�可変引数をサポートする関数の各引数のデータ型。 • Property(プロパティ)�-�関数のプロパティの名前と説明。関数のプロパティは、関数式に関連付け られているプロパティダイアログを開いて指定します。 26.2.�プロパティと引数の両方を指定 一部の関数(SingleIndexなど)では、同じ目的の引数とプロパティを両方とも指定できます。これ は便宜上の措置のみを目的としています。ときには、プロパティの値を指定した方が便利な場合や (マップ仕様の一部として変更されないため)、動的な値が必要なため引数を指定した方が都合がいい 場合があります。両方とも指定した場合は、引数の値が優先されます。 26.3.�引数と戻り値のタイプ 前述したデータ型に加えて、ここではその他の型について説明します。 • Simple�(シンプル)�-�文字列、ブール値、数値、日付、日付/時間、時間など、シンプルなデータ型を すべて含みます。 • Generic�Number�(一般的な数値)�-�数値のデータ型をすべて含みます。 • [Map]�Element�(マップモジュール)�-�引数として(マップ)モジュールのみ指定できます。これは主 に、ルーピングモジュールを参照するルーピング関数に使用します。また、集計関数にも使用され ます。 26.4.�関数 ここでは、Talend�Data�Mapperで使用できるすべての関数を紹介します。 26.4.1.�Add 名前 154 Add AddToDateTime 目的 2つの数値を加算します。 戻り値のタイプ 一般的な数値 説明 引数 引数 1つ目の値と2つ目の値を加算して和を返します。 1つ目の値(一般的な数値) 2つ目の値(一般的な数値) 加算する1つ目の値。 加算する2つ目の値。 26.4.2.�AddToDateTime 名前 AddToDateTime 説明 入力した値に年、週、日数などを加算して日時の値を返します。返 される日時の値は、加算演算から得られた実際の時間です。たとえ ば、1937-08-07に10か月を加算すると、1938-06-07が返されます。 目的 戻り値のタイプ プロパティ 日時の値を加算して日時を返します。 日時 What 引数 数量(整数) 引数 日時の値�(Date/Time) 26.4.3.�AgAverage 加算するもの。年、月、週、日、時、分、秒、 ミリ秒を選択します。 プロパティで指定した日時単位で加算する数 量。 日時の値。 名前 AgAverage 説明 指定した[map]モジュールすべての平均値を返します。 目的 ループタイプ 戻り値のタイプ 可変引数 可変引数のタイプ 26.4.4.�AgConcat 一連の値の平均を計算します。 これは集計関数であるため、各引数は、それを内包する式のループとは異な るループを対象としています。このループの動作方法の詳細は、集計ルーピ ングを参照してください。 集計関数と組み合わせて追加の計算を実行する場合は(たとえば、合計)、この 集計関数を引数として使用し、それを含む式の中で実行します。 集計 小数点 � [Map]モジュール 名前 AgConcat 説明 引数の各値の連結を返します。 目的 値を集計して連結します。 これは集計関数であるため、各引数は、それを内包する式のループとは異な るループを対象としています。このループの動作方法の詳細は、集計ルーピ ングを参照してください。 155 AgConcatFirstPresentValue ループタイプ 戻り値のタイプ 可変引数 可変引数のタイプ 集計関数と組み合わせて追加の計算を実行する場合は(たとえば、合計)、この 集計関数を引数として使用し、それを含む式の中で実行します。 集計 文字列 � [Map]モジュール 26.4.5.�AgConcatFirstPresentValue 名前 AgConcatFirstPresentValue 説明 各引数を順に評価し、空白以外の値を持つ最初の引数の値を返します。値を 持つ引数がない場合は、何も返されません。値を持つ最初の引数がループで ある場合は、ループの反復の最初の値だけが返されます。 目的 値を持つ1つ目の引数をコピーします(集計)。 これは集計関数であるため、各引数は、それを内包する式のループとは異な るループを対象としています。このループの動作方法の詳細は、集計ルーピ ングを参照してください。 ループタイプ 戻り値のタイプ 可変引数 可変引数のタイプ 26.4.6.�AgCount 集計関数と組み合わせて追加の計算を実行する場合は(たとえば、合計)、この 集計関数を引数として使用し、それを含む式の中で実行します。 集計 文字列 � [Map]モジュール 名前 AgCount 説明 引数の各[map]モジュールの反復回数を返します。 目的 ループタイプ 戻り値のタイプ 可変引数 可変引数のタイプ 反復回数を計算します。 これは集計関数であるため、各引数は、それを内包する式のループとは異な るループを対象としています。このループの動作方法の詳細は、集計ルーピ ングを参照してください。 集計関数と組み合わせて追加の計算を実行する場合は(たとえば、合計)、この 集計関数を引数として使用し、それを含む式の中で実行します。 集計 整数(32) � [Map]モジュール 26.4.7.�AgMaximum 名前 AgMaximum 説明 指定した[map]モジュールすべての最大値を返します。 目的 156 一連の値の最大値を計算します。 AgMinimum これは集計関数であるため、各引数は、それを内包する式のループとは異な るループを対象としています。このループの動作方法の詳細は、集計ルーピ ングを参照してください。 ループタイプ 戻り値のタイプ 可変引数 可変引数のタイプ 集計関数と組み合わせて追加の計算を実行する場合は(たとえば、合計)、この 集計関数を引数として使用し、それを含む式の中で実行します。 集計 小数点 � [Map]モジュール 26.4.8.�AgMinimum 名前 AgMinimum 説明 指定した[map]モジュールすべての最小値を返します。 目的 戻り値のタイプ 可変引数 可変引数のタイプ 26.4.9.�AgSum 一連の値の最小値を計算します。 これは集計関数であるため、各引数は、それを内包する式のループとは異な るループを対象としています。このループの動作方法の詳細は、集計ルーピ ングを参照してください。 集計関数と組み合わせて追加の計算を実行する場合は(たとえば、合計)、この 集計関数を引数として使用し、それを含む式の中で実行します。 小数点 � [Map]モジュール 名前 AgSum 説明 指定したすべての[map]モジュールの和を返します。 目的 ループタイプ 戻り値のタイプ 可変引数 可変引数のタイプ 26.4.10.�And 名前 目的 ルーピング範囲にある一連の値の和を計算します。 これは集計関数であるため、各引数は、それを内包する式のループとは異な るループを対象としています。このループの動作方法の詳細は、集計ルーピ ングを参照してください。 集計関数と組み合わせて追加の計算を実行する場合は(たとえば、合計)、この 集計関数を引数として使用し、それを含む式の中で実行します。 集計 10進数 � [Map]モジュール And ブール値のand。 157 AnyConcat 説明 ループタイプ 戻り値のタイプ 可変引数 可変引数のタイプ すべての引数にブール値のAnd演算を実行します。すべての引数がTrueの場 合はTrueを返し、それ以外の場合はFalseを返します。 集計 ブール値 � ブール値 26.4.11.�AnyConcat 名前 AnyConcat 説明 この関数は、モジュールタイプがAnyのモジュールのみに使用され、1つのモ ジュールのコンテンツ全体を、同じくAnyタイプの別のモジュールにコピーし ます。 目的 戻り値のタイプ 可変引数 可変引数のタイプ XMLのAnyタイプのモジュールの値を連結します。 これにより、関数を使用した場所のAnyタイプのモジュールの親のコンテン ツ全体がコピーされます。Anyモジュールは、任意のXMLモジュールツリーの プレースホルダーです。ツリーのルートにはどのような名前でも付けられま す。 Any � Any 26.4.12.�AscendingSort 名前 AscendingSort 説明 この関数は、ループ式のSort�Keys引数にのみ使用でき、昇順のソートキーを 構成する[map]モジュールを指定します。 目的 可変引数 可変引数のタイプ 26.4.13.�Choice ループ内で昇順にソートするmapモジュールを指定します。 � [Map]モジュール 名前 Choice 説明 この関数は、条件リストの条件に基づいて値を選択するために使用します。 基本はネストされたIfThenElse関数の集合と同じですが、よりコンパクトに まとめられています。ChoiceValue関数は引数としていくつでも使用できま す。それぞれのChoiceValue関数は条件と値のペアを提供します。最初の条 件が満たされると、値が発行されます。ChoiceValue関数の1つをデフォルト 値に設定し、その他の条件が満たされなかった場合にその値を発行すること ができます。 目的 戻り値のタイプ 可変引数 可変引数のタイプ 158 条件に基づいて一連の値の中から値を選択します。 ChoiceValue関数による � ChoiceValue関数 ChoiceValue 26.4.14.�ChoiceValue 名前 ChoiceValue 説明 この関数はChoice関数の引数としてのみ使用し、条件と値のペアを指定しま す。詳細は、Choiceを参照してください。 目的 戻り値のタイプ 引数 引数のプロパティ 26.4.15.�Compare Choice関数を使って条件と値を指定します。 シンプル 条件(ブール値) デフォルト値 このchoiceの値を選択する条件。条件を省略す ると、この値が選択されることはありません(た だし、デフォルトに設定されており、デフォル ト値の条件が満たされた場合を除きます)。 ChoiceValueのその他の条件がTrueにならな かった場合は、この値がTrueになります。 名前 Compare 説明 2つの値を比較するために使用します。たとえば、引数First�Valueが23と評価 され、引数Second�Valueが47と評価された場合に、Greater�Comparisonプロ パティを選択すると、23は47よりも小さいので、この式によってFalseが返さ れます。 目的 戻り値のタイプ 引数 引数 プロパティ 2つの値を比較します。 ブール値 1つ目の値(シンプル) 2つ目の値(シンプル) 比較 比較する1つ目の値。 比較する2つ目の値。 Equal�(と等しい)、Not�Equal�(と等しくな い)、Greater/Equal�(以上)、Lesser/Equal�(以 下)、Lesser�(より小さい)、Greater�(より大きい) のいずれか1つを指定します。 26.4.16.�CondValidateReport 名前 CondValidateReport 説明 この関数は何かしら問題がある検証結果をレポートするために使います。た とえば、値が一定の制限以内にない場合などです。この関数はどのような式 にでも呼び出すことができます。レポートはマップの実行結果に基づいて出 力され、GUIに表示したり、ランタイムAPIを使ってアクセスしたりすること ができます。 目的 戻り値のタイプ 引数 引数 検証結果を条件に基づいてレポートします。 この関数は一般的に、検証の問題を詳しくレポートするために、検証式の ルートに使われます。検証式にはブール値が使用できます。検証が成功した 場合はTrueとなって何もレポートされず、検証に問題が発生した場合はFalse になります。 ブール値 条件(ブール値) Data�(Simple�(変数)) 条件がTrueになると、関数からは何もレポート されません。条件がFalseになると、関数から検 証結果がレポートされます。この条件の値も、 この関数の値として返されます。 データを検証レポートに関連付ける任意の数 の式。これらは、検証レポートで名前/値ペア 159 Constant プロパティ 重大度 プロパティ メッセージ プロパティ 26.4.17.�Constant エラー番号 名前 Constant 説明 指定した定数値を返します。 目的 戻り値のタイプ プロパティ プロパティ としてレポートされます。ここで指定された 式が[マップ]モジュールの参照の場合、名前 は[マップ]モジュールの名前となり、値はモ ジュールの値になります。Property関数と他の タイプの式を併用すると、検証レポートで名前 ラベルを提供できます。 検証の問題の重大度には、Informational(情 報)、Warning(警告)、Error(エラー)がありま す。 検証の問題を識別するオプションの番号。 検証の問題を識別するオプションの番号。 定数値を返します。 文字列 値 データ型 定数値。改行は\n、タブは\t、バックスラッシュ は\\としてそれぞれ指定します。 オプションで、値にデータ型を関連付けること ができます。これは、特殊なケースにのみ使用 されます。たとえば、xsi:type属性を処理するた めに、QNameというデータ型を使用するケース などが挙げられます。QNameというデータ型を 使用するときにQNameのURIの部分を省略する には、:localNameなどのように最初の文字にコ ロンを指定します。 26.4.18.�ConstIfBlank 名前 ConstIfBlank 説明 指定した入力値、または入力値が指定されていなかったり存在しない場合 は、指定した定数が返されます。 目的 戻り値のタイプ 引数 プロパティ プロパティ 26.4.19.�Concat 名前 目的 160 空白以外の場合は指定した値を返し、空白の場合は定数を返します。 文字列 入力値(シンプル) 値 データ型 Concat 値を連結します。 チェックする値。値が存在し、空白でない場合 は、それがこの関数の結果となります。それ以 外の場合は、定数値(以下で指定)がこの関数の 結果となります。 使用する定数値。 ConcatFirstPresentValue 説明 戻り値のタイプ 可変引数 可変引数のタイプ Concat関数は、それぞれの引数を文字列に変換して連結し、結果を出力しま す。 文字列またはパラメーターが1つしかない場合は最初の入力パラメーター � シンプル 26.4.20.�ConcatFirstPresentValue 名前 ConcatFirstPresentValue 説明 各引数を順に評価し、空白以外の値を持つ最初の引数の値を返します。値を 持つ引数がない場合は、何も返されません。 目的 戻り値のタイプ 可変引数 可変引数のタイプ 値を持つ1つ目の引数をコピーします。 文字列 � シンプル 26.4.21.�ConvertFromBinary 名前 ConvertFromBinary 説明 これは、バイナリ値を指定したデータ形式やエンコードに基づいて整数や文 字列などのシンプルタイプに変換するために使います。ExtractBytes関数と 一緒に使用して、バイナリデータから任意のデータを読み取ることもできま す。 目的 戻り値のタイプ プロパティ プロパティ プロパティ プロパティ 指定したバイトをバイナリからシンプルタイプの値に変換します。 データ型プロパティで指定 データ型 データ形式 エンコーディング 入力(バイナリ) この関数が返すデータ型。 データ型の変換に使用するデータ形式。 値の変換に使用する文字のエンコーディング。 文字列データ型だけに使用します。 変換するバイナリ値。 26.4.22.�DatabaseColumn 名前 DatabaseColumn 説明 DatabaseColumn関数は、別のデータベース関数(たとえ ば、DatabaseLookupなど)の引数として、SQL式の一部となる列名を指定し ます。この関数は、データベース関数の引数式の中だけに使用できます。 目的 戻り値のタイプ プロパティ 別のデータベース関数を使用する場合に、データベース列の値を指定しま す。 指定したデータベース列による 列 <データベースへのパス>.<テーブル>.<列 >という形式のデータベースの完全修飾 列。たとえば、/Default�Project/Databases/ MyDatabase.MYTABLE.MYCOLUMNなどで す。studioを使用するとグラフィカルインター 161 DatabaseFunction フェイスがこの形式を指定するので、手動で指 定する必要はありません。 26.4.23.�DatabaseFunction 名前 DatabaseFunction 説明 DatabaseFunction関数は任意のSQL関数を呼び出し て、DatabaseLookupなど他のデータベース関数の条件の一部として評価す ることができます。この関数は、データベース関数の引数式の中のみに使用 できます。 目的 戻り値のタイプ プロパティ SQL関数を呼び出します。 指定したデータベース関数による 関数 呼び出すSQL関数の名前(たとえば、concatな ど)。 26.4.24.�DatabaseInsert 名前 DatabaseInsert 説明 DatabaseInsert関数は、I/O式としてのみ使用できます。 目的 戻り値のタイプ 可変引数 プロパティ データベースに行を挿入するテーブルを指定します。 DatabaseInsertは、行モジュールを挿入するテーブルを指定します。この 関数は、Rowモジュールの親になるデータベーステーブルから継承されたモ ジュールのI/O式に指定します。 この関数はオプションです。出力構造にデータベース表記がある場合は、 データベースへの挿入がみなされます。テーブルの名前には、Rowモジュー ルから継承した1行のテーブル構造の名前が付きます。 該当なし(この関数はI/O式としてのみ使用できます) � テーブル 挿入するテーブル。指定されていない場合は、 子のRowモジュールから継承した1行のテーブル 構造で指定したテーブルとみなされます。 26.4.25.�DatabaseJoin 名前 DatabaseJoin 説明 DatabaseJoin関数はI/O式としてのみ使用できます。書き込むデータを含ん だモジュールのI/O式としてこの関数を指定します。 目的 戻り値のタイプ プロパティ プロパティ 162 2つのテーブルのデータベース結合の条件を指定します。 この関数は、親テーブルと子テーブルの間でどの列を結合するかを指定しま す。また、結合の選択条件も指定します。 該当なし(この関数はI/O表現としてのみ使用できます) Where�String 結合タイプ Where句に指定するSQL条件を、「Where」と いう言葉を使わずに入力します。 Innerを指定すると、子テーブルに対応する行が ない場合はそれを除外して親テーブルが結合さ れます。Outerを指定すると、子テーブルに対応 DatabaseLookup 引数 引数 親モジュール([Map]モ ジュール) 子モジュール([Map]モ ジュール) する行がない場合でも、親テーブルにあるすべ ての行が結合されます。 結合する親テーブルの列に対応するmapモ ジュールを指定します。これらは、子モジュー ルと同じ順序でなければなりません。 結合する子テーブルの列に対応するmapモ ジュールを指定します。これらは、親モジュー ルと同じ順序でなければなりません。 26.4.26.�DatabaseLookup 名前 DatabaseLookup 説明 DatabaseLookup関数は、指定した条件を満たす指定した列の1つの値を返 します。 目的 データベース内の値をルックアップします。 SQLに変換されてデータベースで評価されるのは特定の関数のみです。これ らは、DatabaseColumn関数とDatabaseFunction関数で使用できます。そ れらの関数は次の通りです。 • Add • And • Concat • Constant • Divide • Multiply • Or • Subtract • Not 上記の関数を使用する場合は、DatabaseColumn関数 とDatabaseFunctions関数を子とします。 戻り値のタイプ プロパティ プロパティ また、式ツリーの一部として、マップからモジュールを参照する場合は、ど の関数でも使用できます。ただし、上記の関数以外はDatabaseColumn関数 とDatabaseFunction関数を子とすることができません。 指定したデータベース列による 出力列 Cache�Lookups? この関数で返す値を持った完全修飾 列。形式は、<データベースへのパス >.<テーブル>.<列>と指定します。た とえば、/Default�Project/Databases/ MyDatabase.MYTABLE.MYCOLUMNとなりま す。studioを使用するとグラフィカルインター フェイスがこの形式を指定するので、手動で指 定する必要はありません。 この関数から返される値をキャッシュするかど うかを指定します。可能な値には次のものがあ ります。 • DEFAULT�-�実行時のキャッシュポリシーに基 づいてキャッシュする • ALWAYS�-�実行時の設定に関わらず常に キャッシュする 163 DatabaseLookupAndUpdate • NEVER�-�実行時の設定に関わらず常にキャッ シュしない 引数 条件(ブール値) 引数 出力列(文字列) 実行時のキャッシュにはタイムアウト値が設定 されており、この値を経過するとキャッシュさ れたアイテムは無効になります。 このルックアップの"where"条件。この 式には、DatabaseColumn関数(およ びDatabaseFunction関数)を含めて、ルック アップを行う選択条件をデータベースに指定す ることができます。条件の指定には一般的な関 数(たとえば、Equal、And、Addなど)を使用 します。これらの関数は対応するSQLに変換さ れ、データベースによって評価されます。条件 にはその他の種類の関数を使って、mapのモ ジュールを参照することもできます。 選択する出力列。これは主に、出力列を 伴う関数を使用する場合に使います。たと えば、列の最大値を選択する場合などで す。DatabaseFunctionを使って関数を指定 し、その中の1つのDatabaseColumnを使って 列を指定します。 26.4.27.�DatabaseLookupAndUpdate 名前 DatabaseLookupAndUpdate 説明 DatabaseLookupAndUpdate関数は、指定した条件を満たす指定した列の 1つの値を返し、Updateパラメーターの式に従って値を更新します。たとえ ば、データベースから処理する行を読み取ると同時に、再度処理することが ないように処理済みであることを示す場合に便利です。更新は現在のデータ ベーストランザクション中に実行されます(マップの実行中は、他のすべての データベースアクティビティも同様です)。 目的 データベース内の値をルックアップして更新します。 SQLに変換されてデータベースで評価されるのは特定の関数のみです。これ らは、DatabaseColumn関数とDatabaseFunction関数で使用できます。そ れらの関数は次の通りです。 • Add • And • Concat • Constant • Divide • Multiply • Or • Subtract • Not 上記の関数を使用する場合は、DatabaseColumn関数 とDatabaseFunctions関数を子とします。 戻り値のタイプ 164 また、式ツリーの一部として、マップからモジュールを参照する場合は、ど の関数でも使用できます。ただし、上記の関数以外はDatabaseColumn関数 とDatabaseFunction関数を子とすることができません。 指定したデータベース列による DatabaseSelect プロパティ Output�Column プロパティ Cache�Lookups? この関数で返す値を持った完全修飾 列。形式は、<データベースへのパス >.<テーブル>.<列>と指定します。た とえば、/Default�Project/Databases/ MyDatabase.MYTABLE.MYCOLUMNとなりま す。studioを使用するとグラフィカルインター フェイスがこの形式を指定するので、手動で指 定する必要はありません。 この関数から返される値をキャッシュするかど うかを指定します。可能な値には次のものがあ ります。 • DEFAULT�-�実行時のキャッシュポリシーに基 づいてキャッシュする • ALWAYS�-�実行時の設定に関わらず常に キャッシュする • NEVER�-�実行時の設定に関わらず常にキャッ シュしない 引数 Condition�(ブール値) 引数 Update�(シンプル) 引数 出力列(文字列) 実行時のキャッシュにはタイムアウト値が設定 されており、この値を経過するとキャッシュさ れたアイテムは無効になります。 このルックアップの"where"条件。この 式には、DatabaseColumn関数(およ びDatabaseFunction関数)を含めて、ルック アップを行う選択条件をデータベースに指定す ることができます。条件の指定には一般的な関 数(たとえば、Equal、And、Addなど)を使用 します。これらの関数は対応するSQLに変換さ れ、データベースによって評価されます。条件 にはその他の種類の関数を使って、mapのモ ジュールを参照することもできます。 ルックアップ後に出力列の値を指定する式。 この式には、DatabaseColumn関数(およ びDatabaseFunction関数)を含めて、出力列の 値を指定することができます。条件の指定には 一般的な関数(たとえば、Equal、And、Addな ど)を使用します。これらの関数は対応する SQLに変換され、データベースによって評価さ れます。更新にはその他の種類の関数を使っ て、mapのモジュールを参照することもできま す。 選択する出力列。これは主に、出力列を 伴う関数を使用する場合に使います。たと えば、列の最大値を選択する場合などで す。DatabaseFunctionを使って関数を指定 し、その中の1つのDatabaseColumnを使って 列を指定します。 26.4.28.�DatabaseSelect 名前 DatabaseSelect 説明 DatabaseSelect関数はI/O式としてのみ使用できます。読み取るデータを含 むモジュールのI/O式としてこの関数を指定します。 目的 データベース選択の条件を指定します。 データベース選択は、処理する行の選択基準を定義するために使用します。 選択基準の"where"句のみを定義することも、SQLのSelectステートメントを 完全に定義することもできます。 165 DatabaseUpdate 戻り値のタイプ プロパティ プロパティ selectステートメントをパラメーター化するには、Where�StringまたはQuery Stringプロパティの中にあるマップ実行のプロパティにアクセスします。その ためには、プロパティの名前を${プロパティ名}という形式で指定します。た とえば、DepartmentCode�=�${departmentCode}となります。 なし(この関数はI/O式としてのみ使用できます) Where�String Query�String Where句に指定するSQL条件を、「Where」と いう言葉を使わずに入力します。これとQuery Stringを両方とも指定することはできません。ク エリーをパラメーター化する方法については、 下のメモを参照してください。 selectに使用するHQLのクエリー文字列全体 を指定します(HQLはSQLに類似したもので す)。selectステートメントの全パートを指定で きます。これとWhere�Stringを両方とも指定す ることはできません。クエリーをパラメーター 化する方法については、下のメモを参照してく ださい。 26.4.29.�DatabaseUpdate 名前 DatabaseUpdate 説明 DatabaseUpdate関数はI/O式としてのみ使用できます。 目的 戻り値のタイプ プロパティ データベースに行を更新するテーブルを指定します。 DatabaseUpdateは、行モジュールを更新するテーブルを指定します。この 関数は、Rowモジュールの親になるデータベーステーブルから継承されたモ ジュールのI/O式に指定します。 なし(この関数はI/O式としてのみ使用できます) Table 更新するテーブル。指定されていない場合 は、Rowモジュールから継承した1行のテーブル 構造で指定したテーブルとみなされます。 26.4.30.�DescendingSort 名前 DescendingSort 説明 この関数は、ループ式のSort�Keys引数にのみ使用でき、降順のソートキーを 構成する[map]モジュールを指定します。 目的 可変引数 可変引数のタイプ 26.4.31.�Divide ループ内で降順にソートするmapモジュールを指定します。 � [Map]モジュール 名前 Divide 説明 除数を被除数で割って商を返します。 目的 戻り値のタイプ 引数 引数 166 2つの数値を除算します。 一般的な数値 被除数(一般的な数値) 除数(一般的な数値) 除数によって割られる値。 被除数で割る値。 EnclosingContext 26.4.32.�EnclosingContext 名前 EnclosingContext 説明 この関数は、ループ式のContexts引数にのみ使用でき、このループを内包す るための出力マップモジュールを指定します。 目的 ループを内包するコンテキストとして使用するための[map]モジュールを指定 します。 通常、この関数が指定されていない出力ループは、最も近い上位(ancestor) のループ出力マップモジュールに内包されます。それよりも上位の出力マッ プモジュールでループを内包する場合は、この関数を使用します。この関数 は、このループの内側の入力マップモジュールのループコンテキストで、最 も近い上位(ancestor)の代わりに特定の内包マップモジュールのループを参照 したい場合に便利です。この関数は、X12�EDI�HLループの特殊な処理で使用 しています。 引数 引数 26.4.33.�Equal この関数では可変引数を指定しますが、引数を1つだけ定義することもできま す。 被除数(一般的な数値) 除数(一般的な数値) 除数によって割られる値。 被除数で割る値。 名前 Equal 説明 2つの値が等値である場合はTrueを返します。それ以外は、Falseを返しま す。 目的 戻り値のタイプ 引数 引数 2つの値の等値テスト。 ブール値 1つ目の値(シンプル) 2つ目の値(シンプル) テストする1つ目の値。 テストする2つ目の値。 26.4.34.�ExecuteMap 名前 ExecuteMap 説明 この関数はマップを実行します。現在実行しているマップとは完全に分離し ているため、マップを実行しても何も返されません。マップは関数が返され る前に完全に実行されるので、この関数を呼び出した現在のマップを、呼び 出されたマップの実行結果に依存させることが可能です。 目的 戻り値のタイプ プロパティ 引数 マップの実行。 便宜上、この関数ではマップのパス名をプロパティまたは引数で指定できま す。プロパティと引数の両方を指定すると、引数が優先します。 なし マップのパス名 マップのパス名(文字列) 実行するマップのフルパス名です。た とえば、DepartmentMapというマップ をPersonnelというプロジェクトで実行する 場合は、マップのパス名は/Personnel/Maps/ DepartmentMapという名前になります。 実行するマップのフルパス名です。た とえば、DepartmentMapというマップ をPersonnelというプロジェクトで実行する 167 ExtractBytes 引数 場合は、マップのパス名は/Personnel/Maps/ DepartmentMapという名前になります。 プロパティ(複数 実行するマップに渡されるプロパティ。 のProperty関数を使用可能) 26.4.35.�ExtractBytes 名前 ExtractBytes 説明 バイナリデータから指定したバイトを抽出して返します。 目的 戻り値のタイプ 引数 引数 引数 バイナリデータから指定したバイトを抽出して返します。 バイナリ 入力(バイナリ) オフセット(整数) 長さ(整数) 抽出する値。 抽出を開始するバイナリデータのオフセット。 最初のバイトは0です。 抽出するバイト数。 26.4.36.�FixedLoop 名前 FixedLoop 説明 このループ関数は[Loop�expression]�(ループ式)タブのみで使用でき、関連す る出力マップモジュールのループ回数を指定します。 目的 ループ回数を指定します。 この関数は通常、マップモジュールの最低出現回数をゼロとし、子マップモ ジュールに出力するデフォルト値または定数値を指定する場合に使用しま す。 プロパティ 引数 この関数をLoopIndex関数と一緒に使用すると、出力ループの各出現回数の インデックス番号を取得することができます。 カウント 回数(整数) ループの回数。これはオプションで、指定しな かった場合は1回のループとみなされます。これ よりも回数引数が優先されます。 ループの回数。これはオプションで、指定しな かった場合は1回のループとみなされます。 26.4.37.�FlatToHierarchyLoop 名前 FlatToHierarchyLoop 説明 このループ関数は[Loop�expression]�(ループ式)タブのみで使用でき、入力の レベル数に応じてネスト型の再帰的モジュールを出力で作成します。 目的 引数 168 ループにより、入力モジュールのフラットセットのレベルに応じて、ネスト 型の再帰的モジュールを発行します。 レベル数が常に1である場合は、この関数はSimpleLoop関数と同じになりま す。レベル数が2の場合は、ネスト型のモジュール(出力モジュールの内包と 同じ)が発行されます。レベル数が1ずつ増えるごとに、ネストの新しいレベ ルが作成されます。入力のレベル数は、単調増減するものとみなされます。 Input�map�element�([マップ] ループする入力マップモジュール。 モジュール) GetBytesFromURL 引数 引数 引数 Filters�(ブール値) ブール値を返す式を指定します。この式は、 ループのインスタンスごとに評価されます。こ のフィルター式がtrueを返す場合、インスタン スはループに含まれます。falseを返す場合、イ ンスタンスはループから除外されます。 Sort�Keys�(変数) 各ソートキーを指定する任意の (AscendingSortKey関数また 数のAscendingSort関数また はDescendingSortKey関数 はDescendingSort関数。 のいずれか) Contexts�(NestedContext関 EnclosingContext関数また 数またはEnclosingContext はNestedContext関数のいずれかを指定しま す。EnclosingContextは、このループを含む出 関数) 力マップモジュールを指定します。指定しない 場合は、最も近い上位(ancestor)のループマッ プモジュールが使用されます。 NestedContextを使用すると、ループ式内で別の ループ式を指定できます。 26.4.38.�GetBytesFromURL 名前 GetBytesFromURL 説明 これは、任意のURLからデータを読み取るために使用します。読み取った データは、ExtractBytes関数やConvertFromBinary関数を使って他のデー タ型に変換することができます。 目的 戻り値のタイプ 引数 指定したURLを読み取り、コンテンツをバイナリとして返します。 バイナリ URL�(文字列) バイトを読み込むURL。 26.4.39.�GetCurrentDateTime 名前 GetCurrentDateTime 説明 ローカルタイムゾーンでの現在の日時を返します。 目的 戻り値のタイプ ローカルタイムゾーンでの現在の日時を返します。 日付/時間 26.4.40.�GetEnclosingElementProperty 名前 GetEnclosingElementProperty 説明 現在のモジュールの指定したプロパティ(名前など)の値を返します。この関数 が式ツリーに含まれるモジュールが現在のモジュールとなります。この関数 は、式がモジュール名に依存する場合に、異なるモジュールで同じ式セット を再利用する際などに便利です。 目的 戻り値のタイプ プロパティ 内包モジュールの選択したプロパティを返します。 文字列 プロパティ モジュールの目的のプロパティ。 • モジュール名�-�モジュールの名前。 • レベル数�-�モジュールの深度。ルートモ ジュールの値は1です。 169 GetMapProperty 26.4.41.�GetMapProperty 名前 GetMapProperty 説明 マップを実行中に、任意の小さなデータを渡すために、プロパティを指定す ることができます。また、組み込みのマッププロパティもいくつか使用でき ます。 目的 戻り値のタイプ プロパティ 指定したマップ実行のプロパティを返します。 文字列 プロパティ 目的のマップ実行プロパティの名前。 26.4.42.�GetSequenceFromLocalFile 名前 GetSequenceFromLocalFile 説明 この関数は、単調増加するシーケンス番号を指定するために使用します。こ の番号は、たとえばEDIなどでコントロール番号として使えます。シーケン ス番号の現在の値は、ローカルファイルに保存されます。このファイルは、 適切なロックによって保護されているため、複数の同時マップで共有できま す。 目的 戻り値のタイプ プロパティ シーケンス番号を取得し、ローカルファイルに保存した番号を自動的に更新 します。 ファイルがない場合は自動的に作成されます。シーケンス番号は1から開始 します。ファイルのコンテンツは単純なASCIIでエンコードされた文字列で、 番号の数値が含まれます。この番号は、必要に応じて編集することができま す。 Long ファイルパス ローカルファイルのパス名。Javaシステ ムプロパティの値の代わりに、${プロパ ティ名}を使用することができます。たとえ ば、${user.home}/control.txtは、Javaシステム プロパティのuser.home�(ホームディレクトリ)を 使用しています。 26.4.43.�GetVariable 名前 GetVariable 説明 マップでは、SetVariable関数で設定する名前付き変数がサポートされていま す。この関数は、以前に設定した変数の値を取得します。変数のデータ型は 文字列です。その他の文字列のように、値が数値である限り、数値操作が可 能です。 目的 戻り値のタイプ プロパティ 26.4.44.�Greater 指定した変数の値を返します。 文字列 変数名 変数の名前。 名前 Greater 説明 1つ目の値が2つ目の値より大きい場合はTrueを返します。それ以外は、False を返します。 目的 170 2つの値のうち、より大きい値のテスト。 GreaterOrEqual 戻り値のタイプ ブール値 引数 2つ目の値(シンプル) 引数 1つ目の値(シンプル) テストする1つ目の値。 テストする2つ目の値。 26.4.45.�GreaterOrEqual 名前 GreaterOrEqual 説明 1つ目の値が2つ目の値と等値か、どちらかがより大きい場合はTrueを返しま す。それ以外は、Falseを返します。 目的 戻り値のタイプ 引数 引数 26.4.46.�HasValue 名前 目的 説明 戻り値のタイプ 引数 26.4.47.�IfThen 2つの値が等値か、どちらかがより大きいかをテスト。 ブール値 1つ目の値(シンプル) 2つ目の値(シンプル) テストする1つ目の値。 テストする2つ目の値。 HasValue 引数が空白以外の値を持つ場合はTrueを返します。 Input�Value引数の値が空白以外、つまり0よりも大きい長さを持つ場合 はTrueを返します。値が存在しない場合、または存在するが空白値である場 合は、Falseを返します。この関数は、値が存在するだけでなくテキストが必 要な点で、IsPresent関数と異なります。 ブール値 入力値(シンプル) チェックされる値。 名前 IfThen 説明 IfThen関数はCondition引数を評価し、ConditionがTrueの場合はThen引数の 値を返します。Condition引数の値がFalseの場合は、何も返されません。 目的 戻り値のタイプ 引数 引数 条件に基づいて値を返します。 Condition引数の値を指定するには、Compare関数、And関数、Or関 数、Not関数を使用できます。 シンプル 条件(ブール値) Then�(シンプル) 評価する式。 条件がTrueの場合に返される値。 26.4.48.�IfThenElse 名前 IfThenElse 説明 IfThen関数はCondition引数を評価し、ConditionがTrueの場合はThen引数の 値を返します。Condition引数の値がFalseの場合は、Else引数の値が返されま す。 目的 条件に基づいて値を返します。 171 IndexOf 戻り値のタイプ 引数 引数 引数 26.4.49.�IndexOf Condition引数の値を指定するには、Compare関数、And関数、Or関 数、Not関数を使用できます。 シンプル 条件(ブール値) Then�(シンプル) ElseThen�(シンプル) 評価する式。 条件がTrueの場合に返される値。 条件がFalseの場合に返される値。 名前 IndexOf 説明 指定したString内にあるCompare�Stringの1ベースのインデックスを返しま す。たとえば、Stringがabcdの場合は、Compare�Stringがcdとなり、3が返さ れます。Compare�Stringが見つからない場合は、-1が返されます。 目的 戻り値のタイプ 引数 引数 文字列のサブストリングのインデックス値を返します。 整数 String(文字列) Compare�String(文字列) 評価する式。 条件がTrueの場合に返される値。 26.4.50.�IndexRangeLoop 名前 IndexRangeLoop 説明 このループ関数は[Loop�expression]�(ループ式)タブのみで使用できます。 この関数は、[Loop�expression]�(ループ式)タブで関連付けた出力マップモ ジュールを、該当する入力マップモジュールの引数式の値に応じてループさ せることを指定します。ループの反復回数は、開始インデックスから終了イ ンデックスまでの範囲で、終了条件を満たすまでの値が選択されます。 目的 入力の反復範囲を抽出するループ。 これは、X12�EDI�HLループなど、入力から一定の反復範囲だけを処理し、特 定の条件でその範囲を終了させたい場合に便利です。 引数 引数 ソートキーを指定しないと、出力の順序は入力モジュールと同じになりま す。 Input�map�element�([マップ] ループする入力マップモジュール。 モジュール) 開始インデックス(整数) 引数 終了インデックス(整数) 引数 End�Condition�(ブール値) 引数 Filters�(ブール値) 引数 172 入力マップモジュールのループとして考慮され る最初のインデックス(包含)。これはオプショ ンで、指定しない場合は終了インデックスまで すべての反復がループされます。 入力マップモジュールのループとして考慮され る最後のインデックス(包含)。これはオプショ ンで、指定しない場合は開始インデックスから すべての反復がループされます。 式がTrueの場合は、ループが終了することを示 します。これはオプションです。 ブール値を返す式を指定します。この式は、 ループのインスタンスごとに評価されます。こ のフィルター式がtrueを返す場合、インスタン スはループに含まれます。falseを返す場合、イ ンスタンスはループから除外されます。 Sort�Keys�(変数) 各ソートキーを指定する任意の (AscendingSortKey関数また 数のAscendingSort関数また はDescendingSort関数。 IsNull 引数 はDescendingSortKey関数 のいずれか) Contexts�(NestedContext関 EnclosingContext関数また 数またはEnclosingContext はNestedContext関数のいずれかを指定しま す。EnclosingContextは、このループを含む出 関数) 力マップモジュールを指定します。指定しない 場合は、最も近い上位(ancestor)のループマッ プモジュールが使用されます。 NestedContextを使用すると、ループ式内で別の ループ式を指定できます。 26.4.51.�IsNull 名前 IsNull 説明 この関数の動作は、表記によって異なります。 目的 引数にNULL値がある場合はTrueを返します。 XMLでは、Input�Value引数の値がNULL値を示すxsi:nil属性を持ったモジュー ルの場合は、Trueが返されます。 データベースでは、Input�Value引数の値がNULL値の場合は、Trueが返されま す。 戻り値のタイプ 引数 26.4.52.�IsPresent その他の表記ではNULL値の概念をサポートしていないので、常にFalseが返 されます。 ブール値 入力値(シンプル) チェックされる値。 名前 IsPresent 説明 この関数の動作は、表記によって異なります。 目的 引数が存在する場合はTrueを返します。 XMLでは、Input�Value引数の値がドキュメント内にある場合は、Trueが返さ れます。つまり、モジュールや属性が指定されている場合です。この動作 は、ドキュメント内にモジュールはあるが、そのモジュールにテキストが関 連付けられていない場合にTrueを返すという点で、HasValue関数と異なりま す。 フラット表記では、モジュールの値が表示された場合、またはモジュールが 必須の場合はTrueを返します。 戻り値のタイプ 引数 26.4.53.�IsValid 名前 データベースでは、入力時にすべての列が存在するので、常にTrueが返され ます。XMLと同様に、HasValueからTrueが返されるのは、データが存在する かどうかに依存しません。 ブール値 入力値(シンプル) チェックされる値。 IsValid 173 Java 目的 モジュールの検証制限が有効な場合はTrueが返されます。 引数 重大度 説明 26.4.54.�Java この関数は、ループ式から有効なモジュールだけを選択するために使いま す。検証グループが定義されている場合にしか使用できません。より具体的 にいうと、この関数は検証式にValidateGroup関数が指定されている入力モ ジュールを参照しているループ式の中だけで使用できます。 モジュールの検証重大度は有効とはみなされま せん。これには、FATAL�(致命的)、ERROR�(エ ラー)、WARNING�(警告)、INFO�(情報)がありま す。指定した重大度と等しいかそれよりも重大 度が高い検証レポートにより、モジュールがこ のフィルターに対して無効であるとマークされ ます(つまり、Falseが返されます)。デフォルト 値はERRORです。 名前 Java 説明 Javaのリフレクションメカニズムを使って静的Javaメソッドを呼び出し、そ のメソッドから返された値を返します。 目的 静的Javaメソッドを呼び出します。 プロパティを使って、クラス名とメソッド名のみを指定します。引数を使っ て、関数の引数を指定します。たとえば、user.homeというJavaシステムプ ロパティを取得するには、次の式を使用します。 Java (class: java.lang.System, method: getProperty) Constant ("user.home") 戻り値のタイプ シンプル 可変引数のタイプ シンプル 可変引数 プロパティ プロパティ 26.4.55.�Left � クラス名 メソッド名 呼び出すJavaクラスの完全修飾名。 クラス内で呼び出すJavaメソッドの名前。Java メソッドには複数のパラメーターを使用できま す。パラメーターの数は、この関数を使用する ときに指定する引数の数と同じでなければなり ません。 名前 Left 説明 入力引数の一番左の文字を指定した数だけ返します。 目的 戻り値のタイプ 引数 プロパティ 26.4.56.�Lesser 名前 目的 174 一番左の文字を返します。 文字列 入力値(文字列) 長さ Lesser 処理する文字列。 返される一番左にある文字の数。 2つの値のうち、より小さい値のテスト。 LesserOrEqual 説明 入力引数の一番左の文字を指定した数だけ返します。 引数 1つ目の値(シンプル) 戻り値のタイプ 引数 ブール値 2つ目の値(シンプル) テストする1つ目の値。 テストする2つ目の値。 26.4.57.�LesserOrEqual 名前 LesserOrEqual 説明 1つ目の値が2つ目の値と等値か、どちらかがより小さい場合はTrueを返しま す。それ以外は、Falseを返します。 目的 戻り値のタイプ 引数 引数 2つの値が等値か、どちらかがより小さいかをテスト。 ブール値 1つ目の値(シンプル) 2つ目の値(シンプル) テストする1つ目の値。 テストする2つ目の値。 26.4.58.�LoopCopy 名前 LoopCopy 説明 このループ関数は[Loop�expression]�(ループ式)タブ、または集計関数の一部 としてのみ使用できます。これにより、同じループ手順を参照先の出力マッ プモジュールで使用することを指定します。この関数は集計関数を使用した ときに、集計関数の引数に関連するループ式を参照するために自動的に生成 されます。つまり、参照先のループ式の短縮形となります。 目的 引数 引数 指定した出力マップモジュールのループ式をコピーします。 この関数はマップのどこにでも使用でき、参照先のループ式を新たに実行す るという点でLoopReference関数と異なります。LoopReference関数は、 最初に実行したループ式からの値を取ります。 Mapモジュール(Mapモ ジュール) ループ式を持つ出力マップモジュール。 Contexts�(NestedContext関 EnclosingContext関数また 数またはEnclosingContext はNestedContext関数のいずれかを指定しま す。EnclosingContextは、このループを含む出 関数) 力マップモジュールを指定します。指定しない 場合は、最も近い上位(ancestor)のループマッ プモジュールが使用されます。 NestedContextを使用すると、ループ式内で別の ループ式を指定できます。 26.4.59.�LoopIndex 名前 LoopIndex 説明 出力ループの式で現在のインデックス値を使用する場合に使用します。ルー プの最初の反復の値は1です。 目的 戻り値のタイプ 引数 指定した反復出力マップモジュールのインデックス値を返します。 整数�(32) Looping�Output�Element ([Map]モジュール) インデックス値を取得するループの出力マップ モジュールを指定します。 175 LoopReference 26.4.60.�LoopReference 名前 LoopReference 説明 このループ関数は[Loop�expression]�(ループ式)タブのみで使用できます。 この出力マップモジュールは、指定したマップモジュールのループ式で得ら れた値を使ってループするよう指定します。マップ出力で指定したマップモ ジュールの後に出現するマップモジュールのみで使用できます。この関数は 一般に、出力マップモジュールへの参照と一緒に使用されます。 目的 引数 引数 前の出力マップモジュールループの値を使ってループします。 この関数は、参照先の出力マップモジュールの後にしか使用できず、ループ を作成したループ式を再実行せずに元のループから得られた値を使うという 点でLoopCopy関数と異なります。 Mapモジュール(Mapモ ジュール) マップ出力で、この出力マップモジュールの 前に実行されるループ式を持つ出力マップモ ジュール。 Contexts�(NestedContext関 EnclosingContext関数また 数またはEnclosingContext はNestedContext関数のいずれかを指定しま す。EnclosingContextは、このループを含む出 関数) 力マップモジュールを指定します。指定しない 場合は、最も近い上位(ancestor)のループマッ プモジュールが使用されます。 NestedContextを使用すると、ループ式内で別の ループ式を指定できます。 26.4.61.�LoopVariable 名前 LoopVariable 説明 生成されたXQueryコードに直接アクセスする必要がある場合に使用する低レ ベルの関数です。 目的 戻り値のタイプ 引数 26.4.62.�Property 指定したルーピング出力マップモジュールに関連付けられているXQuery のforループ変数を返します。 現在、この関数はEDI�Hlループの処理をサポートする関数と一緒に使用され ています。 文字列 ルーピング出力モジュール ([Map]モジュール) ループ変数を取得したいルーピング出力マップ モジュールを指定します。 名前 Property 説明 この関数は、プロパティとその値を指定するために使用します。名 前と値のペアを持つプロパティが必要な場合に使用します。これに は、ExecuteMap関数、ValidateReport関数、CondValidateReport関 数、ValidateGroup関数が含まれます。 目的 戻り値のタイプ プロパティ 176 プロパティ(名前と値のペア)を指定します。 便宜上、この関数ではプロパティをプロパティまたは引数で指定できます。 プロパティと引数の両方を指定すると、引数が優先します。 文字列 プロパティ名 プロパティの名前。 MakeDateTime プロパティ プロパティ値 引数 プロパティ値(文字列) 引数 プロパティ名(文字列) プロパティの値。 プロパティの名前。 プロパティの値。 26.4.63.�MakeDateTime 名前 MakeDateTime 説明 日付と時間から日時型の値を作成します。日時または時間の型の値は、自動 的に日時型に変換される点に注意してください。この関数は、日時と時間の2 つの値を組み合わせて日時型の値を作成する場合にだけ使用します。 目的 戻り値のタイプ 引数 引数 日付と時間からDateTimeを作成します。 日時 日付(日付) 時間(時間) 日付の値。 時間の値。 26.4.64.�MapValues 名前 MapValues 説明 この関数は、入力値のセットを出力値にマッピングするために使用しま す。ValueMapping関数の変数の数をサポートします。数はそれぞれ、1つま たは複数の入力値から1つの出力値へのマッピングを指定します。 目的 戻り値のタイプ 引数 引数 26.4.65.�Multiply 入力値のセットから出力値へのマッピングを指定します。 文字列 ソースマップモジュール(文 入力値のソースになるマップモジュール(通常は 入力)。 字列) 値(ValueMapping) 入力値のセットから出力値へのマッピング。こ こには、ValueMapping関数はいくつでも指定 できます。 名前 Multiply 説明 1つ目の値と2つ目の値を乗算して積を返します。 目的 戻り値のタイプ 引数 引数 2つの数値を乗算します。 一般的な数値 1つ目の値(一般的な数値) 2つ目の値(一般的な数値) 乗算する1つ目の値。 乗算する2つ目の値。 26.4.66.�NameValuePairLookup 名前 NameValuePairLookup 177 NestedContext 目的 説明 名前と値を表す一連の隣接したモジュールのペアの値をルックアップしま す。 この関数は、名前と値を表す隣合わせのモジュールのペアを処理するために 特別にデザインされたものです。これは、EDIドキュメント(たとえば、X12 EDIのLIN�Segmentなど)で使用されます。 この関数は、例で説明するとわかりやすいかもしれません。LIN�Segmentに は、次の5つの名前と値のペアがあります。 LIN01 - Product/Service ID Qualifier LIN02 - Product/Service ID LIN03 - Product/Service ID Qualifier LIN04 - Product/Service ID LIN05 - Product/Service ID Qualifier LIN06 - Product/Service ID LIN07 - Product/Service ID Qualifier LIN08 - Product/Service ID LIN09 - Product/Service ID Qualifier LIN10 - Product/Service ID Product/Service�ID�Qualifierは名前、Product/Service�IDは値です。Product/ Service�IDの中でUPという修飾子のものを探すには、次のような式ツリーを 使用します。 NameValuePairLookup Lookup Value Constant 'UP' First Element LIN01 Last Element LIN09 この式はNameモジュールにLIN01、03、05、07、09を持ち、その値がUPで あるものを見つけると、モジュールLIN02、04、06、08、10が関連付けられ ているValueモジュールの値を返します。 Last�Element引数は、最後のValueモジュール(LIN10)ではなく、最後 のNameモジュール(この例ではLIN09)を取るという点に注意してく ださい。 戻り値のタイプ シンプル 引数 First�Element�(シーケンス) 引数 引数 Lookup�Value�(シンプル) Last�Element�(シーケンス) シリーズ内のNameモジュールと比較する値。 Name/Valueモジュールのシリーズの中の最初 のNameモジュール。 Name/Valueモジュールのシリーズの中の最後 のNameモジュール。 26.4.67.�NestedContext 名前 NestedContext 説明 この関数は、ループ式のContexts引数にのみ使用でき、このループ式内でネ スト化するループ式を指定します。 目的 このループ式の中でループ式のネスト化を有効にします。 入力ループを参照する際、参照先のループの祖先である入力ループのレベル には、出力内でループ式をそれぞれ関連付ける必要があります。ネスト化機 能によって、1つのループ式の中で複数の入力ループを参照できるようになり ます。 可変引数 可変引数のタイプ この関数では可変引数を指定しますが、ループ関数として引数を1つだけ定義 することもできます。 � ループ式 26.4.68.�NormalizeSpace 名前 178 NormalizeSpace Not 目的 余分なホワイトスペースを除去します。 戻り値のタイプ 文字列 説明 可変引数 可変引数のタイプ 26.4.69.�Not 名前 目的 説明 戻り値のタイプ 引数 26.4.70.�NotEqual 最初または最後の余分なホワイトスペースを除去します。マップモジュー ルの値の単語の間に複数のスペースがある場合は、1つに減らします。ホ ワイトスペースの空白以外の文字はすべて削除されます。これは、XPath のfn:normalize-space関数と同様です。先頭と末尾のスペース以外を削除した くない場合は、Trim関数を使います。 � 文字列 Not ブール値のNot�(否定)。 Input�Value引数がFalseの場合はTrueを返し、Input�Value引数がTrueの場合 はFalseを返します。 ブール値 入力値(ブール値) 否定する入力値。 名前 NotEqual 説明 1つ目の値が2つ目の値と等値でない場合はTrueを返します。等値の場合 はFalseを返します。 目的 戻り値のタイプ 引数 引数 26.4.71.�Or 2つの値が等値でないことをテスト。 ブール値 1つ目の値(シンプル) 2つ目の値(シンプル) テストする1つ目の値。 テストする2つ目の値。 名前 Or 説明 すべての引数にブール値のOr演算を実行します。いずれかの引数がTrueの場 合はTrueを返し、それ以外の場合はFalseを返します。 目的 戻り値のタイプ 可変引数 可変引数のタイプ ブール値のOr。 ブール値 � ブール値 26.4.72.�ParseDateTime 名前 ParseDateTime 179 ReadMapInput 目的 指定されたパターンの値からDateTimeを作成します。 戻り値のタイプ 日時 説明 プロパティ 指定されたパターンに基づいて、文字列からDateTime型の値を作成します。 パターン 値を日時に解析するときに使用するパター ン。たとえば、YYYY-MM-ddというパターン は1960-09-11に解析されます。次の値が使用で きます。 Symbol Meaning Presentation Examples ------ ------- ------------ ------G era text AD C century of era (>=0) number 20 Y year of era (>=0) year 1996 x weekyear year 1996 w week of weekyear number 27 e day of week number 2 E day of week text Tuesday; Tue y year year 1996 D day of year number 189 M month of year month July; Jul; 07 d day of month number 10 a halfday of day text PM K hour of halfday (0~11) number 0 h clockhour of halfday (1~12) number 12 H hour of day (0~23) number 0 k clockhour of day (1~24) number 24 m minute of hour number 30 s second of minute number 55 S fraction of second number 978 z time zone text Pacific Standard Time; PST Z time zone offset/id zone -0800; -08:00; America/Los_Angeles ' escape for text delimiter '' single quote literal ' パターンの文字数が形式を決めます。 Text�:パターンの文字数が4字以上の場合は完全 なフォームが使用されます。それ以下の場合は 短縮フォームが使われます(短縮フォームがある 場合)。 Number�:最小桁数。短い数値はゼロパディング で示されます。 Year�:yearとweekyearのフィールドは特殊な数 値表記で処理されます。たとえば、yが2桁の場 合は、現在の世紀のゼロベースの年が2桁で示さ れます。 Month�:3桁以上の場合はテキストで、それ以外 は数値で示されます。 Zone�:Zはコロンなしでオフセットを出力 し、ZZはコロン付きでオフセットを出力しま す。ZZZ以上はゾーンIDを出力します。 引数 値(文字列) ['a'..'z']と['A'..'Z']の範囲以外の文字がパターン に含まれている場合は、引用符付きテキスト として処理されます。たとえば、":"、"."、" "、"#"、"?"などの文字は、一重引用符に囲まれ ていなくても、出力される日時のテキストに表 示されます。 日時として解析する値。 26.4.73.�ReadMapInput 名前 目的 180 ReadMapInput マップの入力により指定されたインスタンスドキュメントをマップモジュー ルに読み込みます。 ReadMessage 説明 戻り値のタイプ プロパティ ReadMapInput関数はI/O式としてのみ使用できます。読み取るデータを含 めるには、この関数をモジュールのI/O式として指定します。マップのソース URLの内容がマップ実行の際に読み取られ、I/O式を含むモジュールと下位モ ジュールの値が入力されます。 この関数の使用をネストすることはできません。つまり、マップモジュール にI/O式が含まれている場合、下位のマップモジュールにI/O式を含むことは できません。詳細は、入力/出力のセクションを参照してください。 なし(この関数はI/O式としてのみ使用できます) 表記 プロパティ オフセット プロパティ 長さ 引数 オフセット(整数) 引数 長さ(整数) このURLを処理する際に選択する表記タイプ。I/ Oをコントロールする構造(このモジュールを継 承する構造)に複数の表記がある場合に使用しま す。 内容の読み込みを開始する時点のバイト単位の オフセット。これを指定しないと、0が想定され ます。 読み取る内容のバイト数。これを指定しない と、すべてのバイトが読み取られます。 内容の読み込みを開始する時点のバイト単位の オフセット。これを指定しないと、0が想定され ます。 読み取る内容のバイト数。これを指定しない と、すべてのバイトが読み取られます。 26.4.74.�ReadMessage 名前 目的 説明 ReadMessage メッセージを含むESBからメッセージをマップモジュールに読み込みます。 ReadMessage関数はI/O式としてのみ使用できます。読み取るデータを含め るには、この関数をモジュールのI/O式として指定します。メッセージの内容 がマップ実行の際に読み取られ、I/O式を含むモジュールと下位モジュールの 値が入力されます。 Reading�Message�Properties�-�メッセージに関連するプロパティにアクセスす る場合、マップモジュールにプロパティを読み込むことができます。そのた めには、1番目の子マップモジュールでReadMessageProperties�I/O関数を 指定し、/Builtin/Structures/Properties構造を継承し、ループにする必要があり ます。メッセージが読み取られると、この構造のプロパティモジュールにプ ロパティの名前と値が挿入されます。 戻り値のタイプ プロパティ この関数を複数のマップモジュールで使用し、複数のメッセージを読み取る ことができます。この関数の使用をネストすることはできません。つまり、 マップモジュールにI/O式が含まれている場合、下位のマップモジュールにI/ O式を含むことはできません。詳細は、入力/出力のセクションを参照してく ださい。 なし(この関数はI/O式としてのみ使用できます) 表記 プロパティ エンドポイント プロパティ オフセット プロパティ 長さ このメッセージを処理する際に選択する表記 タイプ。I/Oをコントロールする構造(このモ ジュールを継承する構造)に複数の表記がある場 合に使用します。 メッセージの取得場所を特定するために、メッ セージを含むESBにとって意味のあるエンドポ イント名。 内容の読み込みを開始する時点のバイト単位の オフセット。これを指定しないと、0が想定され ます。 読み取る内容のバイト数。これを指定しない と、すべてのバイトが読み取られます。 181 ReadMessageProperties 引数 オフセット(整数) 引数 長さ(整数) 内容の読み込みを開始する時点のバイト単位の オフセット。これを指定しないと、0が想定され ます。 読み取る内容のバイト数。これを指定しない と、すべてのバイトが読み取られます。 26.4.75.�ReadMessageProperties 名前 ReadMessageProperties 説明 ReadMessageProperties関数はI/O式としてのみ使用できます。ESBメッ セージからプロパティをマップモジュールに読み込む場合に、この関数を使 用します。ReadMessage関数では、1番目の子モジュールでのみ使用できま す。さらに、この関数を指定するモジュールの最大出現回数は-1でなければ ならず、モジュールは/Builtin/Structures/Propertyから継承していなければな りません。 目的 戻り値のタイプ ESBメッセージからプロパティをマップモジュールに読み込みます。 なし(この関数はI/O式としてのみ使用できます) 26.4.76.�ReadNested 名前 ReadNested 説明 ReadNested関数はI/O式としてのみ使用できます。読み取るデータを含める には、この関数をモジュールのI/O式として指定します。この関数を指定する と、このモジュールが継承する構造の表記を使って、通常このモジュールの 処理のためにデータが読み取られます。この関数を使って、さまざまな表記 の組み込みデータのマッピングに対応できます。 目的 戻り値のタイプ プロパティ 26.4.77.�ReadURL 指定した表記を使って、組み込みデータを処理します。 この関数を複数のマップモジュールで使用し、複数のファイルを読み取るこ とができます。この関数の使用をネストすることはできません。つまり、 マップモジュールにI/O式が含まれている場合、下位のマップモジュールにI/ O式を含むことはできません。詳細は、入力/出力のセクションを参照してく ださい。 なし(この関数はI/O式としてのみ使用できます) 表記 このURLを処理する際に選択する表記タイプ。I/ Oをコントロールする構造(このモジュールを継 承する構造)に複数の表記がある場合に使用しま す。 名前 ReadURL 説明 ReadURL関数はI/O式としてのみ使用できます。読み取るデータを含めるに は、この関数をモジュールのI/O式として指定します。URLの内容がマップ実 行の際に読み取られ、I/O式を含むモジュールと下位モジュールの値が入力さ れます。 目的 URLの内容をマップモジュールに読み込みます。 この関数を複数のマップモジュールで使用し、複数のファイルを読み取るこ とができます。この関数の使用をネストすることはできません。つまり、 マップモジュールにI/O式が含まれている場合、下位のマップモジュールにI/ O式を含むことはできません。詳細は、入力/出力のセクションを参照してく ださい。 182 RecursiveLoop 戻り値のタイプ プロパティ この関数を使って、マップの実行時に、MapExecutionContextでメソッドを 呼び出して動的に割り当てられた複数のドキュメントまたはオブジェクトか ら読み取ることができます。この場合、URLは必要ありません。 なし(この関数はI/O式としてのみ使用できます) URL プロパティ 表記 プロパティ オフセット プロパティ 長さ 引数 オフセット(整数) 引数 長さ(整数) データの読み取り先であるURL。ファイルを読 み取る場合、file://の後にファイル名を付加した 形式で、ファイルURLを指定します。 このURLを処理する際に選択する表記タイプ。I/ Oをコントロールする構造(このモジュールを継 承する構造)に複数の表記がある場合に使用しま す。 内容の読み込みを開始する時点のバイト単位の オフセット。これを指定しないと、0が想定され ます。 読み取る内容のバイト数。これを指定しない と、すべてのバイトが読み取られます。 内容の読み込みを開始する時点のバイト単位の オフセット。これを指定しないと、0が想定され ます。 読み取る内容のバイト数。これを指定しない と、すべてのバイトが読み取られます。 26.4.78.�RecursiveLoop 名前 RecursiveLoop 説明 このループ関数は[Loop�expression]�(ループ式)タブのみで使用できます。 この関数では、[Loop�expression]�(ループ式)タブに関連する出力マップモ ジュールは該当する入力マップモジュールの引数式に再帰的にループするこ とを指定します。 目的 入力マップモジュールに従った再帰的ループ。 内包する出力マップモジュールと参照元の入力マップモジュールの両方が再 帰的マップモジュールである場合に使用します。入力の各モジュールインス タンスに関して、再帰の深さにかかわりなく、出力のインスタンスが作成さ れます。 プロパティ プロパティ プロパティ プロパティ ソートキーを指定しない場合、出力の順序は入力モジュールと同じ順序にな ります。 Input�map�element�([マップ] ループする入力マップモジュール。 モジュール) Filters�(ブール値) ブール値を返す式を指定します。この式は、 ループのインスタンスごとに評価されます。こ のフィルター式がtrueを返す場合、インスタン スはループに含まれます。falseを返す場合、イ ンスタンスはループから除外されます。 Sort�Keys�(変数) 各ソートキーを指定する任意の (AscendingSortKey関数また 数のAscendingSort関数また はDescendingSortKey関数 はDescendingSort関数。 のいずれか) Contexts�(NestedContext関 EnclosingContext関数また 数またはEnclosingContext はNestedContext関数のいずれかを指定しま す。EnclosingContextは、このループを含む出 関数) 力マップモジュールを指定します。指定しない 場合は、最も近い上位(ancestor)のループマッ プモジュールが使用されます。 NestedContextを使用すると、ループ式内で別の ループ式を指定できます。 183 Right 26.4.79.�Right 名前 Right 説明 一番右にある指定した数の文字を入力引数から返します。 目的 戻り値のタイプ 引数 プロパティ 一番右の文字を返します。 文字列 入力値(文字列) 長さ 処理する文字列。 返される一番右にある文字の数。 26.4.80.�SimpleLoop 名前 SimpleLoop 説明 このループ関数は[Loop�expression]�(ループ式)タブのみで使用できます。こ の関数では、[Loop�expression]�(ループ式)タブで関連付けた出力マップモ ジュールを、該当する入力マップモジュールの引数式の値に応じてループさ せることを指定します。 目的 入力マップモジュールに従ったループ。 入力マップモジュールが、ループする出力マップモジュールにマッピングさ れる場合、SimpleLoop関数が、直近の祖先ルーピング出力モジュールの位 置に自動的に作成され、ループが定義されます。 引数 引数 引数 引数 プロパティ プロパティ 184 ソートキーを指定しない場合、出力の順序は入力モジュールと同じ順序にな ります。 Input�map�element�([マップ] ループする入力マップモジュール。 モジュール) Filters�(ブール値) ブール値を返す式を指定します。この式は、 ループのインスタンスごとに評価されます。こ のフィルター式がtrueを返す場合、インスタン スはループに含まれます。falseを返す場合、イ ンスタンスはループから除外されます。 Sort�Keys�(変数) 各ソートキーを指定する任意の (AscendingSortKey関数また 数のAscendingSort関数また はDescendingSortKey関数 はDescendingSort関数。 のいずれか) Contexts�(NestedContext関 EnclosingContext関数また 数またはEnclosingContext はNestedContext関数のいずれかを指定しま す。EnclosingContextは、このループを含む出 関数) 力マップモジュールを指定します。指定しない 場合は、最も近い上位(ancestor)のループマッ プモジュールが使用されます。 NestedContextを使用すると、ループ式内で別の ループ式を指定できます。 Emit�Loop�Instance�If�Empty 入力ループにインスタンスがなく、このループ (空の場合はループインスタ の1つのインスタンスを出力で生成する場合、こ のプロパティを選択します。これは、デフォル ンスを生成) トの値を使ってループインスタンスを生成する ために便利です。 Distinct�Child�Element�(個別 個別の値を選択するために使用する入力マップ モジュールが得られます。これにはモジュー の子モジュール) ル名を入力する必要があります。この名前 は、引数として指定した入力マップモジュー ルの下位モジュールの相対パスです。ネーム スペースがある場合、それを含める必要があ ります。たとえば、入力マップモジュールが データベースの行の場合、個別の子モジュー SetEnclosingElement プロパティ ストリーム入力 ルはDatabase:CustomerNumberのようになり ます。これを選択すると、選択したモジュール に対して個別の値を含むループの繰り返しのみ が考慮されます。選択しないと、入力マップモ ジュールのすべてのインスタンスが考慮されま す。 このループの入力データをチャンクごとに分 け、別個に処理されるようにします。このオ プションを使用しないと、変換が実行される 前に、入力データ全体がメモリに読み込まれま す。[Stream�Input]�(ストリーム入力)を指定する と、セグメントで変換処理が行われるため、無 制限の入力データが処理されます。詳細は、ス トリーミングの実行のセクションを参照してく ださい。 [Stream�Input]�(ストリーム入力)を選択 すると、変換式に大幅な制限が課され ます。 26.4.81.�SetEnclosingElement 名前 SetEnclosingElement 説明 現在のモジュールの名前を設定します。この関数がモジュールの式ツリーに 含まれる場合に、そのモジュールが現在のモジュールです。異なるモジュー ルで同じ式セット(式がモジュール名に依存する場合)を再利用する際などに便 利です。 目的 内包するモジュールの名前を設定します。 この関数を使って、モジュールの名前を計算する式を指定できます(通常、定 数関数です)。 引数 この関数は、モジュールのutil式ツリーのルートとしてのみ使用でき ます。 名前(文字列) 内包するモジュールに指定する名前。 26.4.82.�SetVariable 名前 SetVariable 説明 この関数で設定され、GetVariable関数で取得される名前付き変数が、マッ プでサポートされています。この関数では変数の値を設定します。変数の データ型は文字列です。その他の文字列のように、値が数値である限り、数 値操作が可能です。 目的 戻り値のタイプ 引数 プロパティ 指定した変数の値を設定します。 文字列 値(文字列) 変数名 変数を設定する値。 変数の名前。 26.4.83.�SingleIndex 名前 目的 SingleIndex ループ内の1つの入力マップモジュールを選択します。 185 Substring 説明 引数 プロパティ この関数は、ループ式のフィルター引数にのみ使用でき、目的のモジュール のインデックス値を指定します。 インデックス(整数) インデックス 選択するモジュールのインデックス。最初のイ ンデックスが1です。同時にインデックスプロパ ティを指定すると、インデックスプロパティが 優先します。 選択するモジュールのインデックス。最初のモ ジュールのインデックスが1です。 26.4.84.�Substring 名前 Substring 説明 この関数は、ループ式のフィルター引数にのみ使用でき、目的のモジュール のインデックス値を指定します。 目的 戻り値のタイプ 引数 プロパティ プロパティ 26.4.85.�Subtract 文字のサブストリングを返します。 文字列 入力値(文字列) 開始 長さ 処理する文字列。 返されるサブストリングを開始する1に基づく文 字。最初の文字は1です。 開始文字の後に返される文字の数で、開始文字 も含みます。 名前 Subtract 説明 最初の被減数から数値を減算し、その差を返します。 目的 戻り値のタイプ 引数 引数 26.4.86.�Trim 1つの数値からもう1つの数値を減算します。 一般的な数値 被減数(一般的な数値) 減数(一般的な数値) 値が減算される元の数値。 被減数から減算する数値。 名前 Trim 説明 最初または最後の余分なホワイトスペースを除去しま す。NormalizeSpace関数とは異なり、最初または最後の以外のホワイトス ペースには影響がありません。 目的 戻り値のタイプ 可変引数 可変引数のタイプ 最初または最後の余分なホワイトスペースを除去します。 文字列 � 文字列 26.4.87.�ValidateGroup 名前 186 ValidateGroup ValidateReport 目的 説明 モジュールを検証グループとして定義します。 検証グループを使って、追加操作(ループからフィルタリングするなど)を行っ たり、グループ内で検証が行えなかった場合に追加報告を行うモジュールを 特定します。検証グループは、IsValidループフィルター関数とともに使用 し、有効なモジュールにフィルターを適用します。 検証レポートが検証グループのモジュール(検証グループ関数に関連するモ ジュールと同等またはその下位モジュール)に対するものである場合、この関 数(検証レポートのトリガーに関連)に従って別の検証レポートが生成されま す。これにより、グループの検証レポートに別のコンテキストを提供できま す。 この関数は、目的のモジュールの検証式タブのみで指定できます。 戻り値のタイプ 引数 この関数により、CondValidateReport関数を指定することができ、その値 が渡されます。そのため、検証グループであるモジュールで直接検証を行う こともできます。 ブール値 条件(ブール値) 引数 Data�(Simple�(変数)) 引数 重大度 プロパティ メッセージ プロパティ エラー番号 この式でCondValidateReportの使用を可能に するために使用します。この関数の実行には影 響がありません。条件値は、この関数の戻り値 として渡されるだけです。 データを検証レポートに関連付ける任意の数 の式。これらは、検証レポートで名前/値ペア としてレポートされます。ここで指定された 式が[マップ]モジュールの参照の場合、名前 は[マップ]モジュールの名前となり、値はモ ジュールの値になります。Property関数と他の タイプの式を併用すると、検証レポートで名前 ラベルを提供できます。 検証問題の重大度には、情報、警告、エラーが あります。 検証問題を説明するテキスト。 検証問題を特定するオプションの番号。 26.4.88.�ValidateReport 名前 ValidateReport 説明 この関数は何らかの問題に関する検証結果をレポートするために使います。 たとえば、値が一定の制限以内にない場合などです。この関数はどのような 式にでも呼び出すことができます。レポートはマップの実行結果に基づいて 出力され、GUIに表示したり、ランタイムAPIを使ってアクセスすることがで きます。 目的 戻り値のタイプ 引数 検証結果をレポートします。 なし Data�(Simple�(変数)) プロパティ 重大度 プロパティ メッセージ プロパティ エラー番号 データを検証レポートに関連付ける任意の数 の式。これらは、検証レポートで名前/値ペア としてレポートされます。ここで指定された 式が[マップ]モジュールの参照の場合、名前 は[マップ]モジュールの名前となり、値はモ ジュールの値になります。Property関数と他の タイプの式を併用すると、検証レポートで名前 ラベルを提供できます。 検証問題の重大度には、情報、警告、エラーが あります。 検証問題を説明するテキスト。 検証問題を特定するオプションの番号。 187 ValueMapping 26.4.89.�ValueMapping 名前 ValueMapping 説明 この関数は、1つ以上の入力値を1つの出力値にマッピングするためにを使用 します。MapValues関数とともに使用します。 目的 戻り値のタイプ プロパティ プロパティ プロパティ 引数 引数 1つ以上の入力値を1つの出力値にマッピングします。 便宜上、この関数ではプロパティまたは引数の入力値または出力値を指定で きます。プロパティと引数の両方を指定すると、引数が優先します。 文字列 出力値 入力値 入力値からマッピングされた出力値。 出力値にマッピングされる1つの入力値。 Is�Default�Value�(デフォルト このプロパティがtrue�(真)の場合、モジュール のデフォルト値になります。ただし、その他 値) のValueMapping関数が満たされていない場合 に限ります。 出力値(文字列) 入力値(文字列) 入力値からマッピングされた出力値。 出力値にマッピングされる1つ以上の入力値。 26.4.90.�WriteMapOutput 名前 WriteMapOutput 説明 WriteMapOutput関数はI/O式としてのみ使用できます。書き込むデータを含 むモジュールのI/O式としてこの関数を指定します。I/O式を含むモジュール と下位モジュールの値が、マップの実行により指定された結果に書き込まれ ます。 目的 戻り値のタイプ マップで指定した出力結果のドキュメントにこのマップモジュールを書き込 みます。 この関数の使用をネストすることはできません。つまり、マップモジュール にI/O式が含まれている場合、下位のマップモジュールにI/O式を含むことは できません。詳細は、入力/出力のセクションを参照してください。 なし(この関数はI/O式としてのみ使用できます) 26.4.91.�WriteMessage 名前 WriteMessage 説明 WriteMessage関数はI/O式としてのみ使用できます。書き込むデータを含む モジュールのI/O式としてこの関数を指定します。マップの実行中に、I/O式 を含むモジュールと下位モジュールの値からメッセージが送信されます。 目的 このマップモジュールをESBメッセージに書き込みます。 Writing�Message�Properties�-�メッセージにプロパティを書き込む場合、マッ プモジュールからプロパティが挿入されます。そのためには、1番目の子 マップモジュールでWriteMessageProperties�I/O関数を指定し、/Builtin/ Structures/Properties構造を継承し、ループにする必要があります。メッセー ジが書き込まれると、メッセージのプロパティにはこの構造の値が挿入され ます。 この関数を複数のマップモジュールで使用し、複数のメッセージに書き込む ことができます。この関数の使用をネストすることはできません。つまり、 マップモジュールにI/O式が含まれている場合、下位のマップモジュールにI/ O式を含むことはできません。詳細は、入力/出力のセクションを参照してく ださい。 188 WriteMessageProperties 戻り値のタイプ なし(この関数はI/O式としてのみ使用できます) プロパティ エンドポイント プロパティ プロパティ プロパティ Write�Execution�Context Properties�(実行コンテキス トプロパティの書き込み) メッセージに渡されるプロパティ。 メッセージの送信先であるESBエンドポイン ト。一部のESBでは、エンドポイントは物理構 成に依存する設定であるため、メッセージプ ロパティを使って、ESB構成の設定によりメッ セージがルーティングされるようにすることが 推奨されます。 マップ実行コンテキストプロパティをメッセー ジに追加するには、このプロパティをオンにし ます。デフォルトでは、プロパティは追加され ません。マップが実行されると、マップ実行コ ンテキストプロパティには、マップをトリガー した受信ESBメッセージのプロパティが含まれ ます。 26.4.92.�WriteMessageProperties 名前 WriteMessageProperties 説明 WriteMessageProperties関数はI/O式としてのみ使用できます。マップモ ジュール値のプロパティをESBメッセージに書き込む場合に、この関数を使 用します。WriteMessage関数では、1番目の子モジュールでのみ使用できま す。さらに、この関数を指定するモジュールの最大出現回数は-1でなければ ならず、モジュールは/Builtin/Structures/Propertyから継承していなければな りません。 目的 戻り値のタイプ 26.4.93.�WriteURL マップモジュールのプロパティをESBメッセージに書き込みます。 なし(この関数はI/O式としてのみ使用できます) 名前 WriteURL 説明 WriteURL関数はI/O式としてのみ使用できます。書き込むデータを含むモ ジュールのI/O式としてこの関数を指定します。I/O式を含むモジュールと下 位モジュールの値が、指定したURLに書き込まれます。 目的 指定したURLにマップモジュールを書き込みます。 この関数を複数のマップモジュールで使用し、複数のURLに書き込むことが できます。この関数の使用をネストすることはできません。つまり、マップ モジュールにI/O式が含まれている場合、下位のマップモジュールにI/O式を 含むことはできません。詳細は、入力/出力のセクションを参照してくださ い。 戻り値のタイプ プロパティ この関数を使って、マップの実行時に、MapExecutionContextでメソッドを 呼び出して動的に割り当てられた複数のドキュメントまたはオブジェクトに 書き込むことができます。この場合、URLは必要ありません。 なし(この関数はI/O式としてのみ使用できます) URL データを書き込む先のURL。ファイルを書き込 む場合、file://の後にファイル名を付加した形式 で、ファイルURLを指定します。 26.4.94.�XPathFunction 名前 XPathFunction 189 XPathFunction 目的 説明 XPath関数を呼び出します。 XPath関数をオプションで呼び出し、式のそれぞれの引数にその関数を渡しま す。 パラメーターリストに含まれる式のすべての引数を参照するには、%vを指定 します。たとえば、すべての引数を使ってfn:concat�XPath関数を呼び出すに は、関数名/引数プロパティでfn:concat(%v)と指定します。 戻り値のタイプ 可変引数 可変引数のタイプ プロパティ 190 1つの引数を得るには、%anを指定することもできます。ここでのnは引数の 数で、ゼロから開始します。 シンプル � シンプル 関数名/引数 呼び出すXPath関数名とその引数。 付録A�互換性 ここでは、現在および以前のバージョンのリリースノートとともに、ランタイムの互換性に関する ルールを示します。 互換性 A.1.�互換性 このセクションでは、Talend�Data�Mapperの異なるリリース間でのマップまたは構造における互換性 のルールについて説明します。 A.1.1.�以前のバージョンからのマップ/構造 Talend�Data�Mapperの以前のリリースで作成されたマップまたは構造は、Talend�Data�Mapperの現 在のバージョンで実行できます。古いマップまたは構造は異なるメタデータルールを使用して作成さ れている場合がありますが、すべてのメタデータはバージョン管理されているため、現在のリリース のTalend�Data�Mapperが、バージョンの違いを検出し、必要な調整を加えます。古いマップまたは構 造を開くためにData�Mapperを使用している場合は、開いたときに未保存として表示されることがあ ります(エディターのタブに星型が表示される)。これは、マップまたは構造が現在のメタデータ形式 で最新のバージョンに変換されたことを示しています。 A.1.2.�デザイナーとランタイムの互換性 デザイナーとランタイムはTalend�Data�Mapperのリリースが異なる場合があるため、それらの間で のマップと構造の互換性について注意する必要があります。ランタイムより新しいリリースのデザイ ナーを使用しており、そのためランタイムが処理できないマップを作成している場合があります。こ れが起こった場合、ランタイムは、バージョンの不一致のためマップを開くことができない旨を示す エラーメッセージを表示します。この時点で、マップを生成したデザイナーと同じまたはそれ以降の リリースのランタイムを使用して、マップを実行する必要があります。 リリース3.1.0現在では、同じメジャーおよびマイナーバージョン(3.1.xなど)内のデザイナーとラ ンタイムは互換性が保証されています。たとえば、デザイナーバージョン3.2.4でマップを作成し て、3.2.0ランタイムで実行できますが、3.1.4ランタイムでは、必ずしもマップを実行できるとはか ぎりません。 192 付録B�謝辞 次のオープンソースプロジェクトを使用できることに深く感謝しています。 • Eclipse�-�このプロジェクトは、Eclipseプラットフォーム上で構築されています(http:// www.eclipse.org/)。 • Apache�-�このプロジェクトには、Apache�Software�Foundationによって開発されたソフトウェア が含まれます(http://www.apache.org/)。 • DOM4J�-�http://www.dom4j.org • LegStar�-�http://www.legstar.com/�-�COBOLインポートテクノロジ向け。 • XPP�-�このプロジェクトには、Indiana�University�Extreme�Labによって開発されたソフトウェア が含まれます(http://www.extreme.indiana.edu/)�-�内部メタデータの解析に使用されます。 • 特に、Saxon�-�http://www.saxonica.com�-�Saxon�B製品は製品開発の当初から使用され、高品質 で堅牢なXQuery実装にとって不可欠でした。
© Copyright 2024