Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das folgende Codebeispiel zeigt die Indexstruktur, die der Parser für alle GDL-Übungen generiert.
<:ROOT2>
*PFeature : InputTray <:INPUTTRAY_FEATURE>
*POption : Lower <:INPUTTRAY_OPTION2>
*Capacity <:TRAY_CAPACITY>
*Command <:ACOMMAND>
*Name <:INPUTTRAY_OPT_NAME>
*POption : Upper <:INPUTTRAY_OPTION2>
*Capacity <:TRAY_CAPACITY>
*Command <:ACOMMAND>
*Name <:INPUTTRAY_OPT_NAME>
*DefaultOption <:DEFAULT_OPT>
*Name <:NAME>
*PFeature : PaperSize <:PAPERSIZE_FEATURE>
*POption : Custom <:CUST_PAPERSIZE_OPTION>
*MinSize <:MIN_SIZE>
*MaxSize <:MAX_SIZE>
*Command <:ACOMMAND>
*Name <:PAPER_SIZE_OPT_NAME>
*POption : OEMName_Special_size <:OEM_PAPERSIZE_OPTION>
*OEM_Info <:OEM_INFO>
*PaperSize <:PAPERDIMENSIONS>
*Command <:ACOMMAND>
*Name <:PAPER_SIZE_OPT_NAME>
*POption : A4 <:PREDEFINED_PAPERSIZE_OPTION>
*PaperSize <:PAPERDIMENSIONS>
*Command <:ACOMMAND>
*Name <:PAPER_SIZE_OPT_NAME>
*POption : Legal <:PREDEFINED_PAPERSIZE_OPTION>
*PaperSize <:PAPERDIMENSIONS>
*Command <:ACOMMAND>
*Name <:PAPER_SIZE_OPT_NAME>
*POption : Letter <:PREDEFINED_PAPERSIZE_OPTION>
*PaperSize <:PAPERDIMENSIONS>
*Command <:ACOMMAND>
*Name <:PAPER_SIZE_OPT_NAME>
*DefaultOption <:DEFAULT_OPT>
*Name <:NAME>
*PFeature : random <:PFEATURE >
*POption : First <:GENERIC_OPTION>
*Command <:ACOMMAND>
*Name <:NAME>
*DefaultOption <:DEFAULT_OPT>
*Name <:NAME>
Die Einträge *Name und *POption sind mehreren Vorlagen zugeordnet, jeweils mit unterschiedlicher Semantik. *Name ordnet beispielsweise NAME, INPUTTRAY_OPT_NAME oder PAPER_SIZE_OPT_NAME zu. *POption ist GENERIC_OPTION, PREDEFINED_PAPERSIZE_OPTION, CUST_PAPERSIZE_OPTION, OEM_PAPERSIZE_OPTION oder INPUTTRAY_OPTION2 zugeordnet. Wenn die Vorlagenstruktur richtig definiert wurde, findet der Parser nach den Vorlagenregeln die am besten geeignete Vorlage.
Anmerkung Diese Übungen richten einige grundlegende Vorlagen und anschließend abgeleitete Varianten ein, da das Schema detaillierter wurde. Dieser Prozess imitiert die Art und Weise, wie sich ein Schema im realen Leben weiterentwickelt. Die Vererbung ermöglichte das Erweitern des Übungsschemas, ohne zuvor definierte Vorlagen zu ändern. Mit diesem Feature können Dritte das Masterschema erweitern und außerdem sicherstellen, dass jede Drittanbieterschemaerweiterung mit Benutzern des ursprünglichen Masterschemas kompatibel bleibt.
Die dargestellten Übungsantworten sind nicht einzigartig. Sie könnten beispielsweise die Vorlagen MIN_SIZE und MAX_SIZE von PAPERDIMENSIONS auf folgende Weise abgeleitet haben.
*Template: MIN_SIZE
{
*Name: "*MinSize"
*Inherits: PAPERDIMENSIONS
}
*Template: MAX_SIZE
{
*Name: "*MaxSize"
*Inherits: PAPERDIMENSIONS
}
Beachten Sie, dass die PAPER_SIZE_OPT_NAME- und INPUTTRAY_OPT_NAME-Vorlagen von der Vorlage NAME erben und auch den *Name-Eintrag neu definieren.
Die Neudefinition des *Name-Eintrags bewirkt, dass diese abgeleiteten Vorlagen aus der von den Basisvorlagen etablierten Inheritance-Hierarchie ausgeblendet werden.
In der Regel bedeutet diese Deklaration, dass eine Vorlage NAME als *Member deklariert, dass alle Vorlagen, die von NAME abgeleitet sind, auch *Member sind. Abgeleitete Vorlagen mit neu definierten *Name-Einträgen werden jedoch aus der implizierten *Members-Liste abgeleiteter Vorlagen ausgeschlossen. Ohne diesen Ausschluss würden Dateneinträge, die ursprünglich dem Vorlagenname zugeordnet würden (z. B. *Name, der in einem *Pfeature angezeigt wird), INPUTTRAY_OPT_NAME zugeordnet werden (was falsch ist).
Wenn Sie die Spezialisierung von NAME in PAPER_SIZE_OPT_NAME und INPUTTRAY_OPT_NAME während des ursprünglichen Entwurfs des Schemas antizipieren, würde eine andere Schemaimplementierung dazu führen, dass name einfach aus der Liste "*Member" der GENERIC_OPTION entfernt wird. Diese Änderung würde es unnötig machen, *Name neu zu definieren. Eine weitere Designverfeinerung wäre es, wenn NAME, PAPER_SIZE_OPT_NAME und INPUTTRAY_OPT_NAME von einer gemeinsamen virtuellen Vorlage erben würden, da dies die Beziehung zwischen diesen Schlüsselwörtern genauer widerspiegelt.