Freigeben über


GDL-Konstruktgewerkschaften

Wenn mehrere Konstrukte mit demselben Konstrukttyp und Konstrukttag in der GDL-Quelldatei definiert sind, enthält die logische Darstellung dieses Konstrukts (des logischen Konstrukts) die Union des Inhalts der ursprünglichen Konstrukte, die in der GDL-Quelldatei definiert sind.

Der Konstrukttyp und das Konstrukttag geben ein logisches Konstrukt (innerhalb des Kontexts des übergeordneten Konstrukts) eindeutig an oder definieren es. Im Gegensatz zu XML ist das Ergebnis, wenn zwei gleichgeordnete Konstrukte definiert werden, die jeweils denselben Konstrukttyp und das Konstrukttag aufweisen, ein logisches Konstrukt. Tatsächlich müssen die Konstrukte nicht einmal syntaktische Geschwister sein, sie können logische Geschwister sein. (Syntaktische Geschwister befinden sich explizit im gleichen Konstruktkörper, und logische Geschwister sind beide untergeordnete Elemente desselben logischen Konstrukts .)

Der Inhalt des logischen Konstrukts ist eine Vereinigung der Inhalte der geschwisterlichen Elemente. Was im Momentaufnahme angezeigt wird, sind die logischen Konstrukte, nicht die Konstrukte, wie sie ursprünglich syntaktisch in der GDL-Quelldatei definiert sind. Im folgenden Codebeispiel gibt es zwei gleichgeordnete Konstrukte, beide mit Konstrukttyp: *Person und mit Konstrukttag: FlorenceF.

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

Gemäß der vorherigen Regel definieren die beiden Geschwister ein einzelnes logisches Konstrukt, das die Vereinigung beider Geschwister enthält.

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

Beachten Sie, dass beim Merge im vorherigen Beispiel zwei neue, gleichgeordnete Konstrukte mit demselben Konstrukttyp erstellt wurden: *Company und Construct Tag: Contoso Pharmaceuticals.

Wenn dieselbe Regel erneut (rekursiv) angewendet würde, würde der folgende Code resultieren.

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

Jedes der drei vorherigen GDL-Fragmente erzeugt, wenn sie analysiert werden, dieselbe interne Darstellung. Die innere Darstellung ähnelt am ehesten dem letzten Fragment.

Wenn Attribute mit demselben Schlüsselwort (keyword) multipliziert werden, findet kein Merge statt. Jede Definition ist weiterhin in der internen Darstellung vorhanden. Die Vorlagendirektive *Additiv wird verwendet, um anzugeben, welcher Wert oder welche Werte an die Momentaufnahme übertragen werden.

Der GDL-Parser übernimmt die syntaktische Darstellung des GDL-Datenstroms und erstellt eine interne logische Darstellung der GDL-Befehle. Die interne Darstellung dieser Befehle wird dann in XML konvertiert und wird zu einem Momentaufnahme.