uCosminexus Interschema ユーザーズガイド

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

4.5 MDLファイル作成時の注意事項

この節では,MDLファイルを作成するときの注意事項について説明します。

<この節の構成>
(1) フォーマット挿入時の検証
(2) マップ式
(3) グループ単位出力指定
(4) FDLファイルを変更した場合
(5) MDLエディタでの追加・変更

(1) フォーマット挿入時の検証

新規にフォーマットを挿入する場合,セパレータが正しく設定されているかなどが自動的に検証されます。この検証でエラーが発生した場合は,FDLエディタでエラーを修正後,再度フォーマットを挿入してください。

(2) マップ式

出力側のコンポーネントに対しては,マップ式を記述する必要があります。構造を表すコンポーネントに対しては,要素を代入するマップ式は記述できません。

(a) 定義方法

マップ式は上位の構造から順番に記述するようにしてください。また,子コンポーネントは,親コンポーネントのマップ式を引き継ぐための記述法「$」を使用して記述するようにしてください。

[図データ]

まず,入出力フォーマット間の最上位の構造同士を対応付けるマップ式を記述します。次に,その子コンポーネント間で対応するもの同士の式に,先頭に「$」を付けて,親コンポーネントのマップ式を引き継ぐ形にします。同様に,子コンポーネントに対しては親コンポーネントのマップ式を引き継ぐ形式で記述していってください。

(b) 省略できるコンポーネントのマップ式

親構造の最小出現回数に0が指定されていて省略できる場合,その構造にマップ式が記述されていなかったときは,子コンポーネントにマップ式が記述されていても出力されません。構造全体が省略できる場合に,その構造の内容を出力したいときは,構造のコンポーネントにマップ式を記述してください。

(c) 出現回数が不定のコンポーネントのマップ式

出現回数が不定のコンポーネントに対してもマップ式を記述する必要があります。マップ式を記述する対象が無限に出現できるコンポーネントの場合,INDEX関数を使用し,入力側の構造コンポーネントとの対応を表すマップ式を記述する必要があります。

(d) 評価を遅延させるマップ式

マップ式を評価する時点で,マップ式の中に値が決まっていないコンポーネントが含まれている場合は,式の評価結果はエラーになってしまいます。この場合,マップ式に出てくるコンポーネントの値が決まるまで,マップ式の評価を遅延させる「%delay」を指定したマップ式を記述する必要があります。

(e) EMPTY要素のマップ式

DTDフォーマットのEMPTY要素に対するマップ式は,この要素が1回だけ出現する場合には必要ありません。省略できない,可変回出現する要素の場合は,通常のコンポーネントと同様のマップ式の記述が必要です。

(f) 再帰構造の末端にあるダミー要素のマップ式

DTDフォーマットの再帰構造の末端にあるダミー要素(EMPTY要素)に対しては,マップ式を記述できません。また,再帰構造の末端にあるダミー要素の構造パス名を,ほかのコンポーネントのマップ式に記述できません。

(3) グループ単位出力指定

一度に変換する入力データのサイズが大規模な場合,意味のあるデータの1単位ごとに出力するよう指定(グループ単位出力指定)できます。グループ単位出力指定がない場合,変換に必要な空きメモリ容量が不足してしまい,変換できないことがあります。また,空きメモリ容量が足りていても,1か所以上エラーが発生すると変換全体が失敗することになり,変換結果として何も出力されません。

グループ単位出力指定は,入力側と出力側のフォーマットを対応させて,それぞれでグループ単位出力を指定します。上位にある無限の出現回数のコンポーネントが,グループ単位出力指定の設定対象です。なお,グループ単位出力の指定をした場合,グループ1回分の出力データは対応する入力データ1回分の中ですべて決まらなければならないことに注意してください。グループ単位出力指定の詳細については,「6.1.2(1) グループ単位出力指定」を参照してください。

(4) FDLファイルを変更した場合

MDLファイル作成後にFDLファイルのフォーマットを変更した場合は,MDLファイルから変更前のフォーマットを削除し,変更後のフォーマットを読み込んでMDLファイルを作成し直す必要があります。

入力側のフォーマットを変更した場合は,記述済のマップ式は保存されているので,コンポーネント名やツリー構造を変更していなければ,そのまま使用できます。しかし,出力側のフォーマットを変更した場合は,既存のマップ式は削除されているので,再マッピングする作業が発生します。

このような場合に,Interschemaで提供するMDLエディタのマージコマンド,又はマージツールを使用すると,出力側のフォーマットを変更した場合でも,既存のマップ式を保持しながらフォーマットの変更内容をMDLに反映するため,再マッピングの作業を最小限に抑えることができます。マージツールについては,「7. ユティリティ」を参照してください。

(5) MDLエディタでの追加・変更

次の式や値は,MDLエディタ上で追加・変更できます。

ただし,FDLエディタ上での定義とは異なり,式や値を直接指定したコンポーネントに対してだけ設定が有効になります。同じ構造やコンポーネントが,別の箇所で使用されている場合,その式や値には反映されません。また,サイズ決定式及び出現回数決定式は,コンポーネントのサイズや出現回数に動的に決定する指定がある場合だけ,編集できます。これらの式が入力コンポーネントの場合は,削除できません。