Partager via


Directive modèle de production

La directive *Modèle de production spécifie des combinaisons valides de membres qui peuvent apparaître dans une construction particulière. Cette directive peut apparaître uniquement dans les modèles avec *Type : CONSTRUCT.

Si cette directive est présente, la production est évaluée par rapport à chaque instance d’une construction liée au modèle hôte de production. Le modèle hôte est le modèle qui contient la directive Production. Si la directive Production prend la valeur FALSE, un message d’avertissement est émis, mais le traitement n’est pas affecté. Si le modèle hôte ne contient aucune directive Production, aucune validation n’est effectuée.

La directive *Production apparaît au niveau racine de la construction du modèle hôte. Si plusieurs directives *Production apparaissent au niveau racine, seule la dernière directive définie est évaluée. Le résultat de l’évaluation d’une directive Production est une valeur booléenne.

La directive *Production est elle-même une construction. Les éléments enfants de la directive *Production sont d’autres *constructions de production ou *constructions membres ou une combinaison des deux (également appelées productions enfants). Vous ne pouvez pas utiliser de directives d’espace de noms dans la directive *Production.

Chaque production enfant contenue dans la directive *Production prend également la valeur TRUE ou FALSE. La directive Production est évaluée en évaluant d’abord chacune de ses productions enfants. Le résultat de la directive production parente englobante est obtenu en effectuant une opération logique simple sur les résultats de chacune des productions enfants. Le type d’opération logique à appliquer est spécifié par vValue de la directive *Production.

La valeur de la directive *Production peut être l’un des symboles suivants : EXACTLY_ONE, SATISFY_ALL ou AT_LEAST_ONE.

L’exemple suivant montre une directive de production.

*Production: EXACTLY_ONE
{   ... child Productions ... }

L’algorithme suivant définit les valeurs de directive de production :

  1. Si la production spécifie EXACTLY_ONE, cette production prend la valeur TRUE si exactement une production enfant prend la valeur TRUE, le reste étant FALSE. Sinon, la production prend la valeur FALSE.

  2. Si la production spécifie SATISFY_ALL, cette production prend la valeur TRUE uniquement si toutes les productions enfants ont la valeur TRUE. Sinon, la production prend la valeur FALSE.

  3. Si la production spécifie AT_LEAST_ONE, cette production prend la valeur TRUE si au moins une ou plusieurs productions enfants ont la valeur TRUE. Sinon, la production prend la valeur FALSE.

*Les directives de production peuvent être imbriquées à une profondeur arbitraire.