Les domaines


Un domaine associe la valeur d'attribut, ou la chaîne résultante d’une sous-règle exécutée, à une sous-règle résultante qui sera traitée et rendue en tant que résultat. Un domaine est désigné par le modificateur DOM dans les sous-règles de toutes les classes, à l’exception de la classe GROUP. La définition d'un domaine est composée du nom de domaine, de sa classe CDOM et d’une liste d'associations permettant de spécifier une règle différente pour chaque valeur d'entrée. Chaque élément de la liste d'associations est une paire (liste des valeurs, sous-règle) et est inclus entre parenthèses. À l’intérieur de chaque paire, la liste de valeurs est aussi incluse entre parenthèses, à moins qu'il n'y ait qu’une seule valeur.

Le nom d’un domaine est assujetti aux mêmes règles que le nom d’une variable. Un domaine peut avoir le même nom qu'une variable.

Pour un domaine de type caractère (CDOM), la virgule est utilisée comme séparateur de valeurs dans la liste de valeurs. Si une seule valeur est définie sans parenthèse, une virgule doit séparer la valeur de sa chaîne de gabarit. Les virgules sont nécessaires afin d'empêcher la fusion de chaînes adjacentes en une seule et unique chaîne.

Le modificateur DEFAULT peut être employé en tant que valeur; il représente toutes les valeurs qui ne sont pas explicitement spécifiées dans le domaine. Si DEFAULT n'est pas spécifié, une valeur, indéterminée dans le domaine, est retournée comme chaîne résultante. Pour les sous-règles de la classe ATTR, la valeur d'entrée au domaine est la valeur retournée par la fonction du référentiel, et est faite de caractères. Pour les sous-règles des autres classes, la valeur d'entrée au domaine est la chaîne résultante d'une règle exécutée et est toujours de type caractère. Donc, le domaine doit appartenir à la classe CDOM. De plus, la chaîne d'entrée ne doit pas contenir de codes d'édition.

Exemple 1
tableTriggerTimeAttr ATTR TriggerTime
DOM = tableTriggerTimeDomain;

tableTriggerTimeDomain CDOM ("1", "BEFORE ")
("2", "AFTER ")
(DEFAULT, "");


La fonction du référentiel TriggerTime retourne "1" pour un déclencheur before, "2" pour un déclencheur after et "3" pour un déclencheur instead of. Le résultat sera BEFORE ou AFTER si la fonction du référentiel retourne "1" ou "2". S'il retourne "3” (ou toute autre valeur), le résultat sera vide.



Exemple 2
CombinationCategory ATTR CombinationCategory
DOM = comb_cat;

comb_cat CDOM (0, pk_uk)
(1, "FOREIGN KEY")
I (DEFAULT, "");

pk_uk ATTR CombinationNumber
DOM = pk_uk;
pk_uk CDOM (0, "PRIMARY KEY")
(DEFAULT, "ALTERNATIVE KEY$=;");


Les fonctions du référentiel comb_cat et CombinationNumber retournent les chiffres correspondant à la catégorie et à la combinaison. Si la catégorie est 0, le résultat sera PRIMARY KEY pour le nombre 0, ALTERNATIVE KEY 1 pour le nombre 1, etc. Par contre, si la catégorie est 1, le résultat sera FOREIGN KEY. Pour toute autre catégorie, le résultat sera vide.