uCosminexus Interschema ユーザーズガイド

[目次][用語][索引][前へ][次へ]

3.4 FDLファイル作成時の注意事項

FDLファイルのツリー構造は,データの各要素の出現順序を表します。データ構造の作成方法は様々に考えられるので,「3.2 簡単なデータ構造のフォーマット定義例」以降で説明した構造の作成例は一つの例に過ぎません。変換するデータと照らし合せて,要求を満たす構造を作成してください。なお,構造を作成するときには,次の点に注意してください。

<この節の構成>
(1) 要素の定義
(2) セパレータの定義
(3) 解放文字の定義
(4) 構造の定義

(1) 要素の定義

要素の型を定義するときの注意事項は,属性ごとに三つに分類されます。

次に,要素を定義するときの注意事項について属性ごとに説明します。

(a) 要素の属性が整数,実数,暗黙的小数部付数値の場合
(b) 要素の属性が日付時刻の場合

YYMMDD型は6桁の数値で表しますが,上位2桁は西暦年を意味するため,数値へ変換した場合の値としては8桁の数値になります。したがって,YYMMDD型で読み込んだ要素の値をそのまま整数6桁の要素にマッピングすると,桁あふれが発生します。入力した日付型の要素の値を出力する場合は,出力側の要素も日付型を使用してください。

(c) 要素の属性が文字列の場合

文字列型の要素で,文字コードとして2バイト文字のコードを指定した場合は,埋め字は2バイト文字でなければなりません。埋め字をバイト列で指定する場合も2バイトの指定が必要です。2バイト文字以外の文字コードでは,埋め字は1バイト(文字)で指定します。

(2) セパレータの定義

可変長の要素,可変回数出現するコンポーネントに対しては,原則的に要素の終わりを示したり,コンポーネントの出現の終了を示したりする,区切りとしてのセパレータが必要になります。セパレータを定義するときの注意事項について次に説明します。

(3) 解放文字の定義

要素の文字列中で,セパレータと同じ文字を使用する場合は,その文字が,要素の終わりを示すセパレータなのか,要素のデータの一部なのかを区別するために,解放文字を使用する必要があります。解放文字の直後の文字は,セパレータではなく,要素のデータの一部として解釈されます。

次に,セパレータとして「+」,解放文字として「?」を使用した場合の入力データの例を示します。

[図データ]

解放文字「?」の直後の文字「+」は,要素のデータの一部として扱われるので,要素は「ABC+DEF」と「+123」の二つあることになります。

要素の文字列中で,解放文字と同じ文字を使用する場合は,セパレータと同じように,文字の直前に解放文字を指定する必要があります。解放文字の定義方法はセパレータと同じですが,解放文字はルート構造に設定します。設定した解放文字は,そのフォーマット全体に対して適用されます。

(4) 構造の定義

構造を定義する場合の注意事項は,次の3種類あります。

次に,各内容について説明します。

(a) コンポーネントの出現回数を省略する場合

コンポーネントの最大出現回数を省略すると,マップ式の記述に制限が発生します。コンポーネントがまとまって意味を持つ構造(例えば,単独であってもデータとして完結している構造)以外には,極力最大出現回数を省略しないでください。

(b) 選択構造を定義する場合

選択構造を使用する場合,できる限りコンポーネントの評価順序を指定してください。評価順序の指定は,構造に対して順序決定式を,子コンポーネントに対して順序決定値を定義します。コンポーネントの評価順序を指定するには,評価順序を指定する選択構造が現れる前に,子コンポーネントを選択するための条件値を持つ要素が必要です。順序決定式の詳細については,「6.6.3 順序決定式」を参照してください。

コンポーネントの評価順序が指定できない場合は,選択構造の子コンポーネントに対して,開始文字のセパレータを定義するか,又は正当性を示す条件式を定義して,コンポーネントを正しく選択できるようにしてください。また,選択構造の子コンポーネントの最小出現回数は1回以上を指定してください。

(c) 構造全体を定義する場合

フォーマットの構造は,入力側と出力側の階層の深さが,同程度になるように定義してください。階層の深さが著しく異なる場合は,マップ式が複雑になったり,記述できなくなる場合があります。

また,出力側のフォーマットで,レングスタグ構造のデータのように,先に出力されるコンポーネントの値が,後から出力されるコンポーネントによって決まる場合は,マップ式の評価を遅延させる指定でマップ式を定義する必要があります。

[図データ]

評価順序遅延を指定するコンポーネントのサイズは,固定長にしてください。評価順序遅延指定のマップ式の詳細については,「6.6.6(3) 評価順序遅延指定のマップ式」を参照してください。