要約
異なる環境に対する異なる戦略
- 以下のアクションは、反復処理において同じ戦略を共有します。すなわち、「ソースからのマップ」、「サブマップの新規作成」、「サブマップの呼び出し」、「ESQL ルーチンの呼び出し」です。
- 「集計」アクションは、独自の方法で反復を処理します。
- 「式の入力」アクションは、反復可能度とは無関係です。
「ソースからのマップ」、「サブマップの新規作成」、「サブマップの呼び出し」、「ESQL ルーチンの呼び出し」アクションにおける 1 対 1 マッピングの反復処理
- 反復可能度の判別時に、エレメント (または属性) は、1 つ以上の xsd シーケンス/選択/すべて/グループといったエレメント (またはコンテナーのシーケンス/選択/すべて/グループ) と共に、1 つのレベルを形成します。
- マッピングの作成は 3 つのステップ処理から成ります。すなわち、拡張、MapFrom 式の設定、ForEach/If/Condition の追加という処理です。
最後のステップとして、アルゴリズムの詳細な記述を行います (ForEach の挿入など)。
- 選択されたマッピング・ソースおよびターゲットから開始して、内側から外へと進み、反復ソースの 1 つのレベルを、反復ターゲットの 1 つのレベルに突き合わせます。
- ソースおよびターゲット内の反復の、それぞれの突き合わせレベルごとに、以下を行います。
- ターゲットのこのレベルに反復シーケンス/選択/すべて/グループ・エレメントがない場合には、ターゲット構造のレベルを含む ForEachStatement を作成します。
- ForEach の式は、反復ソースのレベルのマップ可能な参照です。
- ターゲットのこのレベルが、反復シーケンス/選択/すべて/グループに含まれる場合、シーケンス/選択/すべて/グループ内のすべての構造を含む ForEachStatement を作成します。
- ForEach の式は、反復ソースのレベルのマップ可能な参照です。
- 期待されるシーケンス/選択/すべて/グループのメンバーを含む、期待される式を持つ ForEach がすでにある場合には、さらに ForEach は作成しません。
- 異なる式を持つ ForEach がすでにあるものの、それが期待されるシーケンス/選択/すべて/グループのメンバーを含む場合には、必要な ForEach を、既存の ForEach の子として作成します。
内部 ForEach には、シーケンス/選択/すべて/グループのエレメントの内容すべてを含む If-Condition ブロックが含まれます。
- 上記の Condition 式は、外部 ForEach 内の式のオカレンスが、内部 ForEach 内の式のオカレンスに等しいことを示します。
- ターゲット内の反復のアンマッチのレベルは無視します。
- ソース内の反復の、各アンマッチのレベルごとに、以下を行います。
- ForEachStatement で、IfStatement を含むもの、ConditionStatement を含むもの、およびターゲット構造のレベルを含むものを作成します。
- ForEach の式は、反復ソースのレベルのマップ可能な参照です。
- 反復ソースのレベルに対する ForEach がすでにある場合には、さらに ForEach は作成しません。
- Condition の式は occurrence(this_level_of_repeating_source)=1 です。
- 反復ソースのレベルの最初に現れる位置に対する Condition がすでにある場合には、さらに Condition は作成しません。
- すでに Qualify があるものの、期待される条件がない場合には、Qualify 内に別の Condition を作成します。
- リレーショナル・データベース・ターゲット・ステートメントは、ForEach エレメント内部に置かなければなりません。
- 単一ソースがネストされた反復レベルを含むときには、それぞれのレベルごとに ForEach がネストされます。
- リレーショナル・データベース・ソースの選択結果セットは、概念的には反復です。
ただし、データベース・ソースからのマッピングは、選択ステートメントの有効範囲の拡張を必要とすることがあります。
事を単純にするために、ツールは、データベース・ソースからのマッピングの結果として、ForEach を挿入しません。
- SelectStatement をステートメント・モデルに挿入すると、マッピング・ツールは常に、その内部で結果セットをループする ForEach を持つ Select を作成します。
「ソースからのマップ」アクションにおける 1 対多マッピングの反復処理
- それぞれのターゲットごとに 1 回ずつ、1 対 1 戦略を何回も使用します。
- 多数のマッピング間で最適化は試行しないでください。
「ソースからのマップ」、「サブマップの新規作成」、「サブマップの呼び出し」、「ESQL ルーチンの呼び出し」アクションにおける多対 1 マッピングの反復処理
- 個々のソースおよびターゲット間で、1 対 1 戦略を適用します。
- ソース反復のそれぞれのレベルごとに、各ソースによって呼び出される ForEach エレメントをネストします。
インスタンスにより限定して、ネストされた ForEach エレメントが、同じ索引のインスタンスだけを選出するようにします。