GDL コンストラクト ユニオン
同じコンストラクト型とコンストラクト タグを持つ複数のコンストラクトが GDL ソース ファイルで定義されている場合、そのコンストラクト (論理コンストラクト) の論理表現には、GDL ソース ファイルで定義されている元のコンストラクトの内容の和集合が含まれます。
コンストラクト型とコンストラクト タグは、(親のコンテキスト内で) 論理コンストラクトを一意に指定または定義します。 XML とは異なり、2 つの兄弟コンストラクトが定義され、それぞれが同じコンストラクト型とコンストラクト タグを持つ場合、結果は 1 つの論理コンストラクトになります。 実際、構成要素は構文上の兄弟である必要はなく、論理的な兄弟であってもかまいません。 (構文上の兄弟は同じコンストラクト本体に明示的に存在し、論理兄弟はどちらも同じ論理コンストラクトの子です)。
論理コンストラクトの内容は、兄弟の内容の和集合です。 スナップショットに表示されるのは論理構造であり、GDL ソース ファイルで元々構文的に定義されていた構造ではありません。 次のコード例では、コンストラクト型 *Person とコンストラクト タグ: FlorenceF の 2 つの兄弟コンストラクトがあります。
*Person: FlorenceF
{
*Name: Florence Flipo
*Company:Contoso Pharmaceuticals
{
*Location: Redmond, WA
}
}
*Person: FlorenceF
{
*Position: CEO
*Company:Contoso Pharmaceuticals
{
*NumberOfEmployees: 43,000
}
}
前の規則に従って、2 人の兄弟は、両方の兄弟の和集合を含む単一の論理コンストラクトを定義します。
*Person: FlorenceF
{
*Name: Florence Flipo
*Company:Contoso Pharmaceuticals
{
*Location: Redmond, WA
}
*Position: CEO
*Company:Contoso Pharmaceuticals
{
*NumberOfEmployees: 43,000
}
}
前の例のマージにより、同じ構成タイプ: *Company と構成タグ: Contoso Pharmaceuticals を持つ 2 つの新しい兄弟構成が作成されたことに注意してください。
同じ規則が再び (再帰的に) 適用された場合、次のコードが発生します。
*Person: FlorenceF
{
*Name: Florence Flipo
*Company:Contoso Pharmaceuticals
{
*Location: Redmond, WA
*NumberOfEmployees: 43,000
}
*Position: CEO
}
前述の 3 つの GDL フラグメントのいずれかが解析されると、同じ内部表現が生成されます。 内部表現は、最後のフラグメントによく似ています。
同じキーワードを持つ属性が乗算定義されている場合、マージは行われません。 各定義は内部表現にまだ存在します。 Template ディレクティブ *Additive は、スナップショットに転送される値を指定するために使用されます。
GDL パーサーは、GDL ストリームの構文表現を受け取り、GDL コマンドの内部論理表現を作成します。 これらのコマンドの内部表現は XML に変換され、スナップショットになります。