Définition de types de données à l’aide de modèles
Tous les types de données, à la fois primitifs et composés, doivent être définis à l’aide d’un modèle. Une fois qu’un type de données est défini, n’importe quel modèle d’attribut peut déclarer sa valeur comme étant d’un type de données spécifique à l’aide de la directive *ValueType . La valeur de cette directive est le nom d’un modèle de type de données.
Lorsque le filtre d’analyseur rencontre une entrée de données GDL qui est une instance d’un attribut, elle tente d’analyser la partie valeur de cette entrée conformément aux règles de syntaxe définies pour ce type de données. Si elle réussit, le filtre d’analyseur décompose le type de données en ses types de données équivalents XML primitifs et génère ces valeurs dans le code XML approprié. Le code XML généré qui représente un type de données composé conserve la structure logique de la définition de type de données d’origine. Les éléments enfants d’un type de données composé sont des noms définis par des balises définies dans le modèle de type de données. Ce nommage permet à un lecteur humain ou un client logiciel de l’instantané XML de localiser et d’identifier facilement chaque valeur dans un type de données composé.
Un modèle est désigné comme modèle de type de données (un modèle qui définit un type de données) en définissant la directive *Type : DATATYPE . Les directives reconnues dans un modèle de type de données sont les suivantes :
*ValueType : [Nom du modèle Datatype]. Cette directive déclare la valeur d’un attribut à un type de données particulier. La directive *ValueType peut apparaître uniquement dans les modèles d’attributs. (Les modèles d’attribut sont des modèles avec la directive *Type : ATTRIBUTE ).
*DataType : symbole. Cette directive a l’une des valeurs suivantes : PASSTHROUGH, XML_TYPE, XSD_DEFINED, ENUMERATOR, FILTER_TYPE, ARRAY, COMPOSITE ou MULTIPLE_PERSONALITY.
*ElementType : list. Cette directive définit une liste de noms de types de données TEMPLATE.
*RequiredDelimiter : délimiteur. Cette directive définit un délimiteur avec une chaîne entre guillemets.
*OptionalDelimiter : délimiteur. Cette directive définit un délimiteur facultatif avec une chaîne entre guillemets.
*ArrayLabel : symbole. Cette directive définit une étiquette de tableau avec une chaîne entre guillemets.
*ElementTags : liste. Cette directive définit une liste de symboles à utiliser pour les balises d’élément.
*ÉnumérateurList : liste. Cette directive définit une liste de symboles à utiliser pour une liste d’énumérateurs.
*XSDTypeDefinition : symbole. Cette directive définit une valeur arbitraire, entourée d’éléments <Begin/EndValue> , à utiliser pour une définition de type XSD.
*ComplexType ?: booléen. Cette directive définit si un type est complexe ou non. Si la valeur est TRUE, le type est complexe ; sinon, le type est simple.
*ArraySize : entier. Cette directive définit la plage d’un tableau. Vous pouvez utiliser jusqu’à deux entiers pour spécifier une plage de tableaux.
*XMLDataType : chaîne. Cette directive définit un type de données XML avec une chaîne entre guillemets.
FilterTypeName : chaîne. Cette directive définit un nom de type de filtre à l’aide d’une chaîne entre guillemets.
*MaxValue : entier. Cette directive définit la taille maximale d’une valeur à l’aide d’un entier GDL.
*MinLength : entier. Cette directive définit la longueur minimale d’une valeur à l’aide d’un entier GDL non négatif.
*MaxLength : entier. Cette directive définit la longueur maximale d’une valeur à l’aide d’un entier GDL non négatif.
Notez que toutes les directives ne sont pas reconnues dans tous les modèles de type de données.
En général, si aucun modèle ne peut être lié à l’entrée d’attribut GDL, la valeur de cet attribut est émise dans l’instantané sans aucune modification dans une section CDATA. Le CDATA doit résider en tant que contenu d’élément (c’est-à-dire l’élément enfant) de l’élément ATTRIBUTE.
Par exemple, supposons que l’analyseur ne trouve pas de modèle qui décrit l’entrée d’attribut GDL suivante.
*ModelName: "OEMName LaserJet "
Ensuite, l’entrée apparaît dans l’instantané comme suit.
<GDL_ATTRIBUTE Name="*ModelName"
<![CDATA["OEMName LaserJet "]]></GDL_ATTRIBUTE>