uCosminexus Interschema ユーザーズガイド

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

6.1.1 FDLでの定義情報

FDLで定義する内容について説明します。

<この項の構成>
(1) フォーマット情報
(2) 型定義情報
(3) セパレータ定義情報
(4) 変数定義情報
(5) 構造定義情報
(6) コンポーネント定義情報

(1) フォーマット情報

フォーマット情報は変換データの構造を定義するもので,型,セパレータ,変数,構造から構成されます。また,フォーマット全体にかかわる情報を,フォーマット情報として定義します。

フォーマット情報を次に示します。

表6-1 フォーマット情報

フォーマット情報 定義箇所 定義する内容
規格指定 フォーマット全体 フォーマットが従うEDI標準などの情報を指定します。
データ格納形式 フォーマット全体 データの格納形式(ビッグエンディアン又はリトルエンディアン)を指定します。初期値は,ビッグエンディアンです。
不正文字コード置換指定 フォーマット情報と型 不正な文字コードをスペースに置換するか,エラーにするかを指定します。
桁あふれ時の指定 フォーマット全体 データが最大サイズを超えたらエラーにするか,桁あふれの部分を切り捨てるかを指定します。
不要文字削除指定 フォーマットと型 入力文字列の埋め字をデータと見なすか(OFF指定),データから除外して扱うか(ON指定)を指定します。
文字コード指定 フォーマット全体 フォーマット全体で適用する文字コードを指定します。
ここで指定した文字コードが,フォーマットの初期値の文字コードとなります。
サイズ系指定 フォーマットと型 文字列型のサイズを数える方法(バイト数又は文字数)を指定します。初期値はバイト数です。

注※
フォーマットと型の両方で定義した場合は,型の定義が優先されます。フォーマットの定義は,指定をしていない型だけに適用されます。

各フォーマット情報の詳細について説明します。

(a) 規格指定

トランスレータは,規格指定に従った処理をします。CSV形式でデータを処理したい場合は,FDLエディタでフォーマットのプロパティを設定するときに,規格指定の項目で「CSV」を選択します。指定する規格がない場合は「なし」を選択します。

ここで選択できるのは,「CSV」か「なし」だけです。その他の規格(CIIやEDIFACTなど)で作成した辞書のプロパティを編集する場合は,対応する規格の名称が表示されますが,規格指定を編集することはできません。

なお,XMLのDTDフォーマットの指定には,MDLエディタを使用します。

(b) データ格納形式

入出力データで扱う2進数のバイトオーダ(ビッグエンディアン又はリトルエンディアン)を,フォーマットごとに定義します。

バイトオーダマークを持たないUnicode文字列のエンディアンも,この指定に従います。

(c) 不正文字コード置換指定

入出力データに不正な文字コードがある場合,スペースに置換するか,エラーにするかを指定します。スペースに置換する場合,トランスレータは,ワーニングエラーを出力します。

(d) 桁あふれ時の指定

出力フォーマット中の要素にデータを代入するとき,データの値によっては,桁あふれ又はサイズオーバーとなる場合があります。このとき,エラーにするか,あふれ部分を切り捨てて出力するかを指定します。

トランスレータは,桁あふれ時の指定がある場合,桁あふれ部分を切り捨てて出力側要素に代入し,変換処理を続行します。このとき,トランスレータは,ワーニングエラーを出力します。桁あふれ切り捨て指定がない場合は,エラーメッセージを出力して,変換処理を途中で終了します。

桁あふれ切り捨て指定の詳細については,「6.5.3(3) 桁あふれ時の処理」を参照してください。

(e) 不要文字削除指定

入力文字列データ要素の埋め字をデータとして見なすか(OFF指定),データから除外するか(ON指定)を指定します。フォーマットがXMLの場合は,指定できません。入力XMLの不要文字の扱いは,実行時オプションの-XWSで指定してください。

出力データ要素に対しては,不要な文字列の後続スペース,数値の前0,小数部の下位桁の0(有効数字以外の0)を削除して出力するか(ON指定),削除しないでそのまま出力するか(OFF指定)の指定になります。

日付時刻型に対して不要文字の削除を指定する場合は,型全体に対する指定と秒の部分に対する指定を分けて定義できます。

(f) 文字コード指定

フォーマット全体で適用する文字コードを指定します。ここで指定した文字コードが,フォーマットの初期値の文字コードになります。文字コードの種類,適用範囲,及び初期値について次の表に示します。

表6-2 文字コード一覧

文字コード 適用範囲 初期値
1バイト文字コード 1バイト文字列 JIS8
2バイト文字コード 2バイト文字列 JISK
混在文字コード 混在文字列
日付時刻型※1
SJIS
数値文字コード※2 文字列型数値属性 JIS8
セパレータ文字コード※2 セパレータ文字 JIS8

注※1
2バイト文字コードは使用できません。

注※2
Interschemaバージョン1で作成されたフォーマットに対しては,1バイト文字コードと同じ文字コードが設定されます。

入力データ中に指定された文字コードで許されていない文字があった場合,トランスレータはエラーにするか,不正文字部分を対応する文字コードのスペースに置き換え,ワーニングエラーを出力します。ただし,EDI標準に従って変換する場合,ヘッダ情報などで使用できる文字コードが規定されている場合があります。この場合,規定外の文字が指定された場合は,エラーになります。

(g) サイズ系指定

文字列型のサイズを数える方法として,バイト数又は文字数が指定できます。

バイト数を指定した場合,データ中のシフトコード,解放文字などもサイズとして数えます。文字数を指定した場合,シフトコードと解放文字は文字数として数えません。

(2) 型定義情報

トランスレータが扱うことができる要素の型は,数値(文字列型,バイト列型),文字列,バイト列,日付時刻です。

要素の型属性の定義には,数値,文字列などの主属性の指定,右寄せ・左寄せと埋め字の指定,要素サイズの指定,文字コードの指定,及びトランスレータへの指示項目(桁あふれ時の処理など)があります。また,要素データの離散値を定義できます。

文字コード指定,不要文字削除指定,サイズ系指定については,「(1) フォーマット情報」の該当項目を参照してください。

型定義情報を次に示します。

表6-3 型定義情報

型定義情報 定義箇所 指定する内容
右寄せ・左寄せと埋め字の指定 要素データが指定されたサイズに満たない場合,要素エリアのどちら側に詰めて表現するかを指定します。また,不足サイズ部分の埋め字を指定できます。
サイズ定義 要素の固定サイズを指定するか,可変長にするかを指定します。
値定義 要素が取る値を指定します。

注※
数値属性は右寄せして埋め字:0,文字列属性は左寄せして埋め字:スペースが一般的です。

各型定義情報の詳細について説明します。

(a) 右寄せ・左寄せと埋め字の指定

要素データが指定されたサイズに満たない場合,要素エリアのどちら側に詰めて表現するかを指定します。また,不足サイズ部分の埋め字も指定できます。ただし,2バイト文字コードの文字列の埋め字は2バイト文字,その他の属性に対する埋め字は1バイト文字を指定してください。また,文字コードがEUC又はUTF8の場合,埋め字に半角仮名は指定できません。

数値に対する埋め字は,0又はスペースが指定できます。ただし,桁セパレータを使用する場合の埋め字は,スペースだけが指定できます。

埋め字は,文字(シフトJIS)又はバイト列で指定できます。

(b) サイズ定義

要素の固定サイズを指定するか,最大・最小サイズを指定して可変長にするかを指定します。要素サイズを可変長にした場合,サイズを動的に決める指定をするか,セパレータを使用して要素の終端を明確にします。

サイズを動的に決める指定は,その要素が使われている構造内で,サイズをサイズ決定式として宣言します※1。例えば,入力データがレングスタグ構造を持つ場合,データのサイズは,その前にあるレングスを表す要素の値となります。サイズ決定式については,「6.6.2 サイズ決定式」を参照してください。

文字列以外の要素のサイズは,バイト数で指定します。文字列要素のサイズは,バイト数又は文字数で指定します。詳細については,「6.1.1(1)(g) サイズ系指定」を参照してください)。数値型の要素のサイズは,符号や指数記号などを桁数に含めるかどうか,主属性の定義内で指定できます※2

注※1
出力フォーマットの場合は,要素データサイズは出力内容(結果)で決まるため,サイズ決定式は定義しなくてもかまいません。

注※2
FDLエディタでの定義では,固定長要素の場合は,符号や指数記号などを,桁数に含めます。可変長要素の場合は桁数に含めません。
(c) 値定義

要素が取る値を定義します。値定義された要素に対して,定義されていない値が入出力データ中に現れた場合,トランスレータはエラーとして処理します。入力値をそのまま出力側へ代入したい場合などは,値エラー検証の解除を指定することもできます。

また,マップ式でVALUEMAP関数を使用して,入力要素と出力要素の値同士をマッピングして変換できます。

日付時刻型の要素に対しては,値定義できません。

(3) セパレータ定義情報

セパレータ定義情報を次に示します。

表6-4 セパレータ定義方法

セパレータ定義方法 指定する内容
セパレータ名による指定 要素の型属性定義のように,構造内で使用するセパレータに名前を付けて指定します。※1
セパレータ値の直接指定 構造のプロパティとして,セパレータの値を直接指定します。※2

注※1
セパレータを使用する構造は,このセパレータ名称を用いてセパレータの定義ができます。

注※2
セパレータを文字で指定する場合は,初期値のセパレータ文字コードを使用します。ただし,シフトコードを含む文字は指定できません。使用できない文字を次に示します。なお,JISKSはJISK,KEISSはKEISとして扱います。
JISE:
2バイト文字,1バイト仮名文字
ISOJP,KEIS_EBCDIC_MIX,KEIS_EBCDIK_MIX,IBM_EBCDIC_MIX,IBM_EBCDIK_MIX,JEF_EBCDIC_MIX,JEF_EBCDIK_MIX:
2バイト文字

セパレータは,出現する位置によって意味が異なります。セパレータの出現位置には,次の四つの種類があります。

注※
各要素の前に出現と各要素間に出現する場合は,構造の定義方法によって使い分ける必要があります。

セパレータ定義情報の例を次に示します。

 
TAG+DATA1+DATA2+DATA3'
(TAG=構造の前に出現, '=構造の後に出現,+=各要素の前に出現)
A1,A2,A3,A4,A5
(,=各要素間に出現)
 

また,解放文字もセパレータと同じく,名称及び固定の値を定義できます。これは,構造に対するセパレータの定義と同レベルで設定します。ただし,セパレータとは異なり,解放文字をネストして定義できません。解放文字は最上位のルート構造でだけ宣言できます。

セパレータを「+」,解放文字を「?」とした例を,次に示します。

 
ABC?+DEF+?+123
 

「ABC+DEF」と「+123」というデータを表します。

次に,個別に定義するセパレータとは別に,トランスレータが提供するセパレータについて説明します。トランスレータが提供するセパレータを次に示します。

「#Comma」は,1バイト文字のコンマ「,」を表します。Windowsの場合,「#Linefeed」はCR/LF(復帰・改行)を表します。ワークステーションのOSの場合,「#Linefeed」はLF(改行)を表します。それぞれの値は,セパレータの文字コードに従います。

(4) 変数定義情報

フォーマットの型コンポーネントとは別に,データを保持できます。グループ単位出力指定によってデータが破棄される前に,コンポーネントの値を保存する場合などに変数定義情報を利用します。

変数は,名前を付けて設定します。変数の初期値は数値,文字列,バイト列のどれかです。

変数の値は,マップ式で参照できます。また,変数式によって変数の値を更新することもできます。変数式については,「6.6.7 変数式」を参照してください。

(5) 構造定義情報

変換対象となるデータの構造を,任意に指定できます。構造定義は,要素の出現順序と出現回数を定義するものです(C言語の構造体に相当します)。定義する情報は,構造の名称,種類,コンポーネント(構成要素)の情報,評価規則,セパレータなどです。セパレータについては,「(3) セパレータ定義情報」を参照してください。

構造の種類には,逐次構造と選択構造があります。逐次構造は,構成メンバが定義された順序に出現する構造,選択構造は,構成メンバのどれか一つが出現する構造を表します。構成メンバには,型属性定義されている要素か,同じフォーマット内で定義される構造を設定できます。

逐次構造と選択構造の例を次に示します。

[図データ]

逐次構造の場合は,ツリーのとおりに出現します。選択構造の場合は,構造Sの子コンポーネントの出現順序は不定で,特に条件式などが定義されていなければ先頭に定義されたコンポーネントが選択されます。子コンポーネントを選択するための条件は,選択構造に対して定義する評価順序決定式と,子コンポーネントに対して定義する順序決定値のセットで指定できます。順序決定値はコンポーネント情報として定義します。

構造定義情報を次に示します。

表6-5 構造定義情報

構造定義情報 定義箇所 指定する内容
順序決定式〜順序決定値 構造(親コンポーネント) 選択する条件が決まっている場合に,選択順序の変更を指定します。
条件式 構造及びコンポーネント 構造やコンポーネントに対して,その値や出現状態の条件を記述します。

各構造定義情報の詳細について説明します。

(a) 順序決定式〜順序決定値

選択構造を持つコンポーネントのメンバは,FDLファイル及びMDLファイルに記述された順序で評価され,最初に正当であると評価されたものが選ばれます。これに対して,メンバを選択する条件が決まっている場合,選択順序を変更できます。

評価順序指定があって,指定条件が値のどれにも合致しなかった場合は,順序決定値が定義されていない子コンポーネントについて,従来のメンバの定義順に従って評価します。値が合致した選択構造の子コンポーネントとデータが不整合の場合は,エラーとして処理します。

(b) 条件式

評価規則として条件式が定義されていた場合,入出力データに対して評価した結果が偽と判定した場合,トランスレータはエラーとして処理します。

構造に対して定義した条件式は,その構造の子コンポーネントがすべて正当なときに評価されます。コンポーネントに対して定義した条件式は,該当するコンポーネント自身(構造コンポーネントならば,その子コンポーネントすべて)が正当であったときに評価されます。

(6) コンポーネント定義情報

コンポーネント情報は,型や構造などをどのように使用するかを定義するものです。型や構造の出現順序,出現回数など,データ構造の枠組みを規定する情報や,順序決定値,サイズ決定式など,コンポーネント独自の性質を決める情報などがあります。また,コンポーネントの正当性を評価するための評価規則なども,コンポーネント定義情報です。

コンポーネントは構造の子として定義します。型属性定義されている要素か,同じフォーマット内で定義される構造です。実際のデータの並びに合わせて,コンポーネントの順序を定義します。同時に,出現回数(繰り返し数)を定義する必要があります。

出現回数は最小数,最大数を指定して表します。最小数に0を指定すると,そのコンポーネントは入出力データ中に現れなくてもかまいません。最小数と最大数を同じにした場合,そのコンポーネントは指定された数だけ出現しなければなりません。出現数が不足する場合,トランスレータはエラーとして処理します。

コンポーネントの出現回数を動的に決定する定義もできます。選択構造の子コンポーネントの最小出現回数は,原則として1以上にしてください。

各コンポーネント定義情報の詳細について説明します。

表6-6 コンポーネント定義情報

コンポーネント定義情報 指定する内容
必須項目の指定 コンポーネントが必須項目であることを指定します。
カウンタの指定 コンポーネントの出現回数を取得するカウンタを指定します。
出現回数決定式 可変回出現コンポーネントの出現数を動的に決める指定をします。出現数を動的に決める指定と出現回数決定式(算術式)を組にして指定します。出力フォーマットに対しては,出現数を動的に決める指定だけでもかまいません。
サイズ決定式 可変長でサイズを動的に決定する定義の型コンポーネントのサイズを,算術式として指定します。出力フォーマットに対しては,指定しなくてもかまいません。
デフォルト式 型コンポーネントの初期値を指定します。
変数式 変数の値の変更を指定します。

注※
MDLエディタ上でマップ式定義を促すためのものです。

各構造定義情報の詳細について説明します。

(a) 必須項目の指定

必須項目が指定されたコンポーネントに対しては,マップ式(又はデフォルト式)が定義されないとMDLのエラーになります(ただし,親コンポーネントにマップ式定義などがある場合)。省略できる子孫の位置づけにあるコンポーネントは,エラーになりません。

ただし,トランスレータでの変換では,この指定は意味を持ちません。必須項目の指定をしたコンポーネントの最小出現回数が0の場合,変換実行時に該当するコンポーネントが出現しなくても,トランスレータはエラーにしません。エラーにしたい場合は,別途条件式などで記述してください。

(b) カウンタの指定

カウンタの指定は,すべての種類のコンポーネントが対象となります。初期値は0です。カウンタの指定には,次の2種類があります。

カウンタを初期化する定義情報を持つコンポーネントが出現すると,カウンタは0になります。その後,カウンタをインクリメントする定義情報を持つコンポーネントが出現するごとに,カウンタが一つずつ増えていきます。カウンタの初期化及びインクリメントは,マップ式などの評価後,コンポーネントが正当に出現したと判定された時に開始されます。

カウンタは,フォーマットごとに設定されます。複数のフォーマットにわたってカウントすることはできません。カウンタの値を取り出すGETCOUNT関数については,「6.7.3 関数」を参照してください。

(c) 出現回数決定式

トランスレータは,出現回数決定式を評価した結果の値を,コンポーネントの固定の出現数と見なします。出力フォーマットで出現回数決定式がないか,評価結果が不正である場合は,従来のコンポーネントの出現回数の定義が有効になります。

入力フォーマットに対して,EXISTWHILE関数又はWHILE関数を使用した出現回数決定式を記述できます。この場合,EXISTWHILE関数又はWHILE関数で指定した条件が満たされる間,コンポーネントが出現すると見なされます。EXISTWHILE関数又はWHILE関数については,「6.7.3 関数」を参照してください。

(d) サイズ決定式

トランスレータは,サイズ決定式を評価した結果の値を,型の固定のサイズと見なします。出力フォーマットでサイズ決定式がないか,評価結果が不正である場合は,型定義での最小/最大サイズの定義が有効となります。

(e) デフォルト式

通常,出力側フォーマットの1回以上出現するコンポーネントに対してマップ式が定義されていなければなりません。これに対して,あらかじめコンポーネントの初期値を設定できます。

初期値が設定されたコンポーネントにマップ式が定義されなかった場合,トランスレータはエラーにしないで,初期値として設定されている固定の値を出力します。

デフォルト式はマップ式と同様に,個別に指定できます。

(f) 変数式

変数式は,変数の値を更新するときに使用します。一つのコンポーネントに対して複数の変数式を定義できます。変数式は,コンポーネントが1回出現した時点で評価されます。指定方法はマップ式と同様で,全体指定と個別指定の2種類があります。