uCosminexus Interschema ユーザーズガイド

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

12.1.2 XML属性の扱い

XML属性は,フォーマットツリー上で構造/型コンポーネントの下のアイテムとして表示されます。1属性が1アイテムとして扱われ,マッピングの対象になります。また,構造コンポーネントのXML属性は,この構造の子コンポーネントより上部に表示します(「12.1.1 DTDからMDLツリーへの変換」のDTDファイルの記述例での「S_attr」コンポーネント)。

デフォルト値を持つタイプの属性は,一般の型コンポーネントでデフォルト式を定義したものと同様で,マップ式が定義されていない場合は,デフォルト値が出力されます。

ただし,属性のデフォルト値タイプが「#FIXED+デフォルト値」である場合は,システムが「=%UNDEF;」のマップ式を与え,そのままの状態では属性値が出力されないようにしています。この属性値を出力する場合は,マップ式を削除してください。

また,出力する「列挙型」のXML属性に,属性の値として定義されていない値が代入されたり,「#FIXED+デフォルト値」のXML属性にデフォルト値と異なる値が代入されたりした場合は,変換実行時にエラーとなるので注意してください。

XML属性のグローバル名は,属性名の前を「@@」でつなぎます。その他のコンポーネント部分は,一般のコンポーネントと同じように「@」でつなぎます。

「12.1.1 DTDからMDLツリーへの変換」のDTDファイルの記述例で,コンポーネント「a」の属性「a_attr」のグローバル名は次のようになります。

 
Format@ROOT@S@a@@a_attr
 

トランスレータがXML属性のマップ式を評価するタイミングは,XML属性が属する構造,又は型コンポーネントのマップ式を評価した後です。XML属性が属するコンポーネントのマップ式に評価順序遅延指定がある場合,XML属性の評価も同時に遅延されます。XML属性自身のマップ式では,評価順序遅延の指定はできません。

一つのコンポーネントに複数のXML属性がある場合は,MDLエディタのツリー表示で上部にあるものから順番に評価されます。

また,XML属性のマップ式内で使用する階層指定(「#」「\n」やINDEX関数のパラメタ)は,XML属性が属するコンポーネントを基点とします。XML属性自身は階層指定外となります。

「12.1.1 DTDからMDLツリーへの変換」のDTDファイルの記述例で,コンポーネント「a」の属性「a_attr」のマップ式を例にとると,次のようになります。

 
#       :「a」を表す
\1      :「S」を表す
INDEX(1):「S」の現在のインデクスを表す