8 Les commandes de formulaire

8.1 Le module Commandes de formulaire de XForms

Les commandes de formulaire se déclarent au moyen d'éléments de balisage et leur comportement est affiné via des attributs de balisage.

Élément Attributs Modèle de contenu minimal
input Communs, Communs I.U., Liaison de nœud simple, inputmode (xsd:string), incremental (xsd:boolean) label, (Communs I.U.)*
secret Communs, Communs I.U., Liaison de nœud simple, inputmode (xsd:string), incremental (xsd:boolean) label, (Communs I.U.)*
textarea Communs, Communs I.U., Liaison de nœud simple, inputmode (xsd:string), incremental (xsd:boolean) label, (Communs I.U.)*
output Communs, Liaison de nœud simple (optionnel), appearance ("full"|"compact"|"minimal"|xforms:QNameButNotNCNAME), value (expression-XPath) label?
upload Communs, Communs I.U., Liaison de nœud simple, mediatype (xsd:string), incremental (xsd:boolean) label, filename?, mediatype?, (Communs I.U.)*
range Communs, Communs I.U., Liaison de nœud simple, start (xsd:string), end (xsd:string), step (xsd:string), incremental (xsd:boolean) label, (Communs I.U.)*
trigger Communs, Communs I.U., Liaison de nœud simple (optionnel) label, (Communs I.U.)*
submit Communs, Communs I.U., Liaison de nœud simple (optionnel), submission (xsd:IDREF) label, (Communs I.U.)*
select Communs, Communs I.U., Liaison de nœud simple, selection ("open" | "closed"), incremental (xsd:boolean) label, (Communs I.U. liste)+, (Communs I.U.)*
select1 Communs, Communs I.U., Liaison de nœud simple, selection ("open" | "closed"), incremental (xsd:boolean) label, (Communs I.U. liste)+, (Communs I.U.)*
choices Communs label?, (Communs I.U. liste)+
item Communs label, value, (Communs I.U.)*
filename Communs, Liaison de nœud simple EMPTY
mediatype Communs, Liaison de nœud simple EMPTY
value Communs, Liaison de nœud simple (optionnel) (PCDATA|ANY)*
label Communs, Liaison de nœud simple (optionnel), Liaison (PCDATA|(Direct d'I.U.))*
help Communs, Liaison de nœud simple (optionnel), Liaison (PCDATA|(Direct d'I.U.))*
hint Communs, Liaison de nœud simple (optionnel), Liaison (PCDATA|(Direct d'I.U.))*
alert Communs, Liaison de nœud simple (optionnel), Liaison (PCDATA|(Direct d'I.U.))*

Voir également 9.3.3 L'élément itemset .

Remarque :

À moins d'être liés à des commandes de formulaires, les nœuds de donnée d'instance ne sont pas présentés à l'utilisateur. Par conséquent, une commande de formulaire correspondant au <input type="hidden"> de HTML n'est pas nécessaire.

Les attributs suivants sont communs à beaucoup d'éléments XForms relatifs à l'interface d'utilisateur : le groupe de ces attributs est appelé ici Communs I.U..

Élément Attributs
(divers) appearance ("full"|"compact"|"minimal"|QName-but-not-NCName)
appearance

Un attribut optionnel qui définit une indication de l'apparence. Si absent, l'agent utilisateur est libre de choisir la restitution qui convient.

Remarque :

Un langage hôte est censé ajouter des attributs, tel que xml:lang, ainsi qu'un attribut nommé class qui contient une liste de chaîne susceptibles d'être filtrées par des sélecteurs de classe CSS.

En outre, le langage hôte doit fournir un moyen d'indiquer l'ordre de navigation d'ensemble, entre les commandes de formulaire et les autres éléments compris dans le langage hôte, ainsi qu'une navigation au clavier ou par accès direct vers des éléments particuliers. La proposition suivante fait appel au couple d'attributs navindex et accesskey, définis ainsi :

navindex

Un attribut optionnel dont la valeur est un entier non négatif dans l'intervalle 0-32767 servant à définir la séquence de navigation. Il donne à l'auteur le contrôle de la séquence suivant laquelle parcourir les commandes de formulaire. L'ordre de navigation implicite est défini dans le chapitre 4 Le modèle de traitement.

accesskey

Un attribut optionnel qui définit un raccourci afin de déplacer le focus d'entrée directement à une commande de formulaire. Il a pour valeur un caractère seul qui, utilisé en même temps qu'une touche modificatrice propre à la plateforme (par exemple, la touche alt), entraîne le déplacement du focus sur cette commande de formulaire.

L'agent utilisateur doit fournir un moyen d'identifier les touches d'accès susceptibles de servir dans une présentation. Cela peut se faire de différentes façons selon les implémentations, par exemple, au travers d'une interaction directe avec l'application ou via le guide de l'utilisateur. Le lecteur peut ne pas mettre à disposition la touche d'accès demandée par l'auteur (par exemple, elle n'existe pas sur l'appareil employé, ou le lecteur lui-même l'utilise). Par conséquent, l'agent utilisateur devrait mettre à disposition la touche indiquée, mais peut l'associer à un comportement d'interaction différent.

En outre, le module Commandes de formulaire définit les jeux de contenu suivants :

Jeu de contenu Modèle de contenu minimal
Communs I.U. (help|hint|alert|Action)*
Communs I.U. liste (choices|item|itemset)+
Commandes de formulaire (input|secret|textarea|output|upload|range|trigger|submit|select|select1)*
Direct d'I.U. (output)*

Comme indiqué ci-dessus, le module Événements XML ajoute le jeu de contenu Action au jeu de contenu Communs I.U.. Un langage hôte devrait ajouter un balisage direct au jeu de contenu Direct d'I.U.. Lorsque le module Extension de XForms est présent, il devrait également être inclus au jeu de contenu Communs I.U..

8.1.1 Les obligations d'implémentation communes à toutes les commandes de formulaire

Les commandes de l'interface d'utilisateur XForms sont reliées aux données d'instance sous-jacentes au moyen d'attributs de liaison comme définis dans le chapitre 6 Les propriétés des éléments de modèle.

Les commandes de formulaire sont rendues accessibles par l'adoption d'une approche uniforme des caractéristiques telles que les étiquettes, le texte d'assistance, la navigation et les raccourcis au clavier. Les problèmes d'internationalisation sont abordés selon les mêmes principes de conception que dans XHTML. Toutes les commandes de formulaire peuvent recevoir des styles, pour un média acoustique ou bien visuel.

Les commandes de formulaire encapsulent une sémantique de niveau supérieur sans sacrifier la capacité à produire des implémentations réelles. Par exemple, la commande de formulaire select permet à l'utilisateur de sélectionner des éléments d'un ensemble. Ces commandes de formulaire distingue les aspects fonctionnels de la commande sous-jacente des aspects touchant à la présentation et au comportement. Cette séparation permet d'exprimer l'intention sous-jacente d'une commande de formulaire particulière (voir [AUI97] pour une définition de telles primitives d'interaction de niveau supérieur avec l'utilisateur).

Les commandes de formulaire, au moment du rendu, affichent les valeurs de données sous-jacentes auxquelles elles sont reliées. Tandis que les données présentées à l'utilisateur par le biais d'une commande de formulaire doit correspondre directement aux données d'instance liées, la représentation affichée n'est pas tenue de correspondre à la valeur lexicale. Par exemple, les agents utilisateurs devraient appliquer des conventions appropriées pour l'affichage des dates, des heures, des durées et des valeurs numériques, y compris les caractères de séparation.

Toutes les commandes de formulaire doivent respecter les obligations d'implémentation suivantes :

  • Les commandes de formulaire qui écrivent un contenu de type simpleContent sur des données d'instance doivent le faire exactement comme défini par l'action XForms dans 10.1.9 L'élément setvalue ;

  • Toutes les commandes de formulaire qui lisent des données d'instance de type simpleContent doivent le faire de cette manière :

    • Pour les nœuds d'élément : si des nœuds de texte enfants sont présents, renvoyer la valeur de chaîne du premier nœud de texte enfant, sinon renvoyer "" (la chaîne vide) ;

    • Pour les nœuds d'attribut : renvoyer la valeur de chaîne du nœud ;

    • Pour les nœuds de texte : renvoyer la valeur de chaîne du nœud ;

    • Pour l'espace de nommage, les instructions de traitement, les commentaires et le nœud racine XPath : le comportement n'est pas défini.

  • Les commandes de formulaire doivent distinguer le rendu d'un état valide de celui d'un état invalide. Ce comportement devrait pouvoir être contrôlé par des feuilles de style ;

  • Les commandes de formulaire doivent indiquer quand les données d'instance liées contiennent une valeur qu'elles sont sont incapables de restituer. Ce comportement devrait pouvoir être contrôlé par des feuilles de style ;

  • Les commandes de formulaire doivent fournir à la demande une explication de leur état courant, dont la validité et les propriétés d'élément de modèle liées. Ce comportement devrait pouvoir être contrôlé par des feuilles de style ;

  • Les commandes de formulaire doivent fournir une explication par défaut de leur état courant quand celle définie par l'auteur est indisponible.

Les sections de ce chapitre définissent les diverses commandes de formulaire en renseignant les aspects suivants :

Description
Attributs communs
Attributs spéciaux
Exemples
Restrictions de liaison de donnée
Obligations d'implémentation

8.1.2 L'élément input

Description : Cette commande de formulaire permet une entrée de donnée de format libre.

Attributs communs : Communs, Communs I.U., Liaison de nœud simple

Attributs spéciaux :

inputmode

Cette commande de formulaire accepte une indication de mode d'entrée (cf. E Les modes d'entrée).

incremental

Pour une valeur "true", cette commande de formulaire générera d'autres événements xforms-value-changed. La valeur par défaut de cet attribut est "false".

Exemple :

<input ref="commande/livrer/rue" class="adresseRue">
  <label>Adresse</label>
  <hint>Veuillez entrer le numéro et le nom de la rue</hint>
</input>

Dans cet exemple, une feuille de style peut utiliser l'attribut class pour définir la dimension d'affichage de la commande de formulaire. Remarquez que les contraintes exercées sur la quantité de texte qui peut être saisie proviennent de la définition du modèle XForms sous-jacent et non de ces propriétés d'affichage.

Un navigateur graphique pourrait restituer cet exemple comme suit :

Un texte de commande de formulaire de saisie d'aspect normal. L'étiquette 'Adresse' est alignée à gauche

Restrictions de liaison de donnée : Se lie à n'importe quel contenu de type simpleContent (sauf les types xsd:base64Binary, xsd:hexBinary, ou tout type de donnée dérivé de ceux-ci).

Obligations d'implémentation : Doit autoriser l'entrée d'une valeur lexicale pour le type de donnée lié. Les implémentations devraient fournir un dispositif pratique pour l'entrée des types de données et tenir compte des problèmes de localisation et d'internationalisation tel que celui de la représentation des nombres. Par exemple, une commande input liée à un nœud de données d'instance de type xsd:date pourrait fournir une commande calendaire afin d'entrer des dates ; de la même façon, une commande d'entrée liée de type boolean pourrait se rendre par une case à cocher.

<input ref="commande/dateExpedition">
  <label>Expédier</label>
  <hint>Veuillez indiquer la date d'expédition pour cette commande.</hint>
</input>

Un navigateur graphique pourrait restituer cet exemple comme suit :

Une zone de saisie pour une commande de date, avec un bouton qui ouvre sur un calendrier.

L'utilisateur peut taper une date dans la zone de saisie de texte ou presser un bouton pour ouvrir un calendrier :

Un gadget logiciel pour choisir une date dans un calendrier.

8.1.3 L'élément secret

Description : Cette commande de formulaire est utilisé par l'utilisateur afin qu'il puisse fournir des informations au système, de manière à ce qu'il soit difficile pour un observateur du processus, autre que l'utilisateur, de discerner la valeur qui est fournie. Un usage courant : la saisie d'un mot de passe.

Attributs communs : Communs, Communs I.U., Liaison de nœud simple

Attributs spéciaux :

inputmode

Cette commande de formulaire accepte une indication de mode d'entrée (cf. E Les modes d'entrée).

incremental

Pour une valeur "true", cette commande de formulaire générera d'autres événements xforms-value-changed. La valeur par défaut de cet attribut est "false".

Exemple :

Exemple : Saisie d'un mot de passe
<secret ref="/login/motDePasse">
  <label>Mot de passe</label>
  <hint>Le mot de passe ne s'affichera pas.</hint>
</secret>

Un navigateur graphique pourrait restituer cet exemple comme suit :

Une commande de formulaire de saisie de mot de passe, avec le caractère '*' apparaissant à la place du texte et une boîte d'indication affichant un texte d'indication

Restrictions de liaison de donnée : Identiques à celles de l'élément input.

Obligations d'implémentation : Les implémentations, y compris les auxilliaires d'accessibilité, doivent dissimuler la valeur saisie dans cette commande de formulaire. Une approche possible consiste à restituer un caractère *, ou un caractère similaire, à la place des caractères réels saisis. Remarquez que cette approche n'offre qu'un niveau de sécurité temporaire : les informations vraiment sensibles exigeront des mesures de sécurité supplémentaires hors de l'objet du langage XForms.

8.1.4 L'élément textarea

Description : Cette commande de formulaire permet l'entrée de données de format libre et elle est prévue pour entrer un contenu multiligne, par exemple, le corps d'un message électronique.

Attributs communs : Communs, Communs I.U., Liaison de nœud simple

Attributs spéciaux :

inputmode

Cette commande de formulaire accepte une indication de mode d'entrée (cf. E Les modes d'entrée).

incremental

Pour une valeur "true", cette commande de formulaire générera d'autres événements xforms-value-changed. La valeur par défaut de cet attribut est "false".

Exemple :

Exemple : Corps d'un message électronique
<textarea ref="message/corps" class="corpsMessage">
  <label>Corps du message</label>
  <hint>Entrez ici le texte de votre message</hint>
</textarea>

Dans cet exemple, une feuille de style peut utiliser l'attribut class pour définir la dimension d'affichage de la commande de formulaire. Remarquez que les contraintes exercées sur la quantité de texte qui peut être saisie proviennent de la définition du modèle XForms sous-jacent et non de ces propriétés d'affichage.

Un navigateur graphique pourrait restituer cet exemple comme suit :

Une commande de formulaire d'entrée de texte plus grande que la normale. Le titre 'Corps du message' donne une indication supplémentaire selon laquelle on peut placer beaucoup plus de texte ici.

Restrictions de liaison de donnée : Se lie à un type xsd:string ou tout type simpleContent dérivé.

Obligations d'implémentation : Doit autoriser l'entrée d'une valeur lexicale pour le type de donnée lié, y compris des lignes de texte multiples.

8.1.5 L'élément output

Description : Cette commande de formulaire restitue une valeur provenant des données d'instance mais n'offre aucune possibilité d'entrer ou de modifier des données. Elle sert à afficher des valeurs de l'instance et elle se comporte comme si elle avait un style display:inline pour les besoins de la disposition. L'élément output peut servir à afficher la valeur d'un emplacement particulier dans l'instance en utilisant une expression de liaison. Il peut aussi servir à afficher le résultat de l'évaluation d'une expression XPath indiquée via l'attribut value au lieu de l'attribut ref. Remarquez que les attributs ref et value d'un élément output s'excluent mutuellement.

Attributs communs : Communs, Liaison de nœud simple (optionnel)

Attributs spéciaux :

appearance

Cette commande de formulaire qui n'utilise pas le groupe des attributs Communs I.U. mais contient toujours un attribut appearance comme défini précédemment.

value

Une expression XPath à évaluer. Le résultat La chaîne résultant de l'évaluation est restituée par la commande de formulaire. Si des attributs de liaison sont présents pour sélectionner un nœud, cet attribut n'a aucun effet. L'expression XPath est réévaluée dès qu'il se produit un changement dans un nœud auquel l'expression se réfère.

Exemple :

Exemple : Message explicatif
Vous avez été débité de
<output ref="commande/prixTotal"/>
- détails :

Un navigateur graphique pourrait restituer une commande de formulaire de sortie comme suit :

Un texte normal disant : 'Vous avez été débité de 100.00 - détails :'

Restrictions de liaison de donnée : Se lie à tout contenu de type simpleContent.

Obligations d'implémentation : Doit autoriser l'affichage d'une valeur lexicale pour le type de donnée lié. Les implémentations devraient fournir un dispositif pratique pour l'affichage des types de données et tenir compte des problèmes de localisation et d'internationalisation tel que celui de la représentation des nombres.

8.1.6 L'élément upload

Description : Cette commande de formulaire permet une fonctionnalité courante proposée sur des sites Web, à savoir charger sur un serveur un fichier issu du système de fichier local, tout en acceptant les entrées de divers appareils dont les microphones, les stylos et les caméras numériques.

Attributs communs : Communs, Communs I.U., Liaison de nœud simple

Attributs spéciaux :

mediatype

Une liste des types de média suggérés, séparés par des espaces, qui est utilisée par le processeur XForms pour déterminer les sources de donnée possibles à charger sur un serveur.

incremental

Pour une valeur "true", cette commande de formulaire générera d'autres événements xforms-value-changed. La valeur par défaut de cet attribut est "false".

Exemple :

Exemple : Charger une image sur un serveur
<upload ref="courrier/pieceJointe" mediatype="image/*">
  <label>Sélectionnez une image :</label>
  <filename ref="@filename" />
  <mediatype ref="@mediatype" />
</upload>

Un navigateur graphique pourrait restituer cet exemple comme suit :

Un menu déroulant ; l'affichage principal indique 'Sélectionnez une image' avec une jolie icone. Le menu comporte trois éléments : (icone)-Scannée ou photographique ; (icone)-Dessinée ; Rechercher...

Obligations d'implémentation :

  • À son activation, si un sous-élément filename est présent et qu'un nom de fichier est disponible, l'élément upload place le nom de fichier des données à charger sur le serveur dans l'instance, au nœud indiqué par les attributs de liaison du sous-élément filename ;

  • À son activation, si un sous-élément mediatype est présent et qu'un type de donnée est fourni, l'élément upload place le type de donnée des données à charger sur le serveur dans l'instance, au nœud indiqué par les attributs de liaison du sous-élément mediatype.

Restrictions de liaison de donnée : Cette commande de formulaire ne peut se lier qu'aux types de données xsd:anyURI, xsd:base64Binary ou xsd:hexBinary, ou aux types dérivés par restriction de ceux-ci.

Obligations d'implémentation : Pour la liaison d'un type base64Binary, ou hexBinary :

  • Lorsque qu'il est lié à un nœud de données d'instance de type xsd:base64binary, xsd:hexBinary, ou à un type dérivé par restriction de ceux-ci, l'élément upload, à son activation, place le contenu binaire dans le contenu du nœud avec le codage indiqué.

Obligations d'implémentation : Pour la liaison d'un type anyURI :

  • Lorsqu'il est lié à un nœud de données d'instance de type xsd:anyURI (ou d'un type dérivé par restriction de celui-ci), l'élément upload, à son activation, place une adresse URI dans le contenu du nœud.

    Pour des raisons de sécurité, le processeur XForms ne doit pas résoudre l'adresse URI liée à cette commande de formulaire sans autorisation explicite de l'utilisateur.

    Remarque :

    Développeurs, remarquez que l'élément upload doit associer le contenu binaire, le type de média et le nom de fichier à cette adresse URI pour les sérialisations décrites dans les chapitres suivants : 11.4 La sérialisation multipart/related et 11.5 La sérialisation multipart/form-data.

  • Les implémentations disposant d'un système de fichier devrait gérer le chargement de fichier sur un serveur en sélection d'un fichier particulier. La présentation par défaut des types de fichiers devrait refléter le type de média défini par l'attribut mediatype, par exemple, en ne présentant que des types de fichiers sons dans le dialogue de sélection pour le type de média "audio/*".

Obligations d'implémentation : Pour toutes les liaisons de données :

  • Les implémentations associées à un stylo numérique/matériel de numérisation particulier devraient (et celles associées à d'autres dispositif de pointage peuvent) gérer le dessin, c'est-à-dire permettre la création in situ de données produites par un stylo numérique ;

  • Les implémentations ayant des capacités d'enregistrement sonore particulières devraient gérer l'enregistrement sonore, c'est-à-dire l'enregistrement in situ d'un clip audio ;

  • Les implémentations associées à un appareil photographique numérique, une interface de scanérisation ou un capture d'écran devraient gérer l'acquisition d'image, c'est-à-dire le chargement in situ des images issues d'un appareil raccordé ;

  • Les implémentations ayant des capacités d'enregistrement vidéo devraient offrir une option d'enregistrement vidéo ;

  • Les implémentations ayant des capacités 3D devraient fournir une option d'interface 3D ;

  • Les implémentations peuvent offrir des mises en œuvres propriétaires (par exemple, un type de média "text/rtf" pourrait invoquer une fenêtre d'édition dans une application de traitement de texte propriétaire) ;

  • On encourage les implémentations à gérer d'autres dispositifs d'entrée non mentionnés ici ;

  • Les implémentation incapables de gérer le chargement sur un serveur d'un type de média donné doivent l'indiquer à l'utilisateur.

Voir les sous-éléments filename (cf. 8.3.1 L'élément filename) et mediatype (cf. 8.3.2 L'élément mediatype).

8.1.7 L'élément range

Description : Cette commande de formulaire permet une sélection à partir d'un intervalle de valeurs séquentielles.

Attributs communs : Communs, Communs I.U., Liaison de nœud simple

Attributs spéciaux :

start

Une indication optionnelle de la limite lexicale initiale de l'intervalle, une valeur légale pour les données sous-jacentes. Si cette valeur est fournie, elle sert à raffiner encore les contraintes définies par le modèle sous-jacent.

end

Une indication optionnelle de la limite lexicale finale de l'intervalle, une valeur légale pour les données sous-jacentes. Si cette valeur est fournie, elle sert à raffiner encore les contraintes définies par le modèle sous-jacent.

step

Une valeur optionnelle à utiliser pour incrémenter ou décrémenter une valeur. Elle doit être d'un type capable d'exprimer la différence entre deux valeurs légales des données sous-jacentes.

incremental

Pour une valeur "true", cette commande de formulaire générera d'autres événements xforms-value-changed. La valeur par défaut de cet attribut est "false".

Exemple :

Exemple : Choisir dans un intervalle
<range ref="/stats/balance" start="-2.0" end="2.0" step="0.5">
  <label>Balance:</label>
</range>

Un navigateur graphique pourrait restituer cet exemple comme suit :

Une commande à glissière graduée de -2 à +2

Restrictions de liaison de donnée : Se lie seulement à la liste suivante de types de données, ou les types de données dérivés par restriction de ceux de la liste : xsd:duration, xsd:date, xsd:time, xsd:dateTime, xsd:gYearMonth, xsd:gYear, xsd:gMonthDay, xsd:gDay, xsd:gMonth, xsd:float, xsd:decimal, xsd:double.

Obligations d'implémentation : Doit autoriser l'entrée d'une valeur correspondant au type de donnée lié. Les implémentations devraient informer l'utilisateur des limites inférieure et supérieure, et, le cas échéant, de la valeur du pas. Si la valeur de donnée d'instance dépasse les limites inférieure ou supérieure, cette commande de formulaire doit signaler une condition de débordement d'intervalle. Dans les environnements graphiques, elle peut se rendre par une glissière ou un bouton rotatif.

Notez que les attributs de cet élément encapsulent une certaine quantité de métadonnées qui, avec l'information de type provenant du modèle XForms, se révèlent suffisantes pour produire des invites significatives dans l'utilisation de modalités telle que la parole, par exemple, lorsqu'on utilise un auxilliaire d'accessibilité. Ainsi, dans l'exemple suivant, un agent utilisateur vocal pourrait dire une invite de la forme Veuillez choisir une date dans la période du 1er janvier 2001 au 31 décembre 2001.

En cas de recoupement des restrictions entre le type de donnée sous-jacent et les indications des attributs start et end, c'est l'intervalle le plus restrictif qui devrait être utilisé.

Exemple :

Exemple : Choisir une date dans une période
<range ref="/commande/dateExpedition" start="2001-01-01" end="2001-12-31">
  <label>Date d'expédition</label>
</range>

8.1.8 L'élément trigger

Description : Cette commande de formulaire est similaire à l'élément HTML button et permet à l'utilisateur de déclencher des actions. Elle peut aussi servir à construire d'autres commandes de formulaire personnalisées.

Attributs communs : Communs, Communs I.U., Liaison de nœud simple (optionnel)

Exemple :

Exemple : Déclencheur simple
<trigger>
  <label>Cliquez ici</label>
</trigger>

Restrictions de liaison de donnée : Se lie à n'importe quel nœud. Cette commande de formulaire n'interagit pas directement avec les données de formulaire, mais elle est affectée par les propriétés des éléments de modèle du nœud lié, et ainsi les attributs de liaison ne sont pas nécessaires.

Obligations d'implémentation : L'agent d'utilisateur doit fournir le moyen de générer un événement DOMActivate sur la commande de formulaire. Les implémentations graphiques pourraient rendre cette commande de formulaire par un bouton poussoir ayant l'étiquette sur sa face. On peut utiliser des feuilles de style pour représenter cette commande de formulaire par une image, un hyperlien, ou autres.

8.1.9 L'élément submit

Description : Cette commande de formulaire initie la soumission de toutes les parties des données d'instance auxquelles elle est liée.

Attributs communs : Communs, Communs I.U., Liaison de nœud simple (optionnel)

Attributs spéciaux :

submission

Référence obligatoire pour l'élément submission.

Exemple :

Exemple : Soumission
<submit submission="fichePointage">
  <label>Soumettre la fiche de pointage</label>
</submit>

Restrictions de liaison de donnée : Se lie à n'importe quel nœud. Cette commande de formulaire n'interagit pas directement avec les données de formulaire, mais elle est affectée par les propriétés des éléments de modèle du nœud lié et, de ce fait, les attributs de liaison ne sont pas nécessaires.

Obligations d'implémentation : Dès réception d'un événement DOMActivate, cette commande de formulaire distribue un événement xforms-submit à l'élément submission indiqué par l'attribut obligatoire submission. Dès activation, cette commande doit devenir indisponible à d'autres activations jusqu'à ce que le processus de soumission s'achève, soit par un événement xforms-submit-done, soit par un événement xforms-submit-error.

8.1.10 L'élément select

Description : Cette commande de formulaire permet à l'utilisateur d'effectuer plusieurs sélections à partir d'un ensemble de choix.

Attributs communs : Communs, Communs I.U., Liaison de nœud simple

Attributs spéciaux :

selection

Un attribut optionnel déterminant si une entrée libre est autorisée dans la liste. La valeur implicite est "closed".

incremental

Pour une valeur "true", cette commande de formulaire générera d'autres événements xforms-value-changed. La valeur par défaut de cet attribut est "false".

Exemple :

Exemple : Sélection d'un parfum de glace
<select ref="my:parfum">
  <label>Parfums</label>
  <choices>
    <item>
      <label>Vanille</label>
      <value>v</value>
    </item>
    <item>
      <label>Fraise</label>
      <value>f</value>
    </item>
    <item>
      <label>Chocolat</label>
      <value>c</value>
    </item>
  </choices>
</select>

Dans l'exemple ci-dessus, on peut sélectionner plusieurs parfums.

Un navigateur graphique pourrait restituer une commande de formulaire select de l'une des manières suivantes :

appearance="full" appearance="compact" appearance="minimal"
Cases à cocher : vanille, fraise et chocolat ; fraise et chocolat sélectionnés Liste déroulante : vanille, fraise et chocolat ; fraise et chocolat sélectionnés Un menu déroulant avec trois choix : vanille, fraise et chocolat ; les deux derniers sont sélectionnés.

Typiquement, on se servirait d'une feuille de style pour déterminer l'apparence exacte des commandes de formulaire, bien qu'on puisse suggérer un aspect par le biais de l'attribut appearance. Cet attribut prend l'une des valeurs suivantes :

  • "full" : tous les choix devraient tout le temps être restitués ;
  • "compact" : un nombre de choix fixé devrait être restitué avec, au besoin, des facilités de défilement ;
  • "minimal" : un nombre minimum de choix devrait être restitué avec une facilité pour la restitution temporaire d'autres choix.

Restrictions de liaison de donnée : Tout contenu de type simpleContent capable de contenir une séquence. Il existe une restriction de liaison sur le type simpleContent lorsque les choix ont été créés comme faisant partie de la commande d'interface d'utilisateur comme illustré dans cette section. L'élément itemset, qui crée des sélections dynamiques (cf. 9.3.3 L'élément itemset), permet d'obtenir les choix disponibles à partir d'un modèle XForms ; si on utilise cette structure, la restriction de liaison sur le type simpleContent ne s'applique plus.

Remarque :

Une limitation touchant les types de données de liste du schéma XML fait que les caractères blancs dans les valeurs de stockage (l'élément value) sont toujours interprétés comme des séparateurs entre les valeurs de données individuelles. C'est la raison pour laquelle les auteurs devraient éviter d'employer des caractères blancs dans les valeurs de stockage avec une liste de type simpleContent.

Exemple : Déclaration de type inexacte
<item>
  <value>États-Unis d'Amérique</value>
  ...
</item>

S'il était sélectionné, cet article introduirait non pas un mais deux valeurs de sélection supplémentaires : "États-Unis" et "d'Amérique".

Obligations d'implémentation : L'étiquette de chacun des choix doit être présentée, en autorisant un nombre quelconque de sélections, ou aucune, le cas échéant. Cette commande de formulaire stocke les valeurs correspondant aux options sélectionnées sous forme d'une liste de valeurs, séparées par un caractère espace, dans l'emplacement indiqué par l'attribut ref. Les valeurs à stocker sont définies soit directement comme contenu de l'élément value, soit indirectement par des attributs de liaison sur l'élément value.

Remarquez que le type de donnée lié à cette commande de formulaire peut inclure un espace de valeurs non énumérées, par exemple, de type xsd:string, ou l'union d'une énumération et d'un type de donnée non énuméré (ce qu'on appelle une énumération ouverte). Auquel cas, la commande select peut avoir une déclaration d'attribut selection="open". La commande de formulaire devrait alors autoriser l'entrée de donnée libre, qui est décrite dans 8.1.2 L'élément input. La commande de formulaire peut autoriser l'entrée libre de valeurs multiples.

Pour les sélections fermées : si la valeur d'instance initiale correspond à la valeur de stockage de l'un ou de plusieurs des éléments donnés, alors ces éléments sont sélectionnés. S'il n'y pas de correspondance, alors aucun élément n'est sélectionné initialement. Si l'une des valeurs sélectionnées ne correspond pas à un choix avec une valeur de stockage, alors la commande de formulaire doit signaler une condition de débordement d'intervalle.

Pour les sélections ouvertes : si les valeurs d'instances initiales correspondent à la valeur de stockage indiquée par un ou plusieurs éléments, alors tous les éléments de cette correspondance sont sélectionnés. Si les valeurs d'instance initiales ne correspondent pas à la valeur de stockage indiquée par l'un ou plusieurs des éléments, alors tous ces éléments non correspondants sont inclus comme valeurs sélectionnées, comme s'ils provenaient d'une entrée libre. Le texte d'une entrée libre est traité comme pour une commande de formulaire input 8.1.2 L'élément input, éventuellement en multiplicité. Quand on utilise des sélections dynamiques avec des valeurs de type complexType, la sélection ouverte est sans effet.

Indications d'implémentation : Un auxilliaire d'accessibilité pourrait permettre à l'utilisateur de parcourir les choix disponibles et mettre à profit un regroupement des choix dans le balisage pour offrir une meilleure navigation dans les longues listes de choix.

8.1.11 L'élément select1

Description : Cette commande de formulaire permet à l'utilisateur d'effectuer une seule sélection à partir de plusieurs choix.

Attributs communs : Communs, Communs I.U., Liaison de nœud simple

Attributs spéciaux :

selection

Un attribut optionnel déterminant si une entrée libre est autorisée dans la liste. La valeur implicite est "closed".

incremental

Pour une valeur "true", cette commande de formulaire générera d'autres événements xforms-value-changed. La valeur par défaut de cet attribut est "false".

Exemple :

Exemple : Choisir un parfum
<select1 ref="my:parfum">
  <label>Parfum</label>
  <item>
    <label>Vanille</label>
    <value>v</value>
  </item>
  <item>
    <label>Fraise</label>
    <value>f</value>
  </item>
  <item>
    <label>Chocolat</label>
    <value>c</value>
  </item>
</select1>

Dans l'exemple ci-dessus, la sélection de l'une des options fixera la valeur associée à l'élément value, sur l'élément sélectionné, dans la donnée d'instance sous-jacente située à l'emplacement glace/parfum.

Un navigateur graphique est susceptible de restituer cette commande de formulaire de l'une des manières suivantes :

appearance="full" appearance="compact" appearance="minimal"
Boutons radios : vanille, fraise et chocolat ; fraise est sélectionné Liste déroulante : vanille, fraise et chocolat visibles ; fraise est sélectionné Un menu déroulant replié : vanille est sélectionné

Restrictions de liaison de donnée : Se lie à tout contenu de type simpleContent. Il existe une restriction de liaison sur le type simpleContent lorsque les choix ont été créés comme faisant partie de la commande d'interface d'utilisateur comme illustré dans cette section. L'élément itemset, qui crée des sélections dynamiques (cf. 9.3.3 L'élément itemset), permet d'obtenir les choix disponibles à partir d'un modèle XForms ; si on utilise cette structure, la restriction de liaison sur le type simpleContent ne s'applique plus.

Obligations d'implémentation : L'étiquette de chacun des choix doit être présentée, en autorisant à tout instant exactement une seule sélection. Cette commande de formulaire stocke les valeurs correspondant aux options sélectionnés sous forme d'une liste de valeurs, séparées par un caractère espace, dans l'emplacement indiqué par l'attribut ref. Les valeurs à stocker sont définies soit directement comme contenu de l'élément value, soit indirectement par des attributs de liaison sur l'élément value.

Remarquez que le type de donnée lié à cette commande de formulaire peut inclure un espace de valeurs non énumérées, par exemple le type xsd:string, ou l'union d'une énumération et d'un type de donnée non énuméré (ce qu'on appelle une énumération ouverte). Auquel cas, la commande select1 peut avoir une déclaration d'attribut selection="open". La commande de formulaire devrait alors autoriser l'entrée de donnée libre, laquelle est décrite dans 8.1.2 L'élément input.

Pour les sélections fermées : si la valeur d'instance initiale correspond à la valeur de stockage de l'un des éléments donnés, alors cet élément est sélectionné. S'il n'y pas de correspondance, alors la commande de formulaire doit signaler une condition de débordement d'intervalle.

Pour les sélections ouvertes : si la valeur d'instance initiale correspond à la valeur de stockage indiquée par l'un des éléments, alors le premier élément de cette correspondance est sélectionné. Sinon la valeur sélectionnée est la valeur lexicale initiale. Le texte d'une entrée libre est traité comme pour une commande de formulaire input 8.1.2 L'élément input.

Les interfaces d'utilisateur peuvent choisir de rendre cette commande de formulaire par une liste déroulante ou un groupe de boutons radios, entre autres possibilités. L'attribut appearance donne une indication pour la restitution susceptible d'être la plus appropriée, même si une éventuelle information de style (comme une feuille de style CSS) devrait avoir priorité.

8.2 Le balisage courant des commandes de sélection

8.2.1 L'élément choices

Cet élément sert à regrouper les choix disponibles dans les commandes de formulaire de sélection. Il offre la même fonctionnalité que l'élément HTML optgroup.

Attributs communs : Communs

8.2.2 L'élément item

Cet élément définit la valeur et l'étiquette de stockage pour représenter un élément dans une liste. On le trouve dans les éléments select1 et select, ou on le regroupe dans un élément choices.

Attributs communs : Communs

8.2.3 L'élément value

Cet élément offre une valeur de stockage à utiliser lors de la sélection d'un élément item.

Attributs communs : Communs, Liaison de nœud simple (optionnel)

Restriction de liaison de donnée : Toutes les valeurs lexicales doivent être valides conformément au type de donnée lié à la commande de formulaire.

Si un contenu direct et un attribut ref sont tous deux définis, c'est l'attribut ref qui s'appliquera.

8.3 Les autres éléments

Les sous-éléments détaillés ci-dessous offrent la possibilité de joindre des métadonnées aux commandes de formulaire.

Au lieu de fournir de telles métadonnées, par exemple, l'étiquette d'une commande de formulaire comme contenu direct de l'élément label contenu, on peut désigner ces métadonnées au moyen d'un simple attribut src sur l'élément en question. Notez qu'on peut exploiter systématiquement cette fonctionnalité pour l'internationalisation des interfaces d'utilisateur XForms, c'est-à-dire :

8.3.1 L'élément filename

Les attributs de liaison de l'élément optionnel filename définissent, dans l'instance de l'élément upload parent, lors de son activation, l'emplacement où mettre le nom de fichier de la ressource binaire choisie. Pour des raisons de sécurité, l'élément upload ne doit pas entreprendre d'action initiée par une quelconque valeur du nœud existante.

Attributs communs : Communs, Liaison de nœud simple

Dans l'exemple suivant, l'utilisateur est invité à sélectionner une image. Lors de son activation, l'élément upload inscrit à l'emplacement courrier/pieceJointe soit les données binaires de l'image, soit son adresse URI, selon le type déclaré pour courrier/pieceJointe. Le nom de fichier, appelons-le moi.jpg, se place dans le nœud attribut courrier/pieceJointe@filename, et le type de média, appelons-le image/jpeg, dans le nœud attribut courrier/pieceJointe@mediatype.

Exemple :

<upload ref="courrier/pieceJointe" mediatype="image/*">
  <label>Sélectionnez l'image à joindre</label>
  <filename ref="@filename"/>
  <mediatype ref="@mediatype"/>
</upload>

8.3.2 L'élément mediatype

Les attributs de liaison de l'élément optionnel mediatype définissent, dans l'instance de l'élément upload parent, lors de son activation, l'emplacement où mettre le type de média de la ressource binaire choisie, si disponible.

Attributs communs : Communs, Liaison de nœud simple

8.3.3 L'élément label

Cet élément obligatoire appose sur la commande de formulaire qui le contient une étiquette descriptive. En outre, l'étiquette permet à une personne incapable de voir la commande de formulaire d'obtenir une description courte, tout en navigant d'une commande de formulaire à l'autre.

Attributs communs : Communs, Liaison de nœud simple (optionnel), Liaison

Attributs spéciaux :

Attributs de liaison

Un lien vers une étiquette externe. Si la traversée du lien échoue, elle sera traité comme une erreur (cf. 4.5.3 L'événement xforms-link-error).

L'étiquette indiquée peut résider dans des données d'instance, dans un document distant ou comme texte direct. Si plusieurs sources d'étiquette sont définies dans l'élément en question, l'ordre de préséance est le suivant : les attributs de liaison de nœud simple, les attributs de liaison et le texte direct.

Un auxilliaire d'accessibilité est susceptible de prononcer les métadonnées encapsulées dans l'élément lorsque la commande de formulaire qui le contient reçoit le focus.

8.3.4 L'élément help

L'élément optionnel help offre un moyen commode de joindre des informations d'assistance à une commande de formulaire. Ce qui équivaut à la déclaration : <message level="modeless" ev:event="xforms-help" ev:propagate="stop">.

Attributs communs : Communs, Liaison de nœud simple (optionnel), Liaison

Attributs spéciaux :

Attributs de liaison

Un lien vers une information d'assistance externe. Si la traversée du lien échoue, elle est traitée comme une erreur (cf. 4.5.3 L'élément xforms-link-error).

Le message indiqué peut résider dans des données d'instance, dans un document distant ou comme texte direct. Si plusieurs sources de message sont définies dans l'élément en question, l'ordre de préséance est le suivant : les attributs de liaison de nœud simple, les attributs de liaison et le texte direct.

On trouvera un exemple d'utilisation de cet élément dans 10.1.12 L'élément message.

8.3.5 L'élément hint

L'élément optionnel hint offre un moyen commode de joindre des indications à une commande de formulaire. Ce qui équivaut à un gestionnaire d'événement xforms-hint répondant par <message level="ephemeral">.

Attributs communs : Communs, Liaison de nœud simple (optionnel), Liaison

Attributs spéciaux :

Attributs de liaison

Un lien vers une indication externe. Si la traversée du lien échoue, elle est traitée comme une erreur (cf. 4.5.3 L'élément xforms-link-error).

Le message indiqué peut résider dans des données d'instance, dans un document distant ou comme texte direct. Si plusieurs sources de message sont définies dans l'élément en question, l'ordre de préséance est le suivant : les attributs de liaison de nœud simple, les attributs de liaison, le texte direct.

On trouvera un exemple d'utilisation de cet élément dans 10.1.12 L'élément message.

8.3.6 L'élément alert

L'élément optionnel alert offre un moyen commode de joindre des informations d'alerte ou d'erreur à une commande de formulaire. Le rendu de cet élément est défini par l'implémentation, et l'attribut level n'a pas de valeur implicite telles que "modal" ou "ephemeral" pour le message affiché.

Attributs communs : Communs, Liaison de nœud simple (optionnel), Liaison

Attributs spéciaux :

Attributs de liaison

Un lien vers une alerte externe. Si la traversée du lien échoue, elle est traitée comme une erreur (cf. 4.5.3 L'élément xforms-link-error).

Le message indiqué peut résider dans des données d'instance, dans un document distant ou comme texte directe. Si plusieurs sources de message sont définies dans l'élément en question, l'ordre de préséance est le suivant : les attributs de liaison de nœud simple, les attributs de liaison et le texte direct. Voir F XForms et le style pour des exemples de présentation à l'utilisateur.