uCosminexus Interschema ユーザーズガイド
選択構造の子コンポーネントは,定義された順に変換するデータとコンポーネントが合うかどうかを評価します。
例えば,選択構造「DATA」があります。この構造は,「MSG1」「MSG2」「MSG3」という子コンポーネントを持っています。
コンポーネントをMSG1,MSG2,MSG3の順に定義した場合,まず,コンポーネント「MSG1」を評価して正当であれば「MSG1」を選択し,不当であれば「MSG2」を評価します。コンポーネント「MSG2」が正当であれば「MSG2」を選択し,不当であれば「MSG3」を評価します。つまり,選択構造のコンポーネントは定義順に評価され,最初に正当なものが選択されます。
この評価順序は,順序決定式を定義して変更できます。データの値によって選択するコンポーネントが決まっている場合,直接そのコンポーネントを選択する指定ができます。親の選択構造のコンポーネントには評価順序の条件を表す式(順序決定式)を記述し,子コンポーネントには自コンポーネントを選択する場合の値(順序決定値)を指定します。以上のように定義しておくと,データ変換時に式を評価し,同じ値を持つコンポーネントを優先的に評価します。
評価順序を決定する式は,[順序決定式]ダイアログに記述します。[順序決定式]ダイアログは,式を定義する選択構造の[構造のプロパティ]ダイアログで[順序決定式]ボタンをクリックすると表示されます。
図6-11 [順序決定式]ダイアログ
順序決定式は,テキストを直接入力したり,ダイアログから演算子,関数などを選択したりして記述します。
評価順序を決定する値は,[順序決定値]ダイアログに記述します。[順序決定値]ダイアログは,値を定義するコンポーネントの[コンポーネントのプロパティ]ダイアログで[順序決定値]ボタンをクリックすると表示されます。
図6-12 [順序決定値]ダイアログ
順序決定値は,値の属性を指定して,値を直接入力します。
評価順序は対で指定するので,選択構造に対して順序決定式を定義したら,子コンポーネントに対して順序決定値を定義します(一つの選択構造に対して複数の子コンポーネントに値を定義します)。
「MSG1」「MSG2」「MSG3」というコンポーネントを持つ選択構造「DATA」の場合の例を次に示します。
図6-13 順序決定式の例
この構造に対して,選択構造「DATA」の子コンポーネントを選択する順序決定式を定義します。
要素「メッセージ番号」の値によって子コンポーネントを選択するので,構造「DATA」に対してメッセージ番号のコンポーネント名を記述します。
ROOT@HEAD@メッセージ番号
コンポーネント名は,ルート構造から対象コンポーネントまでを「@」で連結して指定します。
また,n階層上のコンポーネントを指定する略記法「\n」を使用した順序決定式を次に示します。「\1」で「DATA」の1階層上の構造「ROOT」を示します。
\1@HEAD@メッセージ番号
また,子コンポーネントには順序決定式に対応する値として,メッセージ番号の値を定義します。「MSG1」に対しては「1」,「MSG2」に対しては「2」,「MSG3」に対しては「3」を定義します。以上のように定義しておくと,変換するデータのメッセージ番号が「2」の場合は,コンポーネント「MSG2」が優先的に選択されて評価されることになります。なお,選択構造の順序決定式の指定条件が,子コンポーネントの順序決定値のどれにも合わなかった場合は,次のように処理されます。
次に,ORDEROFFSET関数を使用して順序決定式を定義する方法について説明します。
通常,順序決定式では,式を定義する選択構造よりも前に出現するコンポーネントを指定します。しかし,入力フォーマットの場合,ORDEROFFSET関数を使用して,選択条件の値にしたいコンポーネントが出現していない状態で,選択条件を指定できます。ORDEROFFSET関数の使用例を次に示します。
図6-14 ORDEROFFSET関数の使用例
図6-14の例では,選択構造の子の先頭から10バイトの位置に,メッセージを識別するための区分があります。メッセージMSG2は,「M2」という区分で識別されています。
ORDEROFFSET関数で順序決定式を指定する場合の規則を次に示します。
ORDEROFFSET関数で指定した位置にデータが存在しない場合は,エラーになります。ORDEROFFSET関数については,「6.7.3 関数」を参照してください。
All Rights Reserved, Copyright (C) 2000, Information-technology Promotion Agency, Japan.
All Rights Reserved. Copyright (C) 2005, 2008, Hitachi, Ltd.
All Rights Reserved, Copyright (C) 1985-1998, Microsoft Corporation.