Types de données de modèle de tableau
Les types de données ARRAY se composent d’une ou plusieurs valeurs qui ont toutes le même type de données. Les tableaux peuvent être définis pour être de longueur fixe, variable ou indéfinie.
*DataType : ARRAY indique à un modèle de définir un type de données composé dont les membres sont tous du même type de données (également appelé type de données des membres). Les membres du type de données de tableau sont générés en tant qu’éléments enfants XML individuels qui appartiennent à l’élément qui représente le contexte englobant.
Si chaque élément enfant représente une primitive de type de données, le type de données est défini par l’attribut XML xsi:type dans chaque élément. Si un attribut GDL est défini pour être de type de données ARRAY, le contexte englobant est l’élément <GDL_ATTRIBUTE> . Le nom d’élément de chaque élément enfant XML est la balise correspondante définie par la directive *ElementTags . Si composite est lui-même membre d’un autre type de données composé, un élément est créé pour représenter ce contexte englobant. Le nom de cet élément parent est la balise correspondante affectée par le modèle qui a défini le type de données composé englobant.
Les directives suivantes sont utilisées pour définir le type de données ARRAY :
*ElementType (obligatoire). Nom du modèle qui définit le type de données de tous les éléments. Vous ne pouvez spécifier qu’un seul type de données.
*RequiredDelimiter (Obligatoire). Chaîne qui sépare syntaxiquement chaque élément de tableau du suivant. Deux délimiteurs consécutifs seront interprétés comme un élément omis. Les délimiteurs ne sont pas nécessaires pour indiquer l’omission des éléments de fin. Soyez très prudent si l’espace blanc est utilisé comme délimiteur ou dans le cadre de la chaîne de délimiteur. Par exemple, les caractères d’espace superflus sont interprétés par l’analyseur comme indiquant des éléments omis ; et comme vous ne pourrez peut-être pas voir ces espaces blancs supplémentaires, vous pouvez rencontrer des erreurs d’analyse inattendues.
En outre, l’espace blanc excédentaire est régulièrement supprimé du fichier source et l’espace blanc est souvent ajouté au flux d’entrée à la suite du traitement du préprocesseur, de la macro et des commentaires. Ainsi, la chaîne réellement analysée peut avoir un nombre de caractères d’espace complètement différent de celui spécifié à l’origine.
Vous ne devez pas utiliser de caractères de tabulation dans la chaîne de délimiteur requise, car ils sont régulièrement convertis en caractères d’espace pendant le traitement de l’entrée.
*OptionalDelimiter (Facultatif). Toute chaîne composée de caractères spécifiés dans *OptionalDelimiter et qui apparaissent en regard de la chaîne *RequiredDelimiter est considérée comme faisant partie du délimiteur. Le premier caractère défini dans la chaîne *RequiredDelimiter ne doit pas apparaître dans * OptionalDelimiter.
*ElementTags (obligatoire). Si vous souhaitez affecter à chaque élément du tableau le même nom d’élément (ou si le tableau peut être de taille illimitée), fournissez une seule balise. Sinon, fournissez un nombre égal à la valeur maximale spécifiée par *ArraySize .
Chaque membre du tableau sera nommé avec la balise correspondante. Ce nommage est utile si un ou plusieurs éléments de tableau sont omis. Lorsque des éléments de tableau sont omis, la balise qui correspond à l’élément omis n’est pas utilisée. Pour éviter de confondre le client, n’utilisez pas GDL instantané des noms d’éléments réservés (c’est-à-dire CONSTRUCT, ATTRIBUTE et Personality) comme noms d’étiquettes.
*ArraySize (obligatoire). Utilisez un entier pour spécifier la taille d’un tableau de taille fixe, ou utilisez deux entiers pour spécifier la taille minimale et maximale autorisée pour un tableau de taille variable. Notez que zéro est autorisé pour la taille minimale et que le caractère générique GPD (*) peut être utilisé pour spécifier la taille ou la taille maximale. Indique les valeurs omises dans les données instance avec des virgules consécutives (par exemple,
*DaysOfWeek: (Sunday, Monday, , Wednesday, , Friday,
).*ArrayLabel (facultatif). Si cette directive est spécifiée, la liste des éléments du tableau doit être placée entre parenthèses et précédée de l’étiquette *ArrayLabel . Si aucune étiquette n’est spécifiée dans cette directive, les parenthèses sont facultatives et aucune étiquette de préfaçage n’est autorisée.
Considérez le modèle suivant.
*Template: RECTANGLE
{
*Type: DATATYPE
*DataType: ARRAY
*ElementType: INTEGER
*RequiredDelimiter: ","
*OptionalDelimiter: "<20 09>"
*ArrayLabel: "rect"
*ElementTags: (left, top, right, bottom)
*ArraySize: 4
}
Ce modèle définit un tableau de taille fixe de quatre entiers. Une étiquette (rect
) est affectée au tableau et une balise d’élément unique est affectée à chaque élément du tableau. Ces balises étiquetent chaque élément dans la sortie XML pour aider le client. Chaque élément est séparé du suivant par une virgule ou une virgule, plus toute combinaison d’espace et de caractères de tabulation. Étant donné que la taille du tableau est fixe, aucune omission d’élément n’est autorisée.
*DataType : les modèles ARRAY ne génèrent pas de schéma correspondant. Le schéma du modèle nommé dans la directive *ElementType est utilisé à la place.
Considérez l’entrée GDL suivante.
*ImageableArea: rect( - 10, 20 , +30, 0x40 )
Considérez également le modèle IMAGERECT.
*Template: IMAGERECT
{
*Name: "*ImageableArea"
*Type: ATTRIBUTE
*ValueType: RECTANGLE
}
Si l’entrée GDL est interprétée par le modèle IMAGERECT, la sortie XML résultante est .
<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>
Notez que la référence est au type encapsulé GDLW_int plutôt qu’à l’int d’origine.