EXERCICE GDL 2 : Hériter de modèles virtuels
Exercice
Définissez un type de données qui accepte une chaîne Unicode encodée à l’aide de 2 octets pour représenter 1 caractère Unicode. Ensuite, définissez des modèles non virtuels qui héritent des modèles virtuels précédemment définis. Ne modifiez pas le schéma que vous avez créé dans l’exercice 1. Créez un exemple de fichier de données GDL et vérifiez que le schéma est appliqué correctement. Créez un exemple de fichier de données GDL qui n’est pas conforme au schéma et vérifiez que les erreurs sont détectées.
Solution
Les deux modèles suivants définissent le type de données Unicode.
*Include: MasterTemplate.gdl
*Template: XML_STRING
{
*Type: DATATYPE
*DataType: XML_TYPE
*XMLDataType: "string"
}
*Template: NORMAL_STRING
{
*Type: DATATYPE
*DataType: FILTER_TYPE
*ElementType: XML_STRING
*FilterTypeName: "NORMAL_STRING"
}
Le modèle suivant hérite des modèles définis dans l’exercice 1. Il existe une construction nommée *Command et trois types d’attributs : *Name (qui apparaît au niveau racine), *CommandName (qui peut apparaître dans une construction *Command) et *UniName (qui peut apparaître dans les deux contextes).
*Template: COMMAND
{
*Name: "*Command"
*Inherits: CONSTRUCTS
*Instances: <ANY>
}
*Template: ROOT_NAME
{
*Name: "*Name"
*Inherits: ROOT_ATTRIB
*ValueType: NORMAL_STRING
}
*Template: CMD_NAME
{
*Name: "*CommandName"
*Inherits: CONSTRUCT_ATTRIB
*ValueType: NORMAL_STRING
}
*Template: UNIVERSAL_NAME
{
*Name: "*UniName"
*Inherits: FREEFLOAT
*ValueType: NORMAL_STRING
}
Le fichier GDL suivant est conforme au schéma donné.
*Name: "can only appear at root level"
*UniName: "can appear anywhere"
*Command: X
{
*CommandName: "May only appear within a command"
*UniName: "can appear anywhere, even in a command"
*Command: nested
{
*CommandName: "nested commands are ok."
*UniName: "template defined a recursive nesting" 100 %
}
}
Le fichier GDL suivant n’est pas conforme au schéma donné.
*CommandName: "Error! May only appear within a command"
*Command: X
{
*Name: "Error! can only appear at root level"
}