<

webmaster

le XML

Formulaires XML : XFORMS

XForms représente la nouvelle génération de formulaires sur le Web, après les formulaires HTML. L’idée est d’aller au-delà des formulaires HTML, et de séparer l'aspect interface utilisateur et le modèle de données sous-jacent. En effet, le même composant de formulaire peut avoir des représentations très différentes suivant le navigateur et la plateforme utilisés pour "afficher" un document, permettant ainsi d'adapter la représentation aux caractéristiques de la plateforme, qu’il s’agisse d’une feuille de papier ou d’un périphérique manuel (un téléphone portable, par exemple). 

1- xforms vs formulaires html

Pour pouvoir faire cette comparaison, je vais essayer de présenter un formulaire HTML pour voir à quoi ressemble –t-il et en quoi XForms diffère-t-il ?
img1

Selon cet exemple, on voit bien qu’un formulaire HTML respecte en général un schéma qui contient trois types d’entrées encadrées par une balise FORM. ACTION renvoie au script de traitement de ce formulaire. Ceci est parfait pour des ordinateurs de bureau, mais pour des terminaux légers, exemple un portable, il serait impossible de répondre à une telle question (en l’absence d’une interface texte). C’est seulement en séparant la présentation du frontal, que ça serait possible de modifier la question selon le type de terminal utilisé. 
La spécification XForms vient répondre à cette question en définissant trois aspects permettant de séparer clairement le but du formulaire de sa présentation : le modèle de données, l'interface utilisateur et le protocole d'envoi. 
2- xforms : composants
            2-1 modèle de données 
Le modèle de données est subdivisé en deux parties: les structures de données, d'une part, et les extensions (contraintes, dépendances, calculs), de l'autre. Il définit des types de données de manière très similaire au formalisme de schéma XML : String, Boolean, Number, Monetary Values, Date, Time of Day, Duration, URI, Binary. Chaque type de donnée a des "facettes" qui lui sont associées. Ces facettes représentent des détails du type (p.ex. précision, format, valeur par défaut, masque, etc.) et sont fournies sous la forme soit d'attributs, soit de sous-éléments. Par exemple:
img2

Contrairement aux schémas XML pour lesquels, les facettes sont statiques, les facettes XForms peuvent être dynamiques, et correspondre ainsi à des contraintes qui évoluent en cours d'exécution (par ex. bornes inférieures et supérieures d'un élément de formulaire qui changent en fonction de ce que l'utilisateur aura tapé dans d'autres champs). 
Exemple 
img3

2-1-1 Données structurées 

Types énumérés: Basés sur le type string, en énumérant la liste des valeurs possibles.
img4

Structures hétérogènes :Permet de regrouper un certain nombre de champs pour former une entité. 
img5

 

Unions : Permet de déclarer différentes façons de fournir la même information. Exemple: 

 

Variantes : Permet de déclarer des structures différentes en fonction de la valeur d'un champ.  
img6
img7
Structures homogènes : Permet de répéter une structure en plusieurs exemplaires.

img8
2-1-2 Langage de contraintes dynamiques 
Les contraintes dynamiques sont définies par des expressions faisant référence à divers éléments du document. Ces éléments peuvent être référencés à l'aide de la notation définie dans XPath. Pour éviter des problèmes dus à l'utilisation de caractères spéciaux, les opérateurs utilisés dans les expressions sont des mots: 

opérateur

 

signification

notexpr

 

inverse le résultat de l'expression

ifcondthenexpr1elseexpr2

 

le résultat sera le résultat de la première expression si la condition est vraie, sinon celui de la deuxième expression

expr1isexpr2

 

retourne vrai si les deux expressions sont égales

expr1is within(expr2,expr3)

 

retourne vrai si expr1 est une valeur comprise entre expr2 et expr3. Les expressions doivent être du même type de base (numérique, string, date, temps, valeur monétaire)

expr1is beforeexpr2

 

expr1 est inférieure à expr2

expr1is belowexpr2

 

idem

expr1is afterexpr2

 

expr1 est supérieure à expr2

and, or et xor

 

opérateurs booléens

plus, minus, times et over

 

opérateurs arithmétiques

string1plusstring2

 

concaténation de chaînes de caractères

nombre%

 

valeur divisée par 100

number(),                                                                                        sum(),                                                                                      floor(), average(), min(), max()

 

 

fonctions numériques

string(), concat(), starts-with(),
contains(), substring-before(), substring
after(), substring(), string-length(),
normalize-space() et translate()

 

fonctions de manipulation de chaînes de caractères

now()

heure actuelle du système sous forme de chaîne de caractères

submit()

envoi au serveur

2-2 INTERFACE UTILISATEUR 
Cette section décrit les balises à utiliser pour décrire l'interface utilisateur, les propriétés de style permettant la mise en page des éléments interactifs de formulaires, ainsi que le mécanisme faisant le lien entre l'interface utilisateur et le modèle de données.
2-2-1 Eléments interactifs 


Elément

Catégorie

Description

output

anyControl

élément non modifiable par l'utilisateur et affichant une valeur généralement calculée à partir d'autres éléments

textbox

anyNavControl

élément de saisie de texte. Les attributs rows et cols indiqueront les dimensions (en caractères).

checkbox

anyNavControl

case à cocher

exclusiveSelect

anyNavControl

élément de sélection simple contenant un élément <item value="..."> pour chaque valeur possible. La propriété de style list-ui peut prendre une des valeurs radio, checkbox, menu ou listbox pour définir l'apparence de l'élément

multipleSelect

anyNavControl

élément de sélection multiple contenant, comme l'élément exclusiveSelect, des éléments item.

button

anyNavControl

élément permettant de lancer une action. L'attribut action peut contenir une contrainte dynamique.

submit

button

élément provoquant l'envoi des données du formulaire. L'attribut action a pour valeur par défaut submit().

reset

 

pas encore défini

suspend

 

pas encore défini

D'autres éléments interactifs seront bientôt définis. 

2-2-2 Eléments de mise en page 


Elément

Description

groupbox

élément pouvant contenir d'autres éléments de formulaire. La propriété de style layout indique la direction selon laquelle les éléments contenus sont répartis (horizontal, vertical ou inherit). La propriété field-align indique l'emplacement de l'étiquette (sous-élément <caption>) d'un élément par rapport à l'élément interactif même (left, right, top, bottom, center, justify ou inherit).

2-3 liens entre interface et modèle 
Le lien entre éléments de l'interface et l'instance de données est réalisée à l'aide d'expressions dans le langage de contraintes dynamiques. 
Chaque élément interactif de formulaire peut avoir un attribut ref qui prend pour valeur une expression dans le langage de contraintes dynamiques. Cet attribut indique quelle partie de l'instance de données l'élément interactif définit. 
Exemple: 
img9

L'élément <xform:instance> sert à définir la valeur intiale de l'instance de données associée à un formulaire. Ses sous-éléments devraient être modifiés par le logiciel employé par l'utilisateur lorsque celui-ci interagit avec les éléments interactifs du formulaire. 
S'il y a plusieurs formulaires indépendants dans le même document, l'élément <xform:xformid="NomDuFormulaire"> permet de déclarer un formulaire et l'attribut xform:xform permet d'associer un élément interactif à un formulaire déclaré.
Exemple: 
img10

 

L'élément <xform:model> sert à définir le modèle de données associé à un formulaire, un peu comme une déclaration de type dans un langage de programmation. Si une instance est explicitement déclarée, elle doit être conforme au modèle associé au formulaire. 
L'élément <xform:bind id="..." ref="..."> permet d'établir un lien entre modèle, instance et interface lorsque ces différentes parties ne sont pas directement imbriquées dans le même élément <xform:xform>.

par David Matjaba