Tipi di dati del modello di matrice
I tipi di dati ARRAY sono costituiti da uno o più valori che hanno tutti lo stesso tipo di dati. Le matrici possono essere definite in modo da essere fisse, variabili o lunghezze indefinite.
*DataType: ARRAY indirizza un modello a definire un tipo di dati composto i cui membri sono tutti dello stesso tipo di dati (noto anche come tipo di dati dei membri). I membri del tipo di dati matrice verranno restituiti come singoli elementi figlio XML che appartengono all'elemento che rappresenta il contesto di inclusione.
Se ogni elemento figlio rappresenta una primitiva del tipo di dati, il tipo di dati verrà definito dall'attributo XML xsi:type in ogni elemento. Se un attributo GDL è definito come array di tipo di dati, il contesto di inclusione sarà l'elemento <GDL_ATTRIBUTE> . Il nome dell'elemento di ogni elemento figlio XML sarà il tag corrispondente definito dalla direttiva *ElementTags . Se composite è un membro di un altro tipo di dati composto, verrà creato un elemento per rappresentare tale contesto di inclusione. Il nome di questo elemento padre sarà il tag corrispondente assegnato dal modello che ha definito il tipo di dati composto che lo racchiude.
Per definire il tipo di dati ARRAY vengono usate le direttive seguenti:
*ElementType (obbligatorio). Nome del modello che definisce il tipo di dati di tutti gli elementi. È possibile specificare un solo tipo di dati.
*RequiredDelimiter (obbligatorio). Stringa che separa sintatticamente ogni elemento della matrice dal successivo. Due delimitatori consecutivi verranno interpretati come un elemento omesso. I delimitatori non sono necessari per indicare l'omissione di elementi finali. Prestare molta attenzione se lo spazio vuoto viene usato come delimitatore o come parte della stringa del delimitatore. Ad esempio, i caratteri di spazio estraneo verranno interpretati dal parser come indicanti gli elementi omessi; e poiché potrebbe non essere possibile visualizzare tali spazi vuoti aggiuntivi, è possibile che si verifichino errori di analisi imprevisti.
Inoltre, gli spazi vuoti in eccesso vengono regolarmente rimossi dal file di origine e gli spazi vuoti vengono spesso aggiunti al flusso di input in seguito all'elaborazione di preprocessore, macro e commento. Di conseguenza, la stringa effettiva analizzata potrebbe avere un numero completamente diverso di caratteri di spazio rispetto all'origine specificata.
Non è consigliabile usare i caratteri di tabulazioni come parte della stringa del delimitatore necessaria perché vengono convertiti in caratteri di spazio durante l'elaborazione dell'input.
*OptionalDelimiter (facoltativo). Qualsiasi stringa costituita da caratteri specificati in *OptionalDelimiter e che appaiono adiacenti alla stringa *RequiredDelimiter verrà considerata parte del delimitatore. Il primo carattere definito nella stringa *RequiredDelimiter non deve essere visualizzato all'interno di *OptionalDelimiter.
*ElementTags (obbligatorio). Se si vuole assegnare ogni elemento nella matrice con lo stesso nome di elemento (o se la matrice può avere dimensioni illimitate), specificare un solo tag. In caso contrario, specificare un numero uguale al valore massimo specificato da *ArraySize .
Ogni membro della matrice verrà denominato con il tag corrispondente. Questa denominazione è utile se uno o più elementi della matrice vengono omessi. Quando gli elementi della matrice vengono omessi, il tag che corrisponde all'elemento omesso non viene usato. Per evitare confusione nel client, non usare i nomi degli elementi riservati dello snapshot GDL( ovvero CONSTRUCT, ATTRIBUTE e Personality) come nomi di tag.
*ArraySize (obbligatorio). Usare un numero intero per specificare le dimensioni di una matrice a dimensione fissa oppure usare due interi per specificare le dimensioni minime e massime consentite per una matrice di dimensioni variabili. Si noti che è consentito zero per le dimensioni minime e il carattere jolly GPD (*) può essere usato per specificare le dimensioni o le dimensioni massime. Indicare i valori omessi nei dati dell'istanza con virgole consecutive , ad esempio
*DaysOfWeek: (Sunday, Monday, , Wednesday, , Friday,
.*ArrayLabel (facoltativo). Se questa direttiva viene specificata, l'elenco di elementi della matrice deve essere racchiuso tra parentesi e deve essere preceduto dall'etichetta *ArrayLabel . Se in questa direttiva non viene specificata alcuna etichetta, le parentesi sono facoltative e non è consentita alcuna etichetta di prefazione.
Si consideri il modello seguente.
*Template: RECTANGLE
{
*Type: DATATYPE
*DataType: ARRAY
*ElementType: INTEGER
*RequiredDelimiter: ","
*OptionalDelimiter: "<20 09>"
*ArrayLabel: "rect"
*ElementTags: (left, top, right, bottom)
*ArraySize: 4
}
Questo modello definisce una matrice a dimensione fissa di quattro interi. Alla matrice viene assegnata un'etichetta (rect
) e a ogni elemento nella matrice viene assegnato un tag di elemento univoco. Questi tag etichettano ogni elemento nell'output XML per aiutare il client. Ogni elemento è separato dal successivo da una virgola o da una virgola più qualsiasi combinazione di spazi e caratteri di tabulazione. Poiché la dimensione della matrice è fissa, non è consentita alcuna omissione degli elementi.
*DataType: i modelli ARRAY non generano uno schema corrispondente. Viene invece usato lo schema del modello denominato nella direttiva *ElementType .
Si consideri la voce GDL seguente.
*ImageableArea: rect( - 10, 20 , +30, 0x40 )
Si consideri anche il modello IMAGERECT.
*Template: IMAGERECT
{
*Name: "*ImageableArea"
*Type: ATTRIBUTE
*ValueType: RECTANGLE
}
Se la voce GDL viene interpretata dal modello IMAGERECT, l'output XML risultante sarà.
<GDL_ATTRIBUTE Name="*ImageableArea" >
<left xsi:type="GDLW_int">-10</left>
<top xsi:type="GDLW_int">20</top>
<right xsi:type="GDLW_int">30</right>
<bottom xsi:type="GDLW_int">64</bottom>
</GDL_ATTRIBUTE>
Si noti che il riferimento è al tipo di cui è stato eseguito il wrapping GDLW_int anziché all'int originale.