Manuel de référence de la grammaire de Data Flow Generator V0
|
1 Notation : cardinalité ou multiplicité
La cardinalité ou multiplicité sert à déterminer le nombre minimum et maximum de possibilités que chaque entité peut avoir au sein d'une autre entité.
Pour décrire les cardinalités nous utiliserons la notation suivante :
Soient n, n1, n2 des entiers
| notation dans les doubles quottes | description |
|---|---|
| "n1:n2" | de n1 à n2 |
| "?" or "0:1" | de 0 à 1, optionnel |
| "*" or "0:*" | de 0 à l'infini |
| "+" or "1:*" | de 1 à l'infini |
| "n:" or "n:*" | de n à l'infini |
| "n" or "n:n" | de n à n, exactement n |
| si non présent | valeur de défaut : exactement 1 |
T n°1: Cardinalités
2 Format du fichier de description grammaticale
2.1 Le fichier XML
Le fichier XML doit commencer par :
<?xml version="1.0" encoding="UTF-8"?>
Ce informations sont destinées au pilote XML qui notamment s'en sert pour connaitre le codage (encoding) des caractères utilisé dans le fichier. Nous utiliserons en général l'encodage UTF-8, il faut donc vérifier que votre éditeur est configuré pour éditer avec cet encodage ou l'encodage que vous avez choisi d'utiliser.
2.2 La racine - le tag grammar
Un document XML doit comporter une nœud racine unique, ce nœud sera nommé grammar.
Le tag de grammar comporte les attributs suivants :
- type
- cardinalité : 1
- décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
- Ici il aura toujours la valeur "XML" qui est le type du document entier.
- version
- cardinalité : 1
- est la version du format ou méta-grammaire du fichier, elle concerne la syntaxe et la sémantique de ce fichier XML où interviennent les tags tels que grammar, el, attr. La version actuelle est "1.0.0"
- fileformatversion
- cardinalité : 1
- contient la version de la grammaire décrite par le contenu décrit dans le fichier XML. Sa valeur dépend du contenu.
Voici un exemple qui décrit une grammaire minimale mais qui est incorrecte sur le plan syntaxique, car la structure décrite par la grammaire doit aussi contenir un nœud unique comme racine ; voir le tag el.
<?xml version="1.0" encoding="ISO-8859-1"?>
<grammar type="xml" version="1.0.0" fileformatversion="2.3.1">
</grammar>
Pour avoir un syntaxe correcte il faut ajouter au moins un nœud comme ci-dessous :
<?xml version="1.0" encoding="ISO-8859-1"?>
<grammar type="xml" version="1.0.0" fileformatversion="1.0.0">
<el type='CTest' name="test"/>
</grammar>
2.3 Les tags simples
Les tags simples n'ont aucun attribut mais seulement un contenu délimité par le tag ouvrant et fermant, il sont au nombre de trois :
- unit
- cardinalité : ?
- Ce tag définit l'unité du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag unit ouvrant et fermant.
- Exemple :
<unit> kg </unit>
- shelp
- cardinalité : ?
- Ce tag définit une documentation minimale du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
- Exemple :
<shelp> Ce texte est une documentation minimale </shelp>
- lhelp
- cardinalité : ?
- Ce tag définit une documentation plus fournie, complémentaire à celle de shelp, du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
- Exemple :
<lhelp> Ce texte est une documentation étoffée </lhelp>
Exemple d'un tag el contenant unit, shelp, lhelp :
<el type="int" name="nb">
<unit>poire</unit>
<shelp>Nombre de poires</shelp>
<lhelp>Ce combre comptabilise le nombre de poires vendues</lhelp>
</el>
2.4 Les tags typés avec nom
2.4.1 Les attributs communs
Ces tags, qui sont attr et el possèdent les attributs suivants :
- type
- cardinalité : 1
- décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
- name
- cardinalité : 1
- definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- Le nom doit être unique dans toute la grammaire.
- help
- cardinalité : ?
- A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
Exemple :
<el type='CTest' name="test" help="Noeud racine">
...
</el>
2.4.1.1 Les attributs communs aux type int / attr_int, float / attr_float, string / attr_string
- default_value
- cardinalité : ?
- C'est la valeur prise à la création de la donnée.
- admissible_values
- cardinalité : ?
- Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
Exemple :
<el type="int" name="montant" default_value="100" admissible_values="100:200:300:400" />
2.4.2 Les branches et les feuilles de la grammaire
Tous les types de ces deux tags se classes en deux catégories :
- les tags de type "feuille" par analogie avec un arbre.
- Ce sont les types dits aussi terminaux qui sont les int/attr_int, float/attr_float et string/attr_string (resp. les entiers, les rééls et les chaines de caractères). En effet on ne peut définir des sous structures pour ces entités. Par contre ces tags peuvent posséder les tags unit, shelp, et lhelp et seulement ceux-ci.
- les tags de type "branche" par analogie avec un arbre.
- Seulement le tag el de type "classe" peut contenir des sous structures.
2.4.3 Le tag attr
Le tag attr représente des feuilles de l'arbre grammatical. Son attribut type prend les trois valeurs "attr_int", "attr_float" et "attr_string" (resp. les entiers, et réels et les chaines de caractères).
La tag possède également le'attribut suivant, qui est optionnel :
- opt
- cardinalité : ?
- Le tag attr ne possédant pas de cardinalité pouvant aller au delà de 1, sa cardinalité se restreint alors à 0 ou 1, ce qui le rend occasionnellement optionnel, d'où l'attribut opt. Si opt est omis alors le tag a une cardinalité de 1, si opt a n'importe quelle valeurs alors la cardinalité tag est 0:1.
Exemple :
<attr type="attr_string" name="prenom" admissible_values="Paul:Jacques" opt="1"/>
2.4.3.1 Le tag attr de type attr_int
Ses attributs sont :
- type
- cardinalité : 1
- décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
- Dans ce cas type = "attr_int"
- name
- cardinalité : 1
- definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- Le nom doit être unique dans toute la grammaire.
- help
- cardinalité : ?
- A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
- default_value
- cardinalité : ?
- C'est la valeur prise à la création de la donnée.
- admissible_values
- cardinalité : ?
- Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
- opt
- cardinalité : ?
- Le tag attr ne possédant pas de cardinalité pouvant aller au delà de 1, sa cardinalité se restreint alors à 0 ou 1, ce qui le rend occasionnellement optionnel, d'où l'attribut opt. Si opt est omis alors le tag a une cardinalité de 1, si opt a n'importe quelle valeurs alors la cardinalité tag est 0:1.
Peut contenir les tags suivants :
- unit
- cardinalité : ?
- Ce tag définit l'unité du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag unit ouvrant et fermant.
- Exemple :
<unit> kg </unit>
- shelp
- cardinalité : ?
- Ce tag définit une documentation minimale du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
- Exemple :
<shelp> Ce texte est une documentation minimale </shelp>
- lhelp
- cardinalité : ?
- Ce tag définit une documentation plus fournie, complémentaire à celle de shelp, du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
- Exemple :
<lhelp> Ce texte est une documentation étoffée </lhelp>
Exemple :
<attr type="attr_int" name="nombre" default_value="0" admissible_values="0:1:2:3:4" opt="oui" help="TODO changer le nom en 'Nb'">
<unit> chocs </unit>
<shelp> Nombre de chocs entre les atomes </shelp>
<lhelp> Nombre de chocs entre les atomes qui a un rapport direct avec ... </lhelp>
</attr>
2.4.3.2 Le tag attr de type attr_float
Ses attributs sont :
- type
- cardinalité : 1
- décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
- Dans ce cas type = "attr_float"
- name
- cardinalité : 1
- definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- Le nom doit être unique dans toute la grammaire.
- help
- cardinalité : ?
- A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
- default_value
- cardinalité : ?
- C'est la valeur prise à la création de la donnée.
- admissible_values
- cardinalité : ?
- Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
- opt
- cardinalité : ?
- Le tag attr ne possédant pas de cardinalité pouvant aller au delà de 1, sa cardinalité se restreint alors à 0 ou 1, ce qui le rend occasionnellement optionnel, d'où l'attribut opt. Si opt est omis alors le tag a une cardinalité de 1, si opt a n'importe quelle valeurs alors la cardinalité tag est 0:1.
Peut contenir les tags suivants :
- unit
- cardinalité : ?
- Ce tag définit l'unité du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag unit ouvrant et fermant.
- Exemple :
<unit> kg </unit>
- shelp
- cardinalité : ?
- Ce tag définit une documentation minimale du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
- Exemple :
<shelp> Ce texte est une documentation minimale </shelp>
- lhelp
- cardinalité : ?
- Ce tag définit une documentation plus fournie, complémentaire à celle de shelp, du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
- Exemple :
<lhelp> Ce texte est une documentation étoffée </lhelp>
Exemple :
<attr type="attr_float" name="energie" default_value="0.0" admissible_values="0.0:1.4:2.3" opt="oui" help="Obsolète">
<unit> Joules </unit>
<shelp> Energie fournie </shelp>
<lhelp> Energie fournie pour provoquer la réaction ... </lhelp>
</attr>
2.4.3.3 Le tag attr de type attr_string
Ses attributs sont :
- type
- cardinalité : 1
- décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
- Dans ce cas type = "attr_string"
- name
- cardinalité : 1
- definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- Le nom doit être unique dans toute la grammaire.
- help
- cardinalité : ?
- A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
- default_value
- cardinalité : ?
- C'est la valeur prise à la création de la donnée.
- admissible_values
- cardinalité : ?
- Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
- opt
- cardinalité : ?
- Le tag attr ne possédant pas de cardinalité pouvant aller au delà de 1, sa cardinalité se restreint alors à 0 ou 1, ce qui le rend occasionnellement optionnel, d'où l'attribut opt. Si opt est omis alors le tag a une cardinalité de 1, si opt a n'importe quelle valeurs alors la cardinalité tag est 0:1.
Peut contenir les tags suivants :
- shelp
- cardinalité : ?
- Ce tag définit une documentation minimale du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
- Exemple :
<shelp> Ce texte est une documentation minimale </shelp>
- lhelp
- cardinalité : ?
- Ce tag définit une documentation plus fournie, complémentaire à celle de shelp, du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
- Exemple :
<lhelp> Ce texte est une documentation étoffée </lhelp>
Exemple :
<attr type="attr_string" name="prenom" default_value="Paul" admissible_values="Paul:Jacques:Marie" opt="oui" help="TODO Compléter les valeurs admissibles">
<shelp> Prénom par défaut </shelp>
<lhelp> Prénom par défaut proposé dans la liste déroulante ... </lhelp>
</attr>
2.4.4 Le tag el
Le tag el permet de donner une structure arborescente à la grammaire. Ainsi en plus des tags tels que attr, il peut contenir de façon récurrente d'autres tags el.
- cardinality
- cardinalité : ?
- décrit la cardinalité du tag par rapport au tag parent. Puisque cet attribut est optionnelle s'il est omis alors la cardinalité est 1 par defaut. La syntaxe utilisé est définie dans le § «Notation : cardinalité ou multiplicité»
La particularité du tag el est qu'il peut avoir une cardinalité supérieur à 1. Cela n'empêche pas que les types int, float et string soient des feuilles de l'arbre grammatical.
2.4.4.1 Les feuilles de l'arbre grammatical du tag el
2.4.4.1.1 Le tag el de type int
Ses attributs sont :
- type
- cardinalité : 1
- décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
- Dans ce cas type = "int"
- name
- cardinalité : 1
- definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- Le nom doit être unique dans toute la grammaire.
- help
- cardinalité : ?
- A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
- default_value
- cardinalité : ?
- C'est la valeur prise à la création de la donnée.
- admissible_values
- cardinalité : ?
- Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
- cardinality
- cardinalité : ?
- décrit la cardinalité du tag par rapport au tag parent. Puisque cet attribut est optionnelle s'il est omis alors la cardinalité est 1 par defaut. La syntaxe utilisé est définie dans le § «Notation : cardinalité ou multiplicité»
Peut contenir les tags suivants :
- unit
- cardinalité : ?
- Ce tag définit l'unité du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag unit ouvrant et fermant.
- Exemple :
<unit> kg </unit>
- shelp
- cardinalité : ?
- Ce tag définit une documentation minimale du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
- Exemple :
<shelp> Ce texte est une documentation minimale </shelp>
- lhelp
- cardinalité : ?
- Ce tag définit une documentation plus fournie, complémentaire à celle de shelp, du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
- Exemple :
<lhelp> Ce texte est une documentation étoffée </lhelp>
Exemple :
<el type="int" name="nombre" cardinality="+" default_value="0" admissible_values="0:1:2:3:4" opt="oui" help="TODO changer le nom en 'Nb'">
<unit> chocs </unit>
<shelp> Nombre de chocs entre les atomes </shelp>
<lhelp> Nombre de chocs entre les atomes qui a un rapport direct avec ... </lhelp>
</el>
2.4.4.1.2 Le tag el de type float
- type
- cardinalité : 1
- décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
- Dans ce cas type = "float"
- name
- cardinalité : 1
- definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- Le nom doit être unique dans toute la grammaire.
- help
- cardinalité : ?
- A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
- default_value
- cardinalité : ?
- C'est la valeur prise à la création de la donnée.
- admissible_values
- cardinalité : ?
- Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
- cardinality
- cardinalité : ?
- décrit la cardinalité du tag par rapport au tag parent. Puisque cet attribut est optionnelle s'il est omis alors la cardinalité est 1 par defaut. La syntaxe utilisé est définie dans le § «Notation : cardinalité ou multiplicité»
Exemple :
<el type="float" name="energie" cardinality="*" default_value="0.0" admissible_values="0.0:1.4:2.3" opt="oui" help="Obsolète"/>
2.4.4.1.3 Le tag el de type string
- type
- cardinalité : 1
- décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
- Dans ce cas type = "string"
- name
- cardinalité : 1
- definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- Le nom doit être unique dans toute la grammaire.
- help
- cardinalité : ?
- A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
- default_value
- cardinalité : ?
- C'est la valeur prise à la création de la donnée.
- admissible_values
- cardinalité : ?
- Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
- cardinality
- cardinalité : ?
- décrit la cardinalité du tag par rapport au tag parent. Puisque cet attribut est optionnelle s'il est omis alors la cardinalité est 1 par defaut. La syntaxe utilisé est définie dans le § «Notation : cardinalité ou multiplicité»
Exemple :
<el type="string" name="prenom" cardinality="?" default_value="Paul" admissible_values="Paul:Jacques:Marie" opt="oui" help="TODO Compléter les valeurs admissibles"/>
2.4.4.2 Les branches de l'arbre grammatical du tag el : les classes
2.4.4.2.1 Introduction
Les branches de l'arbre grammatical ne sont rien d'autre que des tags el dans d'autres tags el.
Bien sûr les tags el de type int, float et string ne peuvent contenir d'autres tags el, car ce sont des feuilles de l'arbre.
En fait les autres types sont définis par la grammaire même. En effet les types int, float et string sont des types dits «primitif»; leur sémantique est à priori connu. Le nom des autres types doit être défini par la grammaire, c.a.d. par celui qui rédige la grammaire.
Voici un exemple où le nouveau type TypePoint a été défini à partir du type primitif float :
<el name="Point" type="TypePoint">
<el name="x" type="float">
<el name="y" type="float">
</el>
Voici un autre exemple où le nouveau type TypeCercle a été défini à partir du type primitif float et un type définit par la grammaire, nommé TypePoint:
<el name="Point" type="TypeCercle">
<el name="Rayon" type="float">
<el name="Point" type="TypePoint">
<el name="x" type="float">
<el name="y" type="float">
</el>
</el>
Les tags el de type défini par la grammaire seront appelé des classes. Mais la notion de classe enferme d'autres caractéristiques que nous allons développer dans la suite.
2.4.4.2.2 Les attributs classiques
- name
- cardinalité : 1
- definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- Le nom doit être unique dans toute la grammaire.
- help
- cardinalité : ?
- A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
- cardinality
- cardinalité : ?
- décrit la cardinalité du tag par rapport au tag parent. Puisque cet attribut est optionnelle s'il est omis alors la cardinalité est 1 par defaut. La syntaxe utilisé est définie dans le § «Notation : cardinalité ou multiplicité»
2.4.4.2.3 Les types classe et les références des classe
Les noms des classes sont définit par l'attribut type:
- type
- cardinalité : 1
- décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
- le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
- Le nom des autres types doit être défini par la grammaire, c.a.d. par celui qui rédige la grammaire. Voici quelques exemples de noms de type de classe : CHead, CHist, CBody
Les références de classes évitent de redéfinir des noms de classes et de dupliquer la structure d'une classe existante.
Exemple d'utilisation de référence de classe :
<el name="vecteur" type="CVecteur">
<el name="x" type="float"/>
<el name="y" type="float"/>
</el>
<el name="vitesse" type="@CVecteur" />
En l'utilisation des types primitifs revient à utiliser des références mais sans le caractère "@". Dans ce cas pourquoi utiliser ce caractère pour les autres types ? C'est parce que nous n'aurions aucun moyen de distinguer une classe vide d'une référence de classe. L'exemple suivant :
<el name="vecteur" type="CVecteur"/>
<el name="vitesse" type="@CVecteur" />
donnerait :
<el name="vecteur" type="CVecteur"/>
<el name="vitesse" type="CVecteur"/>
Nous pourrions aussi dire que toute classe vide est une référence de classe, mais ceci n'a pas été retenu comme solution.
| Rq | Dans un langage de programmation cette question ne se pose pas, car on sépare en général la définition d'une classe des instanciations de celle-ci. Dans notre grammaire la première définition est une instaciation sauf si l'attribut OnlyDefinition est positionné. |
Les références permettent aussi définir récursivement. Voici un exemple :
<el name="recurence" type="CRecurence">
<el name="sub1" type='@CRecurence' cardinality="?"/>
<el name="subn" type='@CRecurence' cardinality="*"/>
</el>
Al1 |
Attention, ne faites pas l'erreur suivante : <el name="recurence" type="CRecurence">
<el name="sub1" type='@CRecurence'/>
</el>
|
2.4.4.2.4 Les classes OnlyDefinition
- OnlyDefinition
- cardinalité : ?
- Si l'attribut OnlyDefinition est présent alors la classe ne sera pas utilisé à l'endroit où elle est définie dans la structure grammaticale.
- Par exemple les classes OnlyDefinition peuvent servir comme classe de base à ses classes dérivées sans pour autant exister dans les instances.
- Exemple de classe OnlyDefinition :
Manuel de référence de la grammaire de Data Flow Generator V0
<el name="LeCamion" type="CCamion">
<el name="UneRoue" type="CRoue" OnlyDefinition="1">
<el name="rayon" type="float">
</el>
<el name="rouesAvant" type="CRoueAvecEcart" heritances="CRoue" cardinality="2">
<el name="ecart" type="float"/>
</el>
<el name="rouesArrieres" type="@CRoueAvecEcart" cardinality="4"/>
<el name="roueDeSecour" type="@CRoue" cardinality="?"/>
</el>
- La classe CRoue est la classe qui ne donnera pas à une instance de cette classe dans sa position de définition, elle sert surtout d'ancêtre à la classe CRoueAvecEcart.
Al2 |
On peut remarquer que la classe CRoue aura quand même l'instance "roueDeSecour" avec l'utilisation des références de classe; il faut donc avoir à l'esprit que l'attribut OnlyDefinition ne s'applique qu'à la balise ou tag qui la contient. |
2.4.4.2.5 L'héritage de classes : heritances
- heritances
- cardinalité : ?
- liste les types des classes ancêtres. Avec cet attribut renseigné la classe hérite des propriétés du ou des classes ancêtres.
- Voici un exemple :
<el name="vecteur" type="CVecteur">
<el name="x" type="float"/>
<el name="y" type="float"/>
</el>
<el name="objet" type="CObjetGraphique">
<el name="nom" type="string"/>
</el>
<el name="point" type="CPoint" heritances="CVecteur:CObjetGraphique"/>
<el name="droite" type="CDroite" heritances="CPoint">
<el name="direction" type="@CVecteur"/>
</el>
- Dans cette exemple la classe CDroite hérite de CPoint qui lui hérite de CVecteur et CObjetGraphique et donc la classe CDroite aura les attributs x,y,nom et direction.
2.4.4.2.6 Le polymorphisme des classes : accept
- accept
- cardinalité : ?
- L'attribut accept permet d'activer le polymorphisme des classes et en plus il permet de contrôler les classes dérivées acceptables. Cet attribut contient la liste des classes dérivées qui doivent être acceptées par le driver. Les noms des classes sont séparés par le caractère ":".
- Exemple :
<el name="A" type="ClassA" accept="ClassB:ClassC" cardinality="*"> ... </el>
<el name="B" type="ClassB" heritances="ClassA" OnlyDefinition="1"> ... </el>
<el name="C" type="ClassC" heritances="ClassB" OnlyDefinition="1"> ... </el>
2.4.4.2.7 Exemples de classes
Voici un exemple qui fait appel à une définition récurrente utilisation les attributs OnlyDefinition, heritances, accept.
<el OnlyDefinition="1" name="OnlyDefinition_geometry" type="CBasegeometry" >
<el name="shape" type="int" />
<el name="data" type="float" cardinality="*" />
</el>
<el name="geometry" type="Cgeometry" heritances="CBasegeometry" >
<el name="geometry" type="@CBasegeometry" cardinality="*" accept="CBasegeometry:Cgeometry"/>
</el>
Avec cette grammaire on peut construire des données ayant l'allure suivante :
geometry
geometry
geometry
shape
data
...
data
geometry
shape
data
...
data
geometry
shape
data
...
data
...
2.5 Liste des tags
- unit
- shelp
- lhelp
- les tags types avec nom et cardinalité
- attr
- les types du tag attr
- attr_int
- attr_float
- attr_string
- el
- les types du tag el
- int
- float
- string
- classe quelconque
- référence de classe quelconque
