Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nell'esempio di codice seguente viene illustrato l'albero degli indici generato dal parser per tutti gli esercizi GDL.
<: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>
Le voci *Nome e *POption vengono mappate a diversi template, ognuno con semantica diversa. Ad esempio, *Name esegue il mapping a NAME, INPUTTRAY_OPT_NAME o PAPER_SIZE_OPT_NAME. *POption corrisponde a GENERIC_OPTION, PREDEFINED_PAPERSIZE_OPTION, CUST_PAPERSIZE_OPTION, OEM_PAPERSIZE_OPTION o INPUTTRAY_OPTION2. Se la struttura del modello è stata definita correttamente, il parser che segue le regole di templatizzazione troverà il modello più appropriato.
Nota Questi esercizi stabiliscono alcuni modelli di base e successivamente varianti derivate man mano che lo schema è diventato più dettagliato. Questo processo simula il modo in cui uno schema si evolve nella vita reale. L'ereditarietà ha consentito l'estensione dello schema dell'esercizio senza modificare i modelli definiti in precedenza. Questa funzionalità consente a terze parti di estendere lo schema master e garantisce anche che qualsiasi estensione dello schema di terze parti rimanga compatibile con gli utenti dello schema master originale.
Le risposte dell'esercizio visualizzate non sono univoche. Ad esempio, è possibile derivare i modelli MIN_SIZE e MAX_SIZE da PAPERDIMENSIONS nel modo seguente.
*Template: MIN_SIZE
{
*Name: "*MinSize"
*Inherits: PAPERDIMENSIONS
}
*Template: MAX_SIZE
{
*Name: "*MaxSize"
*Inherits: PAPERDIMENSIONS
}
Si noti che i modelli PAPER_SIZE_OPT_NAME e INPUTTRAY_OPT_NAME ereditano dal nome del modello e ridefiniscono anche la voce *Nome.
L'effetto della ridefinizione della voce *Name consiste nel nascondere questi modelli derivati dall'albero di ereditarietà stabilito dai modelli di base.
In genere, quando un modello dichiara NAME come *Membro, questa dichiarazione implica che anche tutti i modelli derivati da NAME sono *Membri. Tuttavia, i modelli derivati con voci *Nome ridefinite sono esclusi dall'elenco implicito dei *Membri dei modelli derivati. Senza questa esclusione, le voci di dati di cui è stato originariamente eseguito il mapping al template NAME (ad esempio, *Nome visualizzato all'interno di una *Pfeature) verrebbero mappate a INPUTTRAY_OPT_NAME (che non è corretto).
Se si prevede la specializzazione di NAME in PAPER_SIZE_OPT_NAME e INPUTTRAY_OPT_NAME durante la progettazione originale dello schema, un'implementazione dello schema diversa comporterà semplicemente la rimozione di NAME dall'elenco *Membri di GENERIC_OPTION. Questa modifica renderebbe superfluo ridefinire *Nome. Un ulteriore perfezionamento della progettazione sarebbe che NAME, PAPER_SIZE_OPT_NAME e INPUTTRAY_OPT_NAME ereditino da un modello virtuale comune, poiché tale situazione riflette in modo più accurato la relazione tra queste parole chiave.