4 Le modèle de traitement

Ce chapitre définit le modèle de traitement XForms de manière déclarative en énumérant les divers états atteints par un processeur XForms et les transitions d'état possibles dans chacun de ces états. Le chapitre détaille les préconditions et les postconditions qui doivent être satisfaites dans chacun des états. L'implémentation des processeurs XForms est indifférente tant que les résultats finaux soient identiques à ceux décrits dans ce chapitre.

Les transitions d'état sont généralement initiées par des événements envoyés aux parties de l'arbre XForms. Le modèle de traitement XForms comprend des événements dans les catégories suivantes :

4.1 Vue d'ensemble des événements

Le traitement XForms se définit en fonction d'événements, de gestionnaires d'événement et de réponses aux événements. Le langage XForms emploie le système d'événements défini dans [DOM2 Events][XML Events], avec la phase de capture de l'événement, l'arrivée de l'événement sur sa cible et enfin la phase de bouillonnement de l'événement.

Dans la suite du chapitre, toute mention d'une commande de formulaire comme élément cible représente l'un des éléments suivants : input, secret, textarea, output, upload, trigger, range, submit, select, select1 ou group.

Nom de l'événement S'annule-t-il ? Bouillonne-t-il ? Élément cible
4.2 Les événements d'initialisation
xforms-model-constructNonOuimodel
xforms-model-construct-doneNonOuimodel
xforms-readyNonOuimodel
xforms-model-destructNonOuimodel
4.3 Les événements d'interaction
xforms-previousOuiNoncommande de formulaire
xforms-nextOuiNoncommande de formulaire
xforms-focusOuiNoncommande de formulaire
xforms-helpOuiOuicommande de formulaire
xforms-hintOuiOuicommande de formulaire
xforms-rebuildOuiOuimodel
xforms-refreshOuiOuimodel
xforms-revalidateOuiOuimodel
xforms-recalculateOuiOuimodel
xforms-resetOuiOuimodel
xforms-submitOuiOuisubmission
4.4 Les événements de notification
DOMActivateOuiOuicommande de formulaire
xforms-value-changedNonOuicommande de formulaire
xforms-selectNonOuiitem ou case
xforms-deselectNonOuiitem ou case
xforms-scroll-firstNonOuirepeat
xforms-scroll-lastNonOuirepeat
xforms-insertNonOuiinstance
xforms-deleteNonOuiinstance
xforms-validNonOuicommande de formulaire
xforms-invalidNonOuicommande de formulaire
DOMFocusInNonOuicommande de formulaire
DOMFocusOutNonOuicommande de formulaire
xforms-readonlyNonOuicommande de formulaire
xforms-readwriteNonOuicommande de formulaire
xforms-requiredNonOuicommande de formulaire
xforms-optionalNonOuicommande de formulaire
xforms-enabledNonOuicommande de formulaire
xforms-disabledNonOuicommande de formulaire
xforms-in-rangeNonOuicommande de formulaire
xforms-out-of-rangeNonOuicommande de formulaire
xforms-submit-doneNonOuisubmission
xforms-submit-errorNonOuimodel submission
4.5 Les indications d'erreur
xforms-binding-exceptionNonOuitout élément pouvant contenir une expression de liaison
xforms-link-exceptionNonOuimodel
xforms-link-errorNonOuimodel
xforms-compute-exceptionNonOuimodel

4.2 Les événements d'initialisation

Cette section définit les divers états de la phase d'initialisation. Le processeur lance l'initialisation en distribuant un événement xforms-model-construct à chaque modèle XForms dans le document conteneur. L'initialisation proprement dite du processeur XForms dépend de la mise en œuvre.

4.2.1 L'événement xforms-model-construct

Distribué par le processeur du document conteneur afin d'amorcer l'initialisation du processeur XForms Distribué à chaque modèle XForms par le processeur XForms.

Cible : model

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante :

  1. Tous les schémas XML sont chargés. Si une erreur survient au cours d'une tentative d'accès ou de traitement d'un document distant, le traitement s'interrompt avec une exception (cf. 4.5.2 L'événement xforms-link-exception) ;

  2. Si les données d'instance initiales sont fournies par une source externe, alors un modèle de données XPath (cf. 7 Les expressions XPath dans XForms) est construit à partir de celle-ci ; sinon, lorsque les données d'instance initiales sont données directement, celles-ci sont utilisées à la place. Si les données d'instance initiales externes ne composent pas un code XML bien formé ou ne peuvent pas être chargées, alors le traitement s'interrompt avec une exception (cf. 4.5.2 L'événement xforms-link-exception). Si, d'une manière ou d'une autre, elles ne sont pas fournies, alors le modèle de données ne se construit pas au cours de cette phase mais pendant la construction de l'interface d'utilisateur (cf. 4.2.2 L'événement xforms-model-construct-done) ;

  3. Le cas échéant, la politique P3P est initialisée [P3P 1.0] ;

  4. Les données d'instance sont construites. Toutes les chaînes insérées dans les données d'instance sont soumises à une normalisation Unicode. Toutes les propriétés d'élément de modèle sont initialisées en traitant tous les éléments bind dans l'ordre du document. Pour chaque élément bind :

    1. L'attribut nodeset de la liaison est évalué, aboutissant à la sélection d'un ensemble de nœuds ;

    2. Pour chaque nœud dans l'ensemble de nœuds, les propriétés d'élément de modèle sont appliquées en fonction des autres attributs de l'élément bind : la valeur de chaîne de chaque attribut (dont le nom correspond à celui d'une des propriétés définies dans le chapitre 6.1 Les définitions des propriétés d'élément de modèle) est copiée comme valeur locale de la propriété d'élément de modèle de même nom ;

    3. Si le nœud contient déjà une propriété d'élément de modèle de même nom, alors le traitement XForms du document conteneur s'interrompt avec une exception (cf. 4.5.1 L'événement xforms-binding-exception).

  5. Les événements xforms-rebuild, xforms-recalculate et xforms-revalidate ont lieu successivement sur cet élément model. (L'événement xforms-refresh n'est pas effectué car l'interface d'utilisateur n'a pas encore été initialisée).

Après que tous les modèles XForms ont été initialisés, un événement xforms-model-construct-done est distribué à chaque élément model.

4.2.2 L'événement xforms-model-construct-done

Distribué après l'achèvement du traitement de l'événement xforms-model-construct.

Cible : model

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement n'a lieu qu'une seule fois, peu importe le nombre de modèles XForms présents dans le document conteneur, et aboutit à ce qui suit, pour chaque commande de formulaire.

Le traitement peut se dérouler de deux manières différentes, selon qu'un élément instance soit présent ou non dans l'élément model lorsque la première commande de formulaire est traitée.

Si l'élément instance appelé sur la commande de formulaire était présent lors du traitement de la première commande de formulaire :

  1. L'expression de liaison est évalué afin de s'assurer qu'il pointe vers un nœud existant. Si ce n'est pas le cas, alors la commande de formulaire devrait se comporter comme si elle était liée à un élément de modèle dont la propriété d'élément de modèle relevant valait "false".

Si l'élément instance appelé dans la commande de formulaire n'existait pas lors du traitement de la première commande de formulaire, pour le même élément instance :

  1. Pour le premier appel d'un élément instance, un élément instance implicite est créé en fonction des règles suivantes :

    1. Un élément racine instanceData est créé ;

    2. Un nœud d'élément de données d'instance sera créé en se servant de l'expression de liaison de la commande d'interface d'utilisateur comme valeur pour name. Si ce n'est pas un nom qualifié de type QName valide, le traitement s'interrompt avec une exception (cf. 4.5.1 L'événement xforms-binding-exception).

  2. Pour le deuxième appel, et les suivants, à un élément instance qui aura été créé automatiquement, le traitement suivant est appliqué :

    1. Si un nœud de données d'instance correspondant est trouvé, la commande de l'interface d'utilisateur sera liée à cet élément ;

    2. Si aucun nœud de données d'instance n'est trouvé, il en sera créé un en se servant de l'expression de liaison de la commande d'interface d'utilisateur comme valeur pour name. Si ce n'est pas un nom qualifié de type QName, le traitement s'interrompt avec une exception (cf. 4.5.1 L'événement xforms-binding-exception).

Après que toutes les commandes de formulaire ont été initialisées, un événement xforms-ready est distribué à chaque élément model.

4.2.3 L'événement xforms-ready

Distribué dans le cadre du traitement de l'événement xforms-model-construct-done.

Cible : model

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

4.2.4 L'événement xforms-model-destruct

Distribué par le processeur pour avertir de la mise hors-service imminente du processeur XForms, laquelle peut se produire à partir d'une action de l'utilisateur, ou à partir d'une action XForms load, ou comme conséquence de la soumission du formulaire.

Cible : model

Bouillonne : non

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement d'un événement de notification.

4.3 Les événements d'interaction

4.3.1 Les événements xforms-next et xforms-previous

Distribués en réponse à une requête de l'utilisateur pour naviguer vers la commande de formulaire suivante, ou la commande précédente.

Cible : commande de formulaire

Bouillonne : non

S'annule : oui

Information de contexte : aucune

L'action implicite de ces événements produit une navigation selon l'ordre de navigation par défaut. Par exemple, avec une interface clavier, la touche tabulation pourrait générer un événement xforms-next, tandis que les touches majuscule+tabulation pourraient générer un événement xforms-previous.

La navigation est déterminée sur l'ensemble du document conteneur. Le langage hôte est responsable de la définition de l'ordre de navigation global. Voici une technique possible, fondée sur l'attribut navindex, qui se sert de commandes de formulaire individuelles comme unités de navigation : les structures group, repeat et switch servent également d'unités de navigation mais, au lieu de fournir un seul point de navigation, elles créent un contexte de navigation pour les sous-commandes de formulaire (et d'autres sous-structures éventuellement). La séquence de navigation est déterminée comme suit :

  1. La navigation se porte d'abord sur les commandes de formulaire avec un attribut navindex défini dont la valeur est positive.

    1. La navigation s'exerce sur les commandes de formulaire les plus externes dans l'ordre croissant de la valeur de l'attribut navindex. Les valeurs ne doivent pas forcément se suivre ni commencer à une valeur particulière. Les commandes de formulaire dont les attributs navindex ont la même valeur sont accédées dans l'ordre du document ;

    2. Les commandes de formulaire ancêtres (group, repeat et switch) établissent une séquence de navigation locale. Toutes les commandes de formulaire dans une séquence locale sont accédées, dans l'ordre croissant de la valeur de l'attribut navindex, avant qu'une quelconque commande de formulaire extérieure à la séquence locale ne le soit. Les commandes de formulaire qui ont des valeurs d'attribut navindex identiques sont accédées dans l'ordre du document.

  2. La navigation se porte ensuite sur les commandes de formulaire sans attribut navindex défini, ou dont la valeur est "0". Ces commandes de formulaire sont accédés dans l'ordre du document ;

  3. Les commandes de formulaire qui sont inactives, cachées ou non répertoriées dans l'attribut relevant reçoivent un ordre relatif dans la séquence globale mais ne participent pas en tant que commandes navigables ;

  4. La séquence de navigation après la dernière commande de formulaire (ou avant la première) n'est pas définie. Les processeurs XForms peuvent revenir à la première/dernière commande, déplacer le focus hors du formulaire, ou d'autres possibilités.

4.3.2 L'événement xforms-focus

Distribué en réponse au fait que le focus se place sur une commande de formulaire.

Cible : commande de formulaire

Bouillonne : non

S'annule : oui

Information de contexte : aucune

L'action implicite de cet événement produit le placement du focus sur la commande de formulaire cible, si cette commande est capable de recevoir le focus. Le placement du focus sur une structure de répétition fixera le focus sur l'élément de répétition repéré par l'index de répétition.

4.3.3 Les événements xforms-help et xforms-hint

Distribués en réponse à une requête de l'utilisateur pour une assistance ou des indications.

Cible : commande de formulaire

Bouillonne : oui

S'annule : oui

Information de contexte : aucune

L'action implicite de ces événéments produit ce qui suit : si la commande de formulaire comporte les éléments help/hint, ils servent à construire un message affiché à l'utilisateur. Sinon, les agents utilisateurs peuvent fournir des messages d'assistance ou d'indication par défaut, mais ils ne sont pas oblligés de le faire.

4.3.4 L'événement xforms-refresh

Distribué en réponse à une demande de mise à jour de toutes les commandes de formulaire associées à un modèle XForms particulier.

Cible : model

Bouillonne : oui

S'annule : oui

Information de contexte : aucune

L'action implicite de cet événement est la suivante :

  1. Toutes les liaisons de l'interface d'utilisateur devraient être réévaluées si nécessaire ;

  2. Un nœud peut changer du fait d'une entrée d'utilisateur confirmée dans une commande de formulaire par un événement xforms-recalculate (section 4.3.6) ou par une action (section 10.1.9). Si la valeur d'un nœud de données d'instance a changé, alors le nœud doit être marqué afin de distribuer un événement xforms-value-changed ;

  3. Si l'événement xforms-value-changed est marqué pour une distribution, alors tous les événements de notification appropriés de propriétés d'élément du modèle doivent l'être également (c'est-à-dire, xforms-optional ou xforms-required, xforms-readwrite ou xforms-readonly, et xforms-enabled ou xforms-disabled) ;

  4. Pour chaque commande de formulaire, chaque événement de notification marqué pour distribution sur le nœud lié doivent être distribués (xforms-value-changed, xforms-valid, xforms-invalid, xforms-optional, xforms-required, xforms-readwrite, xforms-readonly et xforms-enabled, xforms-disabled). Les événements de notification xforms-out-of-range ou xforms-in-range doivent aussi être distribués selon le cas. Cette spécification ne définit aucun ordre pour les événements ;

  5. l'interface d'utilisateur reflète l'état du modèle, ce qui veut dire que toutes les commandes de formulaire reflètent les données d'instance correspondantes auxquelles elles sont liées :

    • sa valeur courante ;

    • sa validité ;

    • si elle est obligatoire (required), en lecture seule (readonly) ou pertinente (relevant).

4.3.5 L'événement xforms-revalidate

Distribué en réponse à une demande de revalidation d'un modèle XForms particulier.

Cible : model

Bouillonne : oui

S'annule : oui

Information de contexte : aucune

Un nœud d'instance est valide si, et seulement si, les conditions suivantes sont vérifiées :

  • La propriété d'élément de modèle constraint vaut "true" ;

  • Le nœud satisfait aux définitions de schéma XML applicables (y compris celles associées par la propriété d'élément de modèle type).

Remarque :

Un nœud satisfaisant aux conditions précédentes est valide même s'il est obligatoire et qu'il est vide.

L'action implicite de cet événement est la suivante :

La gestion minimale de cet événement doit satisfaire aux conditions suivantes :

  1. Tous les nœuds de données d'instance dans tous les éléments instance de l'élément model sont vérifiés par rapport à un éventuel schéma XML défini ;

  2. Tous les nœuds de données d'instance dans tous les éléments instance de l'élément model sont vérifiés par rapport aux éventuelles propriétés d'élément de modèle liées qui définissent des contraintes sur la valeur, c'est-à-dire required, constraint (cf. 6 Les propriétés d'élément de modèle) ;

  3. Les événements de notification appropriés (cf. 4.4.6 L'événement xforms-valid, 4.4.7 L'événement xforms-invalid, 4.4.10 L'événement xforms-readonly, 4.4.11 L'événement xforms-readwrite , 4.4.12 L'événement xforms-required, 4.4.13 L'événement xforms-optional , 4.4.14 L'événement xforms-enabled, 4.4.15 L'événement xforms-disabled ) sont distribués à celles des commandes de formulaire où la propriété d'élément de modèle correspondante est évaluée à une valeur différente de celle du début du traitement de cet événement.

Remarque :

Avant la distribution du gestionnaire d'événement xforms-ready, il n'y a aucune commande de formulaire liée à des données d'instance, de sorte que l'événement xforms-valid et d'autres événements de notification ne sont pas distribués.

La validité de tous les nœuds de données d'instance dans tous les éléments instance de l'élément model est vérifiée conformément à la définition précédente. Si la validité d'un nœud change, alors ce nœud est marqué pour distribution de l'événement de notification approprié (xforms-valid ou xforms-invalid) aux commandes de formulaire liées au cours de l'événement xforms-refresh comme suit :

  • Si la qualité du nœud change d'invalide à valide, alors le nœud est marqué pour distribution de l'événement xforms-valid ;

  • Si la qualité du nœud change de valide à invalide, alors le nœud est marqué pour distribution de l'événement xforms-invalid.

4.3.6 L'événement xforms-recalculate

Distribué en réponse à une requête pour le recalcul de tous les calculs associés à un modèle XForms particulier.

Cible : model

Bouillonne : oui

S'annule : oui

Information de contexte : aucune

L'action implicite de cet événement est la suivante :

Les valeurs de tous les éléments de données d'instance correspondent, le cas échéant, avec leurs contraintes calculate associées. Toutes les propriétés d'élément de modèle pouvant contenir des expressions calculées sont résolues. Outre les changements d'autres valeurs de nœud qui induiront des notifications xforms-value-changed au cours d'un événement xforms-refresh, les propriétés d'élément de modèle qui changent sont marquées afin de permettre aux événements xforms-revalidate et xforms-refresh de mieux déterminer les événements de notification à distribuer.

  • Si la propriété d'élément de modèle required change, on devra alors marquer pour distribution soit l'événement xforms-required si la propriété required vaut "true", soit l'événement xforms-optional si celle-ci vaut "false" ;

  • Si la propriété d'élément de modèle readonly change, on devra alors marquer pour distribution soit l'événement xforms-readonly si la propriété readonly vaut "true", soit l'événement xforms-readwrite si celle-ci vaut "false" ;

  • Si la propriété d'élément de modèle relevant change, on devra alors marquer pour distribution soit l'événement xforms-enabled si la propriété relevant vaut "true", soit l'événement xforms-disabled si celle-ci vaut "false".

Une expression XPath est liée soit à la valeur, soit à une propriété d'élément de modèle (par exemple, required, relevant) d'un ou plusieurs nœuds d'instance. On considère la combinaison d'une expression XPath avec la valeur, ou la propriété d'élément de modèle, d'un seul nœud d'instance comme une seule unité de calcul, un calcul, pour les besoins du recalcul.

Quand il s'agit de réitérer un calcul, l'expression XPath est évaluée dans le contexte du nœud d'instance dont la valeur, ou la propriété d'élément de modèle, est associée au calcul. Quand il s'agit de recalculer une propriété d'élément de modèle, l'expression XPath est évaluée. Le contexte d'évaluation est déterminé à partir de l'expression de liaison du modèle qui aura appliqué la propriété d'élément de modèle, comme défini pour les expressions calculées dans la section 7.4 Le contexte d'évaluation. L'expression XPath peut appeler ou se référer à un autre nœud d'instance, auquel cas la valeur du nœud d'instance est appelée. Chaque nœud d'instance appelé a pour dépendants les calculs qui se réfèrent directement à lui. Les appels de la valeur du nœud courant dans les expressions calculate sont explicitement ignorés, c'est-à-dire que, si une expression associée à un calcul se réfère au nœud d'instance associé au calcul, alors le nœud d'instance ne se considère pas lui-même comme un dépendant. Un calcul est computationnellement dépendant d'un nœud d'instance (dont la valeur est calculée ou non) s'il existe un chemin de dépendants menant du nœud d'instance, à travers d'autres (zéro ou plus) nœuds d'instance, au calcul en question. Un calcul fait partie d'une dépendance circulaire s'il est computationnellement dépendant de lui-même.

Remarque :

Les auteurs ne devraient pas se référer à la valeur du nœud courant dans les expressions calculate parce que l'effet n'est pas bien défini. Néanmoins, d'autres propriétés d'élément de modèle, telles que required ou readonly, sont bien définies en présence d'auto-références.

Lorsqu'un événement de recalcul démarre, il y aura une liste L d'un ou de plusieurs nœuds d'instance dont les valeurs auront changé, par exemple, par une entrée d'utilisateur propagée à l'instance.

  1. Un processeur XForms ne devrait pas recalculer les calculs qui ne sont pas computationnellement dépendants d'un ou de plusieurs éléments dans la liste L ;

  2. Un processeur XForms ne devrait effectuer qu'un seul recalcul de chaque calcul computationnellement dépendant d'un ou de plusieurs éléments dans la liste L ;

  3. Un processeur XForms doit recalculer un calcul C après avoir recalculé tous les calculs de nœuds d'instance desquels C est computationnellement dépendant. (De manière équivalente, un processeur XForms doit recalculer un calcul C avant de recalculer un calcul computationnellement dépendant du nœud d'instance associé à C

  4. Finalement, si un calcul fait partie d'une dépendance circulaire et qu'il est aussi computationnellement dépendant d'un élément dans L, alors le processeur XForms doit signaler une exception (cf. 4.5.4 L'événement xforms-compute-exception).

L'annexe D L'algorithme de séquence de recalcul décrit une méthode possible pour obtenir le comportement de recalcul souhaité.

4.3.7 L'événement xforms-rebuild

Distribué en réponse à une requête pour reconstruire les structures de données internes du suivi des dépendances de calcul dans un model XForms particulier.

Cible : model

Bouillonne : oui

S'annule : oui

Information de contexte : aucune

L'action implicite de cet événement est la suivante : les structures des données de dépendance sont reconstruites, puis la liste des changements L est ajustée pour contenir des références à tous les nœuds d'instance ayant une expression de calcul associée, de sorte qu'un recalcul complet soit effectué à la prochaine distribution d'un événement xforms-recalculate au modèle.

4.3.8 L'événement xforms-reset

Distribué en réponse à une requête de l'utilisateur pour réinitialiser le modèle.

Cible : model

Bouillonne : oui

S'annule : oui

Information de contexte : aucune

L'action implicite de cet événement est la suivante :

Les données d'instance sont réinitialisées selon la structure de l'arbre et les valeurs qu'elles avaient immédiatement après avoir traité l'événement xforms-ready. Les événements xforms-rebuild, xforms-recalculate, xforms-revalidate et xforms-refresh sont ensuite successivement distribués à l'élément model.

4.3.9 L'événement xforms-submit

Voir le chapitre 11 La soumission.

4.4 Les événements de notification

4.4.1 L'événement DOMActivate

Distribué en réponse à la requête d'action implicite d'une commande de formulaire, par exemple, presser un bouton ou taper la touche entrée.

Cible : commande de formulaire

Bouillonne : oui

S'annule : oui

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

4.4.2 L'événement xforms-value-changed

Distribué en réponse au fait qu'un changement confirmé a eu lieu sur un nœud de données d'instance lié à une commande de formulaire, comme lorsque l'utilisateur navigue hors de la commande de formulaire. Distribué en réponse à un changement sur un nœud de données d'instance lié à une commande de formulaire.

Cet événement est distribué, au cours d'un événement xforms-refresh, si le nœud de données d'instance lié a été marqué pour distribution de celui-ci en raison d'un changement.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

Remarque :

Pour un traitement incrémental, la présente spécification ne définit pas la fréquence de génération de ces événements par les processeurs XForms. Les implémentations sont censées optimiser le traitement (par exemple, en ne faisant pas scintiller l'écran entier pour chaque caractère saisi, etc.)

Remarque :

Le changement apporté aux données d'instance associées à cet événement se produit avant que l'événement soit distribué.

4.4.3 Les événements xforms-select et xforms-deselect

Distribués en réponse à la sélection, ou à la désélection, d'un élément dans un élément select, select1 ou switch.

Cible : item, itemset ou case

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

4.4.4 Les événements xforms-scroll-first et xforms-scroll-last

Distribués en réponse au fait qu'une action setindex essaye de fixer un index en dehors de l'intervalle défini par un élément repeat.

Cible : repeat

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

4.4.5 Les événements xforms-insert et xforms-delete

Distribués en réponse au fait qu'un gestionnaire d'événement invoque une action XForms insert, ou delete, et ajoute, ou supprime, avec succès un élément de répétition.

Cible : instance

Bouillonne : oui

S'annule : non

Information de contexte : l'expression XPath utilisée pour l'insertion/suppression (xsd:string).

L'action implicite de ces événements est la suivante : aucune ; c'est seulement un événement de notification.

4.4.6 L'événement xforms-valid

Distribués en réponse au fait qu'un nœud de données d'instance change et soit, ou devienne valide.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

Cet événement est distribué dès lors que la valeur du nœud de données d'instance lié change, et en outre, lorsque le nœud de données d'instance lié devient indirectement valide, au travers de la propriété d'élément de modèle constraint évaluée à la valeur "true".

Cet événement est distribué, au cours d'un événement xforms-refresh, si le nœud de données d'instance lié a été marqué pour distribution de celui-ci par un événement xforms-revalidate (section 4.3.5).

4.4.7 L'événement xforms-invalid

Distribué en réponse au fait qu'un nœud de données d'instance change et soit, ou devienne invalide.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

Cet événement est distribué dès lors que la valeur du nœud de données d'instance lié change, et en outre, lorsque le nœud de données d'instance lié devient indirectement invalide, au travers de la propriété d'élément de modèle constraint évaluée à la valeur "false".

Cet événement est distribué, au cours d'un événement xforms-refresh, si le nœud de données d'instance lié a été marqué pour distribution de celui-ci par un événement xforms-revalidate (section 4.3.5).

4.4.8 L'événement DOMFocusIn

Distribué en réponse au fait qu'une commande de formulaire reçoive le focus.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

4.4.9 L'événement DOMFocusOut

Distribué en réponse au fait qu'une commande de formulaire perde le focus.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

4.4.10 L'événement xforms-readonly

Distribué en réponse au fait qu'un nœud de données d'instance change et soit, ou devienne en lecture seule.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

Cet événement est distribué dès lors que la valeur du nœud de données d'instance change, et, en outre, lorsque le nœud de données d'instance lié devient indirectement en lecture seule, au travers de la propriété d'élément de modèle readonly évaluée à la valeur "true".

Cet événement est distribué, au cours d'un événement xforms-refresh, si le nœud de données d'instance lié a été marqué pour distribution de celui-ci par un événement xforms-recalculate (section 4.3.6) ou xforms-refresh (section 4.3.4).

4.4.11 L'événement xforms-readwrite

Distribué en réponse au fait qu'un nœud de données d'instance change et soit, ou devienne en lecture-écriture.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

Cet événement est distribué dès lors que la valeur du nœud de données d'instance change, et, en outre, lorsque le nœud de données d'instance lié devient indirectement en lecture-écriture, au travers de la propriété d'élément de modèle readonly évaluée à la valeur "false".

Cet événement est distribué, au cours d'un événement xforms-refresh, si le nœud de données d'instance lié a été marqué pour distribution de celui-ci par un événement xforms-recalculate (section 4.3.6) ou xforms-refresh (section 4.3.4).

4.4.12 L'événement xforms-required

Distribué en réponse au fait qu'un nœud de données d'instance change et soit, ou devienne obligatoire.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

Cet événement est distribué dès lors que la valeur du nœud de données d'instance change, et, en outre, lorsque le nœud de données d'instance lié devient indirectement obligatoire, au travers de la propriété d'élément de modèle required évaluée à la valeur "true".

Cet événement est distribué, au cours d'un événement xforms-refresh, si le nœud de données d'instance lié a été marqué pour distribution de celui-ci par un événement xforms-recalculate (section 4.3.6) ou xforms-refresh (section 4.3.4).

4.4.13 L'événement xforms-optional

Distribué en réponse au fait qu'un nœud de données d'instance change et soit, ou devienne optionnel.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

Cet événement est distribué dès lors que la valeur du nœud de données d'instance change, et, en outre, lorsque le nœud de données d'instance lié devient indirectement optionnel, au travers de la propriété d'élément de modèle required évaluée à la valeur "false".

Cet événement est distribué, au cours d'un événement xforms-refresh, si le nœud de données d'instance lié a été marqué pour distribution de celui-ci par un événement xforms-recalculate (section 4.3.6) ou xforms-refresh (section 4.3.4).

4.4.14 L'événement xforms-enabled

Distribué en réponse au fait qu'un nœud de données d'instance change et soit, ou devienne activé.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

Cet événement est distribué dès lors que la valeur du nœud de données d'instance change, et, en outre, lorsque le nœud de données d'instance lié devient indirectement activé, au travers de la propriété d'élément de modèle relevant évaluée à la valeur "true".

Cet événement est distribué, au cours d'un événement xforms-refresh, si le nœud de données d'instance lié a été marqué pour distribution de celui-ci par un événement xforms-recalculate (section 4.3.6) ou xforms-refresh (section 4.3.4).

4.4.15 L'événement xforms-disabled

Distribué en réponse au fait qu'un nœud de données d'instance change et soit, ou devienne désactivé.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

Cet événement est distribué dès lors que la valeur du nœud de données d'instance change, et, en outre, lorsque le nœud de données d'instance lié devient indirectement désactivé, au travers de la propriété d'élément de modèle relevant évaluée à la valeur "false".

Cet événement est distribué, au cours d'un événement xforms-refresh, si le nœud de données d'instance lié a été marqué pour distribution de celui-ci par un événement xforms-recalculate (section 4.3.6) ou xforms-refresh (section 4.3.4).

4.4.16 L'événement xforms-in-range

Distribué en réponse au fait que la valeur d'un nœud de données d'instance a changé de telle sorte que la valeur peut maintenant être représentée par la commande de formulaire.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

Cet événement est distribué dès lors que la valeur d'un nœud de données d'instance, qui était impossible à représenter selon les contraintes définies sur une commande de formulaire, a changé de telle sorte qu'elle puisse être représentée par la commande de formulaire.

4.4.17 L'événement xforms-out-of-range

Distribué en réponse au fait qu'un nœud de données d'instance a changé de telle sorte que la valeur ne puisse pas être représentée par la commande de formulaire.

Cible : commande de formulaire

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

Cet événement est distribué dès lors que la valeur d'un nœud de données d'instance ne peut pas être représentée selon les contraintes définies sur une commande de formulaire.

4.4.18 L'événement xforms-submit-done

Distribué en réponse à l'achèvement du processus de soumission, y compris le traitement d'un éventuel document renvoyé.

Cible : submission

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

4.4.19 L'événement xforms-submit-error

Distribué en indication de l'échec du processus de soumission tel qu'il est défini dans le chapitre 11 La soumission

Cible : model submission

Bouillonne : oui

S'annule : non

Information de contexte : l'adresse URI de la méthode de soumission qui a échoué (xsd:anyURI)

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

4.5 Les indications d'erreur

Les indications d'erreur surviennent à la suite de conditions inhabituelles dans le processeur XForms. Certaines d'entre elles sont des erreurs fatales qui interrompent le traitement : elles comportent le suffixe exception. D'autres servent simplement à la notification : elles portent le suffixe error. Pour tous les événements décrits dans cette section, le processeur XForms peut, dans une certaine mesure, effectuer une gestion minimale, par exemple, tenir un journal des messages d'erreur dans un fichier.

4.5.1 L'événement xforms-binding-exception

Distribué comme indication d'une expression de liaison illégale, ou d'un attribut model qui échoue à pointer vers l'ID d'un élément model, ou d'un attribut bind qui échoue à pointer vers l'ID d'un élément bind, ou d'un attribut submission qui échoue à pointer vers l'ID d'un élément submission, ou de l'attribut instance d'un élément submission qui échoue à pointer vers un élément instance dans le même élément model que celui de l'élément submission.

Cible : tout élément qui peut contenir une expression de liaison

Bouillonne : oui

S'annule : non

Information de contexte : aucune

L'action implicite de cet événement est la suivante : erreur fatale.

4.5.2 L'événement xforms-link-exception

Distribué comme indication de l'échec dans la traversée du lien d'un attribut de liaison.

Cible : model

Bouillonne : oui

S'annule : non

Information de contexte : l'adress URI dont le chargement a échoué (xsd:anyURI)

L'action implicite de cet événement est la suivante : erreur fatale.

4.5.3 L'événement xforms-link-error

Distribué comme indication de l'échec dans la traversée du lien d'un attribut de liaison, la situation permettant le traitement du formulaire.

Cible : model

Bouillonne : oui

S'annule : non

Information de contexte : The URI that failed to load (xsd:anyURI)

L'action implicite de cet événement est la suivante : aucune ; c'est seulement un événement de notification.

4.5.4 L'événement xforms-compute-exception

Distribué comme indication d'une erreur survenue au cours de l'évaluation XPath.

Cible : model

Bouillonne : oui

S'annule : non

Information de contexte : une chaîne d'erreur propre à l'implémentation.

L'action implicite de cet événement est la suivante : erreur fatale.

4.6 Le séquencement des événements

Les sections précédentes décrivaient un traitement associé à des événements individuels. Celle-ci donne la séquence globale des événements apparentés devant survenir dans plusieurs situations communes. Dans la liste suivante, les événements qui peuvent être déclenchés plusieurs fois sont préfixés par [n].

4.6.1 Pour les commandes input, secret, textarea, range ou upload

  • Lorsque la commande de formulaire est changée de manière interactive et qu'elle a le paramétrage incremental="true", alors la séquence d'événements, décrite dans 4.6.7 Séquence : le changement de valeur avec changement de focus, peut être initiée à des intervalles dépendant de l'implémentation ;

  • Lorsque la commande de formulaire est changée de manière interactive et qu'elle n'a pas le paramétrage incremental="true", alors alors aucune distribution d'événement n'est obligatoire et, de ce fait, aucun ordre n'est défini ;

  • Lorsque le focus change à partir de la commande de formulaire et que la valeur a changé, alors la séquence d'événement est celle décrite dans 4.6.7 Séquence : le changement de valeur avec changement de focus.

4.6.2 Pour les commandes output

  • Aucune séquence d'événements n'est définie.

4.6.3 Pour les commandes select ou select1

4.6.4 Pour les commandes trigger

4.6.5 Pour les commandes submit

4.6.6 Séquence : la sélection sans changement de valeur

  1. xforms-deselect

  2. xforms-select

4.6.7 Séquence : le changement de valeur avec changement de focus

  1. xforms-recalculate

  2. xforms-revalidate

  3. [n] xforms-valid/xforms-invalid ; xforms-enabled/xforms-disabled ; xforms-optional/xforms-required ; xforms-readonly/xforms-readwrite

  4. xforms-value-changed

  5. DOMFocusOut

  6. DOMFocusIn

  7. xforms-refresh

La réévaluation des expressions de liaison doit intervenir avant l'étape 3 ci-dessus.

  1. xforms-recalculate

  2. xforms-revalidate

  3. L'événement xforms-refresh opère la réévaluation des expressions de liaison de l'interface d'utilisateur et distribue ces événements conformément aux changements des valeurs, des propriétés d'élément de modèle et des validités :

    • [n] xforms-value-changed

    • [n] xforms-valid ou xforms-invalid

    • [n] xforms-enabled ou xforms-disabled

    • [n] xforms-optional ou xforms-required

    • [n] xforms-readonly ou xforms-readwrite

    • [n] xforms-out-of-range ou xforms-in-range

    (L'ordre dans lequel ces événements sont distribués n'est pas défini).
  4. effectue d'autres mises à jours différées si nécessaire.

4.6.8 Séquence : l'activation d'un élément trigger

  1. DOMActivate

4.6.9 Séquence : la soumission

  1. xforms-submit

  2. xforms-submit-done ou xforms-submit-error