GDL 构造联合

如果在 GDL 源文件中定义了具有相同构造类型和构造标记的多个构造,则该构造的逻辑表示形式 (逻辑构造) 将包含 GDL 源文件中定义的原始构造内容的并集。

构造类型和构造标记一起唯一指定或定义逻辑构造, (其父) 的上下文中。 与 XML 不同,当定义两个 同级 构造时,每个构造具有相同的构造类型和构造标记,结果是一个逻辑构造。 事实上,构造甚至不需要是语法同级,它们可以是逻辑同级。 (Syntactical 同级 显式驻留在同一构造主体中,而 逻辑同级 是同一逻辑构造的子级。)

逻辑构造的内容是同级内容的并集。 快照中显示的是逻辑构造,而不是最初在 GDL 源文件中以语法定义的构造。 在下面的代码示例中,有两个同级构造,这两个构造类型都为:*Person,具有构造标记:FlorenceF。

*Person: FlorenceF
{
*Name: Florence Flipo
*Company:Contoso Pharmaceuticals
{
*Location: Redmond, WA
}
}
*Person: FlorenceF
{
*Position: CEO
*Company:Contoso Pharmaceuticals
{
*NumberOfEmployees: 43,000
}
}

根据上述规则,这两个同级定义包含两个同级并集的单个逻辑构造。

*Person: FlorenceF
{
*Name: Florence Flipo
*Company:Contoso Pharmaceuticals
{
*Location: Redmond, WA
}
*Position: CEO
*Company:Contoso Pharmaceuticals
{
*NumberOfEmployees: 43,000
}
}

请注意,上述示例中的合并创建了两个新的同级构造,其构造类型相同:*Company 和 Construct Tag:Contoso Pharmaceuticals。

如果再次应用同一规则 (递归) ,将产生以下代码。

*Person: FlorenceF
{
*Name: Florence Flipo
*Company:Contoso Pharmaceuticals
{
*Location: Redmond, WA
*NumberOfEmployees: 43,000
}
*Position: CEO
}

分析上述三个 GDL 片段中的任何一个会生成相同的内部表示形式。 内部表示形式最类似于最后一个片段。

当具有相同关键字 (keyword) 的属性相乘时,不会发生合并。 每个定义仍存在于内部表示形式中。 模板指令 *Additive 用于指定将哪些值传输到快照。

GDL 分析程序采用 GDL 流的语法表示形式,并创建 GDL 命令的内部逻辑表示形式。 然后,这些命令的内部表示形式将转换为 XML,并成为快照。