Partager via


Types de données des modèles de tableaux

Les types de données ARRAY se composent d’une ou plusieurs valeurs qui ont tous le même type de données. Les tableaux peuvent être définis pour être fixes, variables ou indéfiniment.

*DataType : ARRAY dirige un modèle pour 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 appartenant à 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 comme étant de type de données ARRAY, le contexte englobant sera l’élément <GDL_ATTRIBUTE>. Le nom d’élément de chaque élément enfant XML sera la balise correspondante que la directive *ElementTags définit. Si le 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 de manière syntactique chaque élément de tableau de la suivante. 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 seront interprétés par l’analyseur comme indiquant les éléments omis ; et parce que vous ne pouvez peut-être pas voir ces espaces blancs supplémentaires, vous risquez de 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 en raison du préprocesseur, de la macro et du traitement des commentaires. Ainsi, la chaîne réelle analysée peut avoir un nombre complètement différent de caractères d’espace que spécifié à l’origine.

    Vous ne devez pas utiliser de caractères de tabulation dans le cadre de la chaîne de délimiteur requise, car ils sont convertis régulièrement en caractères d’espace pendant le traitement d’entrée.

  • *OptionalDelimiter (facultatif). Toute chaîne qui se compose de caractères spécifiés dans *OptionalDelimiter et qui apparaissent adjacentes à la chaîne *RequiredDelimiter sera considérée comme faisant partie du délimiteur. Le premier caractère défini dans l'*RequiredDelimiter chaîne ne doit pas apparaître dans le *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 les noms d’éléments réservés de capture instantanée GDL (c’est-à-dire CONSTRUCT, ATTRIBUTE et Personality), comme noms de balise.

  • *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. Indiquez les valeurs omises dans les données d’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 de tableau doit être placée entre parenthèses et préfacer 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 quatre entiers de taille fixe. Le tableau reçoit une étiquette (rect) et chaque élément du tableau reçoit une balise d’élément unique. Ces balises étiquetent chaque élément dans la sortie XML pour aider le client. Chaque élément est séparé de la suivante par une virgule ou une virgule, ainsi que 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 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 sera.

<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’au d’origine.