uCosminexus Interschema ユーザーズガイド

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

6.7.5 コンポーネント名

式中に記述するコンポーネント名について説明します。

<この項の構成>
(1) グローバル名
(2) 要素名称の規則
(3) コンポーネント名の略記方法

(1) グローバル名

コンポーネント名はグローバル名で指定します。グローバル名とは,フォーマット名から対象コンポーネントまでを「@」で連結したものです。コンポーネントがXML属性を表す場合,属性コンポーネントの前は,「@@」でつなぎます。また,変数名を表す場合は,フォーマット名と変数名を「@」でつなぎます。次に,グローバル名の例を示します。

グローバル名の例(XML属性を表す場合):
EXAMPLE@ROOT@A@@B
 
XML属性「B」のグローバル名を表しています。グローバル名から,フォーマット名は「EXAMPLE」,ルート構造「ROOT」の子のコンポーネントが「A」であることが分かります。

グローバル名の例(変数を表す場合):
EXAMPLE@VARIABLE
 
変数「VARIABLE」のグローバル名を表しています。グローバル名から,フォーマット名は「EXAMPLE」であることが分かります。

FDLファイルのフォーマット内では,同一のコンポーネント名を共有できるので,一つのコンポーネントは構造中の異なる複数のコンポーネントの子のコンポーネントとしても使用できます。ただし,MDLファイルでは,すべてのコンポーネントは,それぞれ独自でなければなりません。このため,FDLファイル内で共用されていたコンポーネント名は,MDLファイルに読み込むと自動的に,フォーマット内で一意の名称に付け替えられます。名称が付け替えられるときは,そのコンポーネントのMDL内での出現位置が基になります。名称が付け替えられても,構造の内容は変わりません。FDLファイル内のコンポーネント名を「ローカル名」,MDLファイル内のコンポーネント名を「グローバル名」と呼びます。

なお,式中で指定できるコンポーネントは,式を記述したコンポーネントを評価する以前に内容が決定されているものでなければなりません。まだ出現していないコンポーネントの値を参照した場合は,エラーになるので注意してください。

(2) 要素名称の規則

要素名称とは,FDLファイル内のコンポーネントの名称です。ローカル名とも呼びます。

ここでは,FDLで定義する要素名称の規則について説明します。要素名称として使用できる文字は,次のとおりです。

ただし,2バイト文字はシフトJISで表示できるものに限ります。また,XML 1.0では,先頭文字として使用できない文字を定めていますが,Interschemaでは区別しません。

定義できる名前の長さは,フォーマット名は256バイト以内,その他の名前は4,096バイト以内です。

特殊な名前や,数字で始まったり,記号文字が含まれたりする名前
Interschemaが自動的に生成するXMLダミー構造などの名称には,特殊文字を使用する場合もあります。このような特殊な名前や,数字で始まったり,記号文字が含まれたりする名前に対しては,名前の前後にシングルクォーテーションを付けて表示します。条件式やマップ式などで名称を記述する場合にも,シングルクォーテーションが必要です。
特殊な名前の例:
'0123'
'ABC-DEF'
 
特殊な名前を含むコンポーネントのグローバル名の例:
Format@Root@'0123'
Format@Root@Msg@'ABC-DEF'@element
 
シングルクォーテーションを必要としない名前は,1バイト英数字,1バイト片仮名,アンダースコア,及び2バイト文字で構成される名前です。ただし,先頭は1バイト数字文字以外の名前となります。

リネーム前後の名前
FDLでは同名の兄弟コンポーネントが定義できます。これらはMDLへ取り込む時点で,ローカル名に相当する部分がリネームされ,ユニークな名称に置き換わります。リネーム後の名称は,上記に示すような特殊な名前になります。
リネームでは,ローカル名に「~n」が付加されます。nは兄弟コンポーネント間の順序番号(n>1)です。ただし,同名の1番目のコンポーネントには「~n」が付加されません。また,リネーム前の名称が特殊な名前の場合は,シングルクォーテーションの内側に「~n」が付加されます。
リネームの例:
[図データ]

(3) コンポーネント名の略記方法

コンポーネント名には,次のような略記方法があります。

#
式が記述されているコンポーネント,つまり自コンポーネントを表します。ただし,式を記述するコンポーネントがXML属性の場合は,その属性が属するコンポーネントを表します。変数式の場合は,式を定義したコンポーネントを表します。
条件式で使用した例:
# == 1(自身の値が1)
 

\n
自コンポーネントの親(先祖)のコンポーネントを表します。nは,自コンポーネントのn階層上のコンポーネントを表す番号です。自コンポーネントの親コンポーネントは1階層上のコンポーネントなので「\1」と表します。ただし,式を記述するコンポーネントがXML属性の場合は,属性が属するコンポーネントの階層を0として数えます。XML属性自身に対しては,階層を数えません。変数式の場合は,式を定義したコンポーネントの階層を0として数えます。
レングスタグ構造でデータ長を持つ要素を表す場合など,親コンポーネントの構造を示すときに使用できます。
サイズ決定式で使用した例:
\1@LEN (自身のデータサイズは,兄弟コンポーネントのLENの値)
 

$
マップ式及び変数式の中でだけ記述できます。マップ式で使用した場合,式が記述されているコンポーネントの親(先祖)のコンポーネントで,マップ式の評価結果が表すコンポーネントを表し,親(先祖)のコンポーネントのマップ式の評価結果を引き継ぐコンポーネントであることを示します。変数式で使用した場合は,式を定義したコンポーネントの親(先祖)のマップ式を引き継ぐことを示します。
構造コンポーネントのマップ式では,そのコンポーネントを出力するという意味として「=$;」の形でも使用できます。ただし,親(先祖)のコンポーネントにマップ式が定義されていなければなりません。
マップ式で使用した例:
= $@data ;(親コンポーネントにマッピングされたコンポーネントの子コンポーネントに位置するdataを代入する)
 

&
GETCOMPIF関数又はGETCOMPIFXML関数のパラメタの中で使用し,第1パラメタの基点パスに連結するパス名を表します。詳細は,「6.7.3 関数」を参照してください。