配列テンプレート データ型
ARRAY データ型は、すべて同じデータ型を持つ 1 つ以上の値で構成されます。 配列は、固定長、可変長、または無期限長に定義できます。
*DataType : ARRAY は、メンバーがすべて同じデータ型 (メンバーのデータ型とも呼ばれる) である複合データ型を定義するようにテンプレートに指示します。 配列データ型のメンバーは、包含コンテキストを表す要素に属する個々の XML 子要素として出力されます。
各子要素がデータ型プリミティブを表す場合、そのデータ型は各要素の XML 属性 xsi:type によって定義されます。 GDL 属性がデータ型 ARRAY と定義されている場合、外側のコンテキストは <GDL_ATTRIBUTE> 要素になります。 各 XML 子要素の要素名は、*ElementTags ディレクティブが定義する対応するタグになります。 COMPOSITE 自体が別の複合データ型のメンバーである場合、それを囲むコンテキストを表す要素が作成されます。 この親要素の名前は、それを囲む複合データ型を定義したテンプレートによって割り当てられる対応するタグになります。
ARRAY データ型の定義には次のディレクティブを使用します:
*ElementType (必須)。 すべての要素のデータ型を定義するテンプレートの名前。 指定できるのは 1 つのデータの種類のみです。
*RequiredDelimiter (必須)。 配列の各要素を、次の要素から構文的に区切る文字列。 2 つの連続する区切り記号は、省略された要素として解釈されます。 末尾の要素の省略を示すのに区切り記号を使用する必要はありません。 区切り記号として、または区切り記号文字列の一部として空白を使用する場合は、十分にご注意ください。 たとえば、余分なスペース文字は、パーサーによって省略された要素を示すものとして解釈されます。このような余分な空白文字を見ることができない可能性があるため、予期しない解析エラーが発生する可能性があります。
また、余分な空白はソース ファイルから定期的に削除され、プリプロセッサ、マクロ、およびコメント処理の結果として、多くの場合、空白が入力ストリームに追加されます。 したがって、解析される実際の文字列の空白文字の数は、最初に指定されたものとは完全に異なる場合があります。
タブ文字は入力処理中に定期的に空白文字に変換されるため、必要な区切り文字の一部として使用しないでください。
*OptionalDelimiter (省略可能)。 *RequiredDelimiter 文字列の隣に表示される *OptionalDelimiter で指定された文字で構成される文字列は、区切り記号の一部と見なされます。 *RequiredDelimiter 文字列で定義されている最初の文字は、*OptionalDelimiter 内に含めないようにしてください。
*ElementTags (必須)。 配列内のすべての要素に同じ要素名を割り当てる場合 (または配列のサイズを無制限にできる場合)、1 つのタグのみを指定します。 それ以外の場合は、*ArraySize が指定する最大値と等しい数値を指定します。
配列の各メンバーには、対応するタグで名前が付けられます。 この命名は、1 つ以上の配列要素を省略する場合に便利です。 array 要素を省略すると、省略された要素に対応するタグは使用されません。 クライアントを混乱させないように、GDL スナップショット予約要素名 (CONSTRUCT、ATTRIBUTE、Personality) をタグ名として使用しないでください。
*ArraySize (必須)。 1 つの整数を使用して固定サイズの配列のサイズを指定するか、2 つの整数を使用して可変サイズの配列に許可される最小サイズと最大サイズを指定します。 最小サイズには 0 を使用でき、GPD ワイルドカード文字 (*) を使用してサイズまたは最大サイズを指定できます。 インスタンス データ内の省略された値を連続するコンマ (例 :
*DaysOfWeek: (Sunday, Monday, , Wednesday, , Friday,
) で示します。*ArrayLabel (省略可能)。 このディレクティブを指定する場合は、COMPOSITE 要素の一覧をかっこで囲み、*ArrayLabel ラベルの前に配置する必要があります。 このディレクティブでラベルが指定されていない場合、かっこは省略可能であり、前のラベルは使用できません。
次のテンプレートを考慮してください。
*Template: RECTANGLE
{
*Type: DATATYPE
*DataType: ARRAY
*ElementType: INTEGER
*RequiredDelimiter: ","
*OptionalDelimiter: "<20 09>"
*ArrayLabel: "rect"
*ElementTags: (left, top, right, bottom)
*ArraySize: 4
}
このテンプレートは、固定サイズの 4 つの整数の配列を定義します。 配列にはラベル (rect
) が割り当てられ、配列内の各要素には一意の要素タグが割り当てられます。 これらのタグは、クライアントを支援するために XML 出力内の各要素にラベルを付けます。 各要素は、コンマまたはコンマとスペースとタブ文字の任意の組み合わせで次の要素から区切られます。 配列のサイズは固定されているため、要素の省略は許可されません。
*DataType: ARRAY テンプレートは、対応するスキーマを生成しません。 その代わりに、*ElementType ディレクティブで名前が付けられたテンプレートのスキーマが使用されます。
次の GDL エントリについて考えてみましょう。
*ImageableArea: rect( - 10, 20 , +30, 0x40 )
IMAGERECT テンプレートについて考えてみましょう。
*Template: IMAGERECT
{
*Name: "*ImageableArea"
*Type: ATTRIBUTE
*ValueType: RECTANGLE
}
GDL エントリが IMAGERECT テンプレートによって解釈される場合、結果の XML 出力は次のようになります。
<GDL_ATTRIBUTE Name="*ImageableArea" >
<left xsi:type="GDLW_int">-10</left>
<top xsi:type="GDLW_int">20</top>
<right xsi:type="GDLW_int">30</right>
<bottom xsi:type="GDLW_int">64</bottom>
</GDL_ATTRIBUTE>
参照は、元の int ではなくラップされた型GDLW_intであることにご注意ください。