vxml

212
‘Voice Extensible Markup Language (VoiceXML) Version 2.0’, 16 mars 2004, en version française Statut du document traduit Ceci est une traduction de la recommandation du W3C traitant de la deuxième version du langage de balisage extensible vocal VoiceXML. Cependant, il ne s'agit pas de la version officielle en français. Seul le document original en anglais a valeur de référence. On peut l'obtenir à : http://www.w3.org/TR/2004/REC-voicexml20-20040316/ . Avertissement Des erreurs ont pu survenir malgré le soin apporté à ce travail. Notes sur la traduction Certains concepts sont difficiles à rendre en français, ou peuvent bénéficier d'une explication. Par moment, les expressions originales en anglais viennent en renfort dans le texte sous cette forme : ex. traduction [ndt. translation] D'autres expressions intègrent également les versions originales en anglais, qui apparaissent d'une manière ou d'une autre (selon le navigateur), lorsque l'on laisse le pointeur de la souris au-dessus d'elles. Elles se présentent sous cette forme : ex. Agent utilisateur Finalement, les liens menant à d'autres documents du W3C déjà traduits sont discrètement doublés vers leur traduction, comme ceci : ex. un lien VF vers un document du W3C. Adresse : <http://www.yoyodesign.org/doc/w3c/voicexml20/> Traducteur : J.J.SOLARI ( contact) Correcteurs : Nicolas DERMINE Date de traduction : 17 juillet 2004 Dernière mise à jour : 24 août 2004 Archives compressées et autres formats Cette traduction est disponible au format HTML sous forme d'archive compressée et, le cas échéant, dans d'autres formats à l'adresse http://www.yoyodesign.org/doc/w3c/w3c.html. Autres documents traduits On peut consulter les traductions en français d'autres documents du W3C à http://www.w3.org/2003/03/Translations/byLanguage?language=fr Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/ 1 of 212 27/07/2012 22:31

Transcript of vxml

Page 1: vxml

‘Voice Extensible Markup Language (VoiceXML)

Version 2.0’, 16 mars 2004, en version française

Statut du document traduit

Ceci est une traduction de la recommandation du W3C traitant de la deuxième version du langage debalisage extensible vocal VoiceXML.

Cependant, il ne s'agit pas de la version officielle en français. Seul le document original en anglais avaleur de référence. On peut l'obtenir à : http://www.w3.org/TR/2004/REC-voicexml20-20040316/ .

Avertissement

Des erreurs ont pu survenir malgré le soin apporté à ce travail.

Notes sur la traduction

Certains concepts sont difficiles à rendre en français, ou peuvent bénéficier d'une explication. Parmoment, les expressions originales en anglais viennent en renfort dans le texte sous cette forme :ex. traduction [ndt. translation]

D'autres expressions intègrent également les versions originales en anglais, qui apparaissent d'unemanière ou d'une autre (selon le navigateur), lorsque l'on laisse le pointeur de la souris au-dessus d'elles.Elles se présentent sous cette forme :ex. Agent utilisateur

Finalement, les liens menant à d'autres documents du W3C déjà traduits sont discrètement doublés versleur traduction, comme ceci :ex. un lien →VF vers un document du W3C.

Adresse : <http://www.yoyodesign.org/doc/w3c/voicexml20/>Traducteur : J.J.SOLARI (contact)Correcteurs : Nicolas DERMINEDate de traduction : 17 juillet 2004Dernière mise à jour : 24 août 2004

Archives compressées et autres formats

Cette traduction est disponible au format HTML sous forme d'archive compressée et, le cas échéant, dansd'autres formats à l'adresse http://www.yoyodesign.org/doc/w3c/w3c.html.

Autres documents traduits

On peut consulter les traductions en français d'autres documents du W3C àhttp://www.w3.org/2003/03/Translations/byLanguage?language=fr

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

1 of 212 27/07/2012 22:31

Page 2: vxml

Avis légal

Copyright © 1994-2004 World Wide Web Consortium,( Massachusetts Institute of Technology ,European Research Consortium for Informatics and Mathematics ,Keio University ).Tous droits réservés. Consulter la notice de copyright pour les productions du W3C.

Le langage de balisage extensible vocal (VOICEXML)version 2.0

Recommandation du W3C du 16 mars 2004

Cette version :http://www.w3.org/TR/2004/REC-voicexml20-20040316/

Dernière version :http://www.w3.org/TR/voicexml20/

Version précédente :http://www.w3.org/TR/2004/PR-voicexml20-20040203/

Rédacteurs :Scott McGlashan, Hewlett-Packard (rédacteur en chef)Daniel C. Burnett, Nuance CommunicationsJerry Carter, expert invitéPeter Danielsen, Lucent (jusqu'en octobre 2002)Jim Ferrans, MotorolaAndrew Hunt, ScanSoftBruce Lucas, IBMBrad Porter, Tellme NetworksKen Rehor, VocalocitySteph Tryphonas, Tellme Networks

Veuillez consulter l'errata de ce document, lequel peut contenir des correctionsnormatives.

Voir également d'éventuelles traductions .

Copyright © 2004 W3C ® (MIT, ERCIM, Keio), tous droits réservés. Les règles de responsabilité , demarque commerciale , d' utilisation des documents et d' octroi de licences logicielles du W3C s'appliquent.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

2 of 212 27/07/2012 22:31

Page 3: vxml

Résumé

Ce document définit le langage de balisage extensible vocal (VOICEXML). Le langageVoiceXML se destine à la création des dialogues électro-acoustiques soulignant unevoix synthétisée, un signal sonore numérisé, la reconnaissance d'une entrée vocale oud'une tonalité DTMF, l'enregistrement d'une commande vocale, un échangetéléphonique ou des conversations à initiative mixte. Son objectif principal estd'apporter les avantages du développement et de la diffusion de contenu fondés sur leWeb aux applications de réponse vocale interactives.

Statut de ce document

Ce chapitre décrit le statut de ce document au moment de sa publication. D'autresdocuments peuvent venir le remplacer. On peut trouver une liste des publicationscourantes du W3C et la dernière révision de ce rapport technique dans l' index desrapports techniques du W3C à « http://www.w3.org/TR/ ».

Ce document, qui a été passé en revue par les membres du W3C et les tiersintéressés, a été approuvé par le Directeur comme recommandation du W3C. Le rôledu W3C en produisant la recommandation consiste à attirer l'attention sur laspécification et d'en promouvoir le large déploiement. Cela participe à la fonctionnalitéet l'interopérabilité du Web.

Cette spécification fait partie du Cadre d'interface vocale du W3C et elle a étédéveloppée au sein de l' activité Navigateur vocal du W3C par les participants dugroupe de travail Navigateur vocal (réservé aux membres du W3C).

La conception du langage VoiceXML 2.0 a fait l'objet d'un examen approfondi (voir ladisposition des remarques) et elle satisfait aux exigences techniques du groupe detravail. On trouvera une liste des mises en œuvres dans le rapport des mises enœuvres du langage VoiceXML 2.0 , avec la suite de tests associée.

Les remarques sont bienvenues sur la liste de diffusion [email protected] (archive).Voir également le guide d'utilisation des listes de diffusion et archives du W3C .

Le W3C met à disposition une liste des éventuelles divulgations de brevets relatifs àces travaux.

Les conventions du document

Dans ce document, les mots-clés « doi(ven)t », « ne doi(ven)t pas », « obligatoire »,« devra(devront) », « ne devra(devront) pas », « devrai(en)t », « ne devrai(en)t pas »,« recommandé », « peu(ven)t » et « optionnel » doivent se comprendre selon lesdéfinitions du document [RFC2119] et ils indiquent les niveaux d'obligation desimplémentations VoiceXML conformes.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

3 of 212 27/07/2012 22:31

Page 4: vxml

Table des matières

Table des matières abrégée

1. Vue d'ensemble2. Les structures de dialogue3. L'entrée d'utilisateur4. La sortie du système5. Le flux de commande et les scripts6. L'environnement et les ressourcesAnnexes

Table des matières détaillée

1. Vue d'ensemble1.1 Introduction1.2 Historique

1.2.1 Le modèle architectural1.2.2 Les objectifs du langage VoiceXML1.2.3 La portée du langage VoiceXML1.2.4 Les principes de conception1.2.5 Les contraintes de la plateforme d'implémentation

1.3 Les concepts1.3.1 Les dialogues et les sous-dialogues1.3.2 Les sessions1.3.3 Les applications1.3.4 Les grammaires1.3.5 Les événements1.3.6 Les liens

1.4 Les éléments du langage VoiceXML1.5 La structure et l'exécution du document

1.5.1 L'exécution dans un seul document1.5.2 L'exécution d'une application à documents multiples1.5.3 Les sous-dialogues1.5.4 Le traitement final

2. Les structures de dialogue2.1 Les formulaires

2.1.1 L'interprétation des formulaires2.1.2 Les éléments de formulaire2.1.3 Les variables et contraintes des éléments de formulaire2.1.4 Les formulaires dirigés2.1.5 Les formulaires à initiative mixte2.1.6 L'algorithme d'interprétation des formulaires

2.2 Les menus2.2.1 L'élément menu2.2.2 L'élément choice2.2.3 Les tonalités DTMF dans les menus2.2.4 L'élément enumerate2.2.5 La génération des grammaires

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

4 of 212 27/07/2012 22:31

Page 5: vxml

2.2.6 Le modèle d'interprétation2.3 Les éléments de formulaire

2.3.1 L'élément field2.3.2 L'élément block2.3.3 L'élément initial2.3.4 L'élément subdialog2.3.5 L'élément object2.3.6 L'élément record2.3.7 L'élément transfer

2.4 L'élément filled2.5 Les liens

3. L'entrée d'utilisateur3.1 Les grammaires

3.1.1 Les grammaires vocales3.1.2 Les grammaires DTMF3.1.3 La portée des grammaires3.1.4 L'activation des grammaires3.1.5 L'interprétation sémantique de l'entrée3.1.6 L'application des résultats de l'interprétation sémantique auxformulaires VoiceXML

4. La sortie du système4.1 L'élément prompt

4.1.1 Le balisage vocal4.1.2 Les invites de base4.1.3 L'invite sonore4.1.4 L'élément value4.1.5 L'interruption4.1.6 La sélection d'une invite4.1.7 La temporisation4.1.8 La mise en file d'attente des invites et la collecte des entrées

5. Le flux de commande et les scripts5.1 Les variables et les expressions

5.1.1 La déclaration des variables5.1.2 Les portées des variables5.1.3 L'appel des variables5.1.4 Les variables de session normalisées5.1.5 Les variables d'application normalisées

5.2 La gestion des événements5.2.1 L'élément throw5.2.2 L'élément catch5.2.3 La notation abrégée5.2.4 La sélection de l'élément catch5.2.5 Les éléments catch implicites5.2.6 Les types d'événement

5.3 Le contenu exécutable5.3.1 L'élément var5.3.2 L'élément assign5.3.3 L'élément clear5.3.4 Les éléments if, elseif et else5.3.5 Les éléments prompt5.3.6 L'élément reprompt5.3.7 L'élément goto

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

5 of 212 27/07/2012 22:31

Page 6: vxml

5.3.8 L'élément submit5.3.9 L'élément exit5.3.10 L'élément return5.3.11 L'élément disconnect5.3.12 L'élément script5.3.13 L'élément log

6. L'environnement et les ressources6.1 La mise en place des ressources

6.1.1 Le chargement6.1.2 La mise en cache6.1.3 Le préchargement6.1.4 Les protocoles

6.2 Les informations de métadonnée6.2.1 L'élément meta6.2.2 L'élément metadata

6.3 L'élément property6.3.1 Les propriétés propres à la plateforme6.3.2 Les propriétés génériques des logiciels de reconnaissance vocale6.3.3 Les propriétés génériques des logiciels de reconnaisance DTMF6.3.4 Les propriétés d'invite et de collecte6.3.5 Les propriétés de mise en place6.3.6 Les propriétés diverses

6.4 L'élément param6.5 Les désignations des valeurs

AnnexesAnnexe A. Le glossaire des termesAnnexe B. La définition de type de document VoiceXMLAnnexe C. L'algorithme d'interprétation des formulairesAnnexe D. Les propriétés de temporisationAnnexe E. Les formats des fichiers sonsAnnexe F. La conformitéAnnexe G. L'internationalisationAnnexe H. L'accessibilitéAnnexe I. La vie privéeAnnexe J. Les changements survenus depuis VoiceXML 1.0Annexe K. La réutilisabilitéAnnexe L. RemerciementsAnnexe M. RéférencesAnnexe N. Le type de média et le suffixe de fichierAnnexe O. La définition du schéma XML du langage VoiceXMLAnnexe P. Les types des grammaires intégrées

1. Vue d'ensemble

Ce document definit le langage de balisage extensible vocal. Ses origines, sesconcepts fondamentaux et son usage sont présentés dans le chapitre 1. Les structuresde dialogue des formulaires, des menus et des liens, ainsi que le mécanisme(l'algorithme d'interprétation des formulaires FIA) de leur interprétation, sont introduitsensuite dans le chapitre 2. Les entrées d'utilisateur employant des grammaires vocalesou DTMF sont abordées dans le chapitre 3, tandis que le chapitre 4 couvre les sortiessystème faisant appel à une voix synthétisée ou un signal sonore enregistré. Les

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

6 of 212 27/07/2012 22:31

Page 7: vxml

mécanismes de manipulation du flux de commande des dialogues, comprenant lesvariables, les événements et les éléments exécutables, sont expliqués dans lechapitre 5. Les caractéristiques environnementales, tels que les paramètres et lespropriétés tout comme la manipulation des ressources, sont définies dans lechapitre 6. Les annexes fournissent des renseignements supplémentaires concernantle schéma VoiceXML, la spécification détaillée de l'algorithme FIA, la temporisation, lesformats des fichiers sons, les instructions relatives à la conformité,l'internationalisation, l'accessibilité et la vie privée.

Le langage VoiceXML trouve son origine en 1995 comme langage de création dedialogues fondé sur XML et destiné à simplifier le processus de développement desapplications de reconnaissance vocale dans un projet de la société AT&T intitulé« langage de balisage téléphonique » (PML). Conséquence de la réorganisation de lasociété AT&T, des équipes des sociétés AT&T, Lucent et Motorola ont poursuivis destravaux sur leurs propres langages analogues à PML.

En 1998, le W3C a accueilli une conférence sur les navigateurs vocaux. À cetteépoque, les sociétés AT&T et Lucent avaient produit des variantes différentes de leurlangage PML original, tandis que la société Motorola avait développé le langage VoxMLet que la société IBM développait son propre langage SpeechML. Beaucoup d'autresparticipants de la conférence développaient également des langages similaires pour lacréation de dialogues, par exemple, le langage TalkML de la société HP et le langageVoiceHTML de la société PipeBeach.

Le forum VoiceXML fut alors constitué par les sociétés AT&T, IBM, Lucent et Motorolaafin de mettre leurs efforts en commun. La mission du forum VoiceXML consistait àdéfinir un langage de création de dialogues normalisé dont les développeurspourraient se servir pour construire des applications conversationnelles. Les membresdu forum choisirent le langage XML comme fondement de leur effort car il était clairque c'était l'orientation technologique à prendre.

En 2000, le forum VoiceXML publiait la spécification VoiceXML 1.0. Peu de temps après,le langage VoiceXML 1.0 était soumis au W3C comme fondement pour la création d'unnouveau standard international. Le langage VoiceXML 2.0 résulte de ces travaux ainsique des suggestions faites par les sociétés membres du W3C, les autres groupes detravail du W3C et le public.

Les développeurs familiarisés avec le langage VoiceXML 1.0 sont invités, en particulier,à consulter le chapitre « Les changements survenus depuis VoiceXML 1.0 » qui résumeles différences entre les deux versions VoiceXML 2.0 et VoiceXML 1.0.

1.1 Introduction

Le langage VoiceXML est destiné à la création des dialogues électro-acoustiquessoulignant une voix synthétisée, un signal sonore numérisé, la reconnaissance d'uneentrée vocale ou d'une tonalité DTMF, l'enregistrement d'une commande vocale, unéchange téléphonique ou des conversations à initiative mixte. Son objectif principal estd'apporter les avantages du développement et de la diffusion de contenu fondés sur leWeb aux applications de réponse vocale interactives.

Voici deux exemples VoiceXML brefs. Le premier est l'habituel « Salut tout lemonde ! » :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

7 of 212 27/07/2012 22:31

Page 8: vxml

<?xml version="1.0" encoding="UTF-8"?><vxml xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd" version="2.0"> <form> <block>Salut tout le monde !</block> </form></vxml>

L'élément supérieur est l'élément vxml, dont le rôle principal est celui d'un conteneurpour les dialogues. Il existe deux types de dialogues : les formulaires et les menus. Lesformulaires présentent des informations et recueillent les entrées ; les menusprésentent des choix pour la suite de l'interaction. Cet exemple montre un seulformulaire contenant un élément block qui synthétise et présente « Salut tout lemonde ! » à l'utilisateur. Comme le formulaire ne précise pas de dialogue suivant, laconversation s'achève.

Notre second exemple propose un choix de boissons à l'utilisateur pour le soumettre àun script côté serveur :

<?xml version="1.0" encoding="UTF-8"?><vxml xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd" version="2.0"> <form> <field name="boisson"> <prompt>Voulez-vous du café, du thé, du lait ou rien du tout ?</prompt> <grammar src="boisson.grxml" type="application/srgs+xml"/> </field> <block> <submit next="http://www.boisson.example.com/boisson2.asp"/> </block> </form></vxml>

Un élément field est un champ d'entrée. L'utilisateur doit fournir une valeur auchamp avant le traitement de l'élément suivant du formulaire. Voici une interactionsimple :

O (ordinateur) : Voulez-vous du café, du thé, du lait ou rien du tout ?

H (humain) : Du jus d'orange.

O : Je n'ai pas compris ce que vous avez dit (un message implicite propre à laplateforme.)

O : Voulez-vous du café, du thé, du lait ou rien du tout ?

H : Du thé.

O : (suite dans le document boisson2.asp)

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

8 of 212 27/07/2012 22:31

Page 9: vxml

1.2 Historique

Ce chapitre contient un modèle architectural de haut niveau, dont on utilise ensuite laterminologie pour décrire les objectifs du langage VoiceXML, sa portée, ses principesde conception et les contraintes qu'il exerce sur les systèmes qui le mettent en œuvre.

1.2.1 Le modèle architectural

Le modèle architectural adopté par ce document contient les composants suivants :

Figure 1 : Le modèle architectural

Un serveur de documents (par exemple, un serveur Web) traite les requêtes issuesd'une application cliente, à savoir l'interpréteur VoiceXML, au travers du contexted'interprétation VoiceXML. En réponse, le serveur produit des documents VoiceXMLlesquels sont traités par l'interpréteur VoiceXML. Le contexte d'interprétation VoiceXMLpeut surveiller les entrées des utilisateurs en parallèle avec l'interpréteur VoiceXML.Par exemple, un contexte d'interprétation VoiceXML peut rester en permanence àl'écoute d'une phrase d'abandon particulière qui mène l'utilisateur à un assistantpersonnel de haut niveau et un autre rester à l'écoute de phrases d'abandon quimodifient les préférences de l'utilisateur comme le volume ou bien les caractéristiquesde la synthèse de la parole.

La plateforme d'implementation est commandée par le contexte d'interprétationVoiceXML et par l'interpréteur VoiceXML. Par exemple, dans une application de réponsevocale interactive, le contexte d'interprétation VoiceXML peut être responsable de ladétection d'un appel entrant, de l'acquisition du document VoiceXML initial et de laréponse à cet appel, tandis que l'interpréteur VoiceXML conduit le dialogue aprèsl'appel. La plateforme d'implémentation suscite des événements en réponse auxactions de l'utilisateur (par exemple, se déconnecter dès réception d'une entrée vocaleou d'une saisie de caractères) et aux événements du système (par exemple,l'expiration d'un temporisateur). L'interpréteur VoiceXML interfère, selon les indicationsdu document VoiceXML, sur certains de ces événements, tandis que le contexted'interprétation VoiceXML interfère sur d'autres.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

9 of 212 27/07/2012 22:31

Page 10: vxml

1.2.2 Les objectifs du langage VoiceXML

L'objectif principal du langage VoiceXML est d'apporter la pleine puissance dedéveloppement et de diffusion de contenu du Web aux applications de réponse vocale,en libérant ainsi leurs auteurs de la programmation et de la gestion des ressources debas niveau. Ce qui permet l'intégration des services vocaux aux et des servicesd'accès aux données en utilisant le paradigme client-serveur familier. Un servicevocale apparaît comme une succession de dialogues d'interaction entre un utilisateuret une plateforme d'implémentation. Les dialogues sont fournis par des serveurs dedocuments, lesquels peuvent être extérieurs à la plateforme d'implémentation. Lesserveurs de documents se chargent de la logique d'ensemble des services, del'exploitation des bases de données et des systèmes patrimoniaux, et produisent lesdialogues. Le document VoiceXML précise chacun des dialogues d'interaction quel'interpréteur VoiceXML doit conduire. Les entrées d'utilisateur affectent l'interprétationdu dialogue et elles sont rassemblées en requêtes soumises au serveur de documents.Le serveur de documents répond par un autre document VoiceXML afin de poursuivrela session avec l'utilisateur par d'autres dialogues.

Le langage VoiceXML est un langage de balisage qui :

Minimise les interactions client/serveur en définissant plusieurs interactions pardocument.

Isole les auteurs d'applications des détails de bas niveau propres à la plateforme.

Sépare le code d'interaction avec l'utilisateur (dans le langage VoiceXML) de lalogique des services (par exemple, les scripts CGI).

Favorise la portabilité des services entre les plateformes d'implémentation. Lelangage VoiceXML est commun aux fournisseurs de contenu, aux fournisseursd'outils et aux fournisseurs de plateformes.

Est facile à employer pour des interactions simples et offre néanmoins desfonctionnalités pour gérer des dialogues complexes.

Bien que le langage VoiceXML s'efforce de satisfaire aux besoins d'une majorité deservices à réponse vocale, il est probable que des applications dédiées, agissant à unniveau d'action plus fin, soient mieux adaptées aux exigences strictes de certainsservices.

1.2.3 La portée du langage VoiceXML

Le langage décrit l'interaction homme-machine offerte par les systèmes à réponsevocale, ce qui comprend :

La sortie d'une voix synthétisée (synthèse de la parole).

La sortie de fichiers sons.

La reconnaissance d'une entrée vocale.

La reconnaissance d'une entrée DTMF.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

10 of 212 27/07/2012 22:31

Page 11: vxml

L'enregistrement d'une commande vocale.

La commande du flux des dialogues.

Des fonctionnalités téléphoniques tels que le transfert d'appel et le raccrochage.

Le langage VoiceXML fournit les moyens de capturer une saisie de caractères et/ou unecommande vocale, en assignant les résultats des entrées à des variables de requêtedéfinies par le document et en prenant des décisions qui affectent l'interprétation desdocuments écrits dans ce même langage. Un document peut être relié à d'autresdocuments par le biais d'identificateurs de ressource uniformes (URI).

1.2.4 Les principes de conception

Le langage VoiceXML est une application XML [XML].

Le langage encourage la portabilité des services au travers d'une abstraction desressources des plateformes.

1.

Le langage s'accomode de la diversité des plateformes en ce qui concerne lagestion des formats des fichiers sons, des formats des grammaires vocales et dessystèmes d'adresse URI. Bien que les fabricants de plateformes puissent gérerdivers formats de grammaire, le langage nécessite un format de grammairecommun, à savoir la forme XML décrite dans la « spécification des grammaires dereconnaissance vocale du W3C » [SRGS], pour faciliter l'interopérabilité. De lamême manière, bien que divers formats sonores de lecture et d'enregistrementpuissent être gérés, ceux décrits dans l'annexe E doivent être pris en charge.

2.

Le langage offre des facilités pour la création des types d'interaction courants.3.

Le langage possède une sémantique bien définie qui préserve les intentions del'auteur en ce qui concerne le déroulement des interactions avec l'utilisateur. Iln'est pas besoin d'une heuristique côté client pour déterminer l'interprétation deséléments d'un document.

4.

Le langage reconnaît les interprétations sémantiques faites par les grammaires etil transmet ces informations à l'application.

5.

Le langage est doté d'un mécanisme de flux de commande.6.

Le langage autorise une séparation entre la logique du service et lecomportement d'une interaction.

7.

Le langage n'est pas conçu pour des calculs intensifs, pour l'exploitation desbases de données ou l'exploitation des systèmes patrimoniaux. Toutes choses quedes ressources situées hors de l'interpréteur du document sont censés prendre encharge, par exemple, un serveur de documents.

8.

La logique de service générale, la gestion des états, la génération et la successiondes dialogues sont censées résider hors de l'interprétateur du document.

9.

Le langage permet de relier des documents et aussi de soumettre des données àdes scripts côté serveur au moyen d'adresses URI.

10.

Le langage VoiceXML permet d'identifier exactement quelles données soumettre11.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

11 of 212 27/07/2012 22:31

Page 12: vxml

au serveur et quelle méthode HTTP (GET ou POST) employer pour la soumission.

Le langage n'exige pas des auteurs de documents qu'ils affectent ou désaffectentexplicitement les ressources des dialogues ou qu'ils se préoccupent des accèssimultanés. L'allocation des ressources et les fils de commande concurrentsdoivent être pris en charge par la plateforme d'implémentation.

12.

1.2.5 Les contraintes de la plateforme d'implémentation

Ce chapitre souligne les contraintes exercées sur les plateformes matérielles/logiciellesqui soutiendront un interpréteur VoiceXML.

L'acquisition du document. Le contexte d'interprétation est censé acquérir lesdocuments sur lesquels l'interpréteur VoiceXML agira. La gestion du système d'adresseURI « http:// » est obligatoire. Dans certains cas, la requête des documents est généréepar l'interprétation d'un document VoiceXML, tandis que d'autres requêtes sontgénérées par le contexte d'interprétation en réponse à des événements hors de portéedu langage, par exemple, un appel téléphonique entrant. Lorsqu'il émet des requêtesde documents via le protocole HTTP, le contexte d'interprétation s'identifie au moyend'une variable d'en-tête « User-Agent » dont la valeur a la forme « nom/version », parexemple, "acme-browser/1.2"

La sortie audio. Une plateforme d'implémentation doit mettre en œuvre une sortieaudio utilisant des fichiers sons et une voix synthétisée. La plateforme doit pouvoirordonner librement la synthèse vocale et la sortie audio. Si une ressource de sortieaudio n'est pas disponible, alors un événement error.noresource doit être suscité.Les fichiers sons sont appelés par des adresses URI. Le langage définit un ensembleobligatoire de formats de fichiers sons (voir l'annexe E) ; d'autres formats de fichierssons peuvent également être gérés.

L'entrée audio. Une plateforme d'implémentation est tenue de détecter et signalersimultanément une saisie de caractères et/ou une commande vocale et de contrôler ladurée de l'intervalle de détection d'une entrée avec un temporisateur dont la longueurest spécifiée par un document VoiceXML. Si une ressource de sortie audio n'est pasdisponible, alors un événement error.noresource doit être suscité.

La plateforme doit signaler les caractères (par exemple, DTMF) saisis par unutilisateur. Les plateformes doivent prendre en charge la forme XML desgrammaires décrites dans la « spécification des grammaires de reconnaissancevocale » du W3C [SRGS]. Elles devraient également prendre en charge la formeABNF des grammaires DTMF décrites dans la même spécification [SRGS].

La plateforme doit pouvoir recevoir dynamiquement les données de la grammairede reconnaissance vocale. Elle doit pouvoir utiliser les données des grammairesvocales de forme XML de la spécification des grammaires de reconnaissancevocale du W3C [SRGS]. Elle devrait pouvoir recevoir les données des grammairesde reconnaissance vocale de forme ABNF de cette même spécification [SRGS], etelle peut prendre en charge d'autres formes de grammaire tel que le formatJSpeech Grammar Format [JSGF] ou bien des formats propriétaires. Certainséléments VoiceXML contiennent des données de grammaire vocale, d'autres seréfèrent à des données de grammaire vocale au travers d'une adresse URI. Lelogiciel de reconnaissance vocale doit pouvoir s'adapter à une mise à jourdynamique de la commande vocale qu'il écoute au travers d'une des méthodes

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

12 of 212 27/07/2012 22:31

Page 13: vxml

décrites dans la spécification des grammaires de reconnaissance vocale.

La plateforme doit pouvoir enregistrer les signaux sonores provenant del'utilisateur. La plateforme d'implémentation doit faire en sorte quel'enregistrement soit disponible à une variable de requête. Le langage définit unensemble obligatoire de formats de fichiers sons enregistrés (voir l'annexe E) ;d'autres formats peuvent également pris en charge.

Le transfert. La plateforme devrait pouvoir effectuer une connexion à un tiers autravers d'un réseau de communication, tel que le réseau téléphonique.

1.3 Les concepts

Un document VoiceXML (ou bien un ensemble de documents apparentés appeléapplication) forme une machine conversationnelle à états finis. L'utilisateur se trouvetoujours dans un seul état conversationnel (ou dialogue) à la fois. Chaque dialoguedétermine le prochain dialogue de transition. Les transitions sont indiquées au moyend'adresses URI, lesquelles définissent les prochains document et dialogue à utiliser. Sil'adresse URI ne désigne pas de document, alors il s'agit du document courant. Si ellene désigne pas de dialogue, alors il s'agit du premier dialogue dans le document.L'exécution se termine lorsque le dialogue n'indique pas de successeur ou bienlorsqu'il contient un élément qui interrompt explicitement la conversation.

1.3.1 Les dialogues et les sous-dialogues

Il existe deux types de dialogues : les formulaires et les menus. Les formulairesdéfinissent une interaction qui effectue la collecte des valeurs d'un ensemble devariables d'élément de formulaire. Chaque champ peut indiquer une grammairedéfinissant les entrées permises dans celui-ci. Si une grammaire au niveau duformulaire est présente, alors elle peut servir pour le remplissage de plusieurs champsd'un énoncé. Un menu présentera à l'utilisateur un ensemble d'options puis ileffectuera une transition vers un autre dialogue en fonction de son choix.

Un sous-dialogue ressemble à un appel de fonction en cela qu'il fournit un mécanismepour invoquer une nouvelle interaction pour revenir ensuite au formulaire original. Lesinstances de variables, les grammaires et les information d'états sont sauvegardées etsont disponibles au retour sur le document appelant. Les sous-dialogues peuventservir, par exemple, à créer une séquence de confirmation nécessitant l'interrogationd'une base de données, ou à créer un ensemble de composants susceptibles d'êtrepartagés entre des documents dans une seule application, ou à créer une librairie dedialogues réutilisables partagée entre plusieurs applications.

1.3.2 Les sessions

Une session débute lorsque l'utilisateur commence à interagir avec un contexted'interprétation VoiceXML et s'achève à la demande de l'utilisateur, d'un document oudu contexte d'interprétation.

1.3.3 Les applications

Une application est un ensemble de documents partageant un même document racine

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

13 of 212 27/07/2012 22:31

Page 14: vxml

d'application. Dès que l'utilisateur interagit avec un document dans une application, ledocument racine d'application est chargé également. Le document racine d'applicationreste chargé en mémoire tant que l'utilisateur effectue des transitions entre les autresdocuments de la même application et il est vidé de la mémoire lorsque l'utilisateuropère une transition vers un document qui ne se trouve pas dans l'application. Tantque le document racine d'application est chargé, ses variables sont accessibles auxautres documents au titre de variables d'application et ses grammaires restent activespour la durée de l'application, selon les règles d'activation des grammaires expliquéesdans le chapitre 3.1.4.

La figure 2 montre les documents de transition (« D ») dans une application partageantun document racine d'application commun (racine).

Figure 2 : Les documents de transition dans une application.

1.3.4 Les grammaires

Chaque dialogue a une ou plusieurs grammaires vocales et/ou DTMF associées. Dansles applications dirigées par la machine, toutes les grammaires d'un dialogue ne sontactives que lorsque l'utilisateur se trouve dans le dialogue en question. Dans lesapplications à initiative mixte, où l'utilisateur et la machine déterminent en alternancequoi faire ensuite, certains dialogues sont marqués pour rendre leurs grammairesactives (c'est-à-dire, à l'écoute), même si l'utilisateur se trouve dans un autre dialoguedu même document, ou dans un autre document chargé issu de la même application.Dans cette situation, si l'utilisateur dit quelque chose touchant les grammaires activesd'un autre dialogue, l'exécution opère une transition vers cet autre dialogue, l'énoncéde l'utilisateur étant alors traité comme s'il avait été dit dans ce dialogue. L'initiativemixte apporte de la puissance et de la flexibilité aux applications vocales.

1.3.5 Les événements

Le langage VoiceXML fournit un mécanisme de remplissage de formulaire pour lamanipulation « normale » d'une entrée d'utilisateur. Il définit, en outre, un mécanismepour la gestion des événements non couverts par le mécanisme du formulaire.

La plateforme suscite des événements dans diverses circonstances, comme lorsquel'utilisateur ne répond pas, ou ne répond pas de manière intelligible, demande del'aide, etc. L'interpréteur suscite également des événements s'il trouve une erreursémantique dans un document VoiceXML. Les événements sont capturés par deséléments catch ou leur forme syntaxique abrégée. Tout élément dans lequel unévénement peut survenir peut définir des éléments catch. En outre, les élémentscatch peuvent également s'hériter des éléments englobants « comme par copie ». Onpeut ainsi spécifier un comportement de gestion des événements communs à

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

14 of 212 27/07/2012 22:31

Page 15: vxml

n'importe quel niveau, lequel s'applique à tous les niveaux inférieurs.

1.3.6 Les liens

Le lien gère les interactions d'initiative mixte. Il définit une grammaire active dès lorsque l'utilisateur se trouve dans la portée du lien. Si l'entrée d'utilisateur correspond àla grammaire indiquée par le lien, le contrôle est transféré à l'adresse URI de ce lien.Un lien peut servir à susciter un événement ou à aller sur l'adresse URI de destination.

1.4 Les éléments du langage VoiceXM

Tableau 1 : Les éléments du langage VoiceXML

Élément Objectif Chapitre

assign Assigne une valeur à une variable 5.3.2

audioLit un fichier son au sein d'un élémentprompt

4.1.3

blockUn conteneur pour un code exécutable (noninteractif)

2.3.2

catch Capture un événement 5.2.2

choice Définit un élément de menu 2.2.2

clearEfface une ou plusieurs variables d'élémentde formulaire

5.3.3

disconnect Déconnecte une session 5.3.11

else Employé dans les éléments if 5.3.4

elseif Employé dans les éléments if 5.3.4

enumerateRaccourci pour l'énumération des choixdans un menu

2.2.4

error Capture un événement erreur 5.2.3

exit Sort d'une session 5.3.9

fieldDéclare un champ de saisie dans unformulaire

2.3.1

filledUne action exécutée quand les champssont remplis

2.4

formUn dialogue pour la présentationd'informations et la collecte de données

2.1

gotoAller à un autre dialogue dans le mêmedocument ou un document différent

5.3.7

grammarIndique une grammaire de reconnaissancevocale ou une grammaire DTMF

3.1

help Capture un événement aide 5.2.3

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

15 of 212 27/07/2012 22:31

Page 16: vxml

Élément Objectif Chapitre

if Logique conditionnelle simple 5.3.4

initialDéclare une logique initiale sur une entréedans un formulaire (à initiative mixte)

2.3.3

linkDéfinit une transition commune à tous lesdialogues dans la portée du lien

2.5

log Génère un message de débogage 5.3.13

menuUn dialogue pour choisir entre plusieursdestinations

2.2.1

metaDéfinit un élément de métadonnée en tantque couple nom/valeur

6.2.1

metadataDéfinit une métainformation en utilisant unschéma de métadonnée

6.2.2

noinput Capture un événement non-entrée 5.2.3

nomatch Capture un événement non-correspondance 5.2.3

object Interagit avec une extension personnalisée 2.3.5

option Indique une option dans un élément field 2.3.1.3

paramParamètre dans un élément object ousubdialog

6.4

promptPlace en file d'attente la synthèse vocale etla sortie audio vers l'utilisateur

4.1

propertyContrôle les paramètres de la plateformed'implémentation.

6.3

record Enregistre un échantillon audio 2.3.6

repromptJoue la file d'attente sur un champ lorsquecelui-ci est revisité après un événement

5.3.6

return Retour d'un sous-dialogue. 5.3.10

scriptDéfinit un bloc de logique de scriptECMAScript côté client

5.3.12

subdialogInvoque un dialogue en tant quesous-dialogue du dialogue courant

2.3.4

submitSoumet des valeurs à un serveur dedocuments

5.3.8

throw Suscite un événement. 5.2.1

transferTransfère l'appelant vers une autredestination

2.3.7

valueInsère la valeur d'une expression dans uneinvite

4.1.4

var Déclare une variable 5.3.1

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

16 of 212 27/07/2012 22:31

Page 17: vxml

Élément Objectif Chapitre

recordL'élément de niveau supérieur dans chaquedocument VoiceXML

1.5.1

1.5 La structure et l'exécution du document

Un document VoiceXML se compose principalement d'éléments de niveau supérieurappelés dialogues. Il existe deux types de dialogues : les formulaires et les menus. Undocument peut également avoir des éléments meta et metadata, des éléments var etscript, des éléments property, des éléments catch et des éléments link.

1.5.1 L'exécution dans un seul document

L'exécutions du document débute implicitement au premier dialogue. Au fur et àmesure de l'exécution, chaque dialogue détermine le suivant. Lorsqu'un dialoguen'indique aucun dialogue suivant, l'exécution du document se termine.

Voici développé un « Salut tout le monde ! » afin d'illustrer ce déroulement. L'exempleinclut maintenant une variable de niveau document appelée « salut » et contenant lemessage d'accueil. Sa valeur sert d'invite dans le premier formulaire. Dès lors que cepremier formulaire a joué le message d'accueil, il va au formulaire appelé« dire_au_revoir », lequel joue « Au revoir ! » à l'utilisateur. Puisque le secondformulaire ne fait aucune transition vers un autre dialogue, cela provoque une sortiedu document.

<?xml version="1.0" encoding="UTF-8"?><vxml xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd" version="2.0"> <meta name="author" content="John Doe"/> <meta name="maintainer" content="[email protected]"/> <var name="salut" expr="'Salut tout le monde !'"/> <form> <block> <value expr="salut"/> <goto next="#dire_au_revoir"/> </block> </form> <form id="dire_au_revoir"> <block> Au revoir ! </block> </form></vxml>

Les formulaires peuvent se combiner autrement :

<?xml version="1.0" encoding="UTF-8"?><vxml xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

17 of 212 27/07/2012 22:31

Page 18: vxml

xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd" version="2.0"> <meta name="author" content="John Doe"/> <meta name="maintainer" content="[email protected]"/> <var name="salut" expr="'Bonjour tout le monde !'"/> <form> <block> <value expr="salut"/> Au revoir ! </block> </form></vxml>

L'élément vxml comprend les attributs suivants :

Tableau 2 : Les attributs de l'éléments vxml

versionLa version du langage VoiceXML du document(obligatoire). Le numéro de version courant est "2.0".

xmlns

L'espace de nommage désigné pour le langageVoiceXML (obligatoire). L'espace de nommage dulangage VoiceXML est défini comme étanthttp://www.w3.org/2001/vxml.

xml:base

L'adresse URI de base du document, défini dans ledocument [XML-BASE]. Comme dans le langage[HTML], c'est l'adresse URI que toutes les appelsrelatifs dans le document prennent comme adresse debase.

xml:langL'identificateur de langue du document. Si absent, lavaleur implicite est propre à la plateforme.

applicationL'adresse URI du document racine d'application dudocument, le cas échéant.

L'information de langue s'hérite en descendant la hiérarchie du document : la valeurde l'attribut xml:lang se transmet aux éléments susceptibles de définir également cetattribut, tels que les éléments grammar et prompt, à moins que ces éléments nedéfinissent une autre valeur.

1.5.2 L'exécution d'une application à documents multiples

Normalement, chaque document s'exécute comme une application isolée. Dans les casoù l'on souhaite que plusieurs documents travaillent ensemble comme une seuleapplication, on sélectionne un document afin qu'il devienne le document racined'application, les autres documents devenant des documents terminaux d'application.Chaque document terminal indique alors le document racine dans son élément vxml.

Une fois cette indication donnée, à chaque fois que l'interpréteur sera instruit decharger et d'exécuter un document terminal dans cette application, il chargera d'abordle document racine d'application si ce n'était pas déjà fait. Le document racined'application reste chargé jusqu'à ce que l'interpréteur soit instruit de charger undocument appartenant à une application différente. De ce fait, l'interprétation sesituera toujours dans l'un des deux cas de figure suivants :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

18 of 212 27/07/2012 22:31

Page 19: vxml

Le document racine d'application est chargé et l'utilisateur interagit avec celui-ci :il n'y a pas de document terminal.

Le document racine d'application et un seul document terminal sont tous les deuxchargés et l'utilisateur interagit avec le document terminal.

Lorsqu'on définit une succession de sous-dialogues dans des documents séparés,plusieurs documents terminaux peuvent avoir été chargés, bien que l'exécution ne sesitue que dans l'un de ces documents.

Lorsque le chargement d'un document terminal déclenche celui d'un document racined'application, aucun des dialogues dans le document racine n'est exécuté. L'exécutiondébute dans le document terminal.

Les applications à multiples documents revêtent plusieurs avantages :

Les variables du document racine sont disponibles pour les documents terminaux,de sorte que les informations peuvent être partagées et conservées.Les éléments property du document racine définissent les valeurs implicites despropriétés utilisées dans les documents terminaux.On peut définir du code ECMAScript courant dans les éléments script dudocument racine, code qui peut servir dans les documents terminaux.Les éléments catch du document racine définissent la gestion implicite desévénements pour les documents terminaux.Les grammaires de portée document dans le document racine sont activeslorsque l'utilisateur se trouve dans un document terminal, de sorte quel'utilisateur peut interagir avec les formulaires, liens et menus dans le documentracine.

Voici l'illustration d'une application en deux documents :

Document racine d'application (racine-app.vxml)

<?xml version="1.0" encoding="UTF-8"?><vxml xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd" version="2.0"> <var name="au_revoir" expr="« Ciao »"/> <link next="transfert_operateur.vxml"> <grammar type="application/srgs+xml" root="racine" version="1.0"> <rule id="racine" scope="public">opérateur</rule> </grammar> </link></vxml>

Document terminal (terminal.vxml)

<?xml version="1.0" encoding="UTF-8"?><vxml xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd" version="2.0" application="racine-app.vxml">

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

19 of 212 27/07/2012 22:31

Page 20: vxml

<form id="dire_au_revoir"> <field name="reponse"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt>Devons-nous nous dire <value expr="application.au_revoir"/> ?</prompt> <filled> <if cond="reponse"> <exit/> </if> <clear namelist="reponse"/> </filled> </field> </form></vxml>

Dans cet exemple, l'application est conçue de telle sorte que le document« terminal.vxml » doive être chargé en premier. Son attribut application indique que ledocument « racine_app.vxml » devrait être utilisé comme document racined'application. Le document « racine_app.vxml » est donc chargé, ce qui crée lavariable d'application « au_revoir » et définit également un lien qui mène au document« transfert_operateur.vxml » dès lors que l'utilisateur dit « opérateur ». L'utilisateurcommence l'interaction dans le formulaire « dire_au_revoir » :

O : Devons-nous nous dire « Ciao » ?

H : Si !

O : Je n'ai pas compris ce que vous avez dit (un message implicite propre à laplateforme).

O : Devons-nous nous dire « Ciao » ?

H : Ciao !

O : Je n'ai pas compris ce que vous avez dit.

H : Opérateur.

O : (Charge le document « transfert_operateur.vxml », afin de mettrel'appelant en contact avec un opérateur humain).

Remarquez que, quand l'utilisateur est dans une application à documents multiples,deux documents au plus sont chargés à tout instant : le document racine d'applicationet, sauf si effectivement l'utilisateur interagit avec le document racine, un documentterminal de l'application. L'élément vxml du document racine ne définit pas d'attributapplication et, au contraire, c'est l'élément vxml d'un document terminal qui définit unattribut application. Un interpréteur aura toujours un document racine d'applicationchargé, mais un document terminal d'application ne le sera pas toujours.

Le nom de l'application courante de l'interpréteur est l'adresse URI absolue dudocument racine d'application. L'interpréteur demeure dans la même application tantque le nom reste le même. Lorsque le nom change, il entre dans une nouvelleapplication et son contexte racine est initialisé. Le contexte racine de l'application secompose des variables, des grammaires, des éléments catch, des scripts et despropriétés dans la portée de l'application.

Pendant une session d'utilisateur, l'interpréteur passe d'un document à l'autre selon

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

20 of 212 27/07/2012 22:31

Page 21: vxml

les requêtes des éléments choice, goto, link, subdialog et submit. Certainestransitions restent dans une application, d'autres ont lieu entre des applications. Lapréservation ou l'initialisation du contexte racine dépendent du type de la transition :

Transition racine à terminal dans l'applicationUne transition racine à terminal dans la même application se produit lorsque ledocument courant est un document racine et que la valeur de l'attributapplication du document cible se résoud dans la même adresse URI absolue quecelle du nom de l'application courante. Le document racine d'application et soncontexte sont préservés.

Transition terminal à terminal dans l'applicationUne transition terminal à terminal dans la même application se produit lorsque ledocument courant est un document terminal et que la valeur de l'attributapplication du document cible se résoud dans la même adresse URI absolue quecelle du nom de l'application courante. Le document racine d'application et soncontexte sont préservés.

Transition terminal à racine dans l'applicationUne transition de terminal à racine dans la même application se produit lorsque ledocument courant est un document terminal et que l'adresse URI absolue dudocument cible est la même que celle du nom de l'application courante. Ledocument racine d'application courant et son contexte sont préservés quand latransition est causée par un élément choice, goto ou link. Le contexte racineest initialisé quand c'est un élément submit qui produit la transition terminal àracine, car l'élément submit aboutit toujours au chargement de son adresse URI.

Transition racine à racineUne transition racine à racine se produit lorsque le document courant est undocument racine et le document cible aussi, c'est-à-dire qu'il n'a pas d'attributapplication. Le contexte racine est initialisé par le document racine d'applicationconformément à la politique de mise en cache, voir le chapitre 6.1.2. La politiquede mise en cache est consultée, même lorsque le nom de l'application cible etcelui de l'application courante sont identiques.

Transition de sous-dialogueL'invocation d'un sous-dialogue se produit lorsqu'un document racine ou undocument terminal exécutent un élément subdialog. Comme expliqué dans lechapitre 2.3.4, l'invocation d'un sous-dialogue crée un nouveau contexted'exécution. Le document racine d'application et son contexte, dans le contexted'exécution du document appelant, sont gardés intacts pendant l'exécution dusous-dialogue puis réutilisés au retour du sous-dialogue en question. Le nouveaucontexte d'exécution du sous-dialogue possède son propre contexte racine et, lecas échéant, son propre contexte terminal. Lorsqu'un appel d'adresse URI nonvide invoque le sous-dialogue, c'est la politique de mise en cache, décrite dans lechapitre 6.1.2, qui déterminera l'acquisition des documents racine et terminalutilisés pour initialiser les nouveaux contextes racine et terminal. Si unsous-dialogue est invoqué au travers d'un appel d'adresse URI vide avec unidentificateur de fragment, par exemple, « #sous-routine1 », alors le documentracine et le document terminal demeurent inchangés, et c'est la raison pourlaquelle les documents racine et terminal courants seront utilisés pour initialiserles nouveaux contextes racine et terminal.

Les transitions inter-applicationsToutes les autres transitions se produisent entre applications, ce qui se traduit parune initialisation du contexte racine de l'application par le document racine del'application suivante.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

21 of 212 27/07/2012 22:31

Page 22: vxml

Si un document se réfère à un document racine d'application inexistant, un événementerror.badfetch est suscité. Si l'attribut application d'un document se réfère à undocument qui possède déjà un attribut application, alors un événementerror.semantic est suscité.

Les diagrammes suivants illustrent les effets des transitions entre les documentsracine et terminal et le contexte racine de l'application. Dans ces diagrammes, lesboîtes représentent des documents, les changements de texture des boîtes identifientles initialisations de contexte racine, les flèches en trait plein symbolisent lestransitions vers l'adresse URI dans l'étiquette de la flèche, les flèches verticales enpointillés indiquent un attribut application dont l'adresse URI correspond à l'étiquettede la flèche.

Figure 3 : Les transitions qui préservent le contexte racine

Dans ce diagramme, tous les documents appartiennent à la même application. Lestransitions sont identifiées par les numéros de 1 à 4 dans la partie supérieure de lafigure. Ce sont :

Une transition vers une adresse URI « A » qui résulte dans le document 1, lecontexte d'application est initialisé à partir du contenu du document 1. Supposonsque ce soit le premier document de la session. Le nom de l'application couranteest « A ».

1.

Les document 1 définit une transition vers l'adresse URI « B », laquelle produit ledocument 2. L'attribut application du document 2 et l'adresse URI « A » ont lamême valeur. La racine est le document 1 dont le contenu est préservé. C'est unetransition racine à terminal dans la même application.

2.

Le document 2 définit une transition vers l'adresse URI « C », laquelle produit unautre document terminal : le document 3. La valeur de son attribut application estidentique également à l'adresse URI « A ». La racine est le document 1 dont lecontenu est préservé. C'est une transition terminal à terminal dans la mêmeapplication.

3.

Le document 3 définit une transition vers l'adresse URI « A » au moyen d'unélement choice, goto ou link. Le document 1 est utilisé avec son contexteracine intact. C'est une transition terminal à racine dans la même application.

4.

Le diagramme suivant illustre des transitions qui initialisent le contexte racine.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

22 of 212 27/07/2012 22:31

Page 23: vxml

Figure 4 : Les transitions qui initialisent le contexte racine

Le document 1 définit une transition vers sa propre adresse URI « A ». Ledocument résultant 4 n'a pas d'attribut application, il s'agit donc un documentracine et le contexte racine est initialisé. C'est une transition racine à racine.

5.

Le document 4 définit une transition vers l'adresse URI « D », laquelle produit ledocument terminal 5. La valeur de son attribut application est différente :l'adresse URI « E ». On entre dans une nouvelle application. L'adresse URI « E »produit le document racine 6. Le contexte racine est initialisé à partir du contenudu document 6. C'est une transition inter-applications.

6.

Le document 5 définit une transition vers l'adresse URI « A ». La consultation ducache renvoie le document 4 lequel n'a pas d'attribut application. Par conséquent,il appartient à l'application « A » et le contexte racine est donc initialisé.L'initialisation a lieu, même si cette application et ce document racine ont étéutilisés plus tôt dans la session. C'est une transition inter-applications.

7.

1.5.3 Les sous-dialogues

Un sous-dialogue est un mécanisme permettant de décomposer des séquences dedialogues complexes afin de mieux les structurer ou de créer des composantsréutilisables. Par exemple, la sollicitation des renseignements concernant un comptepeut impliquer de réunir plusieurs informations, tels qu'un numéro de compte et unnuméro de téléphone du domicile. Un service d'assistance à la clientèle pourrait seconstruire autour de plusieurs applications indépendantes partageant ce bloc deconstruction élémentaire, qu'il serait donc raisonnable de construire comme unsous-dialogue. On en trouvera une illustration dans l'exemple ci-dessous. Le premierdocument « app.vxml » cherche à régulariser le compte d'un client et, pour ce faire, ildoit obtenir les renseignements concernant le compte puis le niveau de régularisation.Les renseignements sur le compte sont obtenus au moyen d'un élément subdialog quiinvoque un autre document VoiceXML, lequel sollicite une entrée de l'utilisateur.Pendant l'exécution de ce second document, le dialogue appelant est suspendu enattente du retour des informations. Le second document fournit le résultat desinteractions avec l'utilisateur au moyen d'un élément return, les valeurs résultantesdevenant accessibles au travers de la variable définie par l'attribut name sur l'élémentsubdialog.

Application de service à la clientèle (app.vxml)

<?xml version="1.0" encoding="UTF-8"?>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

23 of 212 27/07/2012 22:31

Page 24: vxml

<vxml xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd" version="2.0"> <form id="regularisation_facturation"> <var name="num_compte"/> <var name="tel_domicile"/> <subdialog name="infocompte" src="info_compte.vxml#normal"> <filled> <!-- Remarquez que la variable définie par "infocompte" est renvoyée comme objet ECMAScript, lequel contient deux propriétés définies par les variables indiquées dans l'élément "return" du sous-dialogue. -->

<assign name="num_compte" expr="infocompte.numcompte"/> <assign name="tel_domicile" expr="infocompte.telcompte"/> </filled> </subdialog>

<field name="montant_regularisation"> <grammar type="application/srgs+xml" src="/grammars/currency.grxml"/> <prompt> Quelle est la valeur de votre régularisation de compte ? </prompt> <filled> <submit next="/cgi-bin/majcompte"/> </filled> </field> </form></vxml>

Document contenant le sous-dialogue des renseignements de compte(info_compte.vxml)

<?xml version="1.0" encoding="UTF-8"?><vxml xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd" version="2.0"> <form id="normal"> <field name="numcompte"> <grammar type="application/srgs+xml" src="/grammars/digits.grxml"/> <prompt> Quel est votre numéro de compte ? </prompt> </field> <field name="telcompte"> <grammar type="application/srgs+xml" src="/grammars/phone.grxml"/> <prompt> Quel est le numéro de téléphone de votre domicile ? </prompt> <filled> <!-- Les valeurs obtenues dans les deux champs sont fournies au dialogue appelant par l'élément "return". --> <return namelist="numcompte telcompte"/> </filled> </field> </form></vxml>

Les sous-dialogues ajoutent un nouveau contexte d'exécution lorsqu'on les invoque. Le

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

24 of 212 27/07/2012 22:31

Page 25: vxml

sous-dialogue peut être un nouveau dialogue dans le document existant ou unnouveau dialogue dans un nouveau document.

Les sous-dialogues peuvent se composer de plusieurs documents. La figure 5 montrele flux d'exécution au cours de la transition d'une séquence de documents (« D ») versun sous-dialogue (« SD ») et retour.

Figure 5 : Un sous-dialogue composé de plusieurs documentsrevenant du dernier document de sous-dialogue.

Le contexte d'exécution du dialogue « D2 » est suspendu pendant l'invocation dusous-dialogue « SD1 » dans le document « sd1.vxml ». Ce sous-dialogue transfèrel'exécution au dialogue dans le document « sd2.vxml » (au moyen d'un élément goto).En définitive, le contrôle est rendu directement au dialogue « D2 » lorsque le dialoguedans « sd2.vxml » s'achève.

La figure 6 montre un exemple de sous-dialogue en plusieurs documents dans lequel lecontrôle est transféré d'un sous-dialogue à l'autre.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

25 of 212 27/07/2012 22:31

Page 26: vxml

Figure 6 : Un sous-dialogue composé de plusieurs documentsrevenant du premier document de sous-dialogue.

Le sous-dialogue dans « sd1.vxml » spécifie un transfert du contrôle vers un secondsous-dialogue « SD2 » dans « sd2.vxml ». Pendant l'exécution du sous-dialogue« SD2 », deux contextes sont suspendus : celui du dialogue dans « D2 » attendant unretour de « SD1 » et celui du dialogue dans « SD1 » attendant un retour de « SD2 ». Auretour de « SD2 », le contrôle revient à « SD1 », qui redonne à son tour le contrôle audialogue « D2 ».

1.5.4 Le traitement final

Dans certaines circonstances (notamment, pendant que l'interpréteur VoiceXML traiteun événement disconnect), l'interpréteur peut poursuivre l'exécution dans l'état detraitement final après l'interruption d'une connexion, afin de permettre à l'applicationVoiceXML d'effectuer une éventuelle purge nécessaire finale, telle que soumettre lesinformations au serveur d'applications. Par exemple, l'élément catch suivant captureral'événement connection.disconnect.hangup et l'exécutera au cours de l'état detraitement final :

<catch event="connection.disconnect.hangup"> <submit namelist="maSortie" next="http://monsite/sortie.jsp"/></catch>

Pendant l'état de traitement final, l'application doit rester dans l'état de transition etne peut pas entrer dans l'état d'attente (décrit dans le chapitre 4.1.8). Ainsi, parexemple, l'application ne devrait pas aller dans les éléments field, record ettransfer pendant l'état de traitement final. L'interpréteur VoiceXML doit s'interrompresi l'application VoiceXML essaye d'entrer dans l'état d'attente pendant l'état detraitement final.

Hormis cette restriction, l'exécution de l'application VoiceXML se poursuit normalementpendant l'état de traitement final. Ainsi, par exemple, l'application peut effectuer unetransition entre des documents pendant l'état de traitement final et l'interpréteur doit

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

26 of 212 27/07/2012 22:31

Page 27: vxml

s'interrompre si aucun élément de formulaire ne convient pour une sélection (commedécrit dans le chapitre 2.1.1).

2. Les structures de dialogue

2.1 Les formulaires

Les formulaires sont les composants-clés des documents VoiceXML. Un formulairecomprend :

Un ensemble d'éléments de formulaire, lesquels sont lus par la boucle principalede l'algorithme d'interprétation des formulaires. Les éléments de formulaire serangent en éléments d'entrée, qui peuvent être « remplis » par une entréed'utilisateur, et les éléments de commande, qui ne le peuvent.

Des déclarations de variables d'élément non-formulaire.

Des gestionnaires d'événements.

Des actions « remplies », à savoir des blocs de logique procédurale s'exécutantquand certaines combinaisons de variables d'éléments d'entrée sont assignées.

Les attributs de formulaire sont :

Tableau 3 : Les attributs de l'élément form

idLe nom du formulaire. S'il est fourni, on peut appeler leformulaire dans le document ou depuis un autre document.Par exemple : <form id="meteo">, <goto next="#meteo">.

scope

La portée implicite des grammaires de formulaire. Pour lavaleur "dialog", les grammaires de formulaire ne sont activesque dans le formulaire. Pour la valeur "document", elles sontactives pour la durée de n'importe quel dialogue dans lemême document. Si la valeur est "document" et que ledocument est un document racine d'application, alors lesgrammaires de formulaire sont actives pour la durée den'importe quel dialogue dans n'importe quel document decette application. Remarquez que la portée des grammairesde formulaire individuel est prioritaire sur la portée implicite.Par exemple, dans les documents non-racines, si on a unformulaire avec une portée valant implicitement "dialog" etune grammaire de formulaire dont la portée vaut "document",alors cette grammaire est active dans n'importe queldialogue du document.

Cette partie décrit certains concepts sous-jacents des formulaires puis donne quelquesexemples détaillés de leur utilisation.

2.1.1 L'interprétation des formulaires

Les formulaires sont interprétés par un algorithme d'interprétation des formulaires

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

27 of 212 27/07/2012 22:31

Page 28: vxml

implicite (FIA). La boucle principale de l'algorithme FIA sélectionne à maintes reprisesun élément de formulaire pour le visiter. L'élément de formulaire sélectionné est lepremier dans l'ordre du document dont la condition de veille n'est pas satisfaite. Parexemple, la condition de veille implicite d'un champ vérifie si la variable d'élément deformulaire du champ possède une valeur, de sorte que, si un formulaire simple necontient que des champs, l'utilisateur fera l'objet d'une invite pour chaque champ àtour de rôle.

En général, l'interprétation d'un élément de formulaire implique :

La sélection et la lecture d'une ou plusieurs invites ;

La collecte d'une entrée d'utilisateur, que ce soit une réponse remplissant un ouplusieurs éléments d'entrée ou bien le déclenchement d'un certain événement(par exemple, une aide), et ;

L'interprétation de toutes les actions filled correspondant aux élémentsd'entrée nouvellement remplis.

L'algorithme FIA se termine lorsqu'il rencontre une déclaration de transfert de contrôle(par exemple, un élément goto menant à un autre dialogue ou document, ou unélément submit envoyant des données au serveur de documents. Il se termineégalement pour un élément exit implicite, quand il ne reste aucun élément deformulaire susceptible d'être sélectionné.

L'algorithme FIA est décrit précisément dans le chapitre 2.1.6.

2.1.2 Les éléments de formulaire

Les éléments de formulaire sont ceux pouvant être visités dans la boucle principale del'algorithme FIA. Les éléments d'entrée conduisent l'algorithme FIA à réunir un résultatpour un élément particulier. Lorsque l'algorithme FIA sélectionne un élément decommande, cet élément peut contenir un bloc de code procédural à exécuter, ou ilpeut dire à l'algorithme FIA de mettre en place l'invite-et-collecte initiale d'unformulaire à initiative mixte.

2.1.2.1 Les éléments d'entrée

Un élément d'entrée définit une variable d'élément d'entrée à recueillir de l'utilisateur.Les éléments d'entrée ont des invites pour indiquer à l'utilisateur quoi dire ou quoisaisir, des grammaires qui définissent les entrées permises et des gestionnairesd'événement pour traiter tous les événements susceptibles d'en résulter. Un élémentd'entrée peut également comporter un élément filled, lequel définit l'action àprendre juste après que la variable d'élément d'entrée a été remplie. Les élémentsd'entrée comprennent :

Tableau 4 : Les éléments d'entrée

fieldUn élément d'entrée dont la valeur s'obtient via desgrammaires ASR ou DTMF.

record

Un élément d'entrée dont la valeur est un messagesonore enregistré par l'utilisateur. Un élément recordpourrait, par exemple, recueillir un message

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

28 of 212 27/07/2012 22:31

Page 29: vxml

électronique vocal.

transfer

Un élément d'entrée qui transfère l'utilisateur vers unautre numéro de téléphone. Si le transfert renvoie unecommande, la variable du champ recevra le statutrésultant.

object

Cet élément d'entrée invoque un « objet » propre à uneplateforme avec divers paramètres. Le résultat del'objet de plateforme est un objet ECMAScript de type« Object ». Un objet de plateforme pourrait revêtir laforme d'un dialogue intégré qui recueillerait lesrenseignements d'une carte de crédit. Un autrepourrait recueillir un message textuel au moyen d'unecertaine méthode propriétaire de saisie de texte DTMF.Les implémentations n'ont pas obligation de produiredes objets propres à une plateforme, bien qu'ellesdoivent gérer l'élément object en suscitant unévénement error.unsupported.objectname si l'objetpropre à une plateforme particulière n'était pasreconnu (remarquez que la chaîne « objectname »dans « error.unsupported.objectname » est fixe etne se remplace donc pas par le nom de l'objet nonreconnu ; la variable d'événement spéciale "_message"peut fournir d'autres informations d'erreur plusspécifiques, comme décrit dans le chapitre 5.2.2).

subdialog

Cet élément d'entrée se comporte grossièrementcomme un appel de fonction. Il invoque un autredialogue dans le document courant ou bien un autredocument VoiceXML. Il renvoie un objet ECMAScript detype « Object » comme résultat.

2.1.2.2 Les éléments de commande

Il existe deux types d'éléments de commande :

Tableau 5 : Les éléments de commande

block

Une séquence de déclarations procédurales servant pourles invites et les calculs, mais pas pour le recueil d'uneentrée. Un bloc contient une variable d'élément deformulaire (normalement implicite) dont la valeur doitêtre vérifiée avant qu'il ne puisse être interprété.

initial

Cet élément détermine l'interaction initiale dans unformulaire à initiative mixte. Son invite devrait être écritede manière à encourager l'utilisateur à dire quelquechose qui corresponde avec une grammaire de niveauformulaire. Lorsqu'au moins une variable d'élément deformulaire est remplie comme résultat d'unereconnaissance pendant un élément initial, alors lavariable d'élément de formulaire de l'élément initial se

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

29 of 212 27/07/2012 22:31

Page 30: vxml

vérifie, ce qui l'exclut comme alternative pourl'algorithme FIA.

2.1.3 Les variables et contraintes des éléments de formulaire

À chaque élément de formulaire est associée une variable d'élément de formulaire,dont la valeur implicite n'est pas définie lorsqu'on accède au formulaire. Cette variabled'élément de formulaire contiendra le résultat de l'interprétation de l'élément deformulaire. La variable d'élément de formulaire d'un élément d'entrée s'appelle aussiune variable d'élément d'entrée, et elle contient la valeur collectée auprès del'utilisateur. Une variable d'élément de formulaire peut recevoir un nom au moyen del'attribut name ou peut rester anonyme, auquel cas il sera généré un nom interne.

Chaque élément de formulaire admet une condition de veille, laquelle régit le faitqu'un élément de formulaire puisse ou non être sélectionné par l'algorithme FIA. Lacondition de veille implicite vérifie simplement si la variable d'élément de formulaire aune valeur. Si c'est le cas, l'élément de formulaire ne sera pas visité.

Les éléments d'entrée reçoivent habituellement un nom, au contraire des éléments decommande. En général, les variables d'élément de formulaire n'ont pas de valeursinitiales et aucune autre condition de veille n'est définie. Parfois, cependant, uncontrôle plus fin peut se révéler nécessaire. Un formulaire peut avoir une variabled'élément de formulaire dont la valeur est fixée initialement pour cacher un champpuis être effacée (par exemple, au moyen d'un élément clear) pour forcer la collectedu champ en question. Un autre champ peut avoir une condition de veille qui l'activeseulement quand il n'a pas été collecté et après que deux autres champs ont étéremplis. Un élément de bloc s'exécutera seulement quand certaines conditions serontvérifiées. On peut donc exercer un contrôle plus fin sur l'ordre dans lequel l'algorithmeFIA sélectionnera et exécutera les éléments de formulaires. Toutefois, en général, onpourra construire beaucoup de dialogues sans avoir recours à un tel niveau decomplexité.

En résumé, tous les éléments de formulaires admettent les attributs suivants :

Tableau 6 : Les attributs communs des éléments de formulaire

nameLe nom d'une variable d'élément de formulaire, dans la portéed'un dialogue, qui contiendra la valeur de l'élément deformulaire.

expr

La valeur initiale de la variable d'élément de formulaire ; pardéfaut, c'est la valeur ECMAScript "undefined". Si elle estinitialisée, alors l'élément de formulaire ne s'exécutera pas, àmoins d'effacer la variable d'élément de formulaire.

cond

Une expression à évaluer conjointement au test de la variabled'élément de formulaire. Si l'attribut est absent, sa valeurimplicite vaut "true" ou alors, dans le cas de l'élémentinitial, c'est un test pour déterminer si une quelconquevariable d'élément de formulaire a été remplie.

2.1.4 Les formulaires dirigés

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

30 of 212 27/07/2012 22:31

Page 31: vxml

Le type de formulaire le plus simple et le plus commun est celui où les éléments deformulaire sont exécutés exactement une fois, en ordre séquentiel, pour mettre enœuvre une interaction dirigée par l'ordinateur. Voici un service météorologiquerépondant à ce type.

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="info_meteo"> <block>Bienvenue sur ce service d'informations météorologiques !</block> <field name="pays"> <prompt>Quel pays ?</prompt> <grammar src="pays.grxml" type="application/srgs+xml"/> <catch event="help"> Veuillez prononcer le nom du pays dont vous voulez connaître la météo. </catch> </field> <field name="ville"> <prompt>Quelle ville ?</prompt> <grammar src="ville.grxml" type="application/srgs+xml"/> <catch event="help"> Veuillez prononcer le nom de la ville dont vous voulez la météo. </catch> </field> <block> <submit next="/servlet/meteo" namelist="ville pays"/> </block></form></vxml>

Ce dialogue se déroule de manière séquentielle :

O (ordinateur) : Bienvenue sur ce service d'informations météorologiques !Quel pays ?

H (humain) : Aide [ndt. help]

O : Veuillez prononcer le nom du pays dont vous voulez connaître la météo.

H : Islande

O : Quelle ville ?

H : Hùsavìk

O : Je n'ai pas compris ce que vous avez dit. Quelle ville ?

H : Akureyri

O : Les conditions à Akureyri, en Islande, sont ensoleillées et dégagées à11h00, etc.

La première itération de l'algorithme FIA sélectionne le premier élément block, car savariable d'élément de formulaire (cachée) n'est pas définie au départ. Ce bloc produit

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

31 of 212 27/07/2012 22:31

Page 32: vxml

l'invite principale et la valeur de sa variable d'élément de formulaire est fixée à "true".À la deuxième itération, le premier élément block est sauté car sa valeur d'élément deformulaire est maintenant définie et le champ « pays » est sélectionné puisque l'étatde la variable de dialogue n'est pas définie. Ce champ invite l'utilisateur à indiquer lepays puis assigne la réponse à la variable. On trouvera une description détaillée duremplissage des variables d'élément de formulaire depuis une grammaire de niveauchamp dans le chapitre 3.1.6. La troisième itération du formulaire invite à remplir lechamp « ville » pour le collecter ensuite. La quatrième itération exécute l'élémentblock final et effectue une transition vers une autre adresse URI.

Chaque champ de cet exemple produit une invite dans un certain ordre afin d'obtenirune réponse, indique une grammaire définissant ce qu'il faut écouter et comporte ungestionnaire d'événement pour l'événement help. L'événement help est suscité dèsque l'utilisateur demande une assistance. Le gestionnaire d'événement help captureces événements et fait une invite plus détaillée.

Voici un second formulaire dirigé, qui invite à donner des informations de carte decrédit :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="obtenir_info_carte"> <block>Nous avons maintenant besoin du type de votre carte de crédit, de son numéro et de sa date d'expiration.</block> <field name="type_carte"> <prompt count="1">Quel est le type de votre carte de crédit ?</prompt> <prompt count="2">Type de carte ?</prompt> <!-- Ceci est une grammaire intégrée. --> <grammar type="application/srgs+xml" root="r2" version="1.0"> <rule id="r2" scope="public"> <one-of> <item>visa</item> <item>master <item repeat="0-1">card</item></item> <item>amex</item> <item>american express</item> </one-of> </rule> </grammar> <help> Veuillez dire Visa, MasterCard ou American Express.</help> </field>

<field name="num_carte"> <grammar type="application/srgs+xml" src="/grammars/digits.grxml"/> <prompt count="1">Quel est le numéro de votre carte ?</prompt> <prompt count="2">Numéro de carte ?</prompt> <catch event="help"> <if cond="type_carte =='amex' || type_carte =='american express'"> Veuillez dire ou bien saisir les 15 chiffres du numéro de votre carte. <else/> Veuillez dire ou bien saisir les 16 chiffres du numéro de votre carte. </if> </catch>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

32 of 212 27/07/2012 22:31

Page 33: vxml

<filled> <if cond="(type_carte == 'amex' || type_carte =='american express') &amp;&amp; num_carte.length != 15"> Les numéros des cartes American Express doivent avoir 15 chiffres. <clear namelist="num_carte"/> <throw event="nomatch"/> <elseif cond="type_carte != 'amex' &amp;&amp; type_carte !='american express' &amp;&amp; num_carte.length != 16"/> Les numéros des cartes MasterCard et Visa ont 16 chiffres. <clear namelist="num_carte"/> <throw event="nomatch"/> </if> </filled> </field>

<field name="date_expiration"> <grammar type="application/srgs+xml" src="/grammars/digits.grxml"/> <prompt count="1">Quelle est la date d'expiration de votre carte ?</prompt> <prompt count="2">Date d'expiration ?</prompt> <help> Veuillez dire ou saisir la date d'expiration, par exemple, un deux zéro un. </help> <filled> <!-- Validation de la date mmaa --> <var name="mm"/> <var name="i" expr="date_expiration.length"/> <if cond="i == 3"> <assign name="mm" expr="date_expiration.substring(0,1)"/> <elseif cond="i == 4"/> <assign name="mm" expr="date_expiration.substring(0,2)"/> </if> <if cond="mm == '' || mm &lt; 1 || mm &gt; 12"> <clear namelist="date_expiration"/> <throw event="nomatch"/> </if> </filled> </field>

<field name="confirmer"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt> J'ai une carte <value expr="type_carte"/>, numéro <value expr="num_carte"/>, expirant le <value expr="date_expiration"/>. Est-ce exact ? </prompt> <filled> <if cond="confirmer"> <submit next="placer_commande.asp" namelist="type_carte num_carte date_expiration"/> </if> <clear namelist="type_carte num_carte date_expiration confirmer"/> </filled> </field></form></vxml>

Remarquez que les alternatives grammaticales « amex » et « american express »renvoient des valeurs littérales qui demandent un traitement distinct dans les

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

33 of 212 27/07/2012 22:31

Page 34: vxml

expressions conditionnelles. Le chapitre 3.1.5 décrit comment utiliser desrattachements sémantiques dans la grammaire pour ne renvoyer qu'une seulereprésentation de ces entrées.

Le dialogue pourrait prendre la tournure suivante :

O : Nous avons maintenant besoin du type de votre carte de crédit, de sonnuméro et de sa date d'expiration.

O : Quel est le type de votre carte de crédit ?

H : Discover

O : Je n'ai pas compris ce que vous avez dit (un message implicite propre à laplaterforme).

O : Type de carte ? (on utilise la seconde invite cette fois-ci)

H : M.rd. ! (fort heureusement traitée comme « aide » par cette plateforme).

O : Veuillez dire Visa, MasterCard ou American Express.

H : Heuh... Amex (cette plateforme ignore le « Heuh »)

O : Quel est le numéro de votre carte ?

H : Un deux trois quatre ... attendez ...

O : Je n'ai pas compris ce que vous avez dit.

O : Numéro de carte ?

H: (utilisation de tonalités DTMF) 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 #

O : Quelle est la date d'expiration de votre carte ?

H : un deux zéro un

O : J'ai une carte Amex, numéro 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6, expirant le 12 0 1. Est-ce exact ?

H : Oui

Les champs sont les blocs de contruction principaux des formulaires. Un champdéclare une variable et définit les invites, les grammaires, les séquences DTMF, lesmessages d'assistance et les autres gestionnaires d'événements qui servent àl'obtenir. Chaque champ déclare une variable d'élément de formulaire VoiceXML dansla portée du dialogue du formulaire. Ces variables peuvent faire l'objet d'unesoumission une fois le formulaire rempli ou être copiées dans d'autres variables.

Chaque champ possède ses propres grammaires vocales et/ou DTMF, définiesexplicitement au moyen d'éléments grammar ou bien implicitement au moyen d'unattribut type. L'attribut type peut s'utiliser pour les grammaires intégrées, comme lesgrammaires de type digits et boolean dans l'exemple.

Chaque champ peut définir une ou plusieurs invites. S'il n'y a qu'une invite, elle est

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

34 of 212 27/07/2012 22:31

Page 35: vxml

répétée jusqu'à tant que l'utilisateur fournisse une valeur. S'il y a plusieurs invites,elles sont sélectionnées pour être reproduites selon l'algorithme de sélection desinvites (voir le chapitre 4.1.6). L'attribut count sert à déterminer quelle invite utiliser àchaque itération. Dans l'exemple, les invites se raccourcissent. C'est ce qu'on appelleune incitation dégressive.

Les éléments <catch event="help"> sont des gestionnaires d'événement définissantce qu'il faut faire lorsque l'utilisateur demande une assistance. Les messagesd'assistance peuvent également être dégressifs. On peut les abréger ; les deux formessuivantes sont ainsi équivalentes :

<catch event="help"> Veuillez dire visa, mastercard ou amex.</catch>

<help> Veuillez dire visa, mastercard ou amex.</help>

L'élément filled définit ce qu'il faut faire lorsque l'utilisateur fournit une entréereconnue pour le champ. Une de ses utilisations consiste à définir des contraintesd'intégrité sur et en plus des vérifications faites par les grammaires, comme dans lechamps « date_expiration » de l'exemple précédent.

2.1.5 Les formulaires à initiative mixte

Le chapitre précédent traitait de formulaires mettant en œuvre des conversationsrigides conduites par l'ordinateur. Pour faire un formulaire à initiative mixte, oùl'ordinateur et l'humain mènent tous deux la conversation, il faut que le formulaire aitune ou plusieurs grammaires de niveau formulaire. On peut écrire le dialogue deplusieurs façons. Un style de composition courant combine un élément initial,invitant à une réponse générale, et des éléments field, invitant à des renseignementsparticuliers. L'exemple ci-dessous en est une illustration. On peut obtenir un effetsimilaire avec des techiques plus complexes, comme utiliser l'attribut cond sur deséléments field.

Si un formulaire a des grammaires de niveau formulaire, alors :

Ses éléments d'entrée peuvent être remplis dans n'importe quel ordre ;

Plus d'un élément d'entrée peut être rempli en résultat d'une seule parole del'utilisateur.

Seuls les éléments d'entrée (et non les éléments de commande) peuvent être remplisen résultat du filtrage d'une grammaire de niveau formulaire. Le remplissage desvariables de champ lors de l'utilisation d'une grammaire de niveau formulaire estdécrit dans le chapitre 3.1.6.

Également, les grammaires du formulaire peuvent être actives lorsque l'utilisateur setrouve dans d'autres dialogues. Si un document comporte deux formulaires, disons unformulaire pour une location de voiture et un autre pour une réservation d'hôtel, et queles deux formulaires ont des grammaires actives pour le document, alors un utilisateurpourrait répondre à une demande de renseignements concernant la réservation d'hôtelpar des renseignements concernant la location de voiture et donc conduire l'ordinateur

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

35 of 212 27/07/2012 22:31

Page 36: vxml

à discuter de location de voiture à la place. L'utilisateur peut avoir un échange avecn'importe quelle grammaire et, par conséquent, avoir des éléments d'entrée qui soientfixés et des actions qui soient entreprises en réponse.

Exemple. Voici une deuxième version du service d'informations météorologiques,montrant une initiative mixte. Dans un but d'illustration, on l'a « amélioré » avec de lapublicité et avec une confirmation de la ville et du pays :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="info_meteo">

<grammar src="ville-et-pays.grxml" type="application/srgs+xml"/>

<!-- L'appelant ne peut pas interrompre la publicité du jour. --> <block> <prompt bargein="false"> Bienvenue sur ce service d'informations météorologiques ! <audio src="http://www.pubs-en-ligne.example.com/wis.wav"/> </prompt> </block>

<initial name="debut"> <prompt> Quels sont la ville et le pays dont vous voulez connaître la météo ? </prompt> <help> Veuiller prononcer le nom de la ville et celui du pays pour lesquels vous souhaitez un bulletin météorologique </help> <!-- Si l'utilisateur reste silencieux, faire une nouvelle invite puis essayer des invites dirigées. --> <noinput count="1"> <reprompt/></noinput> <noinput count="2"> <reprompt/> <assign name="debut" expr="true"/></noinput> </initial>

<field name="pays"> <prompt>Quel pays ?</prompt> <help> Veuillez prononcer le nom du pays dont vous voulez connaître la météo. </help> </field>

<field name="ville"> <prompt>Veuillez prononcer le nom de la ville située en <value expr="pays"/> dont vous voulez connaître la météo.</prompt> <help>Veuillez prononcer le nom de la ville dont vous voulez connaître la météo.</help> <filled> <!-- La plupart de nos clients habitent Paris. --> <if cond="ville == 'Paris' &amp;&amp; pays == undefined"> <assign name="pays" expr="'France'"/> </if> </filled> </field>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

36 of 212 27/07/2012 22:31

Page 37: vxml

<field name="continuer" modal="true"> <grammar type="application/srgs+xml" src="/grammars/boolean"/> <prompt>Voulez-vous entendre le bulletin météorologique pour <value expr="ville"/>, <value expr="pays"/> ? </prompt> <filled> <if cond="continuer"> <prompt bargein="false"> <audio src="http://www.pubs-en-ligne.example.com/wis2.wav"/> </prompt> <submit next="/servlet/meteo" namelist="ville pays"/> </if> <clear namelist="debut ville pays continuer"/> </filled> </field></form></vxml>

Voici une transcription montrant les avantages présentés par ce type dialogue, mêmepour un utilisateur novice :

O : Bienvenue sur ce service d'informations météorologiques ! Achetez lamayonnaise de tante Louise !.

O : Quels sont la ville et le pays dont vous voulez connaître la météo ?

H : Heuh... France.

O : Veuillez prononcer le nom de la ville située en France dont vous voulezconnaître la météo.

H : La Rochelle, s'il vous plaît.

O : Voulez-vous entendre le bulletin météorologique de La Rochelle, France ?

H : Non

O : Quels sont la ville et le pays dont vous voulez connaître la météo ?

H : Paris.

O : Voulez-vous entendre le bulletin météorologique pour Paris, France ?

H : Oui

O : N'oubliez pas d'acheter la mayonnaise de tante Louise ce soir !

O : Journée ensoleillée en général avec un maximum à 25°. Rafraîchissementen soirée...

La valeur de l'attribut modal du champ « continuer » est fixée à "true". Ce qui entraînela désactivation de toutes les grammaires sauf celles définies dans l'élément deformulaire courant, de sorte que la seule grammaire active pendant la durée de cechamp est la grammaire intégrée de type boolean.

Un utilisateur expérimenté peut aller beaucoup plus vite (mais il toujours obligé

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

37 of 212 27/07/2012 22:31

Page 38: vxml

d'écouter les publicités) :

O : Bienvenue sur ce service d'informations météorologiques ! Achetez lamayonnaise de tante Louise !

O : Quels sont...

H (interrompant) : Paris

O : Voulez-vous...

H (interrompant) : Oui

O : N'oubliez pas d'acheter la mayonnaise de tante Louise ce soir !

O : Journée ensoleillée en général avec un maximum à 25°. Rafraîchissementen soirée...

2.1.5.1 Le contrôle de l'ordre de collecte des champs

On peut personnaliser l'algorithme FIA de plusieurs manières. Une façon consiste àassigner une valeur à une variable d'élément de formulaire, de sorte que l'élément deformulaire ne soit pas sélectionné. Une autre façon est d'utiliser un élément clearpour fixer la valeur de la variable d'élément de formulaire à "undefined", ce qui forcel'algorithme FIA à visiter de nouveau l'élément de formulaire.

Une autre méthode consiste à définir explicitement l'élément de formulaire suivant àvisiter au moyen d'une déclaration <goto nextitem>. Ce qui force un transfertimmédiat vers cet élément de formulaire, même si la valeur d'un quelconque attributcond présent était évaluée à "false". Aucune variable ni condition ni compteur dansl'élément de formulaire visé ne sera réinitialisé. L'invite de l'élément de formulaire serareproduite mais si elle a déjà été visitée. Si la déclaration <goto nextitem> apparaîtau cours d'une action filled, le reste de l'action filled ainsi que toutes leséventuelles actions filled en cours seront sautés.

Voici un exemple de déclaration <goto nextitem> exécuté en réponse à l'événementexit :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><link event="exit"> <grammar type="application/srgs+xml" src="/grammars/exit.grxml"/></link>

<form id="sondage_2000_03_30"> <catch event="exit"> <reprompt/> <goto nextitem="confirmer_quitter"/> </catch> <block> <prompt> Bonjour, vous avez été tiré au sort afin de répondre à des questions critiques touchant à la politique étrangère des États-Unis.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

38 of 212 27/07/2012 22:31

Page 39: vxml

</prompt> </block>

<field name="q1"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt>Êtes-vous d'accord avec la position du FMI concernant la privatisation de certains secteurs du ministère de l'agriculture du Burkina Faso ?</prompt> </field>

<field name="q2"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt>Si ces privatisations avaient lieu, est-ce que ses effets bénéficieraient majoritairement à Ouagadougou et à Bobo-Dioulasso ?</prompt> </field>

<field name="q3"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt>Êtes-vous d'accord que la production de sorgho et de millet pourraient augmenter de ce fait jusqu'à quatre pour cent l'an ?</prompt> </field>

<block> <submit next="enregistrer" namelist="q1 q2 q3"/> </block>

<field name="confirmer_quitter"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt>Vous avez choisi de ne pas répondre. Êtes-vous sûr de vouloir le faire, ce qui est susceptible d'affecter négativement la politique étrangère des États-Unis vis-à-vis de l'Afrique sub-saharienne pour les décennies à venir ?</prompt> <filled> <if cond="confirmer_quitter"> C'est entendu, mais le Département d'État des États-Unis est mécontent. <exit/> <else/> Bon, reprenons où nous avons arrêté. <clear namelist="confirmer_quitter"/> </if> </filled> <catch event="noinput nomatch"> <throw event="exit"/> </catch> </field></form></vxml>

Si l'utilisateur dit « quitter » [ndt. exit] à supposer que la grammaire ) en réponse àn'importe quelle question du sondage, un événement exit est suscité par laplateforme et capturé par le gestionnaire d'événement catch. Ce gestionnaire force lepassage suivant au champ « confirmer_quitter ». Le champ « confirmer_quitter »n'aurait pas été visité au cours du remplissage normal du sondage parce que l'élémentblock précédent aurait passé le contrôle au script d'enregistrement.

2.1.6 L'algorithme d'interprétations des formulaires

Nous avons présenté l'algorithme d'interprétation des formulaires (FIA) à un niveau

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

39 of 212 27/07/2012 22:31

Page 40: vxml

conceptuel. Dans ce chapitre, nous le décrivons de manière plus détaillée. Unedescription plus formelle est fournie dans l'annexe C.

2.1.6.1 La phase d'initialisation

Dès lors qu'on entre dans un formulaire, celui-ci est initialisé. Les variables ducompteur d'invites interne (dans la portée du dialogue du formulaire) sont réinitialiséesà "1". Chaque variable (les éléments var de niveau formulaire et les variablesd'élément de formulaire) est initialisée, dans l'ordre du document, à la valeur"undefined" ou à la valeur de l'attribut expr concerné.

2.1.6.2 La boucle principale

La boucle principale de l'algorithme FIA comporte trois phases :

La phase de sélection: l'élément de formulaire suivant non rempli est sélectionné pourune visite.

La phase de collecte : l'élément de formulaire sélectionné est visité, ce qui produit uneinvite de l'utilisateur à une entrée, l'activation des grammaires appropriées puisl'attente et la collecte d'une entrée (comme une phrase prononcée ou l'appui detouches DTMF) ou d'un événement (comme une demande d'assistance ou undépassement du délai d'entrée).

La phase de traitement : une entrée se traite en remplissant les éléments d'entrée eten exécutant les éléments field pour effectuer certaines actions telle qu'unevalidation d'entrée. Un événement se traite en exécutant le gestionnaire d'événementapproprié pour le type d'événement en question.

Remarquez que l'algorithme FIA peut recevoir une entrée (un ensemble de couples devaleurs de grammaire attribut/attribut) qui aura été collectée pendant que l'utilisateurétait dans l'interprétation d'un autre formulaire. Auquel cas, la première itération de laboucle principale saute les phases de sélection et de collecte pour aller directement àla phase de traitement avec cette entrée. Remarquez également que si une erreursurvient au cours de la phase de sélection ou de collecte provoquant la générationd'un événement, alors l'événement est suscité et l'algorithme FIA se place directementdans la phase de traitement.

2.1.6.2.1 La phase de sélection

Le but de la phase de sélection consiste à sélectionner l'élément de formulaire suivantà visiter. Elle se déroule comme suit :

Si un élément goto, trouvé dans la phase de traitement de la dernière itération de laboucle principale, comportait la déclaration <goto nextitem>, alors l'élément deformulaire désigné est sélectionné.

Sinon, le premier élément de formulaire dont la valeur de la condition de veille est"false" est retenu pour une visite. Si une erreur survient pendant la vérification desconditions de veille, l'événement concerné est suscité, ce qui saute la phase decollecte, puis examiné dans la phase de traitement.

Si aucune condition de veille n'est fausse et que la dernière itération a parcouru le

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

40 of 212 27/07/2012 22:31

Page 41: vxml

formulaire sans rencontrer un transfert de contrôle explicite, alors l'algorithme FIAproduit implicitement une opération exit (de la même manière, si l'exécution sepoursuit hors d'un formulaire, comme lorsqu'une erreur est générée hors d'unformulaire, sans qu'il y ait de transfert explicite du contrôle, alors l'interpréteurproduira une opération exit implicite).

2.1.6.2.2 La phase de collecte

Le but de la phase de collecte consiste à recueillir une entrée ou un événement.L'élément de formulaire sélectionné est visité, ce qui produit des actions dépendant dutype de l'élément de formulaire :

Si c'est un élément field, ou record, qui est visité, alors l'algorithme FIA sélectionneet met en file d'attente toutes les invites, selon le compteur d'invites de l'élément etles conditions des invites. Ensuite, il active et écoute la ou les grammaires de niveauchamp et les éventuelles grammaires de niveau supérieur, et attend que l'élément seremplisse ou qu'un événement soit généré.

Si c'est un élément transfer qui est visité, alors les invites sont mises en filed'attente, selon le compteur d'invites de l'élément et les conditions des invites. Lesgrammaires des éléments sont activées. La file d'attente est exécutée avant que letransfert n'ait lieu.

Si c'est un élément subdialog, ou object, qui est visité, alors les invites sont mises enfile d'attente, selon le compteur d'invites de l'élément et les conditions des invites. Lesgrammaires ne sont pas activées. Au contraire, le comportement de collecte desentrées est défini par le contexte exécutant du sous-dialogue ou de l'objet. La filed'attente n'est pas lue tant que le sous-dialogue ou l'objet n'ont pas été exécutés, maiselle devrait plutôt l'être au cours de la collecte d'entrées suivante.

Si c'est un élément initial qui est visité, alors l'algorithme FIA sélectionne et met enfile d'attente les invites, selon le compteur d'invites de l'élément initial et lesconditions des invites. Il écoute ensuite la ou les grammaires de niveau formulaire etles éventuelles grammaires actives de niveau supérieur. Il attend enfin lareconnaissance par une grammaire ou un événement.

Un élément block sera visité en fixant la valeur de sa variable d'élement de formulaireà "true" puis en évaluant son contenu et enfin en ignorant la phase de traitement.Aucune entrée n'est collectée et l'itération suivante de la boucle principale del'algorithme FIA est engagée.

2.1.6.2.3 La phase de traitement

Le but de la phase de traitement consiste à traiter l'entrée ou l'événement collectés aucours des phases précédentes, comme suit :

Si un événement s'est produit (tels qu'une non-entrée ou un raccrochage), alorsl'élément catch applicable est identifié puis exécuté. La sélection de l'élémentcatch applicable commence dans la portée de l'élément de forme courant puis sepoursuit vers l'extérieur dans les portées des dialogues englobants. Cela peutentraîner l'interruption de l'algorithme FIA (par exemple, s'il effectue unetransition vers un dialogue ou un document différents ou s'il exécute un élémentexit) ou son basculement dans l'itération suivante de la boucle principale (par

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

41 of 212 27/07/2012 22:31

Page 42: vxml

exemple, lorsque le gestionnaire d'événement help implicite est exécuté).Si une entrée est filtrée par une grammaire définie par un élément link, alors latransition vers le lien est exécutée ou son événement est suscité. Si l'élémentlink suscite un événement, celui-ci est traité dans le contexte de l'élément deformulaire courant (par exemple, initial, field, transfer, et ainsi de suite).Si une entrée est filtrée par une grammaire dans un formulaire autre que celuicourant, alors l'algorithme FIA se termine, l'autre formulaire est initialisé etl'interprétation de ce formulaire commence avec cette entrée dans sa phase detraitement.

Si une entrée est filtrée par une grammaire dans ce formulaire, alors :

Le résultat sémantique issu de la grammaire est relié à une ou plusieurs variablesd'élément de formulaire, comme décrit dans le chapitre 3.1.6.Les actions filled déclenchées par ces assignations sont identifiées, commedécrit dans le chapitre 2.4.Chaque action filled identifiée est exécutée dans l'ordre du document. Si deséléments submit, disconnect, exit, return, goto ou throw sont rencontrés,alors les éléments filled restants ne sont pas exécutés et l'algorithme FIA soitse termine, soit poursuit dans l'itération suivante de la boucle principale. Unélément reprompt ne termine pas l'algorithme FIA (le nom suggère en effet uneaction), mais place plutôt un drapeau qui affecte le traitement des invites dansl'itération suivante de l'algorithme FIA. Si un événement est sucité dans la portéed'un élément filled, alors la sélection du gestionnaire d'événement commencedans la portée de l'élément filled en question, ce qui pourrait être celle d'unélément de formulaire ou du formulaire lui-même, puis se poursuit vers l'extérieurdans les portées des dialogues englobants.

Après achèvement de la phase de traitement, l'interprétation se poursuit en revenantà la phase de sélection.

On trouvera un algorithme d'interprétation des formulaires plus détaillé dansl'annexe C.

2.2 Les menus

Un menu est un raccourci syntaxique commode pour un formulaire ; il contient un seulchamp anonyme qui invite l'utilisateur à faire un choix et il effectue une transition versdivers points en fonction de ce choix. Tout comme un formulaire régulier, sagrammaire peut avoir une portée fixée de façon à être active lorsque l'utilisateurexécute un autre dialogue. Le menu suivant offre trois choix à l'utilisateur :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><menu> <prompt> Bienvenue à la maison. Dis ton choix parmi : <enumerate/> </prompt> <choice next="http://www.sports.example.com/vxml/debut.vxml">

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

42 of 212 27/07/2012 22:31

Page 43: vxml

Sports </choice> <choice next="http://www.meteo.example.com/intro.vxml"> Météo </choice> <choice next="http://www.astronomie.example.com/voice/astrojournal.vxml"> Le journal d'astrophysique de l'astronome </choice> <noinput>Veux-tu dire ton choix parmi <enumerate/></noinput></menu></vxml>

Ce dialogue pourrait se dérouler comme suit :

O : Bienvenue à la maison. Dis ton choix parmi : sports, météo, le journald'astrophysique de l'astronome.

H : Astrologie.

O : Je n'ai pas compris ce que tu as dit (un message implicite propre à laplateforme).

O : Bienvenue à la maison. Dis ton choix parmi : sports, météo, le journald'astrophysique de l'astronome.

H : sports.

O : (poursuit vers http://www.sports.example.com/vxml/debut.vxml)

2.2.1 L'élément menu

Cet élément identifie le menu et détermine la portée de ses grammaires. Les attributsde l'élément menu sont :

Tableau 7 : Les attributs de l'élément menu

idL'identificateur du menu. Il permet aux éléments goto etsubmit de cibler le menu.

scope

La portée des grammaires du menu. Si sa valeur est "dialog"(la valeur implicite), alors les grammaires du menu ne sontactives que lorsque l'utilisateur entre dans le menu. Si savaleur est "document", alors les grammaires sont actives pourla totalité du document (ou si le menu se trouve dans ledocument racine d'application, pour n'importe queldocument chargé faisant partie de l'application).

dtmf

Lorsque sa valeur est fixée à "true", les neuf premiers choix,qui n'auraient pas défini explicitement une valeur pourl'attribut dtmf, recevront les valeurs implicites "1", "2", etc.Les choix restants, qui n'auraient pas défini explicitementune valeur pour l'attribut dtmf, ne recevront pas de valeursDTMF (et, par conséquent, ne pourront pas faire l'objetd'une correspondance via une saisie DTMF). Si des choixdéfinissent des séquences DTMF propres qui sont autrechose que des tonalités "*", "#" ou "0", alors une erreur

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

43 of 212 27/07/2012 22:31

Page 44: vxml

error.badfetch sera suscitée. La valeur implicite del'attribut est "false".

accept

Lorsque sa valeur est fixée à "exact" (la valeur implicite),alors le texte des éléments choice composant le menudéfinit la phrase exacte à reconnaître. Pour une valeur de"approximate", le texte des éléments choice définit unephrase de reconnaissance approximative (comme décritdans le chapitre 2.2.5). Chaque élément choice peutsurcharger ce réglage.

2.2.2 L'élément choice

L'élément choice a plusieurs usages :

Il peut définir une grammaire vocale au moyen d'un élément grammar ou bien lagénérer automatiquement selon le processus décrit dans le chapitre 2.2.5.

Il peut définir une grammaire DTMF, comme expliqué dans le chapitre 2.2.3.

Son contenu peut servir à former la chaîne de l'invite de l'élément enumerate,comme décrit dans le chapitre 2.2.4.

Il définit l'événement qu'il faut susciter ou bien l'adresse URI où aller lorsque lechoix est sélectionné.

Les attributs de l'élément choice sont :

Tableau 8 : Les attributs de l'élément choice

dtmf

La séquence DTMF pour ce choix. Elle équivaut à unegrammaire DTMF simple et les propriétés DTMF (voirle chapitre 6.3.3) s'appliquent à la reconnaissance dela séquence. Contrairement aux grammaires DTMF,les blancs sont optionnels : « dtmf="123#" » équivautà « dtmf="1 2 3 #" ».

accept

Surcharge le réglage de l'attribut accept de l'élémentmenu pour ce choix particulier. Lorsque sa valeur est"accept" (la valeur implicite), le texte de l'élémentchoice définit la phrase exacte à reconnaître. Pour lavaleur "approximate", le texte de l'élément choicedéfinit une phrase de reconnaissance approximative(comme décrit dans le chapitre 2.2.5).

next L'adress URI du dialogue ou du document à suivre.

exprDéfinit une expression à évaluer comme une adresseURI vers laquelle effectuer une transition au lieu dedéfinir un attribut next.

eventDéfinit un événement à susciter au lieu de définir unattribut next.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

44 of 212 27/07/2012 22:31

Page 45: vxml

eventexprUne expression ECMAScript correspondant au nom del'événement à susciter.

message

La chaîne du message fournissant une explicationsupplémentaire concernant l'événement qui estsuscité. Le message est disponible comme valeurd'une variable dans la portée de l'élément catchconcerné, voir le chapitre 5.2.2.

messageexprUne expression ECMAScript correspondant à la chaînedu message.

fetchaudioVoir le chapitre 6.1. La valeur implicite est celle de lapropriété fetchaudio.

fetchhintVoir le chapitre 6.1. La valeur implicite est celle de lapropriété documentfetchhint.

fetchtimeoutVoir le chapitre 6.1. La valeur implicite est celle de lapropriété fetchtimeout.

maxageVoir le chapitre 6.1. La valeur implicite est celle de lapropriété documentmaxage.

maxstaleVoir le chapitre 6.1. La valeur implicite est celle de lapropriété documentmaxstale.

On doit définir exactement un seul d'entre les attributs next, expr, event ou eventexpr,sinon un événement error.badfetch est suscité. On peut indiquer exactement unseul d'entre les attributs message ou messageexpr, sinon un événement error.badfetchest suscité.

Si un élément grammar est défini dans un élément choice, alors la grammaire externesera utilisée au lieu d'une grammaire générée automatiquement. Cela permet audéveloppeur de contrôler précisément la grammaire associée à l'élément choice, parexemple :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><menu> <choice next="http://www.sports.example.com/vxml/debut.vxml"> <grammar src="sports.grxml" type="application/srgs+xml"/> Sports </choice> <choice next="http://www.meteo.example.com/intro.vxml"> <grammar src="meteo.grxml" type="application/srgs+xml"/> Météo </choice> <choice next="http://www.astronomie.example.com/voice/astrojournal.vxml"> <grammar src="astrojournal.grxml" type="application/srgs+xml"/> Le journal d'astrophysique de l'astronome </choice></menu>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

45 of 212 27/07/2012 22:31

Page 46: vxml

</vxml>

2.2.3 Les tonalités DTMF dans les menus

Les menus peuvent dépendre seulement de la voix, seulement des tonalités DTMF oubien d'une combinaison des deux en plaçant un élément property dans l'élémentmenu. Voici un menu uniquement DTMF, chacun des choix recevant une séquenceDTMF explicite par le biais d'un attribut dtmf :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><menu> <property name="mode_entree" value="dtmf"/> <prompt> Pour les sports : tapez 1, pour la météo : tapez 2, pour le journal d'astrophysique de l'astronome : tapez 3. </prompt> <choice dtmf="1" next="http://www.sports.example.com/vxml/debut.vxml"/> <choice dtmf="2" next="http://www.meteo.example.com/intro.vxml"/> <choice dtmf="3" next="http://www.astronomie.example.com/astrojournal.vxml"/></menu></vxml>

On peut, autrement, fixer la valeur de l'attribut dtmf de l'élément menu à "true" afind'assigner des chiffres DTMF séquentiels à chacun des neuf premiers choix, pourautant que ceux-ci n'aient pas défini leur propre séquence DTMF : le premier choixayant une valeur DTMF "1", et ainsi de suite :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><menu dtmf="true"> <property name="mode_entree" value="dtmf"/> <prompt> Pour les sports : tapez 1, pour la météo : tapez 2, pour le journal d'astrophysique de l'astronome : tapez 3. </prompt> <choice next="http://www.sports.example.com/vxml/debut.vxml"/> <choice next="http://www.meteo.example.com/intro.vxml"/> <choice dtmf="0" next="#operateur"/> <choice next="http://www.astronomie.example.com/voice/astrojournal.vxml"/></menu></vxml>

2.2.4 L'élément enumerate

L'élément enumerate est une description, générée automatiquement, des choixdisponibles pour l'utilisateur. Il définit un modèle lequel s'applique à chacun des choixdans l'ordre où ceux-ci apparaissent dans le menu. En l'absence d'un contenu, c'est unmodèle implicite listant tous les choix et déterminé par le contexte d'interprétation qui

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

46 of 212 27/07/2012 22:31

Page 47: vxml

est utilisé. En présence d'un contenu, c'est alors le contenu qui définit le modèle. Cettedéfinition peut faire appel à deux variables spéciales : _prompt qui représente l'invitedu choix et _dtmf qui correspond à une représentation normalisée (c'est-à-dire, un seulblanc entre les atomes DTMF) de la séquence DTMF assignée au choix (remarquez que,si aucune séquence DTMF n'est assignée à l'élément choice ou si une grammaire estdéfinie dans l'élément choice, alors la variable _dtmf reçoit la valeur ECMAScript"undefined"). Par exemple, récrivons le menu ainsi :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><menu dtmf="true"> <prompt> Bienvenue à la maison. <enumerate> Pour <value expr="_prompt"/>, tape <value expr="_dtmf"/>. </enumerate> </prompt> <choice next="http://www.sports.example.com/vxml/debut.vxml"> les sports </choice> <choice next="http://www.meteo.example.com/intro.vxml"> la météo </choice> <choice next="http://www.astronomie.example.com/voice/astrojournal.vxml"> le journal d'astrophysique de l'astronome </choice></menu></vxml>

L'invite du menu serait alors :

O : Bienvenue à la maison. Pour les sports, tape 1. Pour la météo, tape 2.Pour le journal d'astrophysique de l'astronome, tape 3.

L'élément enumerate peut servir dans les invites et dans les éléments catch associésaux éléments menu et field contenant des éléments option, comme expliqué dans lechapitre 2.3.1.3. Un événement error.semantic est suscité si l'élément enumerateest utilisé ailleurs (par exemple, un élément enumerate dans un autre élémentenumerate).

2.2.5 La génération des grammaires

Toute phrase de choix définit un ensemble de mots et de phrases à écouter. Unephrase de choix se construit à partir des données de type « PCDATA » des élémentscontenus directement ou indirectement dans un élément choice d'un élément menu oubien dans un élément option d'un élément field.

Si la valeur de l'attribut accept est "exact", alors l'utilisateur doit dire les mots de laphrase entière dans le même ordre que celui où ils apparaissent dans la phrase dechoix.

Si la valeur de l'attribut accept est "approximate", alors le choix est susceptible d'êtreretenu quand l'utilisateur prononce une sous-phrase de l'expression. Par exemple, en

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

47 of 212 27/07/2012 22:31

Page 48: vxml

réponse à l'invite « Le journal d'astrophysique de l'astronome », l'utilisateur pourraitdire « astronome », « astrophysique », « le journal de l'astronome », « le journald'astrophysique », et ainsi de suite. La grammaire correspondante peut dépendre de lalangue et de la plateforme employées.

Comme exemple d'utilisation des valeurs "exact" ou "approximate" dans différentschoix :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><menu accept="approximate"> <choice next="http://www.astronomie.example.com/voice/astrojournal.vxml"> Le journal d'astrophysique de l'astronome </choice> <choice accept="exact" next="http://www.physiquehebdo.example.com/voice/example.vxml"> L'hebdo de la physique </choice> <choice accept="exact" next="http://www.gazette-des-particules.example.com/voice/example.vxml"> La gazette des particules </choice> <choice next="http://www.astrojour.example.com/voice/example.vxml"> Astronomie du jour </choice></menu></vxml>

Puisque le premier élément choice définit une valeur "approximate", l'utilisateur peutdire une sous-phrase pour le choisir ; par exemple, dire « astronome » ou « journald'astrophysique ». Par contre, les deuxième et troisième éléments définissant unevaleur "exact", seule une phrase complète sera avérée : « L'hebdo de la physique » et« La gazette des particules ».

2.2.6 Le modèle d'interprétation

Un menu se comporte comme un formulaire ayant un seul champ qui endosse tous lesrôles. Les invites du menu deviennent des invites du champ. Les gestionnairesd'événement du menu deviennent des gestionnaires d'événement du champ. Lesgrammaires du menu deviennent des grammaires du formulaire. Comme pour lesformulaires, les correspondances de grammaire dans les menus mettront à jour letableau application.lastresult$. Ces variables sont décrites dans le chapitre 5.1.5.Les grammaires générées doivent toujours produire des résultats simples dont lesvaleurs d'interprétation et de prononciation sont identiques.

Au lancement du menu, les grammaires du menu sont construites et activées puisl'invite est jouée. Lorsque l'entrée d'utilisateur correspond à un choix, le contrôle sedéplace vers une transition conformément à la valeur de l'attribut next, expr, event oueventexpr de l'élément choice, seul l'un d'entre eux pouvant être défini. Si on définit unattribut event sans que son gestionnaire d'événement n'incite l'interpréteur à quitter ouà déplacer le contrôle, alors l'algorithme FIA effacera la variable d'élément deformulaire du champ anonyme du menu, entraînant une nouvelle exécution du menu.

2.3 Les éléments de formulaire

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

48 of 212 27/07/2012 22:31

Page 49: vxml

Un élément de formulaire est un sous-élément de l'élément form pouvant faire l'objetd'une visite au cours de l'interprétaton du formulaire. Ce sont les éléments field,block, initial, subdialog, object, record et transfer.

Tous les éléments de formulaire ont les caractéristiques suivantes :

Ils ont une variable de résultat, définie par l'attribut name. Cette variable peutrecevoir une valeur initiale par le biais d'un attribut expr.

Ils ont une condition de veille définie par l'attribut cond. Un élément de formulairesera visité s'il n'est pas rempli et que son attribut cond n'est pas défini ou quel'évaluation de sa valeur, après conversion en un booléen, donne "true".

Les éléments de formulaire se rangent en éléments d'entrée, lesquels définissent lesvariables d'élément d'entrée du formulaire, et en éléments de commande, lesquelsfacilitent la collecte des éléments d'entrée du formulaire. Les éléments d'entrée(field, subdialog, object, record et transfer) sont généralement susceptibles decontenir les éléments suivants :

Des éléments filled qui comprennent certaines actions à exécuter après que lavariable d'élément d'entrée résultante a été remplie.

Des éléments property afin de définir les propriétés en vigueur pour cet élémentd'entrée (l'élément de formulaire initial peut également contenir cet élément).

Des éléments prompt afin de définir les invites à jouer lorsque ce élément estvisité.

Des éléments grammar afin de définir les entrées vocales et textuelles permisespour cet élément de formulaire (les éléments subdialog et object ne peuventpas contenir cet élément).

Des éléments et des abréviations de l'élément catch qui sont en vigueur pour cetélément d'entrée (l'élément de formulaire initial peut également contenir cetélément).

À chaque élément d'entrée est associé un ensemble de variables fictives. Les variablesfictives servent à renvoyer des résultats provenant de l'exécution d'un élémentd'entrée, outre la valeur stockée par l'attribut name. Par exemple, il peut se révéler utilede connaître le niveau de fiabilité obtenu en résultat de la reconnaissance d'unegrammaire dans un élément field. L'appel d'une variable fictive prend la forme« nom$.varfictive », où « nom » représente la valeur de l'attribut name de l'élément deformulaire et « varfictive » le nom d'une variable fictive particulière. Les variablesfictives sont inscriptibles et elles peuvent être modifiées par l'application. Par exemple,l'élément field renvoie une variable fictive confidence qui donne un indice defiabilité. L'exemple ci-dessous illustre comment utiliser cette variable fictive.

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="obtenir_pays"><field name="pays">

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

49 of 212 27/07/2012 22:31

Page 50: vxml

<prompt> Veuillez dire le nom d'un pays. </prompt> <grammar src="http://mesgrammaires.example.com/payss.gram" type="application/srgs"/> <filled> <if cond="pays$.confidence &lt; 0.4"> <throw event="nomatch"/> </if> </filled></field></form></vxml>

Dans l'exemple, la fiabilité du résultat fait l'objet d'un examen : le résultat est rejeté sil'indice de fiabilité est trop faible.

2.3.1 L'élément field

Un champ définit un élément d'entrée qu'il faut recueillir de l'utilisateur. Les attributsde l'élément field sont :

Tableau 9 : Les attributs de l'élément field

name

La variable d'élément de formulaire dans la portée dudialogue qui contiendra le résultat. Le nom doit être uniqueparmi les éléments de formulaire dans le formulaire. S'il n'estpas unique, alors un événement error.badfetch est suscitéquand le document est appelé. Le nom doit respecter lesconventions de nommage des variables décrites dans lechapitre 5.1.

expr

La valeur initiale de la variable d'élément de formulaire ; lavaleur implicite est la valeur ECMAScript "undefined". Si oninitialise la variable, alors l'élément de formulaire ne sera pasvisitée, à moins de l'effacer.

cond

Une expression dont l'évaluation de sa valeur, aprèsconversion en un booléen, doit donner "true" pour quel'élément de formulaire soit visité. L'élément de formulairepourra également être visité si l'attribut n'est pas défini.

type

Le type du champ, à savoir le nom d'un type de grammaireintégré (voir l'annexe P). La prise en charge des types degrammaire intégrés par la plateforme est optionnelle. Si laplateforme ne prend pas en charge le type intégré indiqué,alors un événement error.unsupported.builtin estsuscité.

slot

Le nom de la facette de grammaire utilisée pour peupler lavariable (si elle est absente, alors sa valeur implicite est lenom de la variable). Cet attribut trouve une utilité dans lecas où le format de grammaire employé possède unmécanisme permettant de renvoyer des ensembles decouples facette/valeur et que les noms des facettes diffèrentde ceux des variables des éléments de formulaire.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

50 of 212 27/07/2012 22:31

Page 51: vxml

modal

Si sa valeur est "false" (la valeur implicite), alors toutes lesgrammaires sont actives pendant la collecte des données dece champ. Pour la valeur "true", alors seules les grammairesdu champ sont actives : toutes les autres sonttemporairement désactivées.

On donne les variables fictives d'un élément field nommé « nom » dans letableau 10. Les valeurs des variables fictives utterance, inputmode etinterpretation doivent être les mêmes que celles dans le tableauapplication.lastresult$ (voir le chapitre 5.1.5).

Tableau 10 : Les variables fictives de l'élément field

nom$.utterance

La chaîne brute des mots reconnus.L'atomisation et l'orthographe exactes sontpropres à la plateforme (par exemple,« cinq cent trente » ou « 5 cent 30 » oumême « 530 »). Dans le cas d'unegrammaire DTMF, cette variable contiendrala chaîne de chiffres filtrée.

nom$.inputmodeLe mode dans lequel l'entrée d'utilisateur aété fournie : "dtmf" ou "voice".

nom$.interpretationUne variable ECMAScript contenantl'interprétation, comme décrit dans lechapitre 3.1.5.

nom$.confidence

Le niveau de fiabilité du champ « nom »,défini dans l'intervalle « 0.0-1.0 ». Unevaleur de "0.0" indique une fiabilitéminimale ; inversement, une valeur de"1.1" indique une fiabilité maximale.

Une plateforme peut se servir de la fiabilitéde l'énoncé (la valeur de la variableapplication.lastresult$.confidence)comme valeur pour nom$.confidence.Cette distinction entre niveau de fiabilitédu champ et niveau de fiabilité de l'énoncéest propre à la plateforme.

L'interprétation plus spécifique d'unevaleur de fiabilité dépend de la plateformepuisque le calcul de celle-ci différeraprobablement d'une plateforme à l'autre.

2.3.1.1. Les champs utilisant des grammaires explicites

On peut définir les grammaires explicitement via une adresse URI absolue ou bienrelative :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

51 of 212 27/07/2012 22:31

Page 52: vxml

<field name="parfum"> <prompt>Quelle est votre glace favorite ?</prompt> <grammar src="../grammaires/glace.grxml" type="application/srgs+xml"/></field>

On peut définir les grammaires directement, par exemple, avec un grammaire ABNF duW3C :

<field name="parfum"> <prompt>Quel est votre parfum favori?</prompt> <help>Dites l'un entre vanille, chocolat ou fraise.</help> <grammar mode="voice" type="application/srgs"> #ABNF 1.0; $options = vanille | chocolat | fraise </grammar></field>

Si on définit à la fois l'attribut src d'un élément grammar et une grammaire directe,alors un événement error.badfetch est suscité.

2.3.1.2. Les grammaires explicites et les ressources intégrées propres à uneplateforme

La prise en compte par une plateforme de ressources intégrées telles que lesgrammaires vocales, les grammaires DTMF et les fichiers sons est optionnelle. Cesressources sont accessibles au moyen d'adresses URI propres à la plateforme, tel que,par exemple, « http://localhost:5000/grammar/boolean », ou bien de systèmes propresà la plateforme tel que le système couramment employé « builtin » comme dans« builtin:grammar/boolean ».

Si une plateforme permet l'accès à des ressources intégrées, alors elle devraitégalement permettre l'accès aux grammaires intégrées fondamentales (voirl'annexe P) ; par exemple :

<grammar src="builtin:grammar/boolean"/><grammar src="builtin:dtmf/boolean"/>

Le premier élément grammar appelle la grammaire vocale intégrée de type boolean et lesecond la grammaire DTMF intégrée de type boolean.

Par définition, la déclaration :

<field type="type-intégré"> <prompt>Invite pour une grammaire intégrée</prompt></field>

Celle-ci est équivalente à la déclaration suivante des grammaires intégrées propres àune plateforme :

<field> <grammar src="builtin:grammar/type-intégré"/>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

52 of 212 27/07/2012 22:31

Page 53: vxml

<grammar src="builtin:dtmf/type-intégré"/> <prompt>Invite pour une grammaire intégrée</prompt></field>

Où la valeur type-intégré représente l'un des types intégrés fondamentaux de champ(c'est-à-dire, boolean, date, etc.).

En outre, on peut utiliser les systèmes d'adresse URI intégrés propres à une plateformepour accéder aux grammaires reconnues par des contextes d'interprétationparticuliers. On recommande pour les noms des grammaires intégrées propres à uneplateforme qu'ils commencent par la chaîne « x- » ; cet espace de nommage ne serapas utilisé dans les versions futures de la norme.

Exemples de grammaires intégrées propres à une plateforme :

<grammar src="builtin:grammar/x-type-intégré"/><grammar src="builtin:dtmf/x-type-intégré"/>

2.3.1.3. Les champs avec des listes d'options

Lorsque l'on a simplement besoin d'un ensemble d'alternatives pour définir les valeursd'entrée légales d'un champ, il peut se révéler plus commode d'utiliser une listed'options qu'une grammaire. On représente une liste d'options par un ensembled'éléments option compris dans un élément field. Chaque élément option contientdes données de type « PCDATA », lesquelles servent à générer une grammaire vocale.Cette méthode de génération de grammaire suit celle décrite pour l'élément choicedans le chapitre 2.2.5. On peut se servir d'attributs afin de définir une séquence DTMFpour chaque option et afin de contrôler la valeur assignée à la variable d'élément deformulaire du champ. Lors du choix d'une option, l'attribut value détermine la valeurinterpretation pour la variable fictive du champ et pour la variable du tableauapplication.lastresult$.

Le champ suivant propose trois possibilités à l'utilisateur et assigne la valeur del'attribut value de l'option sélectionnée à la variable « plat_principal » :

<field name="plat_principal"> <prompt> Veuillez sélectionner une entrée. Aujourd'hui, nous vous proposons <enumerate/> </prompt>

<option dtmf="1" value="poisson"> de l'espadon </option> <option dtmf="2" value="viande"> du rôti de bœuf </option> <option dtmf="3" value="volaille"> des cuisses de poulet </option>

<filled> <submit next="/cgi-bin/platprincipal.cgi" method="post" namelist="plat_principal"/> </filled></field>

Cela pourrait donner la conversation suivante :

O : Veuillez sélectionner une entrée. Aujourd'hui nous vous proposons del'espadon ; du rôti de bœuf ; des cuisses de poulet.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

53 of 212 27/07/2012 22:31

Page 54: vxml

H : cuisses de poulet

O : (assigne la valeur « volaille » à la variable « plat_principal » puis soumetla requête « plat_principal=volaille » au script « platprincipal.cgi »)

L'exemple suivant montre un usage correct et un usage erronné de l'élémentenumerate dans un élément catch d'un formulaire dont plusieurs champs contiennentdes éléments option :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form> <block> Nous avons besoin de quelques précisions pour prendre votre commande. </block> <field name="couleur"> <prompt>Quelle couleur ?</prompt> <option>rouge</option> <option>bleu</option> <option>vert</option> </field> <field name="taille"> <prompt>Quelle taille ?</prompt> <option>petit</option> <option>moyen</option> <option>grand</option> </field> <field name="quantite"> <grammar type="application/srgs+xml" src="/grammars/number.grxml"/> <prompt>Combien ?</prompt> </field> <block> Merci. Votre commande suit son cours. <submit next="details.cgi" namelist="couleur taille quantite"/> </block> <catch event="help nomatch"> Voici les options possibles : <enumerate/>. </catch></form></vxml>

Le déroulement du dialogue pourrait être celui-ci :

O : Nous avons besoin de quelques précisions pour prendre votre commande. Quellecouleur ?

H : aide (lance l'événement help capturé par l'élément catch de niveau formulaire).

O : Voici les options possibles : rouge, bleu, vert.

H : rouge.

O : Quelle taille ?

H : 7 (lance l'événement nomatch capturé par l'élément catch de niveau formulaire).

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

54 of 212 27/07/2012 22:31

Page 55: vxml

O : Voici les options possibles : petit, moyen, grand.

H : petit.

Dans la succession d'étapes précédente, l'élément enumerate dans l'élément catch deniveau formulaire avait quelque chose à énumérer : les éléments option dans leschamps « couleur » et « taille ». Au contraire, l'élément field suivant est différent :

O : Combien ?

H : beaucoup (lance un événement nomatch capturé par l'élément catch de niveauformulaire).

L'utilisation de l'élément enumerate par l'élément catch de niveau formulaire entraînele déclenchement d'un événement error.semantic parce que le champ « quantite »ne contient aucun élément option susceptible d'énumération.

Une solution serait de rajouter un élément catch de niveau champ au champ« quantite » :

<catch event="help nomatch"> Veuillez indiquer le nombre d'articles à commander.</catch>

L'événement nomatch serait alors capturé localement, aboutissant probablement à lafin d'échange suivante :

O : Veuillez indiquer le nombre d'articles à commander.

H : 50

O : Merci. Votre commande suit son cours.

L'élément enumerate est également abordé dans le chapitre 2.2.4.

Les attributs de l'élément option sont :

Tableau 11 : Les attributs de l'élément option

dtmf

Une séquence DTMF optionnelle pour cette option. Elleéquivaut à une grammaire DTMF simple et les propriétésDTMF (voir le chapitre 6.3.3) s'appliquent lors de lareconnaissance de la séquence. À la différence desgrammaires DTMF, les blancs sont optionnels :dtmf="123#" est équivalent à dtmf="1 2 3 #". Si l'attributn'est pas défini, aucune séquence DTMF ne sera associée àcette option et elle ne peut donc pas être filtrée au moyend'une grammaire DTMF.

accept

Lorsque sa valeur est fixée à "exact" (la valeur implicite),alors le texte de l'élément option définit la phrase exacte àreconnaître. Pour la valeur "approximate", le texte de l'optiondéfinit une phrase de reconnaissance approximative(comme décrit dans le chapitre 2.2.5).

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

55 of 212 27/07/2012 22:31

Page 56: vxml

value

La chaîne à assigner à la variable d'élément de formulairedu champ lorsque l'utilisateur sélectionne cette option, quecette sélection se fasse par la voix ou bien par le biais detonalités DTMF. L'assignation implicite est le contenu detype « CDATA » de l'élément option, les blancs de tête etde queue étant supprimés. En l'absence d'un contenu, alorsc'est la séquence DTMF qui sera utilisée à la place. Si on nedéfinit ni contenu de type « CDATA » ni séquence DTMF,alors la valeur implicite de l'assignation est "undefined" et lavariable d'élément de formulaire du champ n'est pasremplie.

L'utilisation d'éléments option n'empêche pas celle d'éléments grammar. Le résultatcorrespondrait à l'une ou l'autre « grammaire » et non à la présence de deux élémentsgrammar dans le même élément field représentant une disjonction de choix.

2.3.2 L'élément block

C'est un élément de formulaire avec un contenu exécutable lequel est exécuté si lavaleur de la variable d'élément de formulaire de l'élément block est "undefined" et si lavaleur de son attribut cond, le cas échéant, est évaluée à "true".

<block> Bienvenue chez « Les sept nains », votre magasin de décorations pour le jardin.</block>

La valeur de la variable d'élément de formulaire est fixée automatiquement à "true"juste avant que le bloc ne soit visité. C'est pourquoi, les blocs ne sont en généralexécutés qu'une seule fois par invocation du formulaire.

Parfois, on peut avoir besoin d'un contrôle accru des blocs. Pour ce faire, on peutnommer la variable d'élément de formulaire et en fixer ou effacer la valeur afin decontrôler l'exécution de l'élément block. Cette variable se déclare dans la portée dudialogue du formulaire.

Les attributs de l'élément block comprennent :

Tableau 12 : Les attributs de l'élément block

nameLe nom de la variable d'élément de formulaire servant ausuivi de l'éligibilité pour exécution du bloc ; la valeur impliciteest une variable interne inaccessible.

expr

La valeur initiale de la variable de l'élément de formulaire ; lavaleur implicite est la valeur ECMAScript "undefined". Si elleest initialisée, alors l'élément de formulaire ne sera pas visité,à moins d'effacer la variable d'élément de formulaire.

condUne expression dont l'évaluation, après conversion en unevaleur booléenne, doit valoir "true" pour que l'élément deformulaire soit visité.

2.3.3. L'élément initial

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

56 of 212 27/07/2012 22:31

Page 57: vxml

Dans un formulaire à initiative mixte typique, un élément initial est visité lorsquel'utilisateur fait l'objet d'une invite initiale pour des renseignements concernantl'ensemble du formulaire et que l'utilisateur ne se trouve pas encore dans le modedirigé selon lequel chaque champ est visité individuellement. Comme les élémentsd'entrée, il dispose d'invites, d'éléments catch et de compteurs d'événements. Parcontre, il ne comporte aucune grammaire ni action filled. Par exemple :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="obtenir_villes_depart_et_arrivee"> <grammar src="http://www.directions.example.com/grammars/depuis_vers.grxml" type="application/srgs+xml"/> <block> Bienvenue sur Directions de conduite par téléphone. </block> <initial name="sauter_init"> <prompt> D'où partez vous et où voulez-vous aller? </prompt> <nomatch count="1"> Veuillez dire, par exemple, « de Bruxelles, en Belgique, à Lausanne, en Suisse </nomatch> <nomatch count="2"> Désolé mais je ne comprends toujours pas. Je vous demanderai de fournir les renseignements un par un. <assign name="sauter_init" expr="true"/> <reprompt/> </nomatch> </initial> <field name="ville_depart"> <grammar src="http://www.directions.example.com/grammaires/ville.grxml" type="application/srgs+xml"/> <prompt>De quelle ville partez-vous ?</prompt> </field> <field name="ville_arrivee"> <grammar src="http://www.directions.example.com/grammaires/ville.grxml" type="application/srgs+xml"/> <prompt>Quelle est la ville d'arrivée ?</prompt> </field></form></vxml>

Si un événement se produit pendant la visite d'un élément initial, alors un de sesgestionnaires d'événement s'exécute. Comme pour les autres éléments de formulaire,l'élément initial reste éligible pour une visite tant que la valeur de sa variabled'élément de formulaire est "undefined" et que son attribut cond vaut "true". Si une ouplusieurs des variables d'élément de formulaire sont fixées par une entrée d'utilisateur,alors toutes les valeurs des variables d'élément de formulaire de l'élément initialsont fixées à "true", avant l'exécution d'une quelconque action filled.

On peut manipuler explicitement la variable d'élément de formulaire d'un élémentinitial afin d'inactiver ou de rétablir son éligibilité vis-à-vis de l'algorithme FIA. Parexemple, dans le programme précédent, la valeur de la variable d'élément de

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

57 of 212 27/07/2012 22:31

Page 58: vxml

formulaire de l'élément initial est fixée lors du second événement nomatch. Cela apour effet de détourner l'algorithme FIA de l'élément initial vers l'élément deformulaire suivant, à savoir un élément field qui produit explicitement une invite pourla ville de départ. On pourrait tout aussi bien effacer la valeur de la variable d'élémentde formulaire de l'élément initial, de sorte que celui-ci devienne à nouveausélectionnable par l'algorithme FIA.

On peut définir plusieurs éléments initial dans le même formulaire. Une fois dans leformulaire, seul le premier élément initial, dans l'ordre du document, qui est éligibleen vertu de son attribut cond, sera visité. Une fois la première variable d'élément deformulaire remplie, toutes les variables d'élément de formulaire des éléments initialreçoivent la valeur "true", ceux-ci ne seront dès lors plus visités. L'effacement explicitedes variables des éléments initial permet leur réutilisation et même la sélectiond'un élément initial différent lors des itérations suivantes de l'algorithme FIA.

L'attribut cond peut aussi servir à sélectionner quel élément initial utiliser dans uneitération donnée. Une application pourrait aligner plusieurs éléments initial et lesmarquer avec leur attribut cond en vue d'une utilisation particulière selon lescirconstances, par exemple, l'attribut cond étant utilisé pour tester la nature d'un moded'exploitation, pour utilisateur expérimenté ou bien pour utilisateur novice, et leséléments initial ne servant que dans le mode avancé. En outre, si le premierélément initial dans l'ordre du document définissait une valeur improbable pour sonattribut cond, il ne serait alors jamais exécuté. Si les valeurs des attributs cond de tousles éléments initial empêchaient leur sélection, alors aucun ne serait exécuté.

Les règles de portée des grammaires s'appliquent pour la visite d'un élément initial,comme décrit dans le chapitre 3.1.3.. En particulier, aucune grammaire attachée à unélément field n'est active.

Remarque : L'assignation explicite de valeurs à des variables d'élément d'entréen'affecte pas la valeur de la variable d'élément de formulaire d'un élément initial.

Les attributs de l'élément initial comprennent :

Tableau 13 : Les attributs de l'élément initial

nameLe nom de la variable d'élément de formulaire servant ausuivi de l'éligibilité pour exécution de l'élément initial ; lavaleur implicite est une variable interne inaccessible.

expr

La valeur initiale de la variable de l'élément de formulaire ; lavaleur implicite est la valeur ECMAScript "undefined". Si elleest initialisée, alors l'élément de formulaire ne sera pas visité,à moins d'effacer la variable d'élément de formulaire.

condUne expression dont l'évaluation, après conversion en unevaleur booléenne, doit valoir "true" pour que l'élément deformulaire soit visité.

2.3.4 L'élément subdialog

Les sous-dialogues représentent un mécanisme permettant la réutilisation dedialogues communs et la constitution de librairies d'applications réutilisables.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

58 of 212 27/07/2012 22:31

Page 59: vxml

L'élément subdialog invoque un dialogue « appelé » (c'est le sous-dialogue) identifiépar les attributs src ou srcexpr dans le dialogue « appelant ». Le sous-dialogues'exécute dans un nouveau contexte d'exécution qui comprend toutes les déclarationset informations d'état du sous-dialogue, le document du sous-dialogue et (le caséchéant) la racine de l'application du sous-dialogue, les compteurs étant réinitialisés etles variables initialisées. Le sous-dialogue se poursuit jusqu'à l'exécution d'un élémentreturn ou bien exit, ou jusqu'à ce qu'il ne reste plus aucun élément de formulairesusceptible d'une sélection par l'algorithme FIA (ce qui équivaut à un élément exit).Un élément return entraîne le retour du contrôle et de données au dialogue appelant(voir le (chapitre 5.3.10). Lorsque le sous-dialogue revient, son contexte d'exécutionest détruit et l'exécution reprend alors dans le dialogue appelant, les éventuelséléments filled étant remplis de manière appropriée.

Le contexte du sous-dialogue et celui du dialogue appelant sont indépendants, mêmesi les dialogues se trouvent dans le même document. Les variables dans la chaîne desportées du dialogue appelant ne sont pas partagées avec le sous-dialogue appelé : iln'existe aucun partage des instances de variable entre les contextes d'exécution. Et,même quand le sous-dialogue est défini dans le même document que le dialogueappelant, le contexte d'exécution du sous-dialogue contiendra des instances devariables différentes. Lorsque le sous-dialogue et le dialogue appelant sont dans desdocuments différents tout en partageant le même document racine, leurs valeursd'attribut root sont également des instances différentes. Toutes les liaisons devariables appliquées dans le contexte du sous-dialogue sont perdues au retour dans lecontexte appelant.

Par contre, dans le contexte du sous-dialogue, les règles de portée normales desgrammaires, des événements et des variables s'appliquent. Les grammaires activesd'un sous-dialogue comprennent les grammaires implicites définies par le contexted'interprétation et les grammaires de portée convenable définies dans les élémentslink, menu et form dans le document du sous-dialogue et son document racine. Lagestion des événements et la liaison des variables suit également la hiérarchienormale des portées.

Dans une perspective de programmation, les sous-dialogues se comportentdifféremment des sous-routines dans la mesure où les contextes appelant et appelésont indépendants. Alors qu'une sous-routine peut accéder à des instances devariables appartenant à la routine appelante, un sous-dialogue ne pourra pas accéderà la même instance de variable définie dans le dialogue appelant. De même, lessous-dialogues n'obéissent pas au modèle de percolation des événements trouvé dansdes langages comme Java, pour lequel un événement suscité dans une méthode varemonter automatiquement au contexte appelant s'il n'est pas pris en charge dans lecontexte appelé. Les événements suscités dans un sous-dialogue sont traités par lesgestionnaires d'événement définis dans son contexte ; il ne peuvent être passés aucontexte appelant que par un gestionnaire d'événement local renvoyant explicitementl'événement au contexte appelant (voir le chapitre 5.3.10).

Le sous-dialogue est désigné par l'adresse URI dans l'attribut src ou srcexpr del'élément subdialog (voir le document [RFC2396]). Si cet appel d'adresse URI contientune adresse absolue ou relative, pouvant contenir une chaîne de requête, alors cetteadresse URI est extraite et le sous-dialogue se trouvera dans le document résultant. Sil'élément subdialog comporte un attribut namelist, alors les variables composant savaleur sont ajoutées à la chaîne de requête de l'adresse URI.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

59 of 212 27/07/2012 22:31

Page 60: vxml

Si l'appel d'adresse URI contient seulement un fragment (c'est-à-dire, aucune adresseURI absolue ou relative) et s'il n'y a pas d'attribut namelist, alors aucune recherche n'alieu : le sous-dialogue se trouve dans le document courant.

Le fragment d'un appel d'adresse URI indique, le cas échéant, le sous-dialogue àinvoquer. En l'absence d'un fragment, le sous-dialogue invoqué est le premier dialoguelexical dans le document.

Si l'appel d'adresse URI n'est pas valide (c'est-à-dire quand le dialogue ou le documentn'existent pas), un événement error.badfetch doit être suscité. Remarquez que, ence qui concerne les erreurs qui se produisent pendant une transition de dialogue ou dedocument, la portée dans laquelle les erreurs sont censés être traitées est propre à laplateforme.

Les attributs de l'élément subdialog sont :

Tableau 14 : Les attributs de l'élément subdialog

nameLe résultat renvoyé depuis le sous-dialogue, à savoirun objet ECMAScript dont les propriétés sont cellesdéfinies dans l'attribut namemlist de l'élément return.

expr

La valeur initiale de la variable de l'élément deformulaire ; la valeur implicite est la valeurECMAScript "undefined". Si elle est initialisée, alorsl'élément de formulaire ne sera pas visité, à moinsd'effacer la variable d'élément de formulaire.

condUne expression dont l'évaluation, après conversion enune valeur booléenne, doit valoir "true" pour quel'élément de formulaire soit visité.

namelist

La liste des variables à soumettre. Par défaut, aucunevariable n'est soumise. Si un attribut namelist estdéfini, alors il peut contenir des références devariables individuelles lesquelles sont soumises avecla même orthographe que celle employée dans lavaleur de l'attribut. On peut appeler les variablesVoiceXML et ECMAScript déclarées. Si on appelle unevariable non déclarée dans la liste de noms, alors unévénement error.semantic est suscité (voir lechapitre 5.1.1).

src L'adresse URI du sous-dialogue.

srcexprUne expression ECMAScript produisant l'adresse URIdu sous-dialogue

method Voir le chapitre 5.3.8.

enctype Voir le chapitre 5.3.8.

fetchaudioVoir le chapitre 6.1. La valeur implicite est celle de lapropriété fetchaudio.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

60 of 212 27/07/2012 22:31

Page 61: vxml

fetchtimeoutVoir le chapitre 6.1. La valeur implicite est celle de lapropriété fetchtimeout.

fetchhintVoir le chapitre 6.1. La valeur implicite est celle de lapropriété documentfetchhint

maxageVoir le chapitre 6.1. La valeur implicite est celle de lapropriété documentmaxage.

maxstaleVoir le chapitre 6.1. La valeur implicite est celle de lapropriété documentmaxstale.

On doit définir exactement un seul attribut src ou bien srcexpr, sinon un événementerror.badfetch est suscité.

L'élément subdialog peut contenir les éléments communs à tous les éléments deformulaires et aussi des éléments param. Les éléments param d'un élément subdialogdéfinissent les paramètres à passer au sous-dialogue. Ces paramètres doivent êtredéclarés comme éléments var dans le formulaire exécuté comme sous-dialogue oualors un événement error.semantic sera sucité. Lors de l'initialisation dusous-dialogue, les éléments var sont également initialisés, dans l'ordre du document,à la valeur indiquée par l'élément param dont le nom correspond. Les valeursparamètres sont calculées en évaluant l'attribut expr de l'élément param dans lecontexte de l'élément param. Un attribut expr dans l'élément var sera ignoré dans cecas. Si aucun élément param ne correspond à un élément var, on utilise un attributexpr comme valeur par défaut, ou bien la variable prend la valeur "undefined" sil'attribut expr n'est pas défini, comme pour un élément form régulier.

Dans l'exemple suivant, on se sert de la date de naissance d'une personne pour validerson permis de conduire. L'attribut src de l'élément subdialog se rapporte à unformulaire dans le même document. On utilise l'élément param pour passer la valeurde la date de naissance au sous-dialogue.

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><!-- Un dialogue de formulaire qui appelle un sous-dialogue --><form> <subdialog name="resultat" src="#demander_permis_conduire"> <param name="date_naissance" expr="'2000-02-10'"/> <filled> <submit next="http://monservice.example.com/cgi-bin/traiter"/> </filled> </subdialog></form>

<!-- Un sous-dialogue pour obtenir les permis de conduire --><form id="demander_permis_conduire"> <var name="date_naissance"/> <field name="permis_conduire"> <grammar src="http://grammarlib/grammaire_conduite.grxml" type="application/srgs+xml"/> <prompt> Veuillez indiquer le numéro de votre permis de conduire. </prompt> <filled>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

61 of 212 27/07/2012 22:31

Page 62: vxml

<if cond="permis_conduire_valide(permis_conduire,date_naissance)"> <var name="statut" expr="true"/> <else/> <var name="statut" expr="false"/> </if> <return namelist="permis_conduire statut"/> </filled> </field></form></vxml>

La valeur du permis de conduire est renvoyée au dialogue appelant, accompagnéed'une variable de statut, afin d'indiquer si le permis est valide ou non.

Cet exemple illustre également la commodité avec laquelle on transmet des donnéesau sous-dialogue afin d'y instancier des valeurs sans faire appel à un script côtéserveur. On donne ci-dessous une autre solution avec un script.

Document avec un formulaire appelant un sous-dialogue

<?xml version="1.0" encoding="UTF-8"?><vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form> <field name="date_naissance"> <grammar type="application/srgs+xml" src="/grammars/date.grxml"/> Quelle est votre date de naissance ? </field> <subdialog name="resultat" src="/cgi-bin/getlib#demanderpermisconduire" namelist="date_naissance"> <filled> <submit next="http://monservice.example.com/cgi-bin/traiter"/> </filled> </subdialog> </form></vxml>

Document contenant le sous-dialogue (généré par /cgi-bin/getlib)

<?xml version="1.0" encoding="UTF-8"?><vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form id="demander_permis_conduire"> <var name="date_naissance" expr="'1980-02-10'"/> <!-- Généré par un script côté serveur --> <field name="permis_conduire"> <grammar src="http://grammarlib/grammaire_conduite.grxml" type="application/srgs+xml"/> <prompt> Veuillez indiquer le numéro de votre permis de conduire.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

62 of 212 27/07/2012 22:31

Page 63: vxml

</prompt> <filled> <if cond="permis_conduire_valide(permis_conduire,date_naissance)"> <var name="statut" expr="true"/> <else/> <var name="statut" expr="false"/> </if> <return namelist="permis_conduire statut"/> </filled> </field> </form></vxml>

Dans l'exemple précédent, un script côté serveur était chargé de générer le documentet d'incorporer la valeur de la date de naissance.

On donne ensuite un dernier exemple qui montre la capture des informationsgénérales d'une carte de crédit par un sous-dialogue. On définit tout d'abord lesous-dialogue dans un document séparé car on souhaite le réutiliser dans desapplications différentes. Il renvoie un statut, le numéro de la carte de crédit et sa dated'expiration ; si une donnée est manquante, on renvoie le statut avec la valeur« incomplet ».

<?xml version="1.0" encoding="UTF-8"?><vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <!-- Exemple de sous-dialogue pour collecter les informations d'une carte de crédit. --> <!-- Le fichier se trouve à http://www.uncertaindomaine.example.com/ncc.vxml --> <form id="demander_cartecredit"> <var name="statut" expr="'incomplet'"/>

<field name="numero_carte"> <prompt> Quel est le numéro de votre carte de crédit ? </prompt> <help> J'essaye d'obtenir le numéro de votre carte de crédit. <reprompt/> </help> <nomatch> <return namelist="statut"/> </nomatch> <grammar src="ncc.grxml" type="application/srgs+xml"/> </field>

<field name="date_expiration"> <grammar type="application/srgs+xml" src="/grammars/date.grxml"/> <prompt> Quelle est la date d'expiration de cette carte ? </prompt> <help> J'essaye d'obtenir la date d'expiration associée au numéro de carte de crédit que vous avez fourni. <reprompt/> </help> <nomatch>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

63 of 212 27/07/2012 22:31

Page 64: vxml

<return namelist="statut"/> </nomatch> </field>

<block> <assign name="statut" expr="'resultat'"/> <return namelist="statut numero_carte date_expiration"/> </block> </form></vxml>

Voici maintenant une application qui présente un dialogue appelant. Elle demande lenom d'un logiciel et d'un système d'exploitation au travers d'un dialogue à initiativemixte puis sollicite les informations de la carte de crédit au moyen du sous-dialogueprécédent.

<?xml version="1.0" encoding="UTF-8"?><vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <!-- Exemple de programme principal --> <!-- http://www.uncertaindomaine.example.com/principal.vxml --> <!-- on appelle le sous-dialogue ncc.vxml -->

<!-- on suppose que c'est défini par un dialogue --> <var name="nom_utilisateur"/>

<form id="acheter_logiciel"> <var name="ncc"/> <var name="exp"/> <grammar src="achatlogiciel.grxml" type="application/srgs+xml"/> <initial name="debut"> <prompt> Veuillez indiquer le logiciel que vous souhaitez acheter et le système d'exploitation sur lequel il doit tourner. </prompt> <noinput> <assign name="debut" expr="true"/> </noinput> </initial>

<field name="logiciel"> <prompt> Quel logiciel souhaitez-vous acheter ? </prompt> </field>

<field name="systeme"> <prompt> Sur quel système d'exploitation le logiciel doit-il tourner ? </prompt> </field>

<subdialog name="resultats_cc" src="http://uncertaindomaine.example.com/ncc.vxml"> <filled> <if cond="resultats_cc.statut=='incomplet'"> Dans l'impossibilité d'obtenir les renseignements nécessaires au paiement,

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

64 of 212 27/07/2012 22:31

Page 65: vxml

nous sommes au regret d'annuler cette commande. <exit/> <else/> <assign name="ncc" expr="resultats_cc.numero_carte"/> <assign name="exp" expr="resultats_cc.date_expiration"/> </if> </filled> </subdialog>

<block> Nous allons maintenant traiter votre commande. Veuillez patienter. <submit next="www.uncertaindomaine.example.com/traiter_commande.asp" namelist="nom_utilisateur logiciel systeme ncc exp"/> </block> </form></vxml>

2.3.5. L'élément object

Une plateforme d'implémentation VoiceXML peut offrir, au travers de l'élément object,une fonctionnalité propre utilisable par une application VoiceXML. L'élément objectutilise directement son propre contenu au cours de l'initialisation (par exemple, unsous-élément param) et de l'exécution. Par conséquent, on ne peut pas traiter lecontenu d'un élément object comme un contenu alternatif. Notez que, à l'instar desautres éléments d'entrée, l'élément object peut produire des invites et comporter deséléments catch. Il peut également comprendre des actions filled.

Par exemple, on pourrait accéder à un objet pour la collecte des informations d'unecarte de crédit, propre à une plateforme, de cette façon :

<object name="debit" classid="methode://carte-credit/recueillir_et_debiter" data="http://www.enregistrements.example.com/invites/credit/jesse.jar"> <param name="montant" expr="document.amt"/> <param name="vendeur" expr="code_vendeur"/></object>

Dans cet exemple, l'élément param (voir le chapitre 6.4) sert à passer des paramètresà l'objet quand on l'invoque. Lorsque cet élément object est exécuté, il renvoie unobjet ECMASCript comme valeur de sa variable d'élément de formulaire. L'élémentblock suivant présente les valeurs renvoyées par l'objet de carte de crédit :

<block> <prompt> La carte est de type <value expr="debit.carte"/>. </prompt>

<prompt> Le numéro de la carte est <value expr="debit.num_carte"/>. </prompt>

<prompt> La date d'expiration est <value expr="debit.date_expiration"/>. </prompt>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

65 of 212 27/07/2012 22:31

Page 66: vxml

<prompt> Le code d'approbation est <value expr="debit.code_approbation"/>. </prompt>

<prompt> Le numéro de confirmation est <value expr="debit.num_confirmation"/>. </prompt></block>

Comme autre exemple, supposons qu'un plateforme ait une fonctionnalité selonlaquelle l'utilisateur peut saisir des messages textuels arbitraires au moyen d'unclavier téléphonique.

<?xml version="1.0" encoding="UTF-8"?><vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="recueillir_message_teleavertisseur"> <object name="message" classid="builtin://entree-texte-clavier"> <prompt> Tapez le message sur votre clavier une touche par lettre. Pour une espace, tapez étoile. Pour terminer, tapez dièse. </prompt> </object>

<block> <assign name="document.message_teleavertisseur" expr="message.texte"/> <goto next="#confirmer_message_teleavertisseur"/> </block></form></vxml>

L'utilisateur est d'abord invité à laisser un message puis il le tape. L'élément blockcopie le message dans la variable « document.message_teleavertisseur ».

Les attributs de l'élément object comprennent :

Tableau 15 : Les attributs de l'élément object

nameLorsque l'objet est évalué, il assigne à cette variableune valeur ECMAScript dont il définit le type.

expr

La valeur initiale de la variable de l'élément deformulaire ; la valeur implicite est la valeurECMAScript "undefined". Si elle est initialisée, alorsl'élément de formulaire ne sera pas visité, à moinsd'effacer la variable d'élément de formulaire.

condUne expression dont l'évaluation, après conversion enune valeur booléenne, doit valoir "true" pour quel'élément de formulaire soit visité.

classidL'adresse URI définissant l'emplacement del'implémentation de l'objet. Les conventions d'adresseURI dépendent des plateformes.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

66 of 212 27/07/2012 22:31

Page 67: vxml

codebase

Le chemin de base utilisé pour résoudre les adresseURI relatives définies par les attributs classid, data etarchive. Par défaut, c'est l'adresse URI de base dudocument courant.

codetype

Le type de contenu des données attendues dans letéléchargement de l'objet indiqué par l'attributclassid. Par défaut, sa valeur est celle de l'attributtype.

dataL'adresse URI définissant l'emplacement des donnéesde l'objet. Si c'est une adresse URI relative, elle serésoud relativement à l'attribut codebase.

typeLe type de contenu des données définies par l'attributdata.

archive

Une liste d'adresse URI, séparées par des espaces,des archives contenant des ressources concernantl'objet, ce qui peut comprendre les ressourcesindiquées par les attributs classid et data. Les adressesURI relatives se résolvent relativement à l'attributcodebase.

fetchhintVoir le chapitre 6.1. La valeur implicite est celle de lapropriété objectfetchhint.

fetchtimeoutVoir le chapitre 6.1. La valeur implicite est celle de lapropriété fetchtimeout.

maxageVoir le chapitre 6.1. La valeur implicite est celle de lapropriété objectmaxage.

maxstaleVoir le chapitre 6.1. La valeur implicite est celle de lapropriété objectmaxstale.

Les implémentations ne sont pas obligées de fournir des objects spécifiques à laplateforme, mais elles doivent gérer l'élément object et susciter un événementerror.unsupported.objectname si l'objet particulier propre à la plateforme n'est pasreconnu (remarquez que le « objectname » dans error.unsupported.objectname estune chaîne fixe, qu'on ne doit donc pas remplacer par le nom de l'objet non reconnu).Si une implémentation se comporte ainsi, alors on considère qu'elle gère l'élémentobject.

Il est du ressort de l'objet en question de déterminer la validité des noms ou valeursdes paramètres reçus. L'élément object suscite une erreur en cas d'invalidité. L'erreurest soit propre à l'objet, soit c'est l'une des erreurs normalisées listées dans lechapitre 5.2.6.

2.3.6. L'élément record

L'élément record est un élément d'entrée destiné à recueillir un enregistrementprovenant de l'utilisateur. Une référence au son enregistré est stockée dans la variabled'élément d'entrée, lequel son peut être joué (en se servant de l'attribut expr sur unélément audio) ou bien envoyé à un serveur, comme le montre cet exemple :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

67 of 212 27/07/2012 22:31

Page 68: vxml

<?xml version="1.0" encoding="UTF-8"?><vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form> <property name="bargein" value="true"/> <block> <prompt> Riley ne peut pas prendre votre appel. </prompt> </block> <record name="msg" beep="true" maxtime="10s" finalsilence="4000ms" dtmfterm="true" type="audio/x-wav"> <prompt timeout="5s"> Laissez un message après le bip. </prompt> <noinput> Je n'ai rien entendu, veuillez recommencez. </noinput> </record>

<field name="confirmer"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt> Voici votre message : <audio expr="msg"/>. </prompt> <prompt> Pour le valider, dites oui ; pour le supprimer, dites non. </prompt> <filled> <if cond="confirmer"> <submit next="sauvegarde_message.pl" enctype="multipart/form-data" method="post" namelist="msg"/> </if> <clear/> </filled> </field> </form></vxml>

L'utilisateur est invité à laisser un message puis il l'enregistre. L'enregistrement setermine dans l'une des conditions suivantes : le délai de parole est écoulé, une toucheDTMF est pressée, la durée d'enregistrement maximale est dépassée ou l'appelantraccroche. L'enregistrement est joué et, si l'utilisateur l'approuve, il est envoyé auserveur pour y être stocké au moyen de la méthode « POST » du protocole HTTP. Notezque, comme les autres éléments d'entrée, l'élément record peut avoir une grammaire,produire des invites et comporter des éléments catch. Il peut également comporterdes actions filled.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

68 of 212 27/07/2012 22:31

Page 69: vxml

Figure 7 : La temporisation des invites, d'un enregistrement sonore et d'une entréeDTMF

Lorsqu'un utilisateur raccroche en cours d'enregistrement, l'enregistrement se termineet un événement connection.disconnect.hangup est suscité. Toutefois, le sonenregistré jusqu'au raccrochage reste disponible dans la variable de l'élément record.Les applications, tels les services simples de courrier éléctronique vocal, peuvent ainsirenvoyer des données sonores à un serveur, même après déconnexion :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form> <record name="msg" beep="true" maxtime="10s" finalsilence="4000ms" dtmfterm="true" type="audio/x-wav"> <prompt timeout="5s"> Laissez un message après le bip. </prompt> <noinput> Je n'ai rien entendu, veuillez recommencer. </noinput> <catch event="connection.disconnect.hangup"> <submit next="./serveur_courrielvocal.asp"/> </catch> </record></form>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

69 of 212 27/07/2012 22:31

Page 70: vxml

</vxml>

Un enregistrement commence immédiatement après la lecture d'une invite (y comprisle « bip », le cas échéant). Pour des raisons d'optimisation, une plateforme peut lancerl'enregistrement dès que l'utilisateur commence à parler.

Un délai de temporisation commence immédiatement après la lecture d'une invite (ycompris le « bip », le cas échéant) et sa durée est déterminée par la propriété timeout.Si le délai de temporisation expire avant le commencement de l'enregistrement, alorsun événement noinput est suscité.

Une durée maximale commence en même temps que l'enregistrement et elle estdéterminée par un attribut maxtime. Si la durée maximale expire avant quel'enregistrement ne soit fini, alors l'enregistrement est interrompu et la variable fictivede l'attribut maxtime reçoit la valeur "true".

Un enregistrement se termine lorsque un événement est suscité, une entrée vocale ouDTMF est filtrée par une grammaire active ou la durée maximale est dépassée. Pourdes raisons d'optimisation, une plateforme peut interrompre un enregistrement aprèsun délai de silence (fixé par l'attribut finalsilence) indiquant que l'utilisateur a cessé deparler.

Si aucun son n'est recueilli pendant l'exécution de l'élément record, alors la variabled'enregistrement reste vide (voir remarque). Cela peut se produire, par exemple,lorsqu'une entrée vocale ou DTMF est reçue pendant la lecture de l'invite ou avant quel'intervalle de temporisation n'expire. En particulier, si aucun son n'est recueilli avantque l'utilisateur ne termine l'enregistrement par une entrée DTMF correspondant à unegrammaire DTMF locale (ou quand la valeur de l'attribut dtmfterm est fixée à "true"),alors la variable d'enregistrement n'est pas remplie (et donc aucune variable fictiven'est fixée) et l'algorithme FIA poursuit normalement sans qu'un événement noinputne soit suscité. Néanmoins, dans ces situations, on peut accéder aux informationsconcernant l'entrée via le tableau application.lastresult$, comme décrit dans lechapitre 5.1.5.

L'élément record contient un attribut dtmfterm pour des raisons de commodité enversles développeurs. Un attribut dtmfterm avec la valeur "true" équivaut à la définitiond'une grammaire DTMF locale filtrant toute entrée DTMF. L'attribut dtmfterm estprioritaire sur les grammaires DTMF locales définies.

N'importe quelle touche DTMF correspondant à une grammaire active terminel'enregistrement. Les touches DTMF qui ne correspondent pas à une grammaire activesont ignorées (et, de fait, ne terminent ni n'affectent d'une quelconque manièrel'enregistrement) et la plateforme peut, en option, les supprimer du signal.

La reconnaissance des grammaires vocales par la plateforme pendant l'enregistrementest optionnelle. Si la plateforme gère simultanément la reconnaissance etl'enregistrement, alors une commande vocale filtrée par une grammaire vocale nonlocale peut terminer l'enregistrement et l'algorithme FIA est invoqué, lequel transfèrel'exécution à l'élément contenant la grammaire. La commande vocale « terminante »est acessible via le tableau application.lastresult$. Par contre, le son de lacommande vocale « terminante » reconnue n'est pas disponible et il ne fait pas partiede l'enregistrement. Remarquez que, au contraire d'une tonalité DTMF, on ne peut pasutiliser une entrée de reconnaissance vocale juste pour terminer l'enregistrement : sides grammaires vocales locales sont définies, elles sont considérées inactives (c'est-

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

70 of 212 27/07/2012 22:31

Page 71: vxml

à-dire, qu'elles sont ignorées), même si la plateforme gère la reconnaissance etl'enregistrement simultanés.

Si la grammaire de terminaison retenue est une grammaire locale, alorsl'enregistrement est placé dans la variable d'enregistrement. Sinon, celle-ci est laisséeintacte (voir la remarque) et l'algorithme FIA est invoqué. Quel que soit le cas, letableau application.lastresult$ sera peuplé.

Remarque : Bien que la variable d'enregistrement ne soit pas remplie dans ce cas, lacorrespondance d'une grammaire non locale peut néanmoins entraîner l'assignationd'une certaine valeur à la variable d'enregistrement (voir le chapitre 3.1.6).

Les attributs de l'élément record sont :

Tableau 16 : Les attributs de l'élément record

name

La variable d'élément d'entrée qui va contenirl'enregistrement.

Remarquez que l'implémentation de cette variablepeut varier d'une plateforme à l'autre (bien que toutesles plateformes doivent gérer son comportement dansles éléments audio et submit, comme décrit danscette spécification).

expr

La valeur initiale de la variable de l'élément deformulaire ; la valeur implicite est la valeurECMAScript "undefined". Si elle est initialisée, alorsl'élément de formulaire ne sera pas visité, à moinsd'effacer la variable d'élément de formulaire.

condUne expression dont l'évaluation, après conversion enune valeur booléenne, doit valoir "true" pour quel'élément de formulaire soit visité.

modal

Lorsque sa valeur est "true" (la valeur implicite), alorsaucune des grammaires vocales et DTMF non localesn'est active pendant l'enregistrement. Pour une valeur"false", les grammaires vocales et DTMF non localessont actives.

beepLorsque sa valeur est "true", une tonalité est produitejuste avant l'enregistrement. La valeur implicite est"false"

maxtimeLa durée maximale d'enregistrement. Sa valeur estune indication de temps (voir le chapitre 6.5). Lavaleur implicite est propre à la plateforme.

finalsilence

Le délai de silence qui indique la fin du discours. Savaleur est une indication de temps (voir lechapitre 6.5). La valeur implicite est propre à laplateforme.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

71 of 212 27/07/2012 22:31

Page 72: vxml

dtmfterm

Lorsque sa valeur est "true", n'importe quelle toucheDTMF non filtrée par une grammaire active seratraitée comme la correspondance d'une grammaireDTMF locale (anonyme) active. La valeur implicite est"true".

type

Le format de média de l'enregistrement résultant. Lesplateformes doivent reconnaître les formats de fichierson indiqués dans l'annexe E (d'autres formatspeuvent aussi être gérés). La valeur implicite, propre àla plateforme, devrait correspondre à l'un des formatsobligatoires.

L'élément record contient les variables fictives suivantes après que l'enregistrement aété réalisé :

Tableau 17 : Les variables fictives de l'élément record

nom$.duration La durée de l'enregistrement en millisecondes.

nom$.size La taille de l'enregistrement en octets.

nom$.termchar

Si la valeur de l'attribut dtmfterm est "true" et quel'utilisateur a terminé l'enregistrement enappuyant une touche DTMF, alors la valeur decette variable fictive est celle de la toucheappuyée (par exemple, « # »). Sinon, la valeur est"undefined".

nom$.maxtimeC'est un booléen évalué à "true" sil'enregistrement s'est terminé parce que la duréemaximale a été atteinte.

2.3.7. L'élément transfer

L'élément transfer instruit l'interpréteur de connecter l'appelant à une autre entité(par exemple, une ligne téléphonique ou une autre application vocale. Pendantl'opération de transfert, la session d'interprétation courante est suspendue.

Une plateforme d'implémentation peut initier un transfert de diverses manières, dontceux de type « pont », « aveugle », redirection de réseau (appelé parfois « rappel ettransfert », « transfert par support commutateur », etc. Les transferts de types pont etaveugle sont pris en charge ; les autres types dépendent étroitement desfonctionnalités et des configurations spécifiques des plateformes et des réseaux, c'estla raison pour laquelle ils ne sont pas traités par cette spécification.

L'élément transfer est optionnel, bien que les plateformes devraient le prendre encharge. Les plateformes gérant l'élément transfer devraient gérer les transferts detype pont ou ceux de type aveugle, ou les deux. Celles qui gèrent l'un ou l'autre typede transfert peuvent gérer, en option, les modes d'entrée asynchrones descommandes DTMF, ou des commandes vocale, ou les deux, pendant le transfertd'appel afin d'annuler la tentative de liaison distante. Les tentatives de transfert detype aveugle peuvent s'annuler tant que l'appel sortant n'a pas encore commencé.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

72 of 212 27/07/2012 22:31

Page 73: vxml

Les attributs de l'élément transfer sont :

Tableau 18 : Les attributs de l'élément transfer

nameStocke le résultat d'une tentative de transfert detype pont. Dans le cas d'un transfert de typeaveugle, cette variable n'est pas définie.

expr

La valeur initiale de la variable de l'élément deformulaire ; la valeur implicite est la valeurECMAScript "undefined". Si elle est initialisée, alorsl'élément de formulaire ne sera pas visité, à moinsd'effacer la variable d'élément de formulaire.

condUne expression dont l'évaluation, après conversionen une valeur booléenne, doit valoir "true" pour quel'élément de formulaire soit visité.

dest

L'adresse URI de destination (téléphone, adresse detéléphonie IP). Les plateformes doivent gérer lasyntaxe URL tel: décrite dans le document[RFC2806] et peuvent gérer d'autres systèmesd'adressage fondés sur des adresses URI.

destexprUne expression ECMAScript produisant l'adresse URIde destination.

bridge

Détermine si la plateforme participe à la connexionentre l'appelant et l'appelé.

bridge="true"

Transfert de type pont. La plateforme ajoutel'appelé dans la connexion. L'interprétation dudocument est suspendue jusqu'à ce que letransfert de l'appel soit terminé. La plateformedemeure dans la connexion pour la durée del'appel transféré ; pendant le transfert, l'écouteest contrôlée par un éventuel élément grammarinclus.

Si l'appelant se déconnecte en raccrochant ousi le réseau déconnecte l'appelant, alors laplateforme suscite un événementconnection.disconnect.hangup.

Si la connexion est interrompue pour unequelconque autre raison, ce résultat est signalédans l'attribut name (voir le tableau suivant).

bridge="false"

Transfert de type aveugle (par défaut). Laplateforme redirige l'appelant vers l'appelé

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

73 of 212 27/07/2012 22:31

Page 74: vxml

sans demeurer dans la connexion et elle nesurveille pas le résultat.

La plateforme suscite immédiatement unévénementconnection.disconnect.transfer, que letransfert ait réussi ou non.

connecttimeout

Le temps d'attente en essayant de connecter l'appelavant de renvoyer la réponse "noanswer". La valeurest une indication de temps (voir le chapitre 6.5). Nes'applique que si l'attribut bridge a la valeur "true".La valeur implicite est propre à la plateforme.

maxtime

La durée permise pour l'appel ou la valeur "0s" siaucune limite n'est imposée. La valeur est uneindication de temps (voir le chapitre 6.5). Nes'applique que si l'attribut bridge a la valeur "true".La valeur implicite est "0s".

transferaudio

L'adresse URI de la source sonore à jouer pendant latentative de transfert (avant la réponse distante).

Si la ressource ne peut pas être ramenée, alorsl'erreur est ignorée et le transfert continue ; ce quel'appelant entend est propre à la plateforme.

aai

Des informations interapplications (AAI). Une chaînecontenant les données envoyées à une applicationdistante, et disponibles dans la variable de sessionsession.connection.aai.

La transmission de données AAI peut dépendre despasserelles de réseau et des traductions de donnéesde la signalisation (par exemple, ISDN vers SIP) ;l'état des données envoyées à un site distant n'estpas connu ni signalé.

Bien que toutes les plateformes doivent gérerl'attribut aai, elles ne sont pas obligées d'envoyerdes données AAI et n'ont pas besoin de prendre encharge la réception de données AAI. Les plateformesqui ne peuvent recevoir de données AAI doiventfixer la valeur de la variablesession.connection.aai à la valeur ECMAScript"undefined". Le mécanisme de transmissionsous-jacent peut imposer des limites à la longueurdes données.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

74 of 212 27/07/2012 22:31

Page 75: vxml

aaiexprUne expression ECMAScript produisant les donnéesAAI.

On ne peut définir qu'un seul exactement entre les attributs dest ou destexpr, sinon, unévénement error.badfetch est suscité. De même, on ne peut définir qu'un seulexactement entre les attributs aai ou aaiexpr, sinon, un événement error.badfetchest suscité.

2.3.7.1 Le transfert de type aveugle

Pour un transfert de type aveugle, il se produit une tentative de connecter l'appelantoriginal à l'appelé. Toutes les invites précédant l'élément transfer, ainsi que celles quiy sont contenues, sont mises en file d'attente et jouées avant que la tentative detransfert ne commence ; les propriétés d'interruption s'appliquent normalement.

Figure 8 : Les connexions sonores pendant un transfert de type aveugle : <transferbridge="false">

Toute source sonore désignée par l'attribut transferaudio est ignorée, car aucun son nepeut être joué depuis la plateforme vers l'appelant au cours de la tentative detransfert. Que la connexion réussisse ou non, la plateforme d'implémentation ne peutpas reprendre le contrôle des connexions.

L'état de la connexion n'est pas disponible. Par exemple, il n'est pas possible de savoirsi l'appelé était occupé, quand un appel réussi se termine, etc. Toutefois, certainesconditions d'erreur peuvent être signalées lorsque la plateforme en a connaissance,comme quand l'appelant n'est pas autorisé à appeler la destination ou quand l'adresseURI de la destination est malformée. Ces conditions sont propres à la plateforme maiselles devraient obéir aux conventions de nommage des valeurs de transfert des autresvariables d'élément de formulaire.

L'appelant peut annuler la tentative de transfert avant que l'appel sortant necommence, en l'interrompant par une commande vocale ou DTMF qui corresponde àune grammaire active, au cours de la lecture de n'importe quel son mis en filed'attente.

Auquel cas, la variable d'élément de formulaire est fixée tout comme les variablesfictives suivantes :

Tableau 19 : Les variables fictives de l'élément transfer

nom$.duration La durée d'un transfert d'appel en secondes.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

75 of 212 27/07/2012 22:31

Page 76: vxml

La durée vaut "0" si la tentative d'appel a été terminéepar l'appelant (au moyen d'une commande DTMF) avantque l'appel sortant ne commence.

nom$.inputmode

Le mode d'entrée de la commande de terminaison("dtmf" ou "voice"), ou la valeur "undefined" si le transfertn'a pas été terminé par une correspondance degrammaire.

nom$.utterance

Le texte de l'énoncé, si le transfert a été terminé parune entrée de reconnaissance vocale, ou le résultatDTMF, si le transfert a été terminé par une entréeDTMF ; sinon, la valeur "undefined".

Le tableau application.lastresult$ sera également rempli comme décrit dans lechapitre 5.1.5.

Si l'appelant se déconnecte en raccrochant au cours de la tentative de transfertd'appel, avant que la connexion à l'appelé n'ait commencé, alors un événementconnection.disconnect.hangup sera suscité et l'exécution du dialogue passera augestionnaire de l'événement hangup (le cas échéant). La variable d'élément deformulaire et, par conséquent, les variables fictives ne seront pas fixées.

Une fois le transfert lancé et l'interpréteur déconnecté de la session, la plateformesuscite un événement connection.disconnect.transfer et l'interprétation dudocument se poursuit normalement.

Toute connexion entre l'appelant et l'appelé reste en place indépendamment del'exécution du document.

Tableau 20 : Les résultats d'un transfert de type aveugle

Action

Valeur de lavariabled'élément deformulaire

Événement ou erreur Cause

letransfert

commence"undefined" connection.disconnect.transfer

Il y a euunetentativedetransfertdel'appelantsur uneautre ligneet elle nereviendrapas.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

76 of 212 27/07/2012 22:31

Page 77: vxml

l'appelantannule letransfertavant que

l'appelsortant necommence

"near_end_disconnect"

L'appelanta annulé latentativedetransfertvia unecommandevocale ouDTMFavant quel'appelsortant necommence(au coursde lalecture dessons enfiled'attente).

letransfert

setermine

"unknown"

Letransfertestterminémais lacause enestinconnue.

2.3.7.2 Le transfert de type pont

Pour un transfert de type pont, la plateforme connecte l'appelant à l'appelé dans uneconversation bidirectionnelle simultanée.

Figure 9 : Les connexions sonores au cours d'un transfert de type pont : <transferbridge="true">

Toutes les invites précédant l'élément transfer, ainsi que celles qui y sont contenues,sont mises en file d'attente et jouées avant que la tentative de transfert necommence ; les propriétés d'interruption s'appliquent normalement. La définition del'attribut bargeintype est ignorée ; sa valeur implicite est "hotword".

L'appelant peut annuler la tentative de transfert avant que l'appel sortant necommence, en l'interrompant par une commande vocale ou DTMF qui corresponde àune grammaire active, au cours de la lecture de n'importe quel son mis en filed'attente.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

77 of 212 27/07/2012 22:31

Page 78: vxml

2.3.7.2.1 L'écoute d'une entrée d'utilisateur au cours d'un transfert

Les platformes peuvent, en option, gérer une écoute des commandes de l'appelantpour terminer le transfert en définissant une ou plusieurs grammaires dans l'élémenttransfer. L'élément transfer est modal, c'est-à-dire que les grammaires définieshors de sa portée sont inactives. Pendant la lecture des invites et pendant la totalitédes phases de connexion et de discours du transfert, la plateforme surveillera :

les entrées DTMF de l'appelant correspondant à une grammaire DTMF incluse ;les énoncés de l'appelant correspondant à une grammaire vocale incluse

Un filtrage réussi terminera le transfert (la connexion à l'appelé) ; l'interprétation dudocument se poursuit normalement. Un filtrage non réussi sera ignoré. Si aucunegrammaire n'est définie, alors la plateforme n'écoutera pas les entrées de l'appelant.

La plateforme ne surveille pas les signaux intrabandes ou les commandes vocales del'appelé.

2.3.7.2.2 La gestion des déconnexions de l'appelant, de l'appelé ou du réseau

Tout en essayant de se connecter à l'appelé, la plateforme surveille les indicateurs deprogression de l'appel (intrabandes ou hors bande, selon le type de connexion et lesprotocoles particuliers). Pour la durée d'un transfert réussi, la plateforme surveille lesévénements téléphoniques (hors bande), telle qu'une déconnexion, aux deuxextrêmités de la liaison.

Si l'appelé se déconnecte, alors l'appelant reprend sa session avec l'interpréteur. Sic'est l'appelant, alors la plateforme déconnecte l'appelé et l'interprétation dudocument se poursuit normalement. Si l'appelant et l'appelé sont tous deuxdéconnectés par le réseau, alors l'interprétation du document se poursuitnormalement.

Les résultats possibles pour un transfert de type pont, avant que la connexion àl'appelé ne soit établie, sont :

Tableau 21 : Les résultats d'un transfert de type pont avant l'établissement de laconnexion

Action

Valeur de lavariable del'élément deformulaire

Événement Cause

l'appelantse

déconnecteconnection.disconnect.hangup

L'appelantraccroche.

l'appelantdéconnecte

l'appelé"near_end_disconnect"

L'appelant aforcé ladéconnexionde l'appelévia une

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

78 of 212 27/07/2012 22:31

Page 79: vxml

commandevocale ouDTMF.

l'appeléest occupé

"busy"L'appelé étaitoccupé.

le réseauest

encombré"network_busy"

Un réseauintermédiairea refusél'appel.

l'appelé nerépond pas

"noanswer"

Il n'y a pas eude réponsedans le tempsimparti parl'attributconnecttimeout.

--- "unknown"

Le transfertestinterrompumais la causeen estinconnue.

Les résultats possibles pour un transfert de type pont, après que la connexion àl'appelé est établie, sont :

Tableau 22 : Les résultats d'un transfert de type pont après établissement de laconnexion

Action

Valeur de lavariable del'élément deformulaire

Événement Cause

l'appelantse

déconnecteconnection.disconnect.hangup

L'appelantraccroche.

l'appelantse

déconnecte"near_end_disconnect"

L'appelant aforcé ladéconnexionde l'appelévia unecommandevocale ouDTMF.

laplateformedéconnecte

l'appelé

"maxtime_disconnect"

L'appelé aétédéconnectépar laplateforme

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

79 of 212 27/07/2012 22:31

Page 80: vxml

parce que ladurée del'appel aatteitn lavaleur del'attributmaxtime.

le réseaudéconnecte

l'appelé"network_disconnect"

Le réseau adéconnectél'appelé delaplateforme.

l'appelé sedéconnecte

"far_end_disconnect"L'appelé araccroché.

--- "unknown"

Le transferts'estinterrompumais lacause en estinconnue.

Si l'appelant se déconnecte en raccrochant (soit lors du transfert d'appel, soit lors de latentative de transfert d'appel), alors la connexion à l'appelé (le cas échéant) estabandonnée, un événement connection.disconnect.hangup est suscité etl'exécution du dialogue va passer au gestionnaire de l'événement hangup (le caséchéant). La variable d'élément de formulaire et, par conséquent, les variables fictivesne seront pas fixées.

Si l'exécution de l'élément transfer se poursuit normalement, alors sa variabled'élément de formulaire est fixée, tout comme les variables fictives suivantes :

Tableau 23 : Les variables fictives de l'élément transfer

nom$.duration

La durée d'un transfert d'appel en secondes.

La durée vaut "0" si le transfert d'appel a été terminépar l'appelant (au moyen d'une commande vocale ouDTMF) avant qu'on y réponde.

nom$.inputmode

Le mode d'entrée de la commande de terminaison("dtmf" ou "voice"), ou la valeur "undefined" si le transfertn'a pas été terminé par une correspondance degrammaire.

nom$.utterance

Le texte énoncé, si le transfert a été terminé par unecommande vocale, ou le résultat DTMF, si celui-ci a ététerminé par une commande DTMF ; sinon sa valeur est"undefined".

Si le transfert a été terminé par une commande vocale, alors le tableau

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

80 of 212 27/07/2012 22:31

Page 81: vxml

application.lastresult$ est rempli normalement.

2.3.7.2.3 Le son au cours d'une tentative de transfert de type pont

Au cours d'un transfert de type pont, on peut vouloir jouer un son à l'appelant pendantque la plateforme essaye de se connecter à l'appelé. Par exemple, une publicité(« Achetez la mayonnaise de tante Louise ! ») ou bien un message d'information(« Votre avis nous intéresse ; veuillez patienter pendant que nous vous connectons aupremier agent disponible. ») seraient susceptibles de remplacer les indications deprogression de l'appel (sonnerie, tonalité « occupé », état du réseau, etc.).

À l'instant où commence l'appel sortant, le son défini par l'attribut transferaudio estjoué. La lecture du son s'achève lorsque l'état de la réponse de la connexion distanteest déterminé. Cet état n'est pas toujours connu, car le commutateur distant peutjouer un son (tels qu'une tonalité d'information particulière, une tonalité « occupé »,une tonalité de réseau encombré ou un enregistrement annonçant l'impossibilitéd'établir la connexion) sans « répondre » réellement à l'appel.

Si la durée du fichier son spécifié est inférieure au temps nécessaire à la connexiondistante, alors l'appelant pourra entendre un silence, un son propre à la plateforme ouune indication de progression de l'appel, selon la plateforme.

2.3.7.3 Les erreurs et événement au cours du transfert

Au cours d'un transfert, l'un des événements suivants pourra être suscité :

Tableau 24 : Les événements suscités au cours du transfert

Événement CauseType detransfert

connection.disconnect.hangup L'appelant raccroche. pont

connection.disconnect.transfer

Une tentative pourtransférer l'appelant surune autre ligne a eu lieuet elle ne reviendra pas.

aveugle

Si une tentative de transfert a échoué, l'une des erreurs suivantes sera suscitée :

Tableau 25 : Les erreurs de l'échec d'un transfert

Erreur CauseType detransfert

error.connection.noauthorizationL'appelant n'est pasautorisé à appeler ladestination.

aveugle etpont

error.connection.baddestinationL'adresse URI de ladestination estmalformée.

aveugle etpont

error.connection.norouteLa plateforme est dansl'impossibilité de placer pont

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

81 of 212 27/07/2012 22:31

Page 82: vxml

un appel vers ladestination.

error.connection.noresource

La plateforme est dansl'impossibilité d'allouerles ressources pourplacer l'appel.

pont

error.connection.protocole.nnn

La pile de protocolespour cette connexion alevé une exception quine correspond à aucundes autres événementserror.connection.

pont

error.unsupported.transfer.blindLa plateforme ne gèrepas le transfert de typeaveugle.

aveugle

error.unsupported.transfer.bridgeLa plateforme ne gèrepas le transfert de typepont.

pont

error.unsupported.uri

La platforme ne gèrepas le format d'adresseURI employé. Lavariable spéciale_message (voir lechapitre 5.2.2)contiendra la chaîne"The URI x is not asupported URI format",où la variable xreprésente l'adresseURI indiquée parl'attribut dest, ou biendestexpr, de l'élémenttransfer.

aveugle etpont

2.3.7.4 Exemple

L'exemple suivant montre la tentative de transfert de type pont d'un appelant à untiers puis l'attente de la fin de la conversation. On peut inclure des invites avant oudans l'élément transfer : elles peuvent servir à informer l'appelant de ce qui sedéroule, avec un avis tel que « Veuillez patienter, nous transférons votre appel ».L'invite de l'élément block et celle de l'élément transfer sont mises en file d'attentepuis jouées avant le transfert effectif. Après purge de la file d'attente des sons, l'appelsortant est initié. Par défaut, l'appelant est connecté à la voie téléphonique sortante.L'attribut transferaudio définit le fichier son à jouer à l'appelant, au lieu du fichier sondistant, jusqu'à ce que l'hôte distant réponde. Si la durée de la source sonore est pluslongue que celle du temps pour établir la connexion, alors la lecture du son cesseraimmédiatement dès la réponse distante.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

82 of 212 27/07/2012 22:31

Page 83: vxml

Figure 10 : Le diagramme des séquences et des temporisations dans un exemple detransfert de type pont

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="xfer"> <var name="ma_duree" expr="0"/> <block> <!-- Mis en file d'attente et joué avant le début du transfert --> <prompt> Appel de Riley en cours. Veuillez patienter. </prompt> </block>

<!-- Joue une musique pendant la tentative de connexion à l'hôte distant --> <!-- L'attribut bargeintype a la valeur "hotword" seulement pendant la durée de l'attribut transferaudio --> <!-- Attend jusqu'à 60 secondes la réponse distante --> <transfer name="mon_appel" dest="tel:+33-1234567890" transferaudio="musique.wav" connecttimeout="60s" bridge="true">

<!-- Mis en attente et joué avant le début du transfert --> <!-- Les propriétés d'interruption s'applique pour cette invite --> <prompt> Dites « annuler » pour vous déconnecter à tout instant. </prompt>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

83 of 212 27/07/2012 22:31

Page 84: vxml

<!-- Définit une grammaire externe à écouter pour la commande « annuler » --> <grammar src="annuler.grxml" type="application/srgs+xml"/>

<filled> <assign name="ma_duree" expr="mon_appel$.duration"/> <if cond="mon_appel == 'busy'"> <prompt> La ligne de Riley est occupée. Veuillez rappeller plus tard. </prompt> <elseif cond="mon_appel == 'noanswer'"/> <prompt> Riley ne répond pas. Veuillez rappeler plus tard. </prompt> </if> </filled> </transfer>

<!-- Envoie les statistiques d'appel au serveur --> <block> <submit namelist="mon_appel ma_duree" next="/cgi-bin/rapport"/> </block></form></vxml>

2.4 L'élément filled

L'élément filled indique l'action à effectuer lorsqu'une certaine combinaisond'éléments d'entrée est remplie. Il peut apparaître dans deux endroits : comme enfantde l'élément form ou comme enfant d'un élément d'entrée.

Comme enfant d'un élément form, l'élément filled peut servir à accomplir desactions survenant lorsqu'une combinaison d'un ou plusieurs éléments d'entrée estremplie. Par exemple, l'élément filled suivant effectue une vérification croisée afinde s'assurer que le champ de la ville de départ diffère du champ de la ville d'arrivée :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="obtenir_villes_depart_et_arrivee"> <field name="ville_depart"> <grammar src="http://www.grammars.example.com/voicexml/ville.grxml" type="application/srgs+xml"/> <prompt>Quelle est la ville de départ ?</prompt> </field> <field name="ville_arrivee"> <grammar src="http://www.grammars.example.com/voicexml/ville.grxml" type="application/srgs+xml"/> <prompt>Quelle est la ville d'arrivée ?</prompt> </field> <filled mode="all" namelist="ville_depart ville_arrivee"> <if cond="ville_depart == ville_arrivee"> <prompt> Vous ne pouvez partir d'une ville et y arriver.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

84 of 212 27/07/2012 22:31

Page 85: vxml

</prompt> <clear/> </if> </filled></form></vxml>

Si l'élément filled apparaît dans un élément d'entrée, alors il indique l'action àeffectuer après que l'élément d'entrée a été rempli

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="obtenir_ville"> <field name="ville"> <grammar type="application/srgs+xml" src="http://www.livraison.example.com/grammars/villes_desservies.grxml"/> <prompt>Quelle est la ville ?</prompt> <filled> <if cond="ville == 'Novosibirsk'"> <prompt> Notez que Novosibirsk ne sera plus désservie l'année prochaine. </prompt> </if> </filled> </field></form></vxml>

Après chaque recueil d'une entrée d'utilisateur, tous les éléments d'entrée mentionnésdans l'entrée sont fixés et l'interpréteur examine alors chaque élément filled, dansl'ordre du document (sans préférence donnée à ceux dans les éléments d'entréevis-à-vis de ceux dans le formulaire). Les éléments filled dont les conditions vérifientl'énoncé sont alors exécutés dans l'ordre, jusqu'à ce qu'il n'y en ait plus, ou jusqu'à ceque l'un transfère le contrôle ou suscite un événement.

Les attributs de l'élément filled comprennent :

Tableau 26 : Les attributs de l'élément filled

mode

L'attribut admet comme valeur soit "all" (la valeurimplicite), soit "any". Pour la valeur "any", l'action estexécutée lorsque n'importe quel des éléments d'entréedéfinis est rempli par la dernière entrée d'utilisateur. Pourla valeur "all", l'action est exécutée lorsque tous leséléments d'entrée mentionnés sont remplis et qu'aumoins l'un d'entre eux a été rempli par la dernière entréed'utilisateur. Un élément filled contenu dans un élémentd'entrée ne peut pas définir d'attribut mode ; auquel cas, laplate forme suscitera un événement error.badfetch à lalecture du document.

namelistLes éléments d'entrée à partir desquels déclencherl'exécution. Pour un élément filled dans un formulaire,

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

85 of 212 27/07/2012 22:31

Page 86: vxml

la valeur implicite de l'attribut namelist se compose desnoms (explicites et implicites) des éléments d'entrée duformulaire. Un élément filled dans un élément d'entréene peut pas définir d'attribut namelist (dans ce cas, lavaleur de l'attribut est le nom de l'élément d'entrée) ; sion définit un attribut namelist, alors la plateforme susciteun événement error.badfetch à la lecture du document.Remarquez que les éléments de commande sont interditsdans cette liste ; un événement error.badfetch serasuscité lorsque le document contiendra un élémentfilled avec un attribut namelist appelant une variabled'élément de commande.

2.5 Les liens

Un élément link peut avoir une ou plusieurs grammaire dont la portée s'exerce surl'élément le contenant. Un attribut scope sur l'élément contenant l'élément linkn'exerce aucun effet sur la portée des grammaires de l'élément link (par exemple,lorsqu'un élément link est contenu dans un élément form déclarantscope="document", les grammaires de l'élément link s'exercent sur le formulaire, etnon sur le document). Les éléments grammar contenus dans l'élément link ne peuventpas définir d'attribut scope (voir le chapitre 3.1.3 pour des précisions). Lorsque l'une deces grammaires correspond, le lien s'active et effectue :

Soit une transition vers un nouveau document ou dialogue (comme l'élémentgoto) ;

Soit suscite un événement (comme l'élément throw).

Par exemple, le lien suivant s'active quand on dit « livres » ou qu'on tape « 2 ».

<link next="http://www.voicexml.org/livres/principal.vxml"> <grammar mode="voice" version="1.0" root="racine"> <rule id="racine" scope="public"> <one-of> <item>livres</item> <item>livres VoiceXML</item> </one-of> </rule> </grammar> <grammar mode="dtmf" version="1.0" root="r2"> <rule id="r2" scope="public"> 2 </rule> </grammar></link>

Ce lien mène à un dialogue déterminé dynamiquement dans le document courant :

<link expr="'#' + document.helpstate"> <grammar mode="voice" version="1.0" root="racine"> <rule id="racine" scope="public"> help </rule> </grammar></link>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

86 of 212 27/07/2012 22:31

Page 87: vxml

L'élément link peut être enfant des éléments vxml, ou form, ou des éléments deformulaire field et initial. Les grammaires d'un élément link au niveau del'élément vxml sont actives pour tout le document. Les grammaires d'un élément linkau niveau d'un élément form sont actives tant que l'utilisateur reste dans le formulaire.Si un document racine d'application contient un lien de niveau document, alors lesgrammaires du lien sont actives, quel que soit le document de l'application exécuté.

Si l'exécution se produit dans un élément de formulaire modal, alors les grammaires dulien, que ce soit au niveau formulaire, document ou bien application, ne sont pasactives.

On peut aussi définir un lien qui, dès lors qu'il est activé, suscite un événement au lieude mener à un nouveau document. L'événement est suscité à l'emplacement courantde l'exécution, et non à l'emplacement où le lien est défini. Dans l'exemple suivant, sil'utilisateur sollicite la grammaire du lien ou tape « 2 » au clavier, un événement helpest suscité dans l'élément de formulaire que visitait l'utilisateur et celui-ci est géré parl'élément catch le mieux qualifié dans la portée de l'élément (voir le chapitre 5.2.4pour des précisions) :

<link dtmf="2" event="help"> <grammar mode="voice" version="1.0" root="r5"> <rule id="r5" scope="public"> <one-of> <item>arrgh</item> <item>hélas tout est perdu !</item> <item>allez ! machine de m.....</item> <item>Je n'y comprends rien</item> </one-of> </rule> </grammar></link>

Lorsque le lien est activé, le tableau application.lastresult$ se remplit. Celapermet de prendre des décisions en réception dans le flux des appels en fonction durésultat sémantique réel. Voir un exemple dans le chapitre 5.1.5.

Conceptuellement, on peut considérer l'élément link comme étant en deux parties :une condition et une action. La « condition » correspond au contenu de l'élément link,c'est-à-dire, la ou les grammaires qui doivent être sollicitées pour que le lien soitactivé. L'« action » est définie par les attributs de l'élément, c'est-à-dire, vers oùeffectuer la transition ou quel événement susciter. La « condition » est résolue/évaluéelexicalement tandis que l'« action » l'est dynamiquement. En particulier, cela signifieque :

toutes les adresses URI dans le contenu du lien se résolvent lexicalement, c'est-à-dire, par rapport à l'adresse URI de base en vigueur (voir l'attribut xml:base dansle chapitre 1.5.1) du document dans lequel le lien est défini ;toutes les adresse URI dans les attributs de l'élément link se résolventdynamiquement, c'est-à-dire, par rapport à l'adresse URI de base en vigueurlorsque la ou les grammaires du lien correspondent ;toutes les expressions ECMAScript dans les attributs de l'élément link s'évaluentdynamiquement, c'est-à-dire, dans la portée et le contexte d'exécution en vigueurlorsque la ou les grammaires correspondent.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

87 of 212 27/07/2012 22:31

Page 88: vxml

Les attributs de l'élément link sont :

Tableau 27 : Les attributs de l'élément link

next

L'adresse URI de destination. Elle correspond à undocument (éventuellement avec une ancre indiquantle dialogue de départ) ou à un dialogue dans ledocument courant (juste une ancre).

exprComme l'attribut next, sauf que l'adresse URI estdéterminée dynamiquement en évaluant l'expressionECMAScript donnée.

eventL'événement à susciter lorsque l'entrée d'utilisateurcorrespond à l'une des grammaires du lien.

eventexprUne expression ECMAScript se réduisant au nom del'événement à susciter lorsque l'entrée d'utilisateurcorrespond à l'une des grammaires du lien.

message

Une chaîne message apportant des explicationssupplémentaires concernant l'événement suscité. Lemessage est disponible en tant que valeur d'unevariable dans la portée de l'élément catch, voir lechapitre 5.2.2.

messageexprUne expression ECMAScript se réduisant à la chaînemessage.

dtmf

La séquence DTMF du lien. Elle équivaut à unegrammaire DTMF simple et les propriétés DTMF (voirle chapitre 6.3.3) s'appliquent à la reconnaissance dela séquence. Contrairement aux grammaires DTMF,les blancs sont optionnels : les déclarations dtmf="123#"et dtmf="1 2 3 #" sont équivalentes. L'attribut peuts'utiliser en même temps que d'autres élémentsgrammar : le lien est activé lorsque l'entréed'utilisateur correspond à une grammaire du lien ou àla séquence DTMF.

fetchaudioVoir le chapitre 6.1. La valeur implicite est celle de lapropriété fetchaudio.

fetchhintVoir le chapitre 6.1. La valeur implicite est celle de lapropriété documentfetchhint.

fetchtimeoutVoir le chapitre 6.1. La valeur implicite est celle de lapropriété fetchtimeout.

maxageVoir le chapitre 6.1. La valeur implicite est celle de lapropriété documentmaxage.

maxstaleVoir le chapitre 6.1. La valeur implicite est celle de lapropriété documentmaxstale.

On ne peut définir qu'un seul exactement entre les attributs next, expr, event ou

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

88 of 212 27/07/2012 22:31

Page 89: vxml

eventexpr, sinon, un événement error.badfetch est suscité. De même, on ne peutdéfinir qu'un seul exactement entre les attributs message ou messageexpr, sinon, unévénement error.badfetch est suscité.

3. L'entrée d'utilisateur

3.1 Les grammaires

3.1.1 Les grammaires vocales

L'élément grammar peut servir à introduire une grammaire vocale, laquelle :

définit un ensemble d'énoncés susceptibles d'être prononcés par un utilisateurpour effectuer une action ou fournir une information, et

lorsque l'énoncé est avéré, renvoie une interprétation sémantiquecorrespondante. Il peut s'agir d'une valeur simple (comme une chaîne), d'unensemble non hiérarchique de couples attribut-valeur (tel qu'un jour, un mois etune année) ou d'un objet imbriqué (pour une requête complexe).

L'élément grammar est conçu de manière à s'accommoder de n'importe quel format degrammaire qui satisfait à ces deux conditions. Les plateformes VoiceXML doiventreconnaître au moins un format courant, à savoir la forme XML décrite dans la« spécification des grammaires de reconnaissance vocale » du W3C [SRGS]. Ellesdevraient reconnaître la forme ABNF décrite dans cette même spécification [SRGS].Les plateformes VoiceXML peuvent choisir de gérer d'autres formats que ceux de laspécification SGRS. Par exemple, une plateforme pourrait se servir de la gestion dutype « PCDATA » offerte par l'élément grammar pour introduire directement unedéfinition de grammaire propriétaire ou mettre à profit les attributs src et type pour enintroduire une externe.

Les plateformes VoiceXML doivent correspondre à la définition d'un « processeur degrammaire de forme XML conforme » donnée dans la « spécification des grammairesde reconnaissance vocale » du W3C [SRGS]. Bien que cette définition exige d'uneplateforme qu'elle puisse traiter des documents ayant un ou plusieurs attributsxml:lang, elle n'exige pas qu'elle soit multilingue. Lorsqu'elle rencontre une langue nonreconnue, la plateforme suscite un événement error.unsupported.languageindiquant quelle langue n'est pas reconnue dans sa variable message.

Les éléments des grammaires SGRS de forme XML

Les éléments suivants sont définis pour les grammaires de forme XML dans la« spécification des grammaires de reconnaissance vocale » du W3C [SRGS] et sontdisponibles dans le langage VoiceXML 2.0. Le présent document ne redéfinit pas ceséléments. Veuillez consulter la « spécification des grammaires de reconnaissancevocale » du W3C [SRGS] pour les définitions et des exemples.

Tableau 28 : Les éléments SRGS (forme XML)

Élément Usage Chapitre([SRGS])

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

89 of 212 27/07/2012 22:31

Page 90: vxml

Élément Usage Chapitre([SRGS])

grammar L'élément racine d'une grammaire XML 4.→VF

metaUne déclaration en-tête du métacontenu d'unéquivalent HTTP

4.11.1→VF

metadataUne déclaration en-tête d'un contenu demétadonnées XML

4.11.2→VF

lexiconUne déclaration en-tête d'un lexique deprononciation

4.10→VF

ruleDéclare une extension de règle nomméed'une grammaire

3.→VF

tokenDéfinit un mot ou une autre entité qui peutservir d'entrée

2.1→VF

rulerefDésigne une règle définie localement ouextérieurement

2.2→VF

itemDéfinit une extension dont la répétition et laprobabilité d'apparition sont optionnels

2.3→VF

<one-of>Définit un ensemble d'extensions de règlesalternatives

2.4→VF

exampleUn élément contenu dans une définition derègle lequel donne un exemple d'entréecorrespondant à la règle

3.3→VF

tag

Définit une chaîne arbitraire à incluredirectement dans une extension et qui peutêtre utilisée pour une interprétationsémantique

2.6→VF

3.1.1.1 Les grammaires directes

On peut utiliser l'élément grammar pour définir une grammaire directe ou bien externe.Une grammaire directe se compose du contenu d'un élément grammar et c'est unegrammaire complète :

<grammar type="type-média" mode="voice"> grammaire vocale directe</grammar>

Il est parfois nécessaire, dans ce cas, d'englober le contenu dans une section de type« CDATA » [XML]. Pour les grammaires directes, l'attribut type précise le type de médiarégissant l'interprétation du contenu de l'élément grammar.

Voici un exemple de grammaire directe de forme XML inspiré de la « spécification desgrammaires de reconnaissance vocale » du W3C [SRGS] :

<grammar mode="voice" xml:lang="fr" version="1.0" root="commande"> <!-- La commande consiste en une action sur un objet -->

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

90 of 212 27/07/2012 22:31

Page 91: vxml

<!-- par exemple, "ouvrir une fenêtre" --> <rule id="commande" scope="public"> <ruleref uri="#action"/> <ruleref uri="#objet"/> </rule>

<rule id="action"> <one-of> <item> ouvrir </item> <item> fermer </item> <item> effacer </item> <item> déplacer </item> </one-of> </rule>

<rule id="objet"> <item repeat="0-1"> <one-of> <item> le </item> <item> la </item> <item> un </item> <item> une </item> </one-of> </item> <one-of> <item> fenêtre </item> <item> fichier </item> <item> menu </item> </one-of> </rule></grammar>

Voici un exemple de grammaire directe équivalent cette fois dans la forme ABNF de laspécification [SRGS]. Les plateformes VoiceXML n'étant pas obligées de gérer ceformat, sa portabilité est peut-être moindre :

<grammar mode="voice" type="application/srgs">#ABNF 1.0;language fr;mode voice;root $commande; public $commande = $action $objet; $action = ouvrir | fermer | effacer | déplacer; $objet = [le | la | un | une] (fenêtre | fichier | menu);</grammar>

3.1.1.2 Les grammaires externes

On définit une grammaire externe de la manière suivante :

<grammar src="adresse-URI" type="type-média"/>

Dans ce cas, le type de média est optionnel parce que le contexte d'interprétationessaiera de le déterminer dynamiquement comme décrit dans le chapitre 3.1.1.4.

Si l'attribut src est défini et qu'une grammaire directe se trouve en contenu d'unélément grammar, alors un événement error.badfetch est suscité.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

91 of 212 27/07/2012 22:31

Page 92: vxml

Voici l'exemple de l'appel d'une grammaire externe créée dans la forme XML de la« spécification des grammaires de reconnaissance vocale » du W3C [SRGS] :

<grammar type="application/srgs+xml" src="http://www.grammaire.example.com/date.grxml"/>

L'exemple suivant illustre l'appel d'une grammaire externe créée dans la forme ABNFde la spécification [SRGS] :

<grammar type="application/srgs" src="http://www.grammaire.example.com/date.gram"/>

3.1.1.3 Le poids des grammaires

On peut définir le poids d'une grammaire au moyen de l'attribut weight :

<grammar weight="0.6" src="formulaire.grxml" type="application/srgs+xml"/>

Les éléments grammar, y compris ceux dans les éléments link, field et form,peuvent recevoir un attribut weight, que la grammaire soit directe, externe ou bienintégrée.

L'application des poids obéit à la définition du poids des alternatives dans laspécification [SRGS §2.4.1]. Un poids est une valeur en virgule flottante positive simplesans exponentielle. Les valeurs légales prennent les formes "n", "n.", ".n" et "n.n", où« n » représente une séquence composée d'un ou plusieurs chiffres.

Symboliquement, un poids est un facteur de multiplication dans la sphère de recherched'une reconnaissance vocale. Un poids de "1.0" équivaut à ne pas fournir de poids dutout. Un poids supérieur à "1.0" fait valoir la grammaire de manière positive et,inversement, un poids inférieur à "1.0" fait valoir la grammaire de manière négative. Sion ne définit pas de poids, alors le poids implicite d'une grammaire vaut "1.0". Siaucun élément grammar n'a d'attribut weight, alors toutes les grammaires ont un poidséquivalent.

<link event="help"> <grammar weight="0.5" mode="voice" version="1.0" root="aide"> <rule id="aide" scope="public"> aide <item repeat="0-1"> s'il vous plaît </item> </rule> </grammar></link>

<form> <grammar src="formulaire.grxml" type="application/srgs+xml"/> <field name="date_expiration"> <grammar weight="1.2" src="http://www.example.org/grammaire/date"/> </field></form>

Dans l'exemple précédent, la sémantique des poids équivaut à la grammaire XMLsuivante :

<grammar root="r1" type="application/srgs+xml">

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

92 of 212 27/07/2012 22:31

Page 93: vxml

<rule id="r1"> <one-of> <item weight="0.5"> <ruleref uri="#aide"/> </item> <item weight="1.0"> <ruleref uri="formulaire.grxml"/> </item> <item weight="1.2"> <ruleref uri="http://www.example.org/grammaire/date"/></item> </one-of></rule>

<rule id="aide"> aide <item repeat="0-1"> s'il vous plaît </item></rule></grammar>

Les grammaires implicites, comme celles des éléments option, ne gèrent pas lespoids : utilisez plutôt l'élément grammar afin de contrôler le poids des grammaires.

Les poids des grammaires n'affectent que leur traitement. Ils n'influent pasdirectement sur le post-traitement des résultats des grammaires, y compris lapréséance des grammaires lorsque l'entrée d'utilisateur correspond à plusieursgrammaires actives (voir le chapitre 3.1.4).

Les poids n'ont pas d'influence sur les grammaires DTMF (voir le chapitre 3.1.2). Toutattribut weight défini dans un élément grammar dont l'attribut mode vaut "dtmf" seraignoré.

<!-- le poids sera ignoré --><grammar mode="dtmf" weight="0.3" src="http://www.example.org/dtmf/number"/>

Il est difficile de déterminer les poids appropriés et l'estimation des poids n'améliorepas toujours les performances de la reconnaissance. Les poids effectifs s'obtiennentgénéralement en étudiant les données vocales et textuelles réelles sur une plateformeparticulière. En outre, le poids d'une grammaire est propre à la plateforme. Remarquezque des moteurs de reconnaissance vocale automatique peuvent traiter le même poidsdifféremment. C'est pourquoi, la valeur de poids qui fonctionne bien sur uneplateforme particulière peut donner des résultats différents sur d'autres plateformes.

3.1.1.4 L'élément grammar

Les attributs de l'élément grammar, hérités de la « spécification des grammaires dereconnaissance vocale » du W3C [SRGS] sont :

Tableau 29 : Les attributs de l'élément grammar hérités de laspécification SRGS

version Définit la version de la grammaire.

xml:lang

L'identificateur de langue de la grammaire (parexemple, "fr-CA" pour le français canadien). Si omis, lavaleur est héritée en descendant la hiérarchie dudocument.

modeDéfinit le mode de la grammaire selon les modes de laspécification [SRGS].

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

93 of 212 27/07/2012 22:31

Page 94: vxml

rootDéfinit la règle qui agit comme règle racine de lagrammaire.

tag-formatDéfinit le format du contenu de balise de tous leséléments tag dans la grammaire.

xml:base

Déclare l'adresse URI de base à partir de laquelle lesadresses URI relatives dans la grammaire se résolvent.

Cette déclaration de l'adresse URI de base est prioritairesur celle de l'élément vxml. Si on omet une déclarationlocale, alors la valeur est héritée en descendant lahiérarchie du document.

L'utilisation et l'interprétation de ces attributs se déterminent comme suit :

Pour la forme XML directe SRGS : déterminées par la « spécification desgrammaires de reconnaissance vocale » du W3C, laquelle déclare que l'attributversion est obligatoire et doit avoir la valeur "1.0", que l'attribut root estobligatoire et sa valeur identifie la règle à activer et que d'autres attributs sontoptionnels (voir la spécification [SRGS] pour des précisions).

1.

Pour la forme ABNF directe SRGS : tous les attributs définis doivent être ignoréspar la plateforme.

2.

Pour les formes XML et ABNF externes SRGS : tous les attributs définis doiventêtre ignorés par la plateforme.

3.

Pour tous les autres types de grammaire : l'utilisation et l'interprétation desattributs définis dépendent de la plateforme.

4.

Les attributs de l'élément grammar rajoutés par VoiceXML 2.0 sont :

Tableau 30 : Les attributs de l'élément grammar rajoutés par VoiceXML

src

L'adresse URI indiquant l'emplacement de la grammaire et, en option, un nom de règle danscette grammaire, si celle-ci est externe. L'adresse URI s'interprète comme l'appel d'une règle,comme défini dans le chapitre 2.2 de la spécification [SRGS], cependant les formes d'appel derègle ne sont pas toutes permises depuis un document VoiceXML. Les possibilités des appels derègles sont décrites en détails après ce tableau.

scope

L'attribut admet pour valeur soit "document", ce qui rend la grammaire active dans tous lesdialogues du document courant (et les documents terminaux d'une application concernés), soit"dialog", ce qui rend la grammaire active pour le formulaire courant. Si omis, la portée de lagrammaire se détermine en examinant l'élément parent. Voir le chapitre 3.1.3précisions sur les portées incluant des comportements prioritaires.

type

Le type de média préféré de la grammaire. Le type de média de la ressource indiquée parl'appel d'adresse URI dans l'attribut src peut être disponible dans plusieurs versions. L'auteurpeut spécifier le type de média préféré via l'attribut type. Lorsque le contenu représenté par uneadresse URI est disponible dans plusieurs formats de données, une plateforme VoiceXML peutse servir du type de média préféré pour influencer le choix du format qui sera utilisé. Parexemple, sur un serveur mettant en œuvre une négociation de contenu HTTP, le processeurpeut utiliser le type de média préféré pour ordonner les préférences dans la négociation.

La représentation de la ressource issue de la résolution de l'appel d'adresse URI peut se

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

94 of 212 27/07/2012 22:31

Page 95: vxml

prévaloir de deux types : le type de média déclaré qui est la valeur annoncée de la ressource etle type de média réel qui est le format véritable de son contenu. Le type de média réel devraitêtre identique au type de média déclaré, mais ce n'est pas toujours le cas (par exemple, enraison d'un serveur HTTP mal configuré qui annonce, pour le type d'un document degrammaire, une valeur "text/plain" au lieu de "application/srgs+xml"). Un système d'adressageURI particulier peut imposer au possesseur de la ressource que celui-ci renvoie toujours, ouparfois, ou jamais le type du média. Le type de média déclaré est la valeur renvoyée par lepossesseur de la ressource ou, en l'absence de celle-ci, c'est le type de média préféré donnédans la grammaire. Le type de média déclaré peut être absent si le possesseur de la ressourcene renvoie pas de valeur ou si aucun type de média préféré n'est indiqué. Si le type de médiadéclaré est présent, alors il fait autorité.

Trois cas particuliers peuvent advenir : le processeur peut ne pas reconnaître le type de médiadéclaré, auquel cas la plateforme suscite un événement error.unsupported.formatde média déclaré est reconnu mais le type de média réel ne correspond pas, auquel cas la plateforme suscite un événement error.badfetch ; enfin, aucun type de média n'est déclaré et lecomportement dépend alors du système d'adressage URI particulier et des capacités duprocesseur de grammaire. Par exemple, le protocole HTTP 1.1 autorise l'introspection dudocument (voir le document [RFC2616], chapitre 7.2.1), le schéma de donnée se rabat sur untype de média par défaut, et le mode d'accès au fichier local ne définit aucune solution. Letableau suivant fournit quelques exemples informatifs :

Requête HTTP 1.1 Accès au fichier local

Type de médiarenvoyé par lepossesseur de laressource

text/plain application/srgs+xml <none>

Type de médiapréféré apparaissantdans la grammaire

Sans objet : le type renvoyé estprioritaire

application/srgs+xml

Type de médiadéclaré

text/plain application/srgs+xml application/srgs+xml

Comportement si letype de média réelest"application/srgs+xml"

Événementerror.badfetchsuscité : le typedéclaré et letype réel necorrespondentpas

Le type déclaré et le type réelcorrespondent : succès si le processeurreconnaît le type "application/srgs+xmlsinon un événementerror.unsupported.format est suscité

Les types de média provisoires du format de grammaire du W3C sont "application/srgs+xmlpour la forme XML et "application/srgs" pour la forme ABNF.

weight Définit le poids de la grammaire. Voir le chapitre 3.1.1.3

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

95 of 212 27/07/2012 22:31

Page 96: vxml

fetchhint Voir le chapitre 6.1. La valeur implicite est celle de la propriété grammarfetchhint

fetchtimeout Voir le chapitre 6.1. La valeur implicite est celle de la propriété fetchtimeout.

maxage Voir le chapitre 6.1. La valeur implicite est celle de la propriété grammarmaxage

maxstale Voir le chapitre 6.1. La valeur implicite est celle de la propriété grammarmaxstale

On doit définir soit un attribut src, soit une grammaire directe (mais pas les deux enmême temps), sinon un événement error.badfetch sera suscité.

Le langage VoiceXML 2.0 renforce également l'élément grammar afin de permettre lesdonnées de type « PCDATA » dans les formats des grammaires directes, parallèlementà la forme XML de la « spécification des grammaires de reconnaissance vocale » duW3C [SRGS].

Lors de l'appel d'une grammaire externe, la valeur de l'attribut src est une adresseURI, indiquant l'emplacement de la grammaire, qui comporte un éventuel fragmentidentifiant le nom d'une règle. Le chapitre 2.2 de la « spécification des grammaires dereconnaissance vocale » [SRGS] définit plusieurs formes d'appel de règle. Voici cellespermises sur l'élément grammar dans VoiceXML :

Appel d'une règle nommée dans une grammaire externe : L'attribut src est unappel d'adresse URI absolue ou relative d'une grammaire, laquelle adressecomprend un fragment identifiant le nom d'une règle. Cette forme d'appel derègle dans une grammaire externe obéit au comportement défini dans lechapitre 2.2.2 de la spécification [SRGS]. Si l'adresse URI mène à rien ou si le nomde la règle n'est pas défini dans la grammaire ou si ce n'est pas une règlepublique (activable) de cette grammaire, alors un événement error.badfetchest suscité.Appel de la règle racine d'une grammaire externe : L'attribut src est un appeld'adresse URI absolue ou relative d'une grammaire mais qui ne comprend pas defragment identifiant un nom de règle. Cette forme appelle implicitement la règleracine de la grammaire, comme défini dans le chapitre 2.2.2 de la spécification[SRGS]. Si l'adresse URI mène à rien ou si on ne peut pas appeler la grammairepar sa racine (voir le chapitre 4.7 de la spécification [SRGS]), alors un événementerror.badfetch est suscité.

Voici les formes d'appel de règle définies par la spécification [SRGS] mais non géréesdans VoiceXML 2.0 :

Appel de règle local : Une adresse URI composée seulement d'un fragment n'estpas permise. (Voir une définition dans le chapitre 2.2.1 de la spécification [SRGS]).Une valeur de ce type pour l'attribut src suscitera un événementerror.semantic.Appel des règles spéciales : Bien qu'une grammaire directe puisse appeler lesrègles spéciales SRGS (NULL, VOID et GARBAGE, il n'existe aucune prise en chargedes appels de règle spéciale sur l'élément grammar même. (Voir les définitionsdans le chapitre 2.2.3 de la spécification [SRGS]). Cette forme n'offre aucunegestion syntaxique et elle ne peut donc pas générer d'erreur.

3.1.2 Les grammaires DTMF

L'élément grammar peut servir à introduire une grammaire DTMF, laquelle :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

96 of 212 27/07/2012 22:31

Page 97: vxml

définit un ensemble de touches susceptibles d'être appuyées par un utilisateurpour effectuer une action ou fournir une information, et

lorsque l'entrée DTMF est avérée, renvoie une interprétation sémantiquecorrespondante. Il peut s'agir d'une valeur simple (comme une chaîne), d'unensemble non hiérarchique de couples attribut-valeur (tel qu'un jour, un mois etune année) ou d'un objet imbriqué (pour une requête complexe).

Les plateformes VoiceXML doivent obligatoirement gérer le format XML desgrammaires DTMF, défini dans l'annexe D de la spécification [SRGS], pour prétendre àla portabilité des applications.

Une grammaire DTMF se distingue d'une grammaire vocale au moyen de l'attribut modesur l'élément grammar. L'attribut xml:lang n'a aucune influence sur la gestion desgrammaires DTMF. Ces différences mises à part, les grammaires vocales et DTMF semanipulent de manière identique, dont la possibilité de définir une grammaire directeou d'appeler une grammaire externe. La gestion des types de média, les règles deportée et les règles de recherche sont également les mêmes.

Voici un exemple de grammaire DTMF directe de forme XML qui accepte en entrée "1 23" ou "#" :

<grammar mode="dtmf" version="1.0" root="root"> <rule id="root" scope="public"> <one-of> <item> 1 2 3 </item> <item> # </item> </one-of> </rule></grammar>

3.1.3 La portée des grammaires

Les grammaires des éléments d'entrée recouvrent toujours l'élément d'entréecontenant, c'est-à-dire qu'elles sont actives seulement quand l'élément d'entréecontenant a été choisi au cours de la phase de sélection de l'algorithme FIA. Lesgrammaires contenues dans les éléments d'entrée ne peuvent pas définir de portée,auquel cas un événement error.badfetch est suscité.

Les grammaires des liens reçoivent la portée de l'élément contenant le lien. Ainsi,quand elles sont définies dans le document racine d'application, les liens sontégalement actifs dans n'importe quel document chargé appartenant à l'application.Les grammaires contenues dans les liens ne peuvent pas définir de portée, auquel casun événement error.badfetch est suscité.

Les grammaires des formulaires reçoivent implicitement une portée de dialogue, desorte qu'elles sont actives seulement quand l'utilisateur est dans le formulaire. Si ellesreçoivent une portée de document, alors elles sont actives dès que l'utilisateur estdans le document. Si elles reçoivent une portée de document et que le document estcelui racine d'application, alors elles sont également actives dès lors que l'utilisateurest dans un autre document chargé appartenant à la même application. On peutdonner une portée de document à une grammaire de formulaire soit en définissantl'attribut scope sur l'élément form, soit en le définissant sur l'élément grammar. Si lesdeux sont définis, alors la grammaire tiendra compte de la portée définie sur l'élément

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

97 of 212 27/07/2012 22:31

Page 98: vxml

grammar.

Les grammaires des menus reçoivent également une portée de dialogue implicite etelles sont actives seulement quand l'utilisateur est dans le menu. Cependant, ellespeuvent recevoir une portée de document et être active dans tout le document, et, sicelui-ci est le document racine d'application, dans tout document chargé appartenantà l'application. Les grammaires contenues dans les choix de menu ne peuvent pasdéfinir de portée, auquel cas un événement error.badfetch est suscité.

Parfois, un formulaire peut avoir besoin que certaines grammaires soient actives danstout le document et que d'autres ne le soient que dans le formulaire. Ceci afin deminimiser les problèmes de recoupement. Pour ce faire, on peut donner à chaqueélément grammar individuel une portée propre dans la mesure où cette portée doit êtredifférent de celle de l'élément form :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form scope="document"> <grammar type="application/srgs"> #ABNF 1.0; language fr; mode voice; root $commande; public $commande = un | deux | trois; </grammar> <grammar type="application/srgs" scope="dialog"> #ABNF 1.0; language fr; mode voice; root $commande2; public $commande2 = quatre | cinq | six; </grammar> </form></vxml>

3.1.4 L'activation des grammaires

Lorsque l'interpréteur attend une entrée en résultat de la visite d'un élément d'entrée,voici les grammaires qui sont actives :

les grammaires de cet élément d'entrée, y compris celles contenues dans les liensde cet élément d'entrée ;

1.

les grammaires de son formulaire, y compris celles contenues dans les liens de ceformulaire ;

2.

les grammaires contenues dans les liens de son document, et les grammaires desmenus et des autres formulaires dans son document ayant reçu une portée dedocument ;

3.

les grammaires contenues dans les liens de son document racine d'application, etles grammaires des menus et des formulaires dans son document racined'application ayant reçu une portée de document.

4.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

98 of 212 27/07/2012 22:31

Page 99: vxml

les grammaires définies par les gestionnaires d'événements implicites de laplateforme, tels que les événements help, exit et cancel.

5.

Dans le cas où une entrée est avérée dans plusieurs grammaires actives, c'est la listeprécédente qui définit l'ordre de préséance. Si l'entrée est avérée dans plusieursgrammaires actives avec la même priorité, alors la préséance se détermine dansl'ordre du document : la première grammaire dans l'ordre du document aura la prioritéla plus élevée. Si aucune grammaire n'est active dans l'attente d'une entrée, alors laplateforme doit susciter un événement error.semantic. L'erreur sera suscitée dans lecontexte de l'élément en cours d'exécution. Les menus se comportent, en ce quiconcerne l'activation des grammaires, comme les formulaires équivalents (voir lechapitre 2.2.1).

Si l'élément de formulaire est modal (c'est-à-dire que son attribut mode a la valeur"true"), alors toutes les grammaires, sauf les siennes, sont neutralisées dans l'attented'une entrée. Si l'entrée est avérée dans la grammaire d'un formulaire (ou d'un menu)autre que le formulaire (ou le menu) courant, alors le contrôle passe à l'autreformulaire (ou menu). Si, en raison d'une correspondance, le contrôle quitte leformulaire courant, alors toutes les données du formulaire courant seront perdues.

L'activation des grammaires n'est pas affectée par la propriété inputmodes. Par exemple,quand la propriété inputmodes impose une entrée vocale, les grammaires DTMFresteront actives mais ne pourront être sollicitées.

3.1.5 L'interprétation sémantique de l'entrée

La « spécification des grammaires de reconnaissance vocale » définit l'élément tagdont le contenu permet l'interprétation sémantique des grammaires vocales ou DTMF(voir le chapitre 2.6 de la spécification [SRGS]).

La « spécification de l'interprétation sémantique de la reconnaissance vocale » [SISR]décrit la syntaxe et la sémantique de ces éléments tag, et définit comment calculerl'interprétation sémantique d'une entrée d'utilisateur en utilisant le contenu deséléments tag associés aux atomes et règles qui correspondent. L'interprétationsémantique peut s'appliquer dans VoiceXML, comme décrit dans le chapitre 3.1.6.

3.1.6 L'application des résultats de l'interprétation sémantique auformulaires VoiceXML

L'interprétation sémantique issue d'une grammaire SRGS [SRGS] doit être appliquée àune ou plusieurs variables ECMAScript VoiceXML. Le processus initiateur diffèrelégèrement entre les résultats de niveau formulaire et ceux de niveau champ ; cesdifférences seront examinées dans les chapitres suivants. Le format de l'interprétationsémantique, utilisant soit le langage de balisage sémantique en langue naturelleNLSML [NLSML], soit le format de sortie apparenté ECMAScript de la spécification[SISR], ne revêt pas d'importance pour cette discussion. Pour les besoins del'explication, le résultat réel issu du logiciel de reconnaissance est supposé s'appliquerdans un format apparenté ECMAScript identique à la représentation trouvée dans lavariable application.lastresult$.interpretation, abordée dans le chapitre 5.1.5.

Une grammaire peut éventuellement correspondre mais ne pas renvoyerd'interprétation sémantique. Auquel cas, la plateforme utilisera la chaîne de texte brutde l'énonce comme résultat sémantique. Sinon, ce cas est traité exactement comme si

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

99 of 212 27/07/2012 22:31

Page 100: vxml

l'interprétation sémantique consistait en une valeur simple.

Chaque élément d'entrée a un nom de facette qui peut servir à extraire une partie del'interprétation sémantique entière. Le nom de facette corresponde à la valeur del'attribut slot, le cas échéant (seulement possible pour les éléments field), ou, sinon,à la valeur de l'attribut name (pour les éléments field sans attribut slot ainsi que pourles autres éléments d'entrée). Si ni l'attribut slot ni l'attribut name sont présents, alors lenom de facette n'est pas défini.

Le nom de facette sert au cours de la phase de traitement de l'algorithme FIA pourdéterminer si un élément d'entrée correspond ou non. Il y a correspondance lorsque lenom de facette est le même que celui d'une propriété de niveau supérieur ou bienlorsqu'un nom de facette sert à sélectionner une sous-propriété. Une propriété dont lavaleur n'est pas définie (c'est-à-dire, la valeur ECMAScript "undefined") ne correspondrapas. Tout comme les noms de facette non définis ne correspondront jamais. Ontrouvera des exemples dans le chapitre 3.1.6.3. Remarquez qu'une valeur d'attributslot peut remplir plusieurs éléments d'entrée si les noms de facette des élémentsd'entrée sont les mêmes.

Les chapitres suivants traitent de l'application des résultats de niveau formulaire et deniveau champ. Il y aura également une brève explication d'autres problèmes tels quel'application de la sémantique en langue naturelle au langage ECMAScript, le passagedes informations issues des résultats de la reconnaissance vocale automatique aulangage VoiceXML et le traitement des contradictions entre le résultat d'interprétationet le formulaire VoiceXML.

3.1.6.1 L'application des résultats de niveau formulaire

Les grammaires définies à un niveau formulaire produisent un résultat de niveauformulaire pouvant remplir plusieurs éléments d'entrée simultanément. Il peut arriver,à tout instant, que ce soit dans un élément initial ou bien dans un élément d'entrée,qu'une entrée d'utilisateur corresponde à une grammaire de niveau formulaire active.

Prenons le résultat de l'interprétation de la phrase « Je voudrais un verre d'eau et troisgrandes pizzas au poivron et aux champignons ». L'interprétation sémantique peut secopier dans la variable application.lastresult$.interpretation comme :

{ boisson: "eau", pizza: { quantite: "3", taille: "grande", garniture: [ "poivron", "champignon" ] }}

Le tableau suivant illustre comment ce résultat issu d'une grammaire de niveauformulaire sera affecté aux divers éléments d'entrée dans le formulaire. Remarquezque tous les éléments d'entrée susceptibles d'être remplis le sont simultanément. Lesvaleurs existantes des variables d'éléments d'entrée correspondants seront écraséeset ces éléments seront marqués pour le traitement filled au cours de la phase detraitement de l'algorithme FIA, comme décrit dans le chapitre 2.4 et l'annexe C.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

100 of 212 27/07/2012 22:31

Page 101: vxml

Tableau 31 : Les affectations des grammaires de niveau formulaire

Champ VoiceXMLValeur

ECMAScriptaffectée

Explication

1. <field name="boisson"/> --ou--<object name="boisson"/> --ou--<record name="boisson"/>

"eau" Par défaut, unélément d'entréereçoit la propriété derésultat de niveausupérieur dont le nomcorrespond à celui del'élément d'entrée.

2. <field name="..." slot="boisson"/> "eau" Lorsqu'il est défini surun champ, le nom defacette écrase le nomdu champ pour lasélection de lapropriété de résultat.

3. <field name="pizza"/> --ou--<object name="pizza"/> --ou--<record name="pizza"/> --ou--<field name="..." slot="pizza"/>

{quantite: "3",taille: "grande",garniture:["poivron","champignon"]}

Les attributs name ouslot de l'élémentd'entrée peuventsélectionner unepropriété qui est unevariable ECMAScriptnon scalaire, de lamême façon qu'onsélectionne unevaleur scalaire dansl'exemple précédent.Toutefois, l'applicationdoit alors gérerl'inspection descomposants del'objet. Cetteméthode ne profitepas de l'algorithmede remplissage deformulaire VoiceXML,dans la mesure où lesfacettes absentes durésultat ne feraientpas automatiquementl'objet d'une invite.Cela peut suffire pourles situations où leserveur est préparéau traitement d'unobjet structuré. Sinon,une application peutpréférer la méthodedécrite dans

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

101 of 212 27/07/2012 22:31

Page 102: vxml

l'exemple suivant.

4. <field name="..." slot="pizza.quantite"/><field name="..." slot="pizza.taille"/>

"3""grande"

L'attribut slot peutservir à sélectionnerune sous-propriété durésultat. Cetteapproche permet dedistribuer le résultatsur plusieurs champs.

5. <field name="..." slot="pizza.garniture"/> ["poivron","champignon"]

La propriétésélectionnée peutêtre un objetcomposite.

On peut expliquer les exemples <field ... slot="pizza.quelquechose"> précédents pardes règles qui sont compatibles avec les attributs name et slot (et qui en sont lesprolongements directs) de VoiceXML 1.0 :

L'attribut slot d'un élément field est une expression ECMAScript (très limitée)qui sélectionne une certaine partie du résultat à affecter au champ. Outre lasélection de la propriété de résultat de niveau supérieur, l'attribut peutsélectionner des propriétés à des niveaux d'imbrication arbitraires, en utilisantune liste de noms d'éléments/propriétés, séparés par des points, comme, parexemple, « pizza.quantite » et « commande.pizza.garniture ».

1.

Si on se sert de l'attribut slot d'un champ pour sélectionner une sous-propriété durésultat et que la sous-propriété n'existe pas dans le résultat, alors le champ necorrespond pas au résultat (voir le chapitre 3.1.6).

2.

3.1.6.2 L'application d'un résultat de niveau champ

Les grammaires définies dans un élément d'entrée produisent un résultat de niveauchamp pouvant seulement remplir l'élément d'entrée particulier qui les contient. Cesgrammaires sont seulement actives quand l'algorithme FIA visite cet élément d'entréeparticulier. Cela peut se révéler utile, par exemple, pour des dialogues dirigés danslesquels l'utilisateur fait l'objet d'une invite individuelle pour chaque élément d'entrée.

Un résultat de niveau champ remplit l'élément d'entrée associé de la manièresuivante :

Si l'interprétation est un résultat simple, on affecte celui-ci à la variable d'élémentd'entrée.Si l'interprétation est une structure et que le nom de facette correspond à unepropriété, alors on affecte la valeur de cette propriété à la variable d'élémentd'entrée.Sinon, on affecte le résultat sémantique entier.

Ce processus permet à un élément d'entrée d'extraire une propriété particulière d'uneinterprétation sémantique. On peut le combiner avec un élément filled pour obtenirun contrôle encore plus précis :

<field name="getdate"> <prompt>Quand voulez-vous voler ?</prompt>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

102 of 212 27/07/2012 22:31

Page 103: vxml

<grammar src="http://serveur.example.com/date.grxml"/> <!-- Cette grammaire renvoie toujours un objet contenant des valeurs de chaîne pour les propriétés day, month et year -->

<filled> <assign name="getdate.datestring" expr="getdate.year + getdate.month + getdate.day"/> </filled></field>

3.1.6.3 Autres exemples

Un nom de facette avéré permet à un élément d'entrée d'extraire une partie d'uneinterprétation sémantique. Prenons ce résultat modifié inspiré de l'exemple précédent :

application.lastresult$.interpretation ={ boisson: { taille: 'grande', liquide: 'eau' }, pizza: { quantite: '3', taille: 'grande', garniture: ['poivron', 'champignon'] }, accompagnement: undefined}

Le tableau suivant revoit la définition du moment où le nom de facette correspond àune propriété dans le résultat :

Tableau 32 : La correspondance des noms de facette

nom de facette correspondance ou pas ?

undefined ne correspond pas

boisson correspond ; propriété de niveau supérieur

pizza correspond ; propriété de niveau supérieur

accompagnement ne correspond pas ; aucune valeur définie

taillene correspond pas ; non une propriété deniveau supérieur

pizza.taille correspond ; sous-propriété

pizza.liquide ne correspond pas

On peut aussi comparer les comportements des résultats de niveau formulaire et ceuxde niveau champ. Pour cela, prenons le document suivant :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form id="exempleFormulaire"> <grammar src="niveauformulaire.grxml"/> <initial> Dites quelque chose. </initial>

<field name="x"> <grammar src="fieldx.grxml"/>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

103 of 212 27/07/2012 22:31

Page 104: vxml

</field>

<field name="z" slot="y"> <grammar src="fieldz.grxml"/> </field> </form> </vxml>

Cet exemple définit deux variables d'élément d'entrée : « x » et « z ». Les noms defacette correspondant sont respectivement « x » et « y ». Le tableau suivant décritl'affectation de ces variables selon la grammaire reconnue et le résultat sémantiquerenvoyé. Le raccourci « valeurX » signifie « la valeur de résultat simple ou d'objetstructuré associée à la propriété x ».

Tableau 33 : Les affectations des variables selon la grammaire et le résultat sémantique

application.lastresult$.interpretation

résultat de niveauformulaire

(niveauformulaire.grxml)

résultat deniveau

champ danschamp x

(fieldx.grxml)

résultat deniveau

champ danschamp z

(fieldz.grxml)

= 'bonjour' pas d'affectation ; cycle FIA x = 'bonjour' z = 'bonjour'

= { x: valeurX } x = valeurX x = valeurXz = { x:valeurX }

= { y: valeurY } z = valeurYx = { y:valeurY }

z = valeurY

= { z: valeurZ } pas d'affectation ; cycle FIAx = { z:valeurZ }

z = { z:valeurZ }

= { x: valeurX,y: valeurY,z: valeurZ }

x = valeurXz = valeurY

x = valeurX z = valeurY

= { a: valeurAb: valeurB }

pas d'affectation; cycle FIAx = { a:valeurA,b: valeurB }

z = { a:valeurA,b: valeurB }

Au niveau du formulaire, les résultats simples comme la chaîne « bonjour » necorrespondent à aucun des éléments d'entrée ; les objets structurés affectent toutesles variables d'éléments d'entrée avec les noms de facette correspondants. Au niveaudu champ, les résultats simples sont toujours affectés à la variable d'élémentd'entrée ; les objets structurés extraieront la propriété correspondante, si elle existe,sinon, le résultat sémantique entier sera assigné à la variable d'élément d'entrée.

3.1.6.4 Autres problèmes

1. L'application depuis une sémantique en langue naturelle vers ECMAScript :Si on se sert du langage de balisage sémantique en langue naturelle ([NLSML]), ilfaudra définir une application depuis la représentation NLSML vers des objetsECMAScript. Les deux types de représentation ayant des structures imbriquéessimilaires, cette application est assez directe. La spécification NLSML explique endétails cette application.

2. Le passage des résultats sémantiques de la reconnaissance vocale automatique à

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

104 of 212 27/07/2012 22:31

Page 105: vxml

VoiceXML :Le résultat du traitement des balises sémantiques d'une grammaire de reconnaissancevocale automatique du W3C correspond à la valeur de l'attribut de la règle racine unefois que toutes les évaluations des rattachements sémantiques ont été effectuées. Enoutre, la règle racine (comme tous les non-terminaux) possède une variable textassociée qui contient les séries d'atomes de l'énoncé régi par ce non-terminal. Dans leprocessus de mise à disposition des résultats de la reconnaissance vocale automatiqueaux documents VoiceXML, la plateforme VoiceXML n'est pas seulement responsable duremplissage des champs VoiceXML en fonction de la valeur de l'attribut de la règleracine, comme décrit précédemment, mais aussi du remplissage des variables fictivesde ces champs. La valeur de la variable fictive nom$.utterance du champ devrait êtrela même que celle de la variable text de la règle racine de la reconnaissance vocaleautomatique. La plateforme est également responsable de l'instanciation de la valeurde la variable fictive nom$.confidence qui dépend des informations fournies par laplateforme de reconnaissance vocale automatique, ainsi que de la variablenom$.inputmode selon qu'il s'agissait d'un traitement vocal ou DTMF. Enfin, elle estresponsable de la mise en place de ces informations dans le tableauapplication.lastresult$, définie dans le chapitre 5.1.5 (particulièrement, lesvariables application.lastresult$.utterance,application.lastresult$.inputmode etapplication.lastresult$.interpretation), à l'exception de la variableapplication.lastresult$.confidence, dont la plateforme fixe la valeur commeétant la valeur de fiabilité de l'interprétation de l'énoncé entier.

3. Les contradictions entre les résultats sémantiques et les champs VoiceXML :L'application des résultats sémantiques à VoiceXML s'appuie sur une coordinationétroite entre la grammaire de reconnaissance vocale automatique et le balisageVoiceXML. Étant donné que rien, dans le présent cadre, ne vient faire respecter lacohérence entre une grammaire et le dialogue VoiceXML associé, il peut survenir descontradictions du fait de l'inattention du développeur. Comme il est difficile dedistinguer le comportement du dialogue en présence de ces contradictions de celuidans certaines situations normales, il est extrêmement important de vérifier lacohérence des informations. Quelques exemples de contradictions :

Les résultats sémantiques contiennent des informations supplémentaires qui necorrespondent pas aux champs VoiceXML. Cela peut se produire à cause d'uneerreur du développeur ou à cause de l'emploi d'une grammaire plus riche que cequi est demandé par l'application VoiceXML. Ces informations supplémentairesseront ignorées.L'application VoiceXML attend du résultat des informations manquantes. Celapeut également venir d'une erreur du développeur ou du fait que l'utilisateur n'asimplement pas fourni la valeur d'une facette particulière. Auquel cas,l'algorithme FIA poursuit normalement et la valeur manquante sera demandée àl'utilisateur. Si le problème était en fait causé par une erreur du développeur etque la grammaire est effectivement incapable de reconnaître la valeur correcte,l'algorithme FIA continuera à demander la valeur manquante jusqu'à tant qu'ilinvoque les mesures que la plateforme et l'application ont mis en place en casd'échecs de correspondance répétés.Enfin, les informations peuvent être présentes à la fois dans les champs VoiceXMLet dans le résultat de la reconnaissance vocale automatique mais dans desformats incompatibles. Par exemple, une grammaire de reconnaissance vocaleautomatique pourrait fournir un objet structuré à propos d'une boisson,comprenant la taille de cette boisson et une indication selon laquelle celle-ci est

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

105 of 212 27/07/2012 22:31

Page 106: vxml

diététique ou non, mais le formulaire VoiceXML prévoit seulement une chaînecomposant le nom de la boisson. Dans ces situations, le comportement dusystème dépendra de ce qui est fait des résultats. Par exemple, l'objet structurépeut avoir été transmis à un script côté serveur qui attend une chaîne, et lesconséquences dépendraient alors du script côté serveur.

Afin de répondre à ces problèmes potentiels, le comité examine diverses approchespermettant de garantir une certaine cohérence entre la grammaire et les champsVoiceXML.

4. La sortie du système

4.1 Les invites

L'élément prompt contrôle la sortie de la voix synthétisée et des sons préenregistrés.Conceptuellement, les invites sont instantanément mises en file d'attente de lecture,de sorte que l'interprétation se poursuit jusqu'au point où l'utilisateur doive fournir uneentrée. Les invites sont alors jouées et le système attend une entrée d'utilisateur. Unefois l'entrée reçue du sous-système de reconnaissane vocale (ou du logiciel dereconnaissance DTMF), l'interprétation se poursuit.

L'élément prompt a les attributs suivants :

Tableau 34 : Les attributs de l'élément prompt

bargeinDétermine si l'utilisateur peut interrompre une invite ounon. Sa valeur implicite est celle de la propriétébargein. Voir le chapitre 6.3.4.

bargeintype

Fixe le type de l'interruption : vocal pour la valeur"speech" ou par mot magique pour la valeur "hotword".Sa valeur implicite est celle de la propriété bargeintype.Voir le chapitre 6.3.4.

condUne expression dont l'évaluation de la valeur, aprèsconversion en un booléen, donne "true pour que l'invitesoit jouée. La valeur implicite est "true".

count

Un nombre permettant d'émettre des invitesdifférentes lorsque l'utilisateur accompli quelque choserépétitivement. Si l'attribut est omis, alors la valeurimplicite est "1".

timeout

Le délai de temporisation utilisé pour l'entréed'utilisateur suivante. La valeur est du type désignationde temps (voir le chapitre 6.5). Le délai detemporisation implicite en l'absence d'une entrée estpropre à la plateforme.

xml:langL'identificateur de langue de l'invite. Si l'attribut estomis, la valeur implicite est celle indiquée par l'attributxml:lang du document.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

106 of 212 27/07/2012 22:31

Page 107: vxml

xml:base

Déclare l'adresse URI de base à partir de laquelle lesadresses URI relatives dans l'invite seront résolues.Cette déclaration d'adresse URI de base est prioritairesur celle de l'élément vxml. En l'absence d'unedéclaration locale, la valeur est héritée en descendantla hiérarchie du document.

4.1.1 Le balisage de la parole

Le modèle du contenu de l'élément prompt se fonde sur le « langage de balisage de lasynthèse vocale (SSML) 1.0 » [SSML].

Les éléments de balisage de la parole suivants sont définis dans la spécification [SSML]et disponibles dans VoiceXML 2.0. Voir les définitions et les exemples dans le « langagede balisage de la synthèse vocale 1.0 » [SSML].

Tableau 35 : Les éléments SSML disponibles dans VoiceXML

Élément EmploiChapitre

(dans[SSML])

audioDéfinit les fichiers sons à jouer et le texte àlire.

3.3.1

break Définit une pause dans la sortie vocale. 3.2.3

descDonne une description d'une source audionon-verbale dans l'élément audio.

3.3.3

emphasisIndique que le texte englobé devrait êtreprononcé avec emphase.

3.2.2

lexiconDéfinit un lexique de prononciation pourl'invite.

3.1.4

mark Ignoré par les plateformes VoiceXML. 3.3.2

metaDéfinit les propriétés meta et http-equiv pourl'invite.

3.1.5

metadataDéfinit un contenu de métadonnées pourl'invite.

3.1.6

pIdentifie le texte englobé comme unparagraphe contenant zéro ou plus phrases.

3.1.7

phonemeDéfinit une prononciation phonétique pour letexte englobé.

3.1.9

prosodyDéfinit une information prosodique pour letexte englobé.

3.2.4

say-asDéfinit le type de structure de texte contenudans l'élément.

3.1.8

sIdentifie le texte englobé comme unephrase.

3.1.7

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

107 of 212 27/07/2012 22:31

Page 108: vxml

Élément EmploiChapitre

(dans[SSML])

audioDéfinit les fichiers sons à jouer et le texte àlire.

3.3.1

subDéfinit un texte sonore de remplacement dutexte contenu.

3.1.10

voiceDéfinit les caractéristiques de la voix pour laprononciation du texte.

3.2.1

Lorsqu'on les utilise dans VoiceXML, les éléments audio (voir le chapitre 4.1.3) etsay-as (voir l'annexe P) acceptent d'autres propriétés. Le langage VoiceXML admetégalement la présence des éléments enumerate et value dans les éléments prompt.

La plateforme VoiceXML doit être un « processeur SSML conforme » comme défini parla spécification [SSML]. Bien que cette définition exige d'une plateforme qu'elle puissetraiter des documents ayant un ou plusieurs attributs xml:lang, elle n'exige pas qu'ellesoit multilingue. Lorsqu'elle rencontre une langue non reconnue, la plateforme susciteun événement error.unsupported.language indiquant quelle langue n'est pasreconnue dans sa variable message.

4.1.2 Les invites de base

Nous avons vu des invites dans les exemples précédents :

<prompt>Veuillez dire le nom de votre ville.</prompt>

On peut abandonner le balisage <prompt> ... </prompt> si ::

Il n'est pas nécessaire de définir un attribut d'invite (comme l'attribut bargein), et

L'invite se compose entièrement de texte de type « PCDATA » (c'est-à-dire, qui necontient pas de balises vocales) ou bien juste d'un élément audio ou value.

Par exemple, il existe aussi des invites ayant cet aspect :

Veuillez dire le nom de votre ville.

<audio src="dis_ta_ville.wav"/>

Dans cet exemple, cependant, les balises englobantes de l'élément prompt sontobligatoires en raison de la présence de balises vocales :

<prompt>Veuillez <emphasis>dire</emphasis> le nom de votre ville.</prompt>

Lorsqu'on indique un contenu d'invite sans utilisation explicite d'un élément prompt,alors les attributs de l'invite se définissent comme indiqué dans le tableau 34.

4.1.3 L'invite sonore

Les invites peuvent se composer de n'importe quelle combinaison de fichiers

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

108 of 212 27/07/2012 22:31

Page 109: vxml

préenregistrés, flux audio ou voix synthétisée :

<prompt> Bienvenue chez Graines à gogo. <audio src="rtsp://www.piafcauserie.example.com/grive.wav"/> Ce mois-ci nous proposons le barril de 250 kg de graines de chardon à <say-as interpret-as="currency">299.95€</say-as>

frais d'expédition et de transport compris. <audio src="http://www.piafcauserie.example.com/tourterelle.wav"/></prompt>

On peut jouer un son dans n'importe quelle invite. On peut indiquer le contenu sonorevia une adresse URI et aussi, dans VoiceXML, dans un élément audio enregistréprécédemment :

<prompt> Votre message d'accueil enregistré est <audio expr="accueil"/> Pour le réenregistrer, tapez 1. Pour le conserver, tapez dièse. Pour revenir au menu principal, tapez étoile M. Pour quitter, tapez étoile, étoile Q.</prompt>

L'élément audio peut comporter un contenu de remplacement au cas où l'échantillonaudio ne serait pas disponible :

<prompt> <audio src="bienvenue.wav"> <emphasis>Bienvenue</emphasis> sur le portail vocal. </audio></prompt>

Si le fichier son est injouable (par exemple, à cause d'attributs src ou expr se résolvanten une adresse URI invalide, d'un fichier dans un format non reconnu, etc.), alors lecontenu de l'élément audio sera joué à la place. Ce contenu peut comprendre dutexte, du balisage vocal ou un autre élément audio. Si le fichier son est injouable etque le contenu de l'élément audio est vide, aucun son ne sera joué et aucunévénement d'erreur ne sera suscité.

Si l'élément audio contient un attribut expr évalué à la valeur ECMAScript "undefined",alors l'élément, y compris son contenu de remplacement, sera ignoré. Cela permet audéveloppeur de définir des éléments audio ayant un contenu assigné dynamiquementqui, si on ne les demande pas, peuvent être ignorés en assignant une valeur nulle àleur attribut expr. Par exemple, le code suivant montre comment se servir de cettecaractéristique pour lire une main de cartes au moyen de clips audio concaténés :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form> <!-- Le script contient la fonction direCarte(type,position)

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

109 of 212 27/07/2012 22:31

Page 110: vxml

qui reçoit en entrée le type de la description de carte (son ou texte) et sa position dans un tableau, et renvoie la description de carte sélectionnée à la position indiquée dans le tableau ; s'il n'y a pas de description à la position demandée, alors elle renvoie la valeur ECAMScript "undefined" --> <script src="jeudecartes.js"/>

<field name="prendrecarte"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt> <audio src="vous_avez.wav">Vous avez les cartes suivantes : </audio> <!-- on décrit une main de 5 cartes au maximum --> <audio expr="direCarte(son,1)"><value expr="direCarte(texte,1)"/></audio> <audio expr="direCarte(son,2)"><value expr="direCarte(texte,2)"/></audio> <audio expr="direCarte(son,3)"><value expr="direCarte(texte,3)"/></audio> <audio expr="direCarte(son,4)"><value expr="direCarte(texte,4)"/></audio> <audio expr="direCarte(son,5)"><value expr="direCarte(texte,5)"/></audio> <audio src="une_autre.wav">Voulez-vous une autre carte ? </audio> </prompt> <filled> <if cond="prendre"> <script>prendreAutreCarte()</script> <clear/> <else/> <goto next="./parier.vxml"/> </if> </filled> </field></form></vxml>

Les attributs de l'élément audio définis dans la spécification [SSML] sont :

Tableau 36 : Les attributs de l'élément audio hérités de SSML

srcL'adresse URI de l'invite sonore. Voir les formats de fichier sonobligatoires dans l'annexe E ; on peut utiliser d'autres formatssi la plateforme les gère.

Les attributs de l'élément audio seulement définis dans VoiceXML sont :

Tableau 37 : Les attributs de l'élément audio ajoutés dans VoiceXML

fetchtimeoutVoir le chapitre 6.1. Sa valeur par défaut est celle dela propriété fetchtimeout.

fetchhintVoir le chapitre 6.1. Sa valeur par défaut est celle dela propriété audiofetchhint.

maxageVoir le chapitre 6.1. Sa valeur par défaut est celle dela propriété audiomaxage.

maxstaleVoir le chapitre 6.1. Sa valeur par défaut est celle dela propriété audiomaxstale.

exprUne expression ECMAScript qui détermine la sourcedu son à jouer. Cette expression est soit une référence

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

110 of 212 27/07/2012 22:31

Page 111: vxml

à un son enregistré précédemment via l'élémentrecord, soit se résoud en l'adresse URI d'une resourceaudio à rechercher.

On ne peut définir qu'un seul exactement entre les attributs src ou expr, sinon, unévénement error.badfetch sera suscité.

Remarquez que la lecture du son en continu est une optimisation apportée par laplateforme, c'est-à-dire que la plateforme peut commencer le traitement du contenuaudio au fur et à mesure qu'il parvient et ne pas attendre son chargement complet. Onpeut se servir de l'attribut de préchargement fetchhint pour demander le chargementcomplet du son avant lecture.

4.1.4 L'élément value

L'élément value sert à insérer la valeur d'une expression dans une invite. Il a un seulattribut :

Tableau 38 : L'attribut de l'élément value

expr L'expression à restituer.

Par exemple, si la variable n vaut "12" dans cette invite :

<prompt> <value expr="n*n"/> est le carré de <value expr="n"/>.</prompt>

Alors le moteur de synthèse vocale recevra la phrase « 144 est le carré de 12 ».

La façon dont l'attribut de l'élément value jouera se trouve sous le contrôle dubalisage de synthèse vocale environnant. Par exemple, la valeur peut être jouéecomme une date :

<var name="date" expr="'2000/1/20'"/><prompt> <say-as interpret-as="date"> <value expr="date"/> </say-as></prompt>

Le texte inséré par l'élément value ne fait pas l'objet d'une interprétation particulièreet, notamment, il n'est pas analysé en tant que document ou fragment de document[SSML]. Les caractères spéciaux XML (« & », « > » et « < ») ne sont pas non plustraités spécialement et ils n'ont pas besoin d'être masqués. On obtiendra la mêmechose en insérant littéralement le texte calculé par l'élément value dans une sectionde type « CDATA ». Par exemple, l'assignation de variable suivante :

<script> <![CDATA[ e1 = 'AT&T'; ]]></script>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

111 of 212 27/07/2012 22:31

Page 112: vxml

Si on l'appelle dans un élément prompt comme :

<prompt> L'action <value expr="e1"/> vaut 1€. </prompt>

Voici alors la sortie produite .

L'action AT&T vaut 1€.

4.1.5 L'interruption

Lorsqu'une plateforme d'implémentation gère les interruptions, l'auteur de l'applicationpeut indiquer si l'utilisateur peut interrompre [Ndt. to bargein] une invite par unecommande vocale ou DTMF. Cette caractéristique permet d'accélérer la conversationmais elle n'est pas toujours souhaitée. Si l'auteur de l'application exige de l'utilisateurqu'il entende la totalité d'un avertissement, d'un avis légal ou d'une publicité, ilfaudrait désactiver l'interruption. C'est le rôle de l'attribut bargein :

<prompt bargein="false"><audio src="avis_legal.wav"/></prompt>

Les utilisateurs peuvent interrompre une invite dont la valeur de l'attribut bargein est"true" et ils doivent, au contraire, attendre la fin de l'invite pour la valeur "false". Aucas où plusieurs invites sont en file d'attente, c'est l'attribut bargein de chaque invitequi régit la période pendant laquelle l'invite concernée est jouée. Si une interruption seproduit au cours de n'importe quelle invite d'une séquence, alors aucune des invitessuivantes n'est jouée (même celles dont l'attribut bargein vaut "false". Si l'attributbargein n'est pas défini, alors c'est la valeur de la propriété bargein qui sera utilisée, sielle est fixée.

Lorsque la valeur de l'attribut bargein est "false, alors l'entrée n'est pas mise enmémoire tampon pendant la lecture de l'invite et toute entrée DTM tamponnée dansun état transitoire est effacée du tampon (le chapitre 4.1.8 décrit la collecte desentrées pendant les états transitoires).

Remarquez que les moteurs de reconnaissance vocale et les plateformesd'implémentation ne gère pas tous l'interruption. Pour qu'une plateforme puisse gérerles interruptions, elle doit reconnaître au moins l'un des types d'interruption décritsdans le chapitre 4.1.5.1.

4.1.5.1 Le type d'interruption

Quand l'interruption est permise, on peut se servir de l'attribut bargeintype poursuggérer le type d'interruption que la plateforme effectuera en réponse à unecommande vocale ou DTMF. Les valeurs possibles de cet attribut sont :

Tableau 39 : Les valeurs de l'attribut bargeintype

speech

L'invite est interrompue dès qu'une commandevocale ou DTMF est détectée. L'invite est arrêtéeindépendamment du fait que l'entrée correspondeou non à une grammaire, quelles que soient lesgrammaires actives.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

112 of 212 27/07/2012 22:31

Page 113: vxml

hotword

L'invite n'est pas arrêtée tant qu'unecorrespondance complète à une grammaire activene sera pas détectée. L'entrée qui ne correspond pasà une grammaire est ignorée (remarquez que c'estaussi le cas pendant une période de temporisation) ;par conséquent, il ne sera jamais généréd'événement nomatch quand l'attribut bargein a lavaleur "hotword".

Lorsque l'attribut bargeintype n'est pas défini, alors on utilise la valeur de la propriétébargeintype. Les implémentations prétendant gérer les interruptions sont obligées degérer au moins l'un de ces deux types. La présence simultanée de ces types dans lamême file d'attente d'invites est susceptible d'entraîner un comportementimprévisible, cette pratique n'est donc pas encouragée.

Quand l'attribut bargeintype a la valeur "speech", le sens exact du terme « commandevocale » dépend forcément de l'implémentation, en raison de la complexité de latechnologie de reconnaissance vocale. On s'attend à ce que l'invite s'arrête dès lorsque la plateforme peut déterminer avec certitude que l'entrée est vocale. Il estsouhaitable d'arrêter l'invite aussitôt que possible ce qui permet d'éviter l'effet de« bégaiement » selon lequel l'utilisateur s'arrête à mi-énoncé et recommence encroyant que le système ne l'a pas entendu.

4.1.6 La sélection d'une invite

Les invites dégressives sont celles susceptibles de changer à chaque invite. Les invitesappelant un renseignement peuvent devenir de plus en plus abruptes, à supposer quel'utilisateur se familiarise avec la tâche. Les messages d'erreur peuvent devenir plusdétaillés, à supposer que l'utilisateur a besoin d'assistance. Ou bien les invites peuventtout simplement changer pour rendre l'interaction plus intéressante.

Tous les élément d'entrée, l'élément initial et l'élément menu intègre un compteurd'invites qui est réinitialisé à la valeur "1" à chaque accès au formulaire ou au menu.Dès lors que le système sélectionne un élément d'entrée donné au cours de la phasede sélection de l'algorithme FIA, dans laquelle il détermine la sélection et la mise enfile d'attente normales des invites (c'est-à-dire que, comme décrit dans lechapitre 5.3.6, l'itération précédente de l'algorithme FIA n'a pas terminé sur ungestionnaire de capture qui ne comportait pas d'élément reprompt), le compteurd'invites associé à l'élément en question est incrémenté. Tel est le mécanisme quisous-tend les invites dégressives.

Par exemple, voici un formulaire avec une invite de niveau formulaire et des invites deniveau champ :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="degressif"> <block> <prompt bargein="false"> Bienvenue dans l'enquête sur la consommation des glaces.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

113 of 212 27/07/2012 22:31

Page 114: vxml

</prompt> </block> <field name="parfum"> <grammar mode="voice" version="1.0" root="racine"> <rule id="racine" scope="public"> <one-of> <item>vanille</item> <item>chocolat</item> <item>fraise</item> </one-of> </rule> </grammar> <prompt count="1">Quel est votre parfum favori ?</prompt> <prompt count="3">Dites chocolat, vanille ou fraise.</prompt> <help>Désolé, on ne peut pas vous aider.</help> </field></form></vxml>

Et maintenant, une conversation utilisant ce formulaire :

O : Bienvenue dans l'enquête sur la consommation des glaces.

O : Quel est votre parfum favori ? (la valeur du compteur d'invites du champs« parfum » est "1")

H : Pécan praline.

O : Je ne comprends pas.

O : Quel est votre parfum favori ? (la valeur du compteur d'invites estmaintenant de "2")

H : Pécan praline.

O : Je ne comprend pas.

O : Dites chocolat, vanille ou fraise. (la valeur du compteur est "3")

H : Et si je déteste ces parfums ?

O : Je ne comprends pas.

O : Dites chocolat, vanille ou fraise. (la valeur du compteur est "4")

H : ...

Cet exemple illustre juste l'emploi des compteurs d'invites. Un formulaire plus finoffrirait un éventail de choix plus complet et traiterait les valeurs hors définition demanière plus souple.

À l'instant de sélectionner une invite, le compteur d'invites est examiné. C'est lasous-invite dont la valeur de l'attribut count est inférieure ou égale à celle du compteurd'invites qui est retenue. Si une invite n'a pas d'attribut count, alors le compteur estcensé avoir la valeur "1".

Une invite conditionnelle est celle qui est dite seulement si sa condition est satisfaite.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

114 of 212 27/07/2012 22:31

Page 115: vxml

Dans cet exemple, l'invite varie à chaque visite du formulaire englobant :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="autre_blague"> <var name="r" expr="Math.random()"/> <field name="autre"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt cond="r &lt; .50"> Voulez-vous entendre une autre blague sur les éléphants ? </prompt> <prompt cond="r &gt;= .50"> Pour une autre blague, dites oui. Pour quitter, dites non </prompt> <filled> <if cond="autre"> <goto next="#choisir_blague"/> </if> </filled> </field></form></vxml>

Au moment de choisir une invite, l'ensemble des invites à placer en file d'attente estétabli en fonction de l'algorithme suivant :

Former une liste ordonnée des invites, se composant de toutes les invites dansl'élément englobant, dans l'ordre du document.

1.

Supprimer de cette liste toutes les invites dont la valeur de l'attribut cond, aprèsconversion en un booléen, est "false".

2.

Trouver le « compte correct » : la valeur d'attribut count la plus élevée, parmi leséléments prompt encore présents sur la liste, qui soit inférieure ou égale à lavaleur d'attribut count courante.

3.

Supprimer de la liste tous les éléments qui n'ont pas le « compte correct ».4.

Tous les éléments restant sur la liste seront mis en file d'attente pour lecture.

4.1.7 La temporisation

L'attribut timeout indique l'intervalle de silence permis à attendre l'entrée d'utilisateuraprès la fin de la dernière invite. Si cet intervalle est dépassé, la plateforme susciteraun événement noinput. La valeur implicite de cet attribut est celle indiquée par lapropriété timeout (voir le chapitre 6.3.4) à l'instant où l'invite est placée en filed'attente. En d'autres termes, chaque invite a sa propre valeur de temporisation.

La raison de permettre la définition d'une temporisation comme attribut de l'élémentprompt tient dans les temporisations dégressives. Par exemple, l'utilisateur peutdisposer de cinq secondes pour la première tentative d'entrée puis de dix secondespour la suivante.

La temporisation de l'élément prompt détermine celle de l'événement noinput del'entrée suivante :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

115 of 212 27/07/2012 22:31

Page 116: vxml

<prompt count="1"> Choisissez la couleur de votre nouveau modèle T.</prompt>

<prompt count="2" timeout="120s"> Veuillez choisir la couleur de votre nouvelle Ford modèle T de mille neuf cent vingt-quatre. Les couleurs possibles : noire, noire ou noire. Prenez votre temps.</prompt>

Si plusieurs invites sont placées en file d'attente avant une entrée de champ, alorsc'est la temporisation de la dernière invite qui est utilisée.

4.1.8 La mise en file d'attente des invites et la collecte des entrées

Un interpréteur VoiceXML se trouve, à tout instant, dans l'un des états suivants :

en attente d'une entrée dans un élément d'entrée (tels que field, record outransfer), ouen transition entre deux éléments d'entrée suite à une entrée (comprenant lesénoncés prononcés, les appuis de touche DTMF et les événements liés auxentrées tels que les événements noinput ou nomatch) reçue dans l'état d'attente.Dans l'état de transition, aucune commande vocale n'est collectée ni acceptée niinterprétée. Par conséquent, les grammaires vocales de niveau racine etdocument (comme celles définies dans les éléments link peuvent ne pas êtretout le temps actives. Au contraire, les commandes DTMF (y compris lesinformations de temporisation) dans l'état de transition devraient être collectéeset mises en mémoire tampon. De même, les événements asynchrones qui ne sontpas directement liés à l'exécution de la transition devraient également être misen mémoire tampon jusqu'à l'état d'attente suivant (par exemple, un événementconnection.disconnect.hangup).

Les états d'attente et de transition sont reliés aux phases de l'algorithme FIA commesuit :

l'interpréteur entre finalement en état d'attente lors de la phase de collecte d'unélément d'entrée (au point où l'interpréteur attend une entrée), etl'état de transition engloble les phases de traitement et de sélection, la phase decollecte des éléments de commande (tels que les éléments block) et la phase decollecte des éléments d'entrée jusqu'au point où l'interpréteur attend une entrée.

Cette distinction des états est destinée à clarifier le modèle de programmation. Enparticulier, une conséquence importante de ce modèle est celle selon laquelle ledéveloppeur de l'application VoiceXML peut compter sur l'exécution complète de toutle contenu exécutable (tel que le contenu des éléments filled et block), parcequ'elle intervient pendant l'état de transition lequel ne peut être interrompu par uneentrée.

Pendant l'état de transition, les diverses invites sont placées en file d'attente soit parl'élément prompt dans un contenu exécutable, soit par l'élément prompt dans deséléments de formulaire. En outre, un son d'attente peut être placé en file d'attent parl'attribut fetchaudio. Les invites et le son d'attente dans la file d'attente sont joués :

soit quand l'interpréteur atteint l'état d'attente, point à partir duquel les invites

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

116 of 212 27/07/2012 22:31

Page 117: vxml

sont jouées, l'interpréteur étant à l'écoute d'une entrée qui corresponde à l'unedes grammaires actives,soit quand l'interpréteur commence le chargement d'une ressource (tel qu'undocument) pour lequel un attribut fetchaudio a été défini. Auquel cas, les invitesplacées en file d'attente, avant le son d'attente indiqué par l'attribut fetchaudio,sont jouées jusqu'au bout puis, si la ressource doit réellement être chargée (c'est-à-dire que le délai de sa mise en cache a expiré), alors le son d'attente fetchaudiojoue jusqu'à la fin du chargement. L'interpréteur reste dans l'état de transition etaucune entrée n'est acceptée au cours du chargement.

Remarquez que, lorsque la valeur de l'attribut bargein d'un élément prompt est "false",les entrées ne sont pas collectées et les commandes DTMF mises en mémoire tamponpendant un état de transition sont effacées (voir le chapitre 4.1.5).

Lorsqu'une grammaire de reconnaissance vocale automatique correspond, si unecommande DTMF a été simultanément consommée par une grammaire DTMF (sansque cela ait abouti à une correspondance complète à la grammaire DTMF), alors leprocesseur peut choisir d'écarter la commande DTMF.

Avant que l'interpréteur ne quitte, toutes les invites en file d'attente sont jouéesjusqu'au bout. L'interpréteur reste dans l'état de transition et aucune entrée n'estacceptée tant que l'interpréteur n'a pas quitté.

L'optimisation selon laquelle les invites commencent à jouer pendant l'état detransition avant d'atteindre l'état d'attente est permise, à condition de maintenir unesémantique correcte vis-à-vis du traitement de l'entrée audio reçue pendant la lecturedes invites, par exemple, en ce qui concerne les traitements des interruptions et desgrammaires.

Les exemples suivants illustrent la mise en œuvre de ces règles dans quelques cascommuns.

Cas 1

Cas de non-chargement typique : un élément field, suivi par un contenu exécutable(tels que des éléments block ou filled), suivi par un autre élément field.

dans le document d0

<field name="f0"/>

<block> contenu exécutable e1 met les invites {p1} en file d'attente </block>

<field name="f2"> met les invites {p2} en file d'attente active les grammaires {g2} </field>

En conséquence d'une entrée reçue en cours d'attente dans le champ « f0 », voici lesactions qui sont entreprises :

dans l'état de transition :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

117 of 212 27/07/2012 22:31

Page 118: vxml

exécuter e1 (sans élément goto)mettre les invites {p1} en file d'attentemettre les invites {p2} en file d'attente

simultanément, dans l'état d'attente :jouer les invites {p1,p2}activer les grammaires {g2} et attendre une entrée

Cas 2

Cas de chargement typique : un élément field, suivi par un contenu exécutable (telsque des éléments block ou filled) qui se termine par un élément goto définissant unattribut fetchaudio et qui aboutit dans un élément field d'un autre document chargéd'un serveur.

dans le document d0

<field name="f0"/>

<block> contenu exécutable e1 met les invites {p1} en file d'attente mène au champ f2 dans le document d1 avec un son d'attente fa </block>

dans le document d1

<field name="f2"> met les invites {p2} en file d'attente active les grammaires {g2} </field>

En conséquence d'une entrée reçue en cours d'attente dans le champ « f0 », voici lesactions qui sont entreprises :

dans l'état de transition :exécuter e1mettre les invites {p1} en file d'attentesimultanément :

charger le document d1jouer les invites {p1} jusqu'au bout puis jouer le son d'attente fajusqu'à la fin du chargement

mettre les invites {p2} en file d'attentesimultanément, dans l'état d'attente :

jouer les invites {p2}activer les grammaires {g2} et attendre une entrée

Cas 3

Comme dans le cas 2, mais sans attribut fetchaudio défini.

dans le document d0

<field name="f0"/>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

118 of 212 27/07/2012 22:31

Page 119: vxml

<block> contenu exécutable e1 met les invites {p1} en file d'attente mène au champ f2 dans le document d1 (sans son d'attente) </block>

dans le document d1

<field name="f2"> met les invites {p2} en file d'attente active les grammaires {g2} </field>

En conséquence d'une entrée reçue en cours d'attente dans le champ « f0 », voici lesactions qui sont entreprises :

dans l'état de transition :exécuter e1mettre les invites {p1} en file d'attentecharger le document d1mettre les invites {p2} en file d'attente

simultanément, dans l'état d'attente :jouer les invites {p1, p2}activer les grammaires {g2} et attendre une entrée

5. Le flux de commande et les scripts

5.1 Les variables et les expressions

Les variables VoiceXML sont à tous égards équivalentes aux variables ECMAScript :elles font partie du même espace de variables. Les variables VoiceXML peuvent servirdans un élément script tout comme les variables définies dans un élément scriptpeuvent servir dans un document VoiceXML. Déclarer une variable au moyen del'élément var équivaut à utiliser une déclaration var dans un élément script.L'élément script peut aussi apparaître partout où l'élément var peut apparaître. Leséléments de formulaire peuvent également déclarer des variables VoiceXML.

Les conventions de nommage des variables sont les mêmes que dans ECMAScript,hormis les noms commençant par un caractère souligné (« _ ») et ceux finissant par uncaractère signe dollar (« $ ») qui sont réservés pour un usage interne. Les variablesVoiceXML, y compris les variables d'élément de formulaire, ne doivent pas contenir demots réservés pour ECMAScript. Elles doivent aussi respecter les règles ECMAScript decorrection référentielle. Par exemple, les noms de variable doivent être uniques et leurdéclaration ne doit pas contenir de point (« var x.y » est une déclaration illégale dansECMAScript. Les noms de variable qui violent les conventions de nommage ou bien lesrègles ECMAScript provoquent un événement error.semantic.

5.1.1 La déclaration des variables

On déclare les variables au moyen d'éléments var :

<var name="tel_domicile"/>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

119 of 212 27/07/2012 22:31

Page 120: vxml

<var name="pi" expr="3.14159"/> <var name="ville" expr="'Périgueux'"/>

Elles peuvent aussi être déclarés par les éléments de formulaire :

<field name="nbre_tickets"> <grammar type="application/srgs+xml" src="/grammars/number.grxml"/> <prompt>Combien voulez-vous acheter de tickets?</prompt> </field>

Les variables déclarées sans valeur initiale explicite sont initialisées à la valeurECMAScript "undefined". On doit déclarer les variables avant de les utiliser, dansVoiceXML comme dans ECMAScript. L'utilisation d'une variable non déclarée se traduitpar une erreur ECMAScript qui transparaît comme un événement error.semantic. Onpeut utiliser les variables déclarées dans ECMAScript au moyen du mot-clé var dansVoiceXML, tout comme on peut utiliser les variables VoiceXML dans ECMAScript.

Dans un formulaire, les variables déclarées par des éléments var et celles déclaréespar des éléments de formulaire sont initialisées lorsqu'on accède au formulaire. Lesinitialisations sont assurées de survenir dans l'ordre du document, de sorte que cetexemple est légal :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="test"> <var name="un" expr="1"/> <field name="deux" expr="un+1"> <grammar type="application/srgs+xml" src="/grammars/number.grxml"/> </field> <var name="trois" expr="deux+1"/> <field name="continuer" type="boolean"> <prompt>Dites oui ou non pour continuer</prompt> </field> </form></vxml>

Lorsque l'utilisateur visite cet élément form, l'initialisation du formulaire établit d'abordla variable « un » et fixe sa valeur à "1". Puis c'est le tour de la variable « deux » avecune valeur de "2". Ensuite, la logique d'initialisation déclare la variable « trois » et luidonne la valeur "3". L'algorithme FIA entre alors dans l'interprétation de sa boucleprincipale et commence au champ « continuer ».

5.1.2 Les portées des variables

Le langage VoiceXML utilise une chaîne de portées ECMAScript qui permet de déclarerdes variables à des niveaux hiérarchiques différents dans une application. Parexemple, une variable déclarée avec une portée de document peut être appeléedepuis n'importe où dans ce document, tandis qu'une variable locale déclarée dans unélément catch ne sera visible que dans cet élément catch. Pour conserver cettesémantique de visibilité, on doit déclarer toutes les variables ECMAScript. L'utilisationd'une variable non déclarée se traduit par une erreur ECMAScript qui transparaît via un

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

120 of 212 27/07/2012 22:31

Page 121: vxml

événement error.semantic.

On peut déclarer les variables avec les portées suivantes :

Tableau 40 : Les portées des variables

session

Ce sont des variables, en lecture seule, qui serapportent à la totalité d'une session d'utilisateur.Elles sont déclarées et fixées par le contexted'interprétation. Les documents VoiceXML nepeuvent pas déclarer de nouvelles variables desession. Voir le chapitre 5.1.4.

application

Ce sont des variables déclarées par des élémentsvar et script, enfants de l'élément vxml dudocument racine d'application. Elles sont initialiséesau chargement du document racine d'application.Elles existent tant que le document racined'application est chargé et elles sont visibles par ledocument racine et tout document terminald'application chargé. Remarquez que pour uneexécution à l'intérieur du document racined'application, l'expression « document.x » équivaut à« application.x ».

document

Ce sont des variables déclarées par des élémentsvar et script, enfants de l'élément vxml. Elles sontinitialisées au chargement du document. Ellesexistent tant que le document est chargé. Elles nesont visibles que dans ce document, à moins qu'il nes'agisse d'un document racine d'application, auquelcas les variables sont visibles par les documentsterminaux dans la portée de l'application seulement.

dialog

Chaque dialogue (avec les éléments form ou menu)détermine une portée de dialogue qui existe dès lorsque l'utilisateur visite le dialogue et qui est visiblepar les éléments qui le composent. La portée d'undialogue recouvre les variables suivantes : cellesdéclarées par les éléments var et script enfants del'élément form, celles des éléments de formulaire etles variables fictives des éléments de formulaire. Leséléments enfants var et script de l'élément formsont initialisés à la première visite du formulaire,contrairement aux éléments var dans le contenuexécutable qui sont initialisés à l'exécution decelui-ci.

(anonyme)Chaque élément block, filled et catch définit unenouvelle portée anonyme qui va contenir lesvariables déclarées dans l'élément en question.

Le diagramme suivant illustre la hiérarchie des portées :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

121 of 212 27/07/2012 22:31

Page 122: vxml

Figure 11 : La hiérarchie des portées

Les flèches courbes dans ce diagramme montre que chaque portée contient unevariables prédéfinie dont le nom est le même que celui qui se rapporte à la portée enquestion. Cela permet, par exemple, dans les portées anonymes, dans celles dedialogue et celles de document, d'appeler une variable X dans la portée de documenten faisant document.X. Comme autre exemple, la portée des variables d'un élémentfilled est une portée anonyme locale à l'élément filled dont la portée des variablesdu parent est celle de l'élément form.

On décourage l'emploi des mots « session », « application », « document » et« dialog » comme noms des variables et des éléments de formulaire. Bien que ce nesoient pas des mots réservés, les employer éclipse les variables prédéfinies de mêmenom à cause des règles de portée ECMAScript utilisées par VoiceXML.

5.1.3 L'appel des variables

Les variables sont appelées par les attributs cond et expr :

<if cond="aeroport == 'LAX'"> <assign name="aeroport" expr="'Los Angeles'"/> <elseif cond="aeroport == 'PPT'"/> <assign name="aeroport" expr="'Papeete'"/> <elseif cond="aeroport =='PGX'"/> <assign name="aeroport" expr="'Périgueux'"/> </if>

<assign name="var1" expr="var1 + 1"/>

<if cond="i &gt; 1"> <assign name="i" expr="i-1"/> </if>

Le langage utilisé dans les expressions des attributs cond et expr est précisémentECMAScript. Remarquez qu'on doit masquer les opérateurs de l'attribut cond « < »,« <= » et « && » dans XML (en « &lt; », « &lt;= », etc.).

Les appels des variables s'inscrivent dans la portée englobante la plus proche selon la

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

122 of 212 27/07/2012 22:31

Page 123: vxml

chaîne des portées donnée précédemment. On peut préfixer un appel avec un nom deportée pour raison de clarté ou afin de résoudre une ambiguïté. Par exemple, afin desauvegarder la valeur d'une variable associée à l'un des champs d'un formulaire pourune utilisation ultérieure dans un document :

<assign name="document.ssn" expr="dialog.ssn"/>

Si le document racine d'application contient une variable x, on l'appelle parapplication.x dans les documents non-racine, et par application.x ou biendocument.x dans le document racine d'application. Si le document ne définit pasd'application racine et contient une variable x, on l'appelle soit par application.x,soit par document.x dans le document.

5.1.4 Les variables de session normalisées

session.connection.local.uriCette variable est une adresse URI qui désigne l'appareil du contexted'interprétation.

session.connection.remote.uriCette variable est une adresse URI qui désigne l'appareil appelant distant.

session.connection.protocol.nameCette variable correspond au nom du protocole de connexion. Le nom représenteégalement le nom de sous-objet des informations propres au protocole. Parexemple, si la variable session.connection.protocol.name vaut "q931", alors lavariable « session.connection.protocol.q931.uui » est susceptible de définir lapropriété d'information utilisateur-à-utilisateur de la connexion.

session.connection.protocol.versionCette variable correspond à la version du protocole de connexion.

session.connection.redirectCette variable est un tableau représentant les chemins des redirections deconnexion. Le premier élément correspond au numéro original appelé et le dernierélément au dernier numéro redirigé. Chaque élément du tableau contient unepropriété uri, pi (information de présentation, si (information de filtrage) etreason. La propriété reason admet l'une des valeurs suivantes : "unknown", "userbusy", "no reply", "deflection during alerting", "deflection immediate response" ou"mobile subscriber not reachable".

session.connection.aaiCette variable correspond à des informations interapplications transmisespendant l'établissement de la connexion.

session.connection.originatorCette variable appelle directement soit la propriété local, soit la propriété remote(par exemple, l'expression ECMAScript suivante renverra la valeur "true" si le tiersdistant a initié la connexion : « var appelant_initiateur = connection.originator ==connection.remote »).

5.1.5 Les variables d'application normalisées

application.lastresult$Cette variable contient des informations concernant la dernière reconnaissancequi a eu lieu dans cette application. C'est un tableau d'éléments dont lequelchaque élément application.lastresult$[i] représente un résultat possibleau travers des variables suivantes :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

123 of 212 27/07/2012 22:31

Page 124: vxml

application.lastresult$[i].confidenceLe niveau de fiabilité de l'énoncé entier de cette interprétation dansl'intervalle « 0.0-1.0 ». Une valeur de "0.0" indique une fiabilité minimale etune valeur de "1.0" une fiabilité maximale. L'interprétation plus précise d'unevaleur de fiabilité dépendra de la plateforme.

application.lastresult$[i].utteranceLa chaîne des mots bruts qui ont été reconnus pour cette interprétation.L'atomisation et l'orthographe exactes sont propres à la plateforme (parexemple, « cinq cent trente » ou « 5 cent 30 » ou même « 530 »). Dans lecas d'une grammaire DTMF, cette variable contiendra la chaîne numériquereconnue.

application.lastresult$[i].inputmodePour cette interprétation, le mode selon lequel l'entrée d'utilisateur a étéfournie : "dtmf" ou "voice".

application.lastresult$[i].interpretationUne variable ECMAScript contenant l'interprétation, comme décrit dans lechapitre 3.1.5.

Les interprétations sont triées par score de fiabilité, du plus grand au plus petit.Celles ayant le même score de fiabilité font l'objet d'un tri supplémentaire enfonction des relations de préséance (voir le chapitre 3.1.4) entre les grammairesproduisant les interprétations. Des éléments différents dans le tableauapplication.lastresult$ différeront toujours par leur énoncé, leurinterprétation, ou les deux.

Le nombre d'éléments du tableau application.lastresult$ est assurésupérieur ou égal à un et inférieur ou égal à la valeur de la propriété de systèmemaxnbest. Si le système n'a généré aucun résultat, alors le tableauapplication.lastresult$ aura la valeur ECMAScript "undefined".

En outre, le tableau application.lastresult$ contient lui-même les propriétésconfidence, utterance, inputmode et interpretation correspondant à celles d'indice "0"dans le tableau ECMAScript.

Toutes les variables fictives décrites précédemment sont fixées immédiatementaprès une reconnaissance quelconque. Selon cette définition, un événementnomatch compte pour une reconnaissance et entraîne donc le remplissage dutableau application.lastresult$, quoique les valeurs qui y sont stockéesdépendent de la plateforme. En outre, les valeurs existantes des variables duchamp ne seront pas affectées par un événement nomatch. À l'inverse, unévénement noinput ne modifiera pas le tableau application.lastresult$.Après que la valeur de la variable application.lastresult$ a été fixée, ellepersiste (à moins d'être modifiée par l'application) jusqu'à ce que le navigateurentre dans l'état d'attente suivant, où sa valeur devient "undefined". Lorsqu'undocument racine d'application est chargé, cette variable reçoit également lavaleur "undefined. La variable application.lastresult$ et tous ses composantssont réinscriptibles et peuvent être modifiés par l'application.

L'exemple suivant montre comment se servir de application.lastresult$ dans unélément catch de niveau champ pour accéder au résultat de reconnaissance d'unegrammaire de liens et pour passer à des états de dialogue différents en fonction duniveau de fiabilité :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

124 of 212 27/07/2012 22:31

Page 125: vxml

<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><link event="menulinkevent"> <grammar src="/grammars/grammaire_liens.grxml" type="application/srgs+xml"/></link>

<form> <field> <prompt> Dites quelque chose </prompt> <catch event="menulinkevent"> <if cond="application.lastresult$.confidence &lt; 0.7"> <goto nextitem="confirmer_dialogue_liens"/> <else/> <goto next="./menu_principal.html"/> </if> </catch> </field></form></vxml>

L'exemple suivant montre comment se servir d'un script pour parcourir le tableau derésultats application.lastresult$, dans lequel chaque élément est représenté par« application.lastresult$[i] » :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form> <field name="couleur"> <prompt> Dites une couleur </prompt> <grammar type="application/srgs+xml" src="couleur.grxml" /> <filled> <var name="compte_fiabilite" expr="0"/> <script> <![CDATA[ // nombre de résultats var len = application.lastresult$.length;

// parcours du tableau for (var i = 0; i < len; i++) { // vérifier si DTMF if (application.lastresult$[i].confidence > .7) { compte_fiabilite++; } } ]]> </script> <if cond="compte_fiabilite > 1"> <goto next="#verifier"/> </if> </filled> </field></form>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

125 of 212 27/07/2012 22:31

Page 126: vxml

</vxml>

5.2 La gestion des événements

La plateforme suscite des événements dès lors que l'utilisateur ne répond pas, qu'il nerépond pas d'une manière comprise par l'application, qu'il demande une assistance,etc. L'interpréteur suscite des événéments lorsqu'il rencontre une erreur sémantiquedans un document VoiceXML ou lorsqu'il rencontre un élément throw. Les événementssont identifiés par des chaînes de caractères.

Chaque élément dans lequel un événement est susceptible de se produire admetl'ensemble des éléments de capture suivant :

catcherrorhelpnoinputnomatch

Un élément hérite, au besoin, des éléments de capture (« comme par copie ») dechacun de ses éléments ancêtres. Si, par exemple, un champ ne contient pasd'élément catch pour un événement nomatch mais son formulaire parent oui, alorsc'est l'élément de capture de l'événement nomatch du formulaire qui sera utilisé. Onpeut ainsi définir un comportement commun de gestion des événements à n'importequel niveau qui s'appliquera à tous les descendants.

La sémantique « comme par copie » d'héritage des éléments de capture implique que,lors de l'exécution d'un élément catch, les variables sont résolues et les événementssuscités sont manipulés relativement à la portée dans laquelle l'événement originals'est produit, et non relativement à la portée contenant l'élément catch. Par exemple,prenons un élément catch défini dans la portée du document manipulant unévénement initié dans un élément field dans le document. Pour un tel élémentcatch, les appels de variable se résolvent relativement à la portée de l'élément field,et si un événement est suscité par l'élément catch, alors il est manipulé relativementà l'élément field. De même, les appels d'adresse URI relatives dans un élémentcatch se résolvent par rapport au document actif et non par rapport au documentdans lequel ils sont déclarés. Enfin, les propriétés se résolvent relativement à l'élémentdans lequel l'événement s'est produit. Par exemple, un élément prompt, défini dansune capture de niveau document, utiliserait la valeur de la propriété la plus interne del'élément de formulaire actif afin de résoudre son attribut timeout si aucune valeurexplicite n'est définie.

5.2.1 L'élément throw

L'élément throw suscite un événement, lequel peut être l'un de ceux prédéfinis ::

<throw event="nomatch"/> <throw event="connection.disconnect.hangup"/>

Ou peut être défini par l'application :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

126 of 212 27/07/2012 22:31

Page 127: vxml

<throw event="com.att.portail.machine"/>

Les attributs de l'élément throw sont :

Tableau 41 : Les attributs de l'élément throw

event L'événement suscité.

eventexprUne expression ECMAScript donnant le nom del'événement suscité.

message

Une chaîne message fournissant des renseignementssupplémentaires sur l'événement suscité. Pour lesévénements prédéfinis suscités par la plateforme, lateneur du message dépendra de la plateforme.Le message est accessible comme valeur d'unevariable dans la portée de l'élément catch, voirci-dessous.

messageexprUne expression ECMAScript donnant la chaînemessage.

On doit définir exactement un seul d'entre les attributs event ou eventexpr, sinon unévénement error.badfetch est suscité. On peut indiquer exactement un seul d'entreles attributs message ou messageexpr, sinon un événement error.badfetch est suscité.

Sauf déclaration contraire explicite, le langage VoiceXML ne définit pas quand lesévénements sont suscités.

5.2.2 L'élément catch

L'élément catch associe une capture à un document, un dialogue ou un élément deformulaire (sauf les éléments block). Il contient un contenu exécutable.

<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="lancer_missiles"> <field name="id_utilisateur" type="digits"> <prompt>Quel est votre nom d'utilisateur ?</prompt> </field> <field name="mot_de_passe"> <prompt>Quel est le code d'accès ?</prompt> <grammar version="1.0" root="root"> <rule id="racine" scope="public">rutabaga</rule> </grammar> <help>C'est le nom d'un tubercule obscur.</help> <catch event="nomatch noinput" count="3"> <prompt>Tentative d'intrusion !</prompt> <submit next="http://www.example.com/attraper_traitre.vxml" namelist="id_utilisateur"/> </catch> </field> </form>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

127 of 212 27/07/2012 22:31

Page 128: vxml

</vxml>

La portée des variables anonymes de l'élément catch inclut la variable spéciale_event, laquelle contient le nom de l'événement qui a été suscité. Par exemple,l'élément catch suivant peut manipuler deux types d'événements :

<catch event="event.foo event.bar"> <if cond="_event=='event.foo'"> <!-- Jouer ceci pour les événements event.foo --> <audio src="foo.wav"/> <else/> <!-- Jouer cela pour les événements event.bar --> <audio src="bar.wav"/> </if> <!-- Poursuivre par une manipulation commune à l'un ou l'autre événement --></catch>

La variable _event est inspectée afin de sélectionner le son à jouer en fonction del'événement suscité. Pour un événement « event.foo », ce sera le fichier « foo.wav » etpour un événement « event.bar », le fichier « bar.wav ». Le reste de l'élément catchconsiste en un contenu exécutable commun pour la manipulation des deux typesd'événements.

La portée des variables anonymes de l'élément catch inclut également la variablespéciale _message, laquelle contient la valeur de la chaîne message issue de l'élémentthrow correspondant ou bien une valeur dépendant de la plateforme pour lesévénements prédéfinis suscitée par la plateforme. Si l'événement suscité ne donne pasde message, alors la variable _message a la valeur ECMAScript "undefined".

Lorsqu'un élément catch contient un élément throw avec le même événement, alors ilrisque de se produire une boucle infinie :

<catch event="help"> <throw event="help"/> </catch>

Une platforme pourrait détecter une telle situation et susciter une erreur sémantique àla place.

Les attributs de l'élément catch sont :

Tableau 42 : Les attributs de l'élément catch

event

Le ou les événements à capturer. On peut définir une listed'événements, séparés par des caractères espace, indiquantque l'élément catch capture tous les événementsmentionnés dans la liste. Auquel cas, un compteurd'événement séparé (voir l'attribut count) est mis en placepour chaque événement. Si l'attribut n'est pas défini, alorstous les événements seront capturés.

count

L'occurrence de l'événement (la valeur implicite est "1").L'attribut count permet de gérer les différentes occurrencesdu même événement de manière distincte.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

128 of 212 27/07/2012 22:31

Page 129: vxml

Chaque élément form, menu et élément de formulaire assurele compte de chaque événement survenant pendant qu'il estvisité. Les compteurs d'événements de niveau élémentaireservent pour les événements suscités pendant la visite deséléments de formulaire individuels et pendant l'exécutiondes éléments filled contenus qui y sont contenus. Lescompteurs de niveau formulaire et de niveau menu serventpour les événements suscités pendant l'initialisation dudialogue et pendant l'exécution des éléments filled deniveau formulaire.

Les compteurs d'événements de niveau formulaire et deniveau menu sont réinitialisés à chaque fois que l'on rentredans l'élément form ou l'élément menu. Les compteursd'événements de niveau formulaire et de niveau menu nesont pas réinitialisés par l'élément clear.

Les compteurs d'événements de niveau élémentaire sontréinitialisés à chaque fois que l'on rentre dans l'élément formcontenant l'élément en question. Ils sont égalementréinitialisés lorsqu'on réinitialise l'élément en question avecun élément clear. Les compteurs d'événements de niveauélémentaire ne sont pas réinitialisés quand on rentre dansl'élément en question sans avoir quitté l'élément form.

Les compteurs sont incrémentés par rapport au nom completde l'événement et chaque préfixe correspondant au nomd'événement ; par exemple, une occurrence de l'évément« event.foo.1 » va incrémenter les compteurs de« event.foo.1 », plus ceux de « event.foo » et « event ».

condUne expression dont la valeur, après conversion en unbooléen, vaut "true" pour que l'événement puisse êtrecapturé. La valeur implicite est "true".

5.2.3 La notation abrégée

Les éléments error, help, noinput et nomatch sont des abréviations pour les typestrès courants de l'élément catch.

L'élément error est un raccourci pour <catch event="error"> et capture tous lestypes d'erreur :

<error> Une erreur est survenue : veuillez rappeler ultérieurement. <exit/></error>

L'élément help est une abréviation de l'expression <catch event="help"> :

<help>Personne ne peut vous aider !</help>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

129 of 212 27/07/2012 22:31

Page 130: vxml

L'élément noinput est une abréviation pour <catch event="noinput"> :

<noinput>Je n'ai rien entendu, veuillez réssayer.</noinput>

L'élément nomatch est un raccourci pour <catch event="nomatch"> :

<nomatch>J'ai entendu quelque chose, mais le nom de cette ville m'est inconnu.</nomatch>

Ces éléments admettent les attributs :

Tableau 43 : Les attributs des abréviations de l'élément catch

count Le compte d'événements (comme pour l'élément catch).

cond

Une condition facultative à tester afin de vérifier sil'événement est capturé par cet élément (comme pourl'élément catch décrit dans le chapitre 5.2.2). La valeurimplicite est "true".

5.2.4 La sélection de l'élément catch

Un élément hérite, au besoin, des éléments catch (« comme par copie ») de chacunde ses éléments ancêtres. Par exemple, si un élément field hérite de l'élément catchdu document :

<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><catch event="event.foo"> <audio src="beep.wav"/></catch>

<form> <field name="couleur"> <prompt>Veuillez indiquer une couleur primaire</prompt> <grammar type="application/srgs">rouge | jaune | bleu</grammar> <nomatch> <throw event="event.foo"/> </nomatch> </field></form></vxml>

Auquel cas, l'élément catch est copié implicitement dans l'élément field comme s'ilétait défini ainsi :

<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form> <field> <prompt>Veuillez indiquer une couleur primaire</prompt>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

130 of 212 27/07/2012 22:31

Page 131: vxml

<grammar type="application/srgs">rouge | jaune | bleu</grammar> <nomatch> <throw event="event.foo"/> </nomatch> <catch event="event.foo"> <audio src="beep.wav"/> </catch> </field></form></vxml>

Lorsqu'un événement est suscité, la portée dans laquelle l'événement est manipulé etses portées englobantes sont examinées afin de trouver l'élément catch le mieuxqualifié selon l'algorithme suivant :

Établir une liste ordonnée des captures, composée de toutes les captures dans laportée courante et toutes les portées englobantes (élément de formulaire,formulaire, document, document racine d'application, contexte d'interprétation),rangée d'abord par portée (en commençant par la portée courante) puis danschaque portée dans l'ordre du document ;

1.

Supprimer de cette liste toutes les captures dont les noms d'événement necorrespondent pas à l'événement suscité ou ceux dont l'attribut cond, aprèsconversion en un booléen, vaut "false" ;

2.

Trouver le « compte correct » : la valeur d'attribut count la plus élevée parmi leséléments catch encore présents dans la liste inférieure ou égale à la valeur del'attribut count courant ;

3.

Sélectionner le premier élément dans la liste ayant le « compte correct ».4.

Le nom d'un événement suscité correspond au nom d'événement de l'élément catchen cas de correspondance exacte ou de correspondance de préfixe, ou si l'élémentcatch ne définit pas d'attribut event (remarquez qu'on ne peut pas affecter une chaînevide à l'attribut event ; la déclaration event="" est syntaxiquement erronnée). Unecorrespondance de préfixe se produit lorsque l'attribut event de l'élément catch est unpréfixe atomique du nom de l'événement suscité, dont le séparateur des atomes estun caractère point, tous les points de queue sont supprimés et une chaîne restantevide représente n'importe quel atome. Par exemple :

<catch event="connection.disconnect"> <prompt>J'ai capturé un événement connection point disconnect</prompt></catch>

La déclaration aura une correspondance de préfixe pour un événementconnection.disconnect.transfer.

<catch event="com.exemple.kekchose"> <prompt>J'ai capturé un événement com point exemple point kekchoset</prompt></catch>

Cette déclaration aura une correspondance de préfixe pour les événements« com.exemple.kekchose.evenement1. », « com.exemple.kekchose. » et« com.exemple.kekchose..evenement1 », mais pas pour« com.exemple.kekchoses.evenement1 ». Finalement :

<catch event=".">

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

131 of 212 27/07/2012 22:31

Page 132: vxml

<prompt>J'ai capturé un événement</prompt></catch>

Cette déclaration aura une correspondance de préfixe pour tous les événements(comme c'est le cas pour un élément catch sans attribut event).

Remarquez que l'algorithme de sélection de l'élément catch donne la priorité auxéléments catch qui apparaissent tôt dans le document sur ceux qui apparaissent tard,mais il ne donne pas la priorité aux éléments catch plus spécifiques sur ceux moinsspécifiques. C'est pourquoi, on conseille, en général, de définir les éléments catchdans un ordre allant du plus spécifique au moins spécifique. Par exemple, il estjudicieux de définir les éléments catch des erreurs « error.foo » et « error », dans cetordre, comme suit :

<catch event="error.foo"> <prompt>J'ai capturé un événement error point foo</prompt></catch> <catch event="error"> <prompt>J'ai capturé un événement error</prompt> </catch>

Si on avait défini les éléments catch dans l'ordre inverse, alors l'élément catch pour« error.foo » ne serait jamais exécuté.

5.2.5 Les éléments catch implicites

On attend de l'interpréteur qu'il fournisse des gestionnaires de capture par défautimplicites pour les événements noinput, help, nomatch, cancel, exit et error au casoù l'auteur ne les aurait pas indiqués.

Le comportement par défaut du système pour les gestionnaires de capture des diversévénements et erreurs est résumé par les définitions suivantes, lesquelles indiquent(1) si une quelconque réponse audio doit être fournie ou non, et (2) commentl'exécution est affectée. Remarque : si une réponse audio est fournie, son contenu réeldépendra de la plateforme.

Tableau 44 : Les gestionnaires de capture par défaut

Type d'événementRéponseaudio

Action

cancel nonne pas produire denouvelle invite

error oui quitter l'interpréteur

exit non quitter l'interpréteur

help ouiproduire une nouvelleinvite

noinput nonproduire une nouvelleinvite

nomatch ouiproduire une nouvelleinvite

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

132 of 212 27/07/2012 22:31

Page 133: vxml

maxspeechtimeout ouiproduire une nouvelleinvite

connection.disconnect non quitter l'interpréteur

tous les autres oui quitter l'interpréteur

Les plateformes particulières pourront présenter des invites par défaut différentes.

5.2.6 Les types d'événement

Il existe des événements prédéfinis et des événements propres à une application ou àune plateforme. Les événements se répartissent aussi en événements réguliers (qui seproduisent normalement) et en événements d'erreur (dont les occurrences sontanormales). Les conventions de nommage des erreurs permettent plusieurs niveaux degranularité.

Un navigateur conforme peut susciter un événement, qui prolonge un événementprédéfini, tant que son nom d'événement contient la chaîne du nom de l'événementprédéfini en question comme sous-chaîne initiale exacte séparée par un point. Lesapplications qui définissent des gestionnaires de capture pour les événementsprédéfinis seront interopérables. Celles qui définissent des gestionnaires de capturepour les noms d'événement prolongés n'offrent pas toutes les garantiesd'interopérabilité. Par exemple, si au cours du chargement d'un fichier de grammaireune erreur est détectée, la plateforme doit susciter un événement error.badfetch.Susciter un événement error.badfetch.grammar.syntax est une implémentationacceptable.

Les composants des noms d'événement mis en exergue doivent être remplacés parl'information adéquate ; par exemple, dans « error.unsupported.élément », onremplace « élément » par le nom de l'élément VoiceXML qui n'est pas pris en charge,comme error.unsupported.transfer. Tous les autres composants du nomd'événement sont fixes.

On peut fournir d'autres renseignements à propos de l'événement dans la variable_message (voir le chapitre 5.2.2).

Les événements prédéfinis sont :

cancelL'utilisateur a demandé l'annulation de la lecture de l'invite courante.

connection.disconnect.hangupL'utilisateur a raccroché.

connection.disconnect.transferL'utilisateur a été transféré inconditionnellement sur une autre ligne et il nereviendra pas.

exitL'utilisateur a demandé à quitter.

helpL'utilisateur a demandé une assistance.

noinputL'utilisateur n'a pas répondu dans le délai imparti.

nomatch

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

133 of 212 27/07/2012 22:31

Page 134: vxml

L'utilisateur a entré quelque chose qui n'a pas été reconnue.maxspeechtimeout

L'entrée d'utilisateur est trop longue et dépasse la valeur de la propriétémaxspeechtimeout.

Outre les erreurs de transfert (voir le chapitre 2.3.7.3), les erreurs prédéfinies sont :

error.badfetch

Le contexte d'interprétation suscite cet événement quand le chargement d'undocument a échoué et quand le contexte d'interprétation est arrivé au point dansl'interprétation du document où le résultat du chargement est nécessaire. Leséchecs de chargement sont dûs aux appels dans un système d'adressage nongéré, aux adresse URI malformées, aux abandons des clients, aux erreurs deconnexion, aux dépassements de délai, aux violations de sécurité, aux types deressource non gérés, aux désaccords entre les types de ressource, aux erreursd'analyse du document et aux diverses erreurs représentées par des codesd'erreur propres au système d'adressage.

Si le contexte d'interprétation a effectué le préchargement spéculatif d'undocument et que ce document se révèle inutile, il ne sera pas suscitéd'événement error.badfetch. De même, si le chargement d'un élément audioéchoue et qu'il existe un élément audio imbriqué de remplacement dont lechargement réussit, ou s'il existe un texte de remplacement imbriqué, alors il nesera pas suscité d'événement error.badfetch.

Lorsqu'un contexte d'interprétation effectue une transition vers un nouveaudocument, il suscite un événement error.badfetch en cas d'erreur jusqu'à ceque l'interpréteur puisse exécuter le nouveau document, une fois encoreseulement à l'instant où le nouveau document est réellement demandé et pasavant. Le fait de considérer l'initialisation des variables comme faisant partie ounon de l'exécution du nouveau document dépendra de la plateforme.

error.badfetch.http.code_réponseerror.badfetch.protocole.code_réponse

En cas d'échec de chargement, le contexte d'interprétation doit employer un typed'événement précis indiquant le code de réponse HTTP ou propre à un autreprotocole particulier qui a été reçu. La valeur du code de réponse HTTP est définiedans le document [RFC2616]. Cette annonce, par exemple, permet auxapplications de traiter différemment un document manquant et un documentinterdit. La valeur du code de réponse d'autres protocoles (tels que HTTPS, RTSP,et ainsi de suite) dépendra du protocole en question.

error.semanticUne erreur d'exécution a été détectée dans le document VoiceXML, par exemple,une erreur sur les bornes d'une sous-chaîne ou l'appel d'une variable non définie.

error.noauthorizationUne événement suscité lorsque l'application essaye d'effectuer une opération nonautorisée par la plateforme. Comme examples : composer un numéro detéléphone invalide ou un numéro que l'utilisateur n'est pas autorisé à appeler, ouessayer d'accéder à une base de données protégée au travers d'un élémentobject propre à la plateforme, ou un accès inapproprié aux grammairesintégrées, etc.

error.noresource

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

134 of 212 27/07/2012 22:31

Page 135: vxml

Une erreur d'exécution est survenue parce qu'une ressource nécessaire de laplateforme n'était pas disponible pour l'exécution.

error.unsupported.builtinLa plateforme ne gère pas un type ou une grammaire obligatoires intégrés.

error.unsupported.formatLa ressource demandée est dans un format non géré par la plateforme, parexemple, un format de grammaire ou un type de média non gérés.

error.unsupported.languageLa plateforme ne gère pas la langue de la voix synthétisée ou celle de lareconnaissance vocale.

error.unsupported.objectnameLa plateforme ne gère pas un objet particulier propre à une plateforme.Remarquez que « objectname » est une chaîne fixe, qui ne se remplace pas par lenom de l'objet non géré.

error.unsupported.élémentLa plateforme ne gère pas l'élément en question, où élément représente unélément VoiceXML défini dans la présente spécification. Par exemple, si laplateforme ne prend pas en charge l'élément transfer, elle doit susciter unévénement error.unsupported.transfer. Ce mécanisme permet à l'auteur unegestion des événements en fonction des différentes capacités des plateformes.

Les erreurs rencontrées au cours du chargement d'un document, y compris les erreursde transport (le « document introuvable » du code de statut 404 du protocole HTTP, etainsi de suite) et les erreurs syntaxiques (absence d'un élément vxml, etc.),aboutissent au déclenchement d'un événement error.badfetch dans le documentappelant. Les erreurs qui se produisent après le chargement et avant l'entrée dans laphase d'initialisation de l'algorithme FIA sont prises en charge de manière spécifique àla plateforme. Celles qui se produisent après la phase d'initialisation, comme leserreurs sémantiques, se déclenchent dans le nouveau document. La prise en chargedes erreurs rencontrées au cours du chargement du premier document d'une sessionest propre à la plateforme.

Les types d'événement propres aux applications et aux plateformes devraient utiliserla convention de nom de domaine Internet inversée pour éviter les conflits denommage. Par exemple :

error.com.example.plateformevocale.nonautoriseL'utilisateur n'est pas autorisé aux accès externes sur cette plateforme.

org.example.voice.unecertaineapplication.tropdesilencesL'utilisateur est trop silencieux.

Les captures peuvent concerner des événements particuliers (cancel) ou tous ceuxpartageant un préfixe (error.unsupported).

5.3 Le contenu exécutable

Un contenu exécutable se rapporte à un bloc de logique procédurale. On trouve deslogiques de ce type dans :

L'élément de formulaire block ;L'élément d'action filled dans les formulaires et les éléments d'entrée ;Les gestionnaires d'événements (catch, help, etc.).

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

135 of 212 27/07/2012 22:31

Page 136: vxml

Les éléments exécutables sont traités dans l'ordre du document dans leur bloc delogique procédurale. Si un élément exécutable génère une erreur, alors elle l'estimmédiatement. Les éléments exécutables suivants dans ce bloc de logiqueprocédurale ne sont pas exécutés.

Ce chapitre couvre les éléments qui peuvent apparaître dans un contenu exécutable.

5.3.1 L'élément var

Cet élément déclare une variable. Il peut apparaître dans un contenu exécutable oucomme enfant d'un élément form ou d'un élément vxml. Exemples :

<var name="telephone" expr="'+689 123456'"/> <var name="y" expr="document.z+1"/>

S'il apparaît dans un contenu exécutable, alors l'élément déclare une variable dans laportée anonyme associée à l'élément block, ou l'élément filled, ou l'élément catchenglobants. Cette déclaration n'intervient qu'au moment où l'élément var est exécuté.Si la variable est déjà déclarée dans cette portée, alors les déclarations suivantesagissent comme des affectations, comme dans le langage ECMAScript.

Si l'élément var est un enfant d'un élément form, alors il déclare une variable dans laportée du dialogue de l'élément form. Cette déclaration intervient pendant la phased'initialisation du formulaire, comme décrit dans le chapitre 2.1.6.1. L'élément varn'est pas un élément de formulaire, c'est la raison pour laquelle il n'est pas visité dansla boucle principale de l'algorithme FIA.

Si l'élément var est un enfant d'un élément vxml, alors il déclare une variable dans laportée du document ; si, en outre, c'est un enfant d'un élément vxml dans undocument racine, alors il déclare la variable dans la portée de l'application. Cettedéclaration intervient lorsque le document est initialisé ; les initialisations ont lieu dansl'ordre du document.

Les attributs de l'élément var sont :

Tableau 45 : Les attributs de l'élément var

name

Le nom de la variable qui contiendra le résultat. À ladifférence de l'attribut name de l'élément assign (voir lechapitre 5.3.2), cet attribut ne doit pas indiquer une variableavec un préfixe de portée (si une variable est définie avec unpréfixe de portée, alors un événement error.semantic estsuscité). La portée dans laquelle la variable est définie estdéterminée à partir de la position dans le document oùl'élément est déclaré.

expr

La valeur initiale de la variable (optionnelle). En l'absenced'un attribut expr, la variable conserve sa valeur courante, lecas échéant. Les variables ont la valeur initiale ECMAScript"undefined" si elles n'ont pas été initialisées.

5.3.2 L'élément assign

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

136 of 212 27/07/2012 22:31

Page 137: vxml

L'élément assign affecte une valeur à une variable :

<assign name="parfum" expr="'chocolat'"/> <assign name="document.cout" expr="document.cout+14"/>

Il est interdit d'affecter une valeur à une variable qui n'aura pas été déclaréeexplicitement par un élément var ou par une déclaration var dans un élément script.Une tentative d'affectation d'une variable non définie suscitera un événementerror.semantic.

Remarquez que, lorsqu'un objet ECMASCript, disons « obj », a été correctementinitialisé, alors ses propriétés, par exemple « obj.prop1 », peuvent être assignées sansdéclaration explicite (en fait, une tentative de déclaration de la propriété d'un objetECMAScript, telle que « obj.prop1 », déclenchera un événement error.semantic).

Les attributs de l'élément assign sont :

Tableau 46 : Les attributs de l'élément assign

name

Le nom de la variable affectée. Comme indiqué dans lechapitre 5.1.2, la variable correspondante devra avoir étédéclarée au préalable, sinon il sera suscité un événementerror.semantic. Par défaut, la portée dans laquelle la lavariable se résoud est la portée englobante la plus proche del'élément actif courant. Pour lever toute ambiguïté, on peutpréfixer le nom de la variable avec un nom de portée, commedécrit dans le chapitre 5.1.3.

expr La nouvelle valeur de la variable.

5.3.3 L'élément clear

L'élément clear réinitialise une ou plusieurs variables, y compris celles des élémentsde formulaire. Quel que soit le nom de variable défini, la variable se résoudrelativement à la porté courante conformément aux indications du chapitre 5.1.3 (pourlever toute ambiguïté, on peut préfixer chaque nom de variable dans l'attribut namelistavec un nom de portée). Une fois la variable déclarée identifiée, on lui affecte la valeurECMAScript "undefined". En outre, si le nom de la variable correspond à celui d'unélément de formulaire, alors le compteur d'invites et les compteurs d'événements decet élément de formulaire sont réinitialisés.

Par exemple :

<clear namelist="ville departement code_postal"/>

L'attribut de l'élément clear est :

Tableau 47 : L'attribut de l'élément clear

namelist

La liste des variables à réinitialiser ; elle peut comprendredes noms de variable autres que ceux d'éléments deformulaire. Si la liste de noms appelle une variable nondéclarée, alors il sera suscité un événement

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

137 of 212 27/07/2012 22:31

Page 138: vxml

error.semantic (voir le chapitre 5.1.1). En absence del'attribut, toutes les variables des éléments de formulairedu formulaire courant sont effacées.

5.3.4 Les élément if, elseif et else

L'élément if sert dans la logique conditionnelle. Il s'accompagne des élémentsoptionnels else et elseif.

<if cond="total > 1000"> <prompt>Cette dépense est trop importante.</prompt> <throw event="com.ciexyz.compte.tropdepense"/> </if>

<if cond="montant &lt; 29.95"> <assign name="x" expr="montant"/> <else/> <assign name="x" expr="29.95"/> </if>

<if cond="parfum == 'vanille'"> <assign name="code_parfum" expr="'v'"/> <elseif cond="parfum == 'chocolat'"/> <assign name="code_parfum" expr="'c'"/> <elseif cond="parfum == 'fraise'"/> <assign name="code_parfum" expr="'f'"/> <else/> <assign name="code_parfum" expr="'?'"/> </if>

5.3.5 Les éléments prompt

Les invites peuvent apparaître dans un contenu exécutable, dans leur généralitécomplète, mis à part l'attribut count de l'élément prompt qui n'a aucune signification.On peut notamment utiliser l'attribut cond dans un contenu exécutable. L'invite peut setrouver englobée dans des balises <prompt> et </prompt>, ou être représentée pardes caractères de type « PCDATA ». Partout où l'élément prompt est susceptibled'apparaître, une chaîne de type « PCDATA », par exemple « xyz », sera interprétéecomme si elle était apparue sous la forme <prompt>xyz</prompt>.

<nomatch count="1"> Pour ouvrir la porte de la nacelle, prononcez clairement votre phrase secrète.</nomatch>

<nomatch count="2"> <prompt> C'est votre <emphasis>dernière</emphasis> chance. </prompt> </nomatch>

<nomatch count="3"> Accès refusé. <exit/> </nomatch>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

138 of 212 27/07/2012 22:31

Page 139: vxml

5.3.6 L'élément reprompt

L'algorithme FIA attend d'un élément catch qu'il place en file d'attente les invitesappropriées dans le cadre de la gestion d'un événement. C'est pourquoi il n'effectuegénéralement pas la sélection et la mise en file d'attente normales des invites dansl'itération qui suit l'exécution d'un élément de capture. Néanmoins, l'algorithme FIAeffectuera une sélection et un mise en file d'attente normales des invites aprèsl'exécution d'un élément de capture (catch, error, help, noinput, nomatch) dansdeux cas :

lorsque l'élément de capture se termine par l'exécution d'un élément goto ousubmit menant à un autre dialogue, ou lorsqu'il se termine par un élémentreturn revenant d'un sous-dialogue ; auquel cas le nouveau dialogue doit avoirl'assurance que son invite initiale reste intacte et ne puisse pas être supprimée ouremplacée par un dialogue appelant, ou ;lorsqu'un élément reprompt est exécuté dans l'élément de capture pourdemander que les invites suivantes soient jouées.

Dans ces deux cas, après que l'algorithme FIA a sélectionné l'élément de formulairesuivant à visiter, il opère le traitement normal des invites, à savoir la sélection et lamise en file d'attente des invites de l'élément de formulaire et l'incrémentation ducompteur d'invites de l'élément de formulaire en question.

Par exemple, cette capture noinput attend que l'invite suivante de élément deformulaire soit sélectionnée puis jouée :

<field name="vouloir_glace"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt>Voulez-vous une glace pour le dessert ?</prompt> <prompt count="2"> Si vous voulez une glace, dites oui. Si vous ne voulez pas de glace, dites non. </prompt> <noinput> Je n'ai rien entendu. <!-- Entraîne la sélection et la lecture de l'invite suivante. --> <reprompt/> </noinput> </field>

Un utilisateur silencieux entendrait :

O : Voulez-vous une glace pour le dessert ?

H : (silence)

O : Je n'ai rien entendu.

O : Si vous voulez une glace, dites oui. Si vous ne voulez pas de glace, ditesnon.

H : (silence)

O : Je n'ai rien entendu.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

139 of 212 27/07/2012 22:31

Page 140: vxml

O : Si vous voulez une glace, dites oui. Si vous ne voulez pas de glace, ditesnon.

H : Non

S'il n'y avait pas d'élément reprompt, l'utilisateur aurait entendu à la place :

O : Voulez-vous une glace pour le dessert ?

H : (silence)

O : Je n'ai rien entendu.

H : (silence)

O : Je n'ai rien entendu.

H : Non

Remarquez que le fait de sauter la phase de sélection des invites, comme décritprécédemment, a pour conséquence de ne pas incrémenter le compteur d'invites del'élément de formulaire sélectionné par l'algorithme FIA, après l'exécution d'unélément de capture (celui-ci n'exécutant pas d'élément reprompt ni ne quittant ledialogue via un élément goto, submit ou bien return).

Remarquez également que la phase de sélection des invites suivant l'exécution d'unélément de capture (celui-ci n'exécutant pas d'élément reprompt ni ne quittant ledialogue via un élément goto, submit ou bien return) est sautée, même si l'élémentde formulaire sélectionné par l'algorithme FIA est différent de l'élément de formulaireprécédent.

L'élément reprompt n'a aucun effet en dehors d'un élément de capture.

5.3.7 L'élément goto

L'élément goto sert à :

effectuer une transition vers un autre élément de formulaire dans le formulairecourant ;

effectuer une transition vers un autre dialogue dans le document courant, ou ;

effectuer une transition vers un autre document.

Pour opérer une transition vers un autre élément de formulaire, utilisez l'attributnextitem, ou l'attribut expritem si le nom de l'élément de formulaire est calculé aumoyen d'une expression ECMAScript :

<goto nextitem="confirmer_ssn"/> <goto expritem="(type==12)? 'confirmer_ssn' : 'rejeter'"/>

Pour aller à un autre dialogue dans le même document, utilisez l'attribut next (ou bienexpr) avec seulement un fragment d'adresse URI :

<goto next="#autre_dialogue"/>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

140 of 212 27/07/2012 22:31

Page 141: vxml

<goto expr="'#' + 'autre_dialogue'"/>

Pour opérer une transition vers un autre document, utilisez l'attribut next (ou bien expr)avec une adresse URI :

<goto next="http://vol.example.com/reserver_place"/> <goto next="./repas_special#menu_vegetarien"/>

L'adresse URI peut être absolue ou relative au document courant. On peut indiquer ledialogue de départ dans le document suivant au moyen d'un fragment correspondantà la valeur de l'attribut id d'un dialogue. Si on n'indique pas de fragment, alors c'est lepremieur dialogue de ce document qui sera choisi.

Remarquez que le passage à un autre dialogue dans le document courant entraîne laperte des variables de l'ancien dialogue, même quand la transition s'opère surl'élément en question. De la même manière, le passage à un autre document via uneadresse URI absolue ou relative causera l'abandon des anciennes variables de niveaudocument, même si le nouveau document est celui initiant la transition. Par contre, lesvariables des documents persistent dans la transition vers un appel d'adresse URI videavec un identificateur de fragment. Par exemple, les déclarations suivantes amènentun comportement différent dans un document dont l'adresse URI est« http://unecie.example.com/index.vxml » :

<goto next="#foo"/>

<goto next="http://unecie.example.com/index.vxml#foo"/>

Selon le document [RFC2396], l'identificateur de fragment (la partie après le caractèredièse « # ») ne faisant pas partie de l'adresse URI, la transition opérée par un appeld'adresse URI vide plus un identificateur de fragment ne devrait jamais aboutir à unnouveau chargement de document. Par conséquent, le fragment « #foo » dans lapremière déclaration correspond à un appel d'adresse URI vide avec un identificateurde fragment, et les variables du document sont retenues. Dans la seconde déclaration,le fragment « #foo » fait partie d'une adresse URI absolue et, à ce titre, les variablesdu document sont perdues. Si on veut que des données persistent entre plusieursdocuments, il faut stocker ces données dans la portée de l'application.

Le dialogue vers lequel opérer une transition est défini par l'appel d'adresse URI del'attribut next ou bien expr de l'élément goto (voir le document [RFC2396]). Si cet appeld'adresse URI contient une adresse absolue ou relative, incluant éventuellement unechaîne de requête, alors cette adresse URI fait l'objet d'un chargement et le dialoguese trouvera dans le document résultant.

Si l'appel d'adresse URI contient seulement un fragment (c'est-à-dire que l'adresse URIn'est ni absolue ni relative), alors aucun chargement n'a lieu : le dialogue se trouvedans le document courant.

Le cas échéant, le fragment de l'appel d'adresse nomme le dialogue vers lequel opérerla transition. En l'absence d'un fragment, le premier dialogue lexical dans le documentsera choisi.

Si l'élément de formulaire, le dialogue ou le document vers lesquels opérer latransition ne sont pas valides (c'est-à-dire que l'élément de formulaire, le dialogue ou

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

141 of 212 27/07/2012 22:31

Page 142: vxml

le document n'existent pas), alors il sera suscité un événement error.badfetch.Remarquez que, en ce qui concerne les erreurs survenant au cours d'une transitionvers un dialogue ou un document, c'est la plateforme qui gère la portée dans laquelleselles sont gérées. Pour les erreurs qui surviennent au cours d'une transition vers unélément de formulaire, l'événement est géré dans la portée du dialogue.

Les attributs de l'élément goto sont :

Tableau 48 : Les attributs de l'élément goto

next L'adresse URI vers laquelle opérer la transition.

expr Une expression ECMAScript qui produit l'adresse URI.

nextitemLe nom de l'élément de formulaire suivant à visiterdans le formulaire courant.

expritemUne expression ECMAScript qui produit le nom del'élément de formulaire suivant à visiter.

fetchaudioVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété fetchaudio.

fetchhintVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété documentfetchhint.

fetchtimeoutVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété fetchtimeout.

maxageVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété documentmaxage.

maxstaleVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété documentmaxstale.

On doit définir exactement un seul d'entre les attributs next, expr, nextitem ou expritem,sinon un événement error.badfetch est suscité.

5.3.8 L'élément submit

L'élément submit sert à soumettre des informations au serveur Web d'origine puis àopérer une transition vers le document renvoyé en réponse. À la différence del'élément goto, il permet de soumettre une liste de variables au serveur de documentsvia une requête HTTP « GET » ou « POST ». Par exemple, pour soumettre un ensembled'éléments de formulaire au serveur, on pourrait avoir :

<submit next="journal_requetes" method="post" namelist="nom rang numero_serie" fetchtimeout="100s" fetchaudio="audio/brahms2.wav"/>

Le dialogue vers lequel effectuer la transition est indiqué par l'appel d'adresse URIdans l'attribut next ou attribut expr de l'élément submit (voir le document [RFC2396],chapitre 4.2). L'adresse URI est toujours extraite, même quand elle ne contient qu'unfragment. Dans le cas d'un fragment, l'adresse URI demandée est la l'adresse URI debase du document courant. Par conséquent, les deux éléments suivants produisent deseffets très différents :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

142 of 212 27/07/2012 22:31

Page 143: vxml

<goto next="#obtenir_pin"/>

<submit next="#obtenir_pin"/>

Remarquez que, bien que l'adresse URI soit toujours extraite et que la transisition versle document résultant ait lieu, certaines requêtes par l'élément submit peuvent êtresatisfaites par des caches intermédiaires. Cela peut se produire, par exemple, si leserveur Web d'origine fournit une date d'expiration explicite avec la réponse.

Si le dialogue ou le document de la transition ne sont pas valides (c'est-à-dire que ledialogue ou le document n'existent pas), un événement error.badfetch devra êtresuscité. Remarquez que, pour les erreurs qui surviennent au cours de la transition versun dialogue ou un document, la portée dans laquelle les erreurs seront géréesdépendra de la plateforme.

Les attributs de l'élément submit sont :

Tableau 49 : Les attributs de l'élément submit

next L'appel d'adresse URI.

exprComme pour l'attribut next, hormis le fait que l'appeld'adresse URI est déterminé de manière dynamiqueen évaluant l'expression ECMAScript donnée.

namelist

La liste des variables à soumettre. Par défaut, toutesles variables des éléments d'entrée nommés sontsoumises. Quand on fournit un attribut namelist, il peutcontenir des références de variables individuelles quisont soumises avec la même qualification que celleutilisée dans la liste de nom. Les variables VoiceXMLet ECMAScript déclarées peuvent être appelées. Siune variable non déclarée est appelée dans l'attributnamelist, alors un événement error.semantic estsuscité (voir le (chapitre 5.1.1).

methodLa méthode de requête : "get" (la valeur implicite) ou"post".

enctype

Le type de codage du média du document soumis(quand la valeur de l'attribut method est "post"). Savaleur implicite est "application/x-www-form-urlencoded".Les interpréteurs doivent également gérer la valeur"multipart/form-data" mais peuvent prendre en charged'autres types de codage.

fetchaudioVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété fetchaudio.

fetchhintVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété documentfetchhint.

fetchtimeoutVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété fetchtimeout.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

143 of 212 27/07/2012 22:31

Page 144: vxml

maxageVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété documentmaxage.

maxstaleVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété documentmaxstale.

On doit définir exactement un seul d'entre les attributs next ou expr, sinon unévénement error.badfetch est suscité.

Lors de la soumission d'une variable ECMAScript au serveur, sa valeur estpréalablement convertie en une chaîne. Si cette variable est un objet ECMAScript, lemécanisme selon lequel elle est soumise n'est pas défini pour l'instant et reste àdéfinir dans une version future. Au lieu de soumettre directement les objetsECMAScript, le développeur de l'application peut soumettre explicitement lespropriétés de l'objet concerné, par exemple, comme dans « date.month date.year ».

Si un élément submit contient une variable appelant un son enregistré et que l'attributenctype n'a pas la valeur "multipart/form-data", alors le comportement n'est pas défini.Également, essayer d'appliquer un codage d'adresse URL sur une grande quantité dedonnées ne constitue probablement pas une bonne idée.

5.3.9 L'élément exit

L'élément exit repasse le contrôle au contexte d'interprétation qui détermine quoifaire ensuite.

<exit/>

Cet élément se distingue de l'élément return en cela qu'il termine tous les documentschargés, tandis que l'élément return revient de l'invocation d'un élément subdialog.Si cet élément subdialog a causé l'invocation d'un nouveau document (ou d'unenouvelle application), alors l'élément return terminera ce document, mais l'exécutionreprendra après l'élément subdialog.

Remarquez que, une fois le contrôle repassé au contexte d'orientation par l'élémentexit, le contexte d'interprétation est libre d'agir à sa guise : il peut, par exemple, jouerun menu de niveau supérieur pour l'utilisateur, abandonner l'appel en cours outransférer l'utilisateur vers un opérateur.

Les attributs de l'élément exit comprennent :

Tableau 50 : Les attributs de l'élément exit

exprUne expression ECMAScript dont l'évaluation est la valeurrenvoyée (par exemple, "0", "'oups !'" ou "champ1").

namelist

Les noms des variables à renvoyer au contexted'interprétation. Par défaut, aucune variable n'estrenvoyée ; le contexte d'interprétation recevra un objetECMAScript vide. Si une variable non déclarée est appeléedans l'attribut namelist, alors il sera suscité un événementerror.semantic (voir le chapitre 5.1.1).

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

144 of 212 27/07/2012 22:31

Page 145: vxml

On doit définir exactement un seul d'entre les attributs expr ou namelist, sinon unévénement error.badfetch est suscité.

L'élément exit ne suscite pas un événement exit.

5.3.10 L'élément return

L'élément return termine l'exécution d'un sous-dialogue, et il repasse le contrôle, enrenvoyant des données, au dialogue appelant.

Les attributs de l'élément return sont :

Tableau 51 : Les attributs de l'élément return

event Revient puis suscite cet événement.

eventexprRevient puis suscite l'événement correspondant àl'évaluation de cette expression ECMAScript.

message

Une chaîne message précisant le contexte del'événement suscité. Le message est accessible sousforme de la valeur d'une variable dans la portée del'élément de capture, voir le chapitre 5.2.2.

messageexprUne expression ECMAScript dont l'évaluationcorrespond à la chaîne message.

namelist

Les noms des variables à renvoyer au dialogueappelant. Par défaut, aucune variable n'est renvoyée ;l'appelant recevra un objet ECMAScript vide. Si unevariable non déclarée est appelée dans l'attributnamelist, alors il sera suscité un événementerror.semantic (voir le chapitre 5.1.1).

On doit définir exactement un seul d'entre les attributs event, eventexpr ou namelist,sinon un événement error.badfetch est suscité. On doit définir exactement un seuld'entre les attributs message ou messageexpr, sinon un événement error.badfetch estsuscité.

Au retour d'un sous-dialogue, un événement pourra être suscité au point d'invocationou des données seront renvoyées sous forme d'un objet ECMAScript dont les propriétéscorrespondront aux variables indiquées dans l'attribut namelist. Un élément return quiapparaîtrait en dehors de l'exécution d'un sous-dialogue suscitera un événementerror.semantic.

L'exemple ci-dessous montre un événement propagé depuis un sous-dialogue vers ledialogue appelant quand le sous-dialogue n'a pas réussi à obtenir un résultatreconnaissable. Il montre également des données renvoyées dans les conditionsnormales :

<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd">

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

145 of 212 27/07/2012 22:31

Page 146: vxml

<form> <subdialog name="resultat" src="#obtenir_nss"> <nomatch> <!-- un événement nomatch renvoyé par le sous-dialogue indique l'échec de la correspondance avec un numéro de sécurité sociale. --> <goto next="http://monservice.example.com/problemes_nss.vxml"/> </nomatch>

<filled> <submit namelist="resultat.nss" next="http://monservice.example.com/cgi-bin/traitement"/> </filled> </subdialog> </form><form id="obtenir_nss"> <field name="nss"> <grammar src="http://grammarlib/nss.grxml" type="application/srgs+xml"/> <prompt> Veuillez indiquer un numéro de sécurité sociale.</prompt> <nomatch count="3"> <return event="nomatch"/> </nomatch> <filled> <return namelist="nss"/> </filled> </field> </form></vxml>

Le gestionnaire d'événement du sous-dialogue pour l'élément nomatch se déclenche àla troisième tentative infructueuse ; le gestionnaire provoque le retour dusous-dialogue en incluant l'événement nomatch à susciter dans le contexte du dialogueappelant. Auquel cas, le dialogue appelant exécutera son gestionnaire nomatch, au lieude l'élément filled, l'action résultante consistant à exécuter un élément goto. Enconditions normales, l'élément filled du sous-dialogue est exécuté après qu'unnuméro de sécurité sociale reconnu a été obtenu, puis cette valeur est renvoyée audialogue appelant qui en disposera dans la variable « resultat.nss ».

5.3.11 L'élément disconnect

L'élément disconnect entraîne la déconnexion du contexte d'interprétation et del'utilisateur. En conséquence, le contexte d'interprétation suscitera un événementconnection.disconnect.hangup et entrera dans l'état de traitement final (commedécrit dans le chapitre 1.5.4). Le traitement de l'élément disconnect purgeraégalement la file d'attente des invites (comme décrit dans le chapitre 4.1.8).

5.3.12 L'élément script

L'élément script qui permet de définir un bloc de code en langage de script côtéclient est analogue à l'élément <SCRIPT> de [HTML]. Par exemple, ce documentcontient un script qui calcule une factorielle :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml"

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

146 of 212 27/07/2012 22:31

Page 147: vxml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <script> <![CDATA[ function factorielle(n) { return (n <= 1)? 1 : n * factorielle(n-1); } ]]> </script>

<form id="formulaire"> <field name="fact"> <grammar type="application/srgs+xml" src="/grammars/number.grxml"/> <prompt> Dites un nombre et je vous donnerai sa factorielle. </prompt> <filled> <prompt> La factorielle de <value expr="fact"/> est <value expr="factorielle(fact)"/> </prompt> </filled> </field> </form> </vxml>

L'élément script peut apparaître dans les éléments vxml et form, ou dans un contenuexécutable (dans les éléments filled, if, block, catch ou les formes abrégées decatch. Les scripts dans les éléments vxml sont évalués juste après que le document aété chargé, en même temps que les éléments var, dans l'ordre du document. Lesscripts dans les éléments form sont évalués dans l'ordre du document, en mêmetemps que les éléments var et les variables d'élément de formulaire, à chaque foisque l'exécution entre sur le terrain de l'élément form. Un élément script dans uncontenu exécutable s'exécute, comme tous les autres éléments exécutables, au fur età mesure de leur apparition.

Les attributs de l'élément script sont :

Tableau 52 : Les attributs de l'élément script

srcL'adresse URI donnant l'emplacement du script, quandcelui-ci est externe.

charset

Le codage des caractères du script désigné parl'attribut src. Les codages UTF-8 et UTF-16 de lanorme ISO/IEC 10646 doivent être gérés (commendans le langage [XML]), d'autres codages, définiscomme tels par [IANA], pouvant être gérés. La valeurimplicite est "UTF-8".

fetchhintVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété scriptfetchhint.

fetchtimeoutVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété fetchtimeout.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

147 of 212 27/07/2012 22:31

Page 148: vxml

maxageVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété scriptmaxage.

maxstaleVoir le chapitre 6.1. Sa valeur implicite est celle de lapropriété scriptmaxstale.

On doit définir soit un attribut src, soit un script direct (mais pas les deux), sinon il serasuscité un événement error.badfetch

L'élément script de VoiceXML (contrairement à l'élément <SCRIPT> de [HTML])n'admet pas d'attribut de type ; le langage de script ECMAScript est obligatoire pourVoiceXML.

Chaque élément script est exécuté dans la portée de l'élément qui le contient ; c'est-à-dire qu'il n'a pas de portée propre. Cela signifie, par exemple, que les variablesdéfinies au moyen de l'élément var dans l'élément script sont déclarées dans laportée de l'élément contenant l'élément script. (Dans la terminologie ECMAScript, la« variable d'object » devient la portée courante de l'élément contenant l'élémentscript).

Voici un service d'horloge parlante avec un élément block contenant un élémentscript qui initialise les variables temporelles dans la portée de dialogue d'unformulaire :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form> <var name="heures"/> <var name="minutes"/> <var name="secondes"/> <block> <script> var d = new Date(); heures = d.getHours(); minutes = d.getMinutes(); secondes = d.getSeconds(); </script> </block> <field name="entendre_maj"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <prompt> Il est <value expr="heures"/> heures, <value expr="minutes"/> minutes et <value expr="secondes"/> secondes. </prompt> <prompt>Voulez-vous entendre l'heure mise à jour ?</prompt> <filled> <if cond="entendre_maj"> <clear/> </if> </filled> </field> </form>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

148 of 212 27/07/2012 22:31

Page 149: vxml

</vxml>

Le contenu d'un élément script est évalué dans la même portée qu'un élément var(voir le chapitre 5.1.2 et le chapitre 5.3.1).

La chaîne des portées ECMAScript (voir le chapitre 10.1.4 dans [ECMASCRIPT]) estfixée de telle sorte que les variables déclarées soit au moyen d'un élément var, soitdans un élément script s'inscrivent dans la portée associée à l'élément dans lequelles éléments var ou script apparaissent. Par exemple, la variable déclarée dans unélément script contenu dans un élément form aura une portée de dialogue et pourraêtre appelée en tant que variable de portée de dialogue, comme suit :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form> <script> var illico = new Date(); <!-- c'est une portée de dialogue--> </script> <var name="secondes" expr="illico.getSeconds()"/> <!-- c'est une portée de dialogue --> <block> <var name="illico" expr="new Date()"/> <!-- c'est une portée anonyme --> <script> var current = illico.getSeconds(); <!-- "illico" dans la portée anonyme --> var approx = dialog.illico.getSeconds(); <!-- "illico" dans la portée du dialogue --> </script> </block> </form> </vxml>

On doit déclarer toutes les variables avant de pouvoir les appeler par des scriptsECMAScript, ou par des éléments VoiceXML, comme décrit dans le chapitre 5.1.1.

5.3.13 L'élément log

L'élément log permet à une application de générer un message de journalisation ou dedébogage dont le développeur peut se servir pour aider au développement del'application ou pour l'analyse post-exécution des performances de l'application.

L'élément log peut contenir une combinaison quelconque de texte (de type « CDATA »)et d'élément value. Le message généré est constitué par la concaténation du texte etde la forme textuelle de la valeur de l'attribut expr des éléments value.

La façon dont le message est affiché ou journalisé dépend de la plateforme. L'usage del'attribut label dépend de la plateforme. Les plateformes ne sont pas obligées depréserver les blancs.

Les expressions ECMAScript des éléments log doivent être évaluées dans l'ordre dudocument. L'utilisation d'un élément log ne devrait avoir aucun effet secondaire surl'interprétation.

<log>La carte avait le numéro <value expr="num_carte"/></log>

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

149 of 212 27/07/2012 22:31

Page 150: vxml

Les attributs de l'élément log sont :

Tableau 53 : Les attributs de l'élément log

labelUne chaîne optionnelle qui peut servir, par exemple, àindiquer le but du journal.

exprUne expression ECMAScript optionnelle dont l'évaluation estune chaîne.

6. L'environnement et les ressources

6.1 La mise en place des ressources

6.1.1 Le chargement

Un contexte d'interprétation VoiceXML a besoin de charger des documents VoiceXML etd'autres ressources, tels que des fichiers sons, des grammaires, des scripts et desobjets. Chaque chargement du contenu associé à une adresse URI est régi par lesattributs suivants :

Tableau 54 : Les attributs de chargement

fetchtimeout

L'intervalle de temps à attendre l'envoi du contenuavant de susciter un événement error.badfetch. Lavaleur est une désignation de temps (voir lechapitre 6.5). Si l'attribut n'est pas défini, une valeurdérivée de celle de la propriété fetchtimeout la plusinterne sera utilisée.

fetchhint

Définit le moment où le contexte d'interprétationdevrait ramener le contenu du serveur : la valeur"prefetch" indique un téléchargement du fichier aumoment du chargement de la page, tandis que lavaleur "safe" indique un téléchargement quand c'estréellement nécessaire. Si l'attribut n'est pas défini,une valeur dérivée de celle de la propriété fetchhintconcernée la plus interne sera utilisée.

maxage

Indique que le document accepte d'utiliser un contenudans la mesure où son âge n'est pas supérieur autemps indiqué en secondes (cf. la propriété« max-age » du protocole HTTP 1.1 [RFC2616]). Ledocument n'accepte pas d'utiliser un contenu périmé,à moins que l'attribut maxstale ne soit aussi défini. Sil'attribut n'est pas défini, une valeur dérivée de cellede la propriété maxage concernée la plus interne, siprésente, sera utilisée.

maxstaleIndique que le document accepte d'utiliser un contenuayant dépassé sa date d'expiration (cf. la propriété

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

150 of 212 27/07/2012 22:31

Page 151: vxml

« max-age » du protocole HTTP 1.1 [RFC2616]). Sil'attribut maxstale a reçu une valeur, alors le documentaccepte d'utiliser un contenu périmé mais pas plus dunombre de secondes indiqué. Si l'attribut n'est pasdéfini, une valeur dérivée de celle de la propriétémaxstale concernée la plus interne, si présente, serautilisée.

Lorsqu'un contenu est chargé à partir d'une adresse URI, l'attribut fetchtimeoutdétermine combien de temps attendre le contenu (en commençant à partir du momentoù la ressource sera devenue nécessaire) et l'attribut fetchhint détermine à quelmoment le contenu sera chargé. La politique de mise en cache d'un contexted'interprétation VoiceXML exploite les attributs maxage et maxstale de la manière décriteci-dessous.

L'attribut fetchhint, en combinaison avec les diverses propriétés fetchhint, donnesimplement au contexte d'interprétation un indice sur le moment où il peut lancer lechargement d'une ressource. Indiquer au contexte d'interprétation qu'il peutprécharger une ressource n'impose pas son chargement ; c'est seulement suggérerque cette ressource peut être préchargée. Toutefois, le contexte d'interprétation esttoujours obligé d'honorer la valeur "safe" de l'attribut fetchhint.

Lors d'une transition d'un dialogue à un autre, que ce soit au travers d'un élémentsubdialog, goto, submit, link ou bien choice, d'autres règles viennent affecter lecomportement de l'interpréteur. Si l'appel d'adresse URI nomme un document (parexemple, « document#dialogue »), ou si des données de requête sont fournies (autravers de la méthode « POST » ou « GET »), alors un nouveau document sera obtenu(qu'il soit issu d'un cache local, d'un cache intermédiaire ou d'un serveur Webd'origine). Lorsque le document est reçu, il entre dans sa phase d'initialisation (c'est-à-dire, obtenir et initialiser un nouveau document racine d'application au besoin,initialiser les variables de document et exécuter les scripts de document). Le dialoguedemandé (ou le premier venu si aucun n'est indiqué) est alors initialisé et l'exécutiondu dialogue commence.

En général, si un appel d'adresse URI ne contient qu'un fragment (par exemple,« #mon_dialogue »), alors aucun document n'est chargé et aucune initialisation de cedocument n'a lieu. Au contraire, l'exécution d'un élément submit se conclut toujourspar un chargement, et ce sera aussi le cas si un attribut namelist accompagne lefragment en question.

Une autre exception, c'est quand un appel d'adresse URI dans un document terminalréférence le document racine d'application. Auquel cas, la transition vers le documentracine intervient sans chargement ni initialisation, même si l'appel d'adresse URI secompose d'une adresse URI absolue ou relative (voir le chapitre 1.5.2 et le document[RFC2396]). Par contre, si l'appel d'adresse URI vers le document racine contient unechaîne de requête, ou un attribut namelist, alors le document racine sera chargé.

Les éléments susceptibles de charger des documents VoiceXML gèrent également cetautre attribut :

Tableau 55 : Un autre attribut du chargement

fetchaudio L'adresse URI du clip sonore à jouer pendant le

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

151 of 212 27/07/2012 22:31

Page 152: vxml

chargement. Si l'attribut n'est pas défini, alors on utilisela valeur de la propriété fetchaudio, et si la valeur decette dernière n'est pas fixée, aucun son ne sera jouépendant le chargement. Le chargement du clip sonoreest régi par les propriétés audiofetchhint, audiomaxage,audiomaxstale et fetchtimeout en vigueur à l'instant duchargement. La lecture du clip sonore est régie par lespropriétés fetchaudiodelay et fetchaudiominimum en vigueurà l'instant du chargement.

L'attribut fetchaudio trouve une utilité dans l'amélioration de l'expérience d'utilisateur,lorsque des délais perceptibles sont susceptibles de se manifester pour le chargementdu document suivant. Il peut servir à jouer une musique de fond ou une successiond'annonces. Une fois le document chargé, la lecture du fichier son s'interrompt s'iljouait encore. Si une erreur survient au cours du chargement du son d'attente à partirde son adresse URI, aucun événement error.badfetch ne sera suscité et aucun sonne sera joué pendant le chargement.

6.1.2 La mise en cache

Le contexte d'interprétation VoiceXML, tout comme les navigateurs visuels [HTML],peut utiliser une mise en cache pour améliorer les performances de chargement desdocuments et des autres ressources ; les enregistrements sonores (qui peuvent êtretrès volumineux) sont aussi fréquents dans les documents VoiceXML que les images lesont dans les documents HTML. Dans un navigateur visuel, il est courant d'inclure descommandes d'utilisateur final qui permettent de mettre à jour ou de rafraîchir uncontenu perçu comme étant expiré. Ce n'est pas le cas dans le contexted'interprétation VoiceXML en raison de l'absence de commandes d'utilisateur finaléquivalentes. C'est pourquoi le rafraîchissement du cache reste à la discrétion dudocument au travers de l'emploi approprié des attributs maxage et maxstale.

La politique de mise en cache suivie par le contexte d'interprétation VoiceXML doitadhérer aux règles d'exactitude de cache du protocole HTTP 1.1 ([RFC2616]). Lesen-têtes Expires et Cache-Control doivent notamment être respectées. L'algorithmesuivant résume ces règles et représente le comportement du contexte d'interprétationdans la requête d'une ressource :

Si la ressource n'est pas présente en cache, la charger du serveur en utilisant laméthode get,Si la ressource est en cache :

Si l'attribut maxage a une valeur :Si l'âge de la ressource en cache est <= maxage

Si la ressource est expiréeVérifier l'attribut maxstale.

Sinon, utiliser la copie en cache.Sinon, la charger du serveur au moyen de la méthode get.

Sinon,Si la ressource est expirée :

Vérifier l'attribut maxstale.Sinon, utiliser la copie en cache.

La « vérification de l'attribut maxstale » est la suivante :

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

152 of 212 27/07/2012 22:31

Page 153: vxml

Si l'attribut maxstale est fourni,Si la copie en cache a dépassé sa date d'expiration de pas plus de la valeuren secondes de l'attribut maxstale, alors utiliser la copie en cache.Sinon, la charger du serveur au moyen de la méthode get.

Sinon, la charger du serveur au moyen de la méthode get.

Remarque : Effectuer un « rechercher si modifié » sur un document toujours présentdans le cache, lorsque la politique requiert un chargement à partir du serveur,représente une optimisation.

Les propriétés maxage et maxstale peuvent ne pas avoir la moindre valeur par défault. Sila valeur n'est pas donnée par l'auteur du document et que la plateforme ne fournitpas de valeur par défaut, alors la valeur est "undefined" et la clause « Sinon » del'algorithme s'appliquera. Toutes les autres propriétés doivent fournir une valeur pardéfaut (qu'elle soit donnée par la spécification ou bien par la plateforme).

Alors que les attributs maxage et maxstale sont issus du protocole HTTP 1.1 etdirectement gérés par lui, certaines ressources peuvent être appelées par desadresses URI qui empruntent des protocoles autres que HTTP. Si le protocole ne gèrepas la notion d'âge d'une ressource, le contexte d'interprétation calculera l'âge de laressource à partir du moment où elle aura été reçue. Si le protocole ne gère pas lanotion d'expiration d'une ressource, le contexte d'interprétation considérera que laressource aura expiré immédiatement à réception.

6.1.2.1 Le contrôle de la politique de mise en cache

Le langage VoiceXML permet à l'auteur de surcharger le comportement de mise encache par défaut pour chaque usage de chacune des ressources (sauf un éventueldocument appelé par l'attribut application de l'élément vxml, car il n'existe pas demécanisme de balisage permettant de contrôler la politique de mise en cache d'undocument racine d'application).

Chaque élément relié à une ressource peut spécifier des attributs maxage et maxstale. Lefait de fixer une valeur non nulle à l'attribut maxage peut servir à obtenir une nouvellecopie d'une ressource qui n'aura pas encore expiré dans le cache. On peut demanderinconditionnellement une nouvelle copie en fixant la valeur de l'attribut maxage à "0".

L'utilisation de l'attribut maxstale permet à l'auteur de déclarer que l'on peut se servirde la copie expirée d'une ressource, le délai d'expiration n'étant pas trop dépassé(selon les règles du protoxole HTTP 1.1). Cela peut procurer une amélioration desperformances en éliminant un chargement qui, sinon, aurait été nécessaire pourobtenir une nouvelle copie. Cette fonctionnalité est particulièrement utile pour lesauteurs ne disposant pas de la maîtrise directe côté serveur des dates d'expiration defichiers statiques volumineux.

6.1.3 Le préchargement

Le préchargement est une fonctionnalité optionnelle qu'un contexte d'interprétationpeut mettre en œuvre pour obtenir une ressource avant qu'elle ne soit demandée. Uneressource susceptible d'un préchargement est identifiée par un élément dont l'attributfetchhint a la valeur "prefetch". Lorsqu'un contexte d'interprétation effectue lepréchargement d'une ressource, il doit s'assurer que la ressource préchargée estprécisément celle demandée. En particulier, si l'adresse URI est calculée au travers

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

153 of 212 27/07/2012 22:31

Page 154: vxml

d'un attribut expr, le contexte d'interprétation ne doit pas déplacer le chargementavant les éventuelles assignations des variables de l'expression à évaluer. De même,le chargement effectué à partir d'un élément submit ne doit pas être déplacé avant leséventuelles assignations des variables de l'attribut namelist.

L'état d'expiration d'une ressource doit être vérifié à chaque usage de la ressource et,si la valeur de son attribut fetchhint est "prefetch", elle doit alors être préchargée. Lavérification doit suivre la politique de mise en cache définie dans le chapitre 6.1.2.

6.1.4 Les protocoles

Les plateformes VoiceXML doivent prendre en charge le système d'adresse URI http etdevraient prendre en charge le protocole https devrait l'être, d'autres protocolesd'adresse URI pouvant être gérés.

6.2 Les informations de métadonnée

Les informations de métadonnée concernent le document plutôt que son contenu. Lelangage VoiceXML 2.0 fournit deux éléments pouvant exprimer des informations demétadonnée : les éléments meta et metadata. L'élément metadata offre un traitementplus général et plus puissant des informations de métadonnée que l'élément meta.

Le langage VoiceXML ne définit pas d'informations de métadonnée obligatoires.Cependant, il recommande que les métadonnées soient exprimées au moyen del'élément metadata, les informations étant fournies dans le langage du cadre dedescription des ressources (RDF) [RDF-SYNTAX] en utilisant le schéma RDF del'initiative Dublin Core version 1.0 [DC] (voir le chapitre 6.2.2).

6.2.1 L'élément meta

L'élément meta définit des métainformations comme dans le langage [HTML]. Il existedeux types d'élément meta.

Le premier type définit une propriété de métadonnée du document dans son ensembleet s'exprime au travers du couple d'attributs name et content. Par exemple, pour indiquerla personne chargée de la mise à jour d'un document VoiceXML :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <meta name="maintainer" content="[email protected]"/> <form> <block> <prompt>Bonjour</prompt> </block> </form> </vxml>

Le second type définit des en-têtes de réponse HTTP et s'exprime au travers du coupled'attributs http-equiv et content. Dans l'exemple suivant, le premier élément meta fixe

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

154 of 212 27/07/2012 22:31

Page 155: vxml

une date d'expiration qui empêche la mise en cache du document, le second élémentmeta fixe l'en-tête Date :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <meta http-equiv="Expires" content="0"/> <meta http-equiv="Date" content="Thu, 12 Dec 2000 23:27:21 GMT"/> <form> <block> <prompt>Bonjour</prompt> </block> </form> </vxml>

Les attributs de l'élément meta sont :

Tableau 56 : Les attributs de l'élément meta

name Le nom de la propriété de métadonnée.

content La valeur de la propriété de métadonnée.

http-equiv Le nom d'une en-tête de réponse HTTP.

On doit définir exactement un seul d'entre les attributs name ou http-equiv, sinon unévénement error.badfetch est suscité.

6.2.2 L'élément metadata

L'élément metadata est un conteneur dans lequel on peut placer des informationscontenant le document en utilisant un schéma de métadonnées. Bien qu'on puisseutiliser n'importe quel schéma de métadonnées avec l'élément metadata, onrecommande d'utiliser le schéma RDF en conjonction avec les propriétés demétadonnée définies dans l'initiative pour les métadonnées Dublin Core.

Le langage RDF est un langage déclaratif qui permet un emploi normalisé du langageXML pour représenter des métadonnées sous forme de déclarations sur les propriétéset les relations des éléments sur le Web. Les créateurs de contenu devrait consulter lesrecommandations sur les métadonnées du W3C [RDF-SYNTAX] et [RDF-SCHEMA] ainsique l'initiative pour les métadonnées Dublin Core [DC], qui est un ensemble depropriétés de métadonnée élémentaires d'application générale (par exemple, Title,Creator, Subject, Description, Copyrights, etc.).

On recommande l'emploi des propriétés de métadonnée Dublin Core suivantes dansl'élément metadata :

Tableau 57 : Les propriétés de métadonnée Dublin Corerecommandées

CreatorLa principale entité responsable de la fabrication ducontenu de la ressource.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

155 of 212 27/07/2012 22:31

Page 156: vxml

RightsDes informations concernant les droits détenus danset sur la ressource.

Subject

Le sujet du contenu de la ressource. En général, unsujet s'exprimera au travers de mots-clés, dephrases-clés ou de codes de classification. Le bonusage recommandé consiste à sélectionner desvaleurs provenant d'un vocabulaire contrôlé ou d'unsystème de classification formel.

Voici un exemple sur la façon d'inclure des métadonnées dans un document VoiceXMLen utilisant le schéma RDF de l'initiative Dublin Core version 1.0 [DC] :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <metadata> <rdf:RDF xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs = "http://www.w3.org/TR/1999/PR-rdf-schema-19990303#" xmlns:dc = "http://purl.org/metadata/dublin_core#">

<!-- Métadonnées concernant le document VoiceXML --> <rdf:Description about="http://www.example.com/meta.vxml" dc:Title="Service de renseignement de l'annuaire" dc:Description="Service de renseignement de l'annuaire de Londre en VoiceXML" dc:Publisher="W3C" dc:Language="fr" dc:Date="2002-02-12" dc:Rights="Copyright 2002 John Smith" dc:Format="application/voicexml+xml" > <dc:Creator> <rdf:Seq ID="CreateursNomOrdreAlphabétique"> <rdf:li>Jackie Crystal</rdf:li> <rdf:li>William Lee</rdf:li> </rdf:Seq> </dc:Creator> </rdf:Description> </rdf:RDF> </metadata> <form> <block> <prompt>Bonjour</prompt> </block> </form> </vxml>

6.3 L'élément property

L'élément property fixe la valeur d'une propriété. On se sert des élément propertypour fixer des valeurs qui affectent le comportement de la plateforme, comme letraitement de reconnaissance, les délais, la politique de mise en cache, etc.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

156 of 212 27/07/2012 22:31

Page 157: vxml

On peut définir des propriétés pour l'application entière, pour le document entier auniveau de l'élément vxml, pour un dialogue particulier au niveau des éléments form oumenu, ou pour un élément de formulaire particulier. Les propriétés s'appliquent à leurélément parent et à tous les descendants du parent. Une propriété à un niveauinférieur surclasse une propriété à un niveau supérieur. Lorsque des valeurs différentessont définies pour une propriété sur un même niveau, c'est la dernière dans l'ordre dudocument qui s'applique. Les propriétés définies dans le document racine d'applicationfournissent les valeurs implicites des propriétés dans chaque document del'application ; les propriétés définies dans un document individuel surclassent lesvaleurs de propriété définies dans le document racine d'application.

Si une plateforme détecte l'invalidité de la valeur d'une propriété, alors elle devraitsusciter un événement error.semantic.

Dans certains cas, les éléments property définissent des valeurs par défaut pour lesattributs d'un élément, tels que timeout et bargein. Par exemple, pour supprimerl'interruption implicite de toutes les invites d'un formulaire particulier :

<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form id="formulaire_sans_interruption"> <property name="bargein" value="false"/> <block> <prompt> Cette invite d'introduction ne peut pas être interrompue. </prompt> <prompt> Tout comme celle-ci. </prompt> <prompt bargein="true"> Mais celle-ci <emphasis>peut</emphasis> être interrompue. </prompt> </block> <field type="boolean"> <prompt> Veuillez dire oui ou non. </prompt> </field> </form></vxml>

Les attributs de l'élément property sont :

Tableau 58 : Les attributs de l'élément property

name Le nom de la propriété.

value La valeur de la propriété.

6.3.1 Les propriétés propres à la plateforme

Un contexte d'interprétation est libre de fournir des propriétés propres à la plateforme.Par exemple, pour fixer le « facteur de multiplication » de cette plateforme dans la

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

157 of 212 27/07/2012 22:31

Page 158: vxml

portée de ce document :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form> <property name="com.example.facteur_multiplication" value="42"/> <block> <prompt> Bienvenue </prompt> </block></form> </vxml>

Par définition, les propriétés propres à une plateforme introduisent des incompatibilitésqui peuvent nuire à la portabilité d'une application. Pour les minimiser, onrecommande fortement de suivre les conseils suivants pour le contexted'interprétation :

Les propriétés propres à une plateforme devraient utiliser des noms de domaineinversés afin d'éliminer des collisions potentielles comme, par exemple,« com.example.foo » qui se différencie nettement de « net.example.foo »

Le contexte d'interprétation ne doit pas susciter un événementerror.unsupported.property lorsqu'il rencontre une propriété qu'il ne peut pastraiter et devrait plutôt simplement l'ignorer.

6.3.2 Les propriétés génériques des logiciels de reconnaissance vocale

Les propriétés génériques des logiciels de reconnaissance vocale proviennent pour laplupart de l'interface Java Speech API [JSAPI] :

Tableau 59 : Les propriétés génériques des logiciels dereconnaissance vocale

confidencelevel

Le niveau de fiabilité de la reconnaissancevocale : une valeur flottante dans l'intervalle"0.0" à "1.0". Les résultats sont rejetés (unévénement nomatch est suscité) lorsque la valeurde la variableapplication.lastresult$.confidence estinférieure à ce seuil. Une valeur de "0.0" signifiequ'une fiabilité minimum est demandée pour unereconnaissance et, au contraire, une valeur de"1.1" une fiabilité maximum. La valeur est unedésignation de nombre réel (voir le chapitre 6.5).La valeur implicite est de "0.5".

sensitivity

Fixe le niveau de sensibilité. Une valeur de "1.0"signifie une haute sensibilité à une entréesilencieuse et, au contraire, une valeur de "0.0"la plus faible sensibilité au bruit. La valeur estune désignation de nombre réel (voir le

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

158 of 212 27/07/2012 22:31

Page 159: vxml

chapitre 6.5). La valeur implicite est de "0.5".

speedvsaccuracy

Un indice définissant l'équilibre souhaité entrevitesse et précision. Une valeur de "0.0" signifiela reconnaissance la plus rapide et une valeur de"1.0" la meilleure précision. La valeur est unedésignation de nombre réel (voir le chapitre 6.5).La valeur implicite est de "0.5".

completetimeout

La longueur du silence demandé, suivant laparole de l'utilisateur, avant que le logiciel dereconnaissance vocale ne finalise un résultat (soiten l'acceptant, soit en suscitant un événementnomatch). On utilise la propriété completetimeoutlorsque la parole est une correspondancecomplète à une grammaire active. Inversement,on utilise la propriété incompletetimeout lorsque laparole est une correspondance incomplète à unegrammaire active.

Une valeur longue pour la propriétécompletetimeout repousse la production du résultatet, de ce fait, augmente le temps de réponse del'ordinateur. Une valeur courte pour la propriétécompletetimeout peut entraîner la coupureinadéquate d'un énoncé. Les valeursraisonnables pour le délai achevé se tiennent engénéral dans un intervalle de 0.3 à 1 seconde. Lavaleur est une désignation de temps (voir lechapitre 6.5). La valeur implicite dépend de laplateforme. Voir l'annexe D.

Bien que les plateformes doivent analyser lapropriété completetimeout, elles ne sont pasobligées de mettre en œuvre son comportement.Les plateformes choisissant de ne pas mettre enœuvre le comportement de la propriétécompletetimeout doivent documenter et ajuster lecomportement de la propriété incompletetimeoutde la manière décrite ci-dessous.

incompletetimeout

La longueur du silence demandé, suivant laparole de l'utilisateur, avant que le logiciel dereconnaissance vocale ne finalise un résultat. Lapropriété incompletetimeout s'applique lorsque laparole précédent le silence est unecorrespondance incomplète sur toutes lesgrammaires actives. Auquel cas, une fois le délaidéclenché, le résultat partiel est rejeté (avec unévénement nomatch).

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

159 of 212 27/07/2012 22:31

Page 160: vxml

La propriété incompletetimeout s'applique aussilorsque la parole précédent le silence est unecorrespondance complète à une grammaireactive, mais quand il est possible de parlerencore en correspondance à la grammaire. Parcontraste, la propriété completetimeout s'utiliselorsque la parole est une correspondancecomplète à une grammaire active et qu'aucunmot en plus ne peut être dit.

Une valeur longue pour la propriétéincompletetimeout retarde l'achèvement durésultat et, de ce fait, augmente le temps deréponse de l'ordinateur. Une valeur courte pour lapropriété incompletetimeout peut entraîner lacoupure inadéquate d'un énoncé.

La valeur de la propriété incompletetimeout est engénéral plus grande que celle de la propriétécompletetimeout afin de permettre aux utilisateursune pause à mi-énoncé (par exemple, pourreprendre souffle). Voir l'annexe D.

Les plateformes choisissant de ne pas mettre enœuvre la propriété completetimeout (décriteprécédemment) doivent utiliser la valeurmaximum entre les propriétés completetimeout etincompletetimeout comme valeur de la propriétéincompletetimeout.

La valeur est une désignation de temps (voir lechapitre 6.5).

maxspeechtimeout

La durée maximum de la parole de l'utilisateur. Sicette durée est écoulée avant que l'utilisateur aitfini de parler, alors l'événementmaxspeechtimeout est suscité. La valeur est unedésignation de temps (voir le chapitre 6.5). Ladurée implicite dépend de la plateforme.

6.3.3 Les propriétés génériques des logiciels de reconnaissance DTMF

Plusieurs propriétés génériques concernent la reconnaissance des grammaires DTMF :

Tableau 60 : Les propriétés génériques des logiciels dereconnaissance DTMF

interdigittimeout

La valeur du délai entre les chiffres à utiliserdans la reconnaissance d'une entrée DTMF. Lavaleur est une désignation de temps (voir le

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

160 of 212 27/07/2012 22:31

Page 161: vxml

chapitre 6.5). La valeur implicite dépend de laplateforme (voir l'annexe D.

termtimeout

Le délai de terminaison à utiliser dans lareconnaissance d'une entrée DTMF. La valeur estune désignation de temps (voir le chapitre 6.5).La valeur implicite est "0s" (voir l'annexe D.

termcharLe caractère DTMF de terminaison dans unereconnaissance d'entrée DTMF. La valeurimplicite est "#" (voir l'annexe D).

6.3.4 Les propriétés d'invite et de collecte

Ces propriétés s'appliquent au cycle fondamental d'invite et de collecte de laplateforme :

Tableau 61 : Les propriétés d'invite et de collecte

bargein

L'attribut bargein à utiliser pour les invites. Fixer lavaleur de cette propriété à "true" autoriseimplicitement les interruptions et, au contraire,fixer la valeur à "false" les interdit. La valeurimplicite est "true".

bargeintypeFixe le type d'interruption : parole ("speech") oumot-clé ("hotword"). La valeur par défaut est propreà la plateforme. Voir le chapitre 4.1.5.1.

timeout

Le délai après lequel un événement noinput serasuscité par la plateforme. La valeur est unedésignation de temps (voir le chapitre 6.5). Lavaleur par défaut dépend de la plateforme (voirl'annexe D).

6.3.5 Les propriétés de mise en place

Ces propriétés concernent les nouveaux chargements de documents et de ressources(remarquez que les propriétés maxage et maxstale peuvent ne pas avoir de valeur pardéfaut : voir le chapitre 6.1.2) :

Tableau 62 : Les propriétés de mise en place

audiofetchhint

Indique à la plateforme si celle-ci peut ou nonessayer d'optimiser l'interprétation d'undialogue en préchargeant un fichier son. Savaleur est soit "safe" pour signifier que le son nedoit être chargé qu'à la demande, jamais avant,soit "prefetch" pour permettre, mais sansobligation, à la plateforme de précharger le son.La valeur implicite est "prefetch".

audiomaxageIndique à la plateforme l'âge maximumacceptable en secondes des ressources audio

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

161 of 212 27/07/2012 22:31

Page 162: vxml

mises en cache. La valeur par défaut est propreà la plateforme.

audiomaxstale

Indique à la plateforme l'obsolescencemaximum acceptable en secondes desressources audio expirées mises en cache. Lavaleur par défaut est propre à la plateforme.

documentfetchhintIndique à la plateforme si les documentspeuvent ou non être préchargés. La valeurs estsoit "safe" (la valeur implicite), soit "prefetch".

documentmaxage

Indique à la plateforme l'âge maximumacceptable en secondes des documents mis encache. La valeur par défaut est propre à laplateforme.

documentmaxstale

Indique à la plateforme l'obsolescencemaximum acceptable en secondes desdocuments expirés mis en cache. La valeur pardéfaut est propre à la plateforme.

grammarfetchhintIndique à la plateforme si les grammairespeuvent ou non être préchargées. La valeur estsoit "prefetch" (la valeur implicite), soit "safe".

grammarmaxage

Indique à la plateforme l'âge maximumacceptable en secondes des grammaires misesen cache. La valeur par défaut est propre à laplateforme.

grammarmaxstale

Indique à la plateforme l'obsolescencemaximum acceptable en secondes desgrammaires expirées mises en cache. La valeurpar défaut est propre à la plateforme.

objectfetchhint

Indique à la plateforme si le contenu del'adresse URI de l'objet peut ou non êtrepréchargé. Les valeurs sont "prefetch" (la valeurimplicite) ou "safe".

objectmaxage

Indique à la plateforme l'âge maximumacceptable en secondes des objets mis encache. La valeur par défaut est propre à laplateforme.

objectmaxstale

Indique à la plateforme l'obsolescencemaximum acceptable en secondes des objetsexpirés mis en cache. La valeur par défaut estpropre à la plateforme.

scriptfetchhintIndique à la plateforme si les scripts peuvent ounon être préchargés. Les valeurs sont "prefetch"(la valeur implicite) ou "safe".

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

162 of 212 27/07/2012 22:31

Page 163: vxml

scriptmaxage

Indique à la plateforme l'âge maximumacceptable en secondes des scripts mis encache. La valeur par défaut est propre à laplateforme.

scriptmaxstale

Indique à la plateforme l'obsolescencemaximum acceptable en secondes des scriptsexpirés mis en cache. La valeur par défaut estpropre à la plateforme.

fetchaudio

L'adresse URI du fichier son à jouer en attendantle chargement d'un document. Par défaut,aucun son n'est joué au cours des délais dechargement. La propriété fetchaudio nes'applique pas au chargement des fichiers sons,des grammaires, des objets et des scripts. Lechargement du fichier son est régi par lespropriétés audiofetchhint, audiomaxage,audiomaxstale et fetchtimeout en vigueur aumoment du chargement. La lecture du fichierson est régie par les propriétés fetchaudiodelayet fetchaudiominimum en vigueur au moment duchargement.

fetchaudiodelay

L'intervalle de temps à attendre au début d'unchargement avant de jouer le son dechargement indiqué par la propriété fetchaudio.La valeur est une désignation de temps (voir lechapitre 6.5). L'intervalle par défaut dépend dela plateforme (par exemple, "2s"). L'idée est lasuivante : quand un délai de chargement estcourt, quelques secondes de silence peuventêtre préférables à un bout de son dechargement qui est immédiatement coupé.

fetchaudiominimum

L'intervalle minimum de temps pendant lequeljouer une source de son de chargement, unefois commencé, même si le résultat duchargement arrive dans le contretemps. Lavaleur est une désignation de temps (voir lechapitre 6.5). La valeur par défaut dépend de laplateforme (par exemple, "5s"). L'idée est lasuivante : le son de chargement ne devrait pasêtre arrêté trop rapidement une fois quel'utilisateur a commencé à l'entendre.

fetchtimeout

Le délai d'expiration des chargements. La valeurest une désignation de temps (voir lechapitre 6.5). La valeur par défaut dépend de laplateforme.

6.3.6 Les propriétés diverses

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

163 of 212 27/07/2012 22:31

Page 164: vxml

Tableau 63 : Les propriétés diverses

inputmodes

Cette propriété détermine quelle modalité d'entréeutiliser. Les modes d'entrée activables : les tonalitésDTMF ("dtmf") et la voix ("voice"). Sur les plateformesqui gèrent les deux modes, la valeur implicite de lapropriété inputmodes est "dtmf voice". Pour désactiver lareconnaissance vocale, fixer la valeur de la propriété à"dtmf" et pour désactiver les tonalités DTMF, fixer savaleur à "voice". Un usage de la propriété serait dedésactiver la reconnaissance vocale enenvironnement bruyant. Un autre usage : désactiver lareconnaissance vocale afin de préserver lesressources qu'elle mobilise lorsqu'on sait que l'entréesera toujours de type DTMF. Cette propriété necontrôle pas l'activation des grammaires. Par exemple,les grammaires uniquement vocales peuvent êtreactives lorsque le mode d'entrée est restreint auxtonalités DTMF. Toutefois, ces grammaires ne serontpas sollicitées car la modalité d'entrée vocale estinopérante.

universals

Les plateformes peuvent, en option, fournir desgrammaires de commande universelle propres, tellesque des grammaires « help », « cancel » ou « exit »,qui soient toujours actives (sauf en ce qui concerneles éléments d'entrée modale : voir le chapitre 3.1.4)et qui génèrent des événements propres.

Les applications de qualité production ont souventbesoin de définir leurs propres grammaires decommande universelle, par exemple, afin d'améliorerla portabilité de l'application ou de fournir uneinterface distincte. Elles indiquent alors les nouvellesgrammaires de commande universelle au moyend'éléments link et désactivent les grammaires pardéfaut au moyen de cette propriété. Les gestionnairesde capture par défaut ne sont pas affectés par cettepropriété.

La valeur implicite, qui est "none", signifie que toutesles grammaires de commande universelle par défautde la plateforme sont désactivées. La valeur "all" lesactive toutes. Les grammaires individuelles s'activenten listant leurs noms, séparés par des espaces (parexemple, "cancel exit help").

maxnbest

Cette propriété contrôle la dimension maximale dutableau application.lastresult$ ; le tableau nepeut avoir une valeur supérieur à celle indiquée parcette propriété. Elle a une valeur minimale de "1". Savaleur implicite est "1".

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

164 of 212 27/07/2012 22:31

Page 165: vxml

Notre dernier exemple montre quelques unes de ces propriétés dans plusieursniveaux :

<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <!-- Fixe les caractéristiques par défaut de la page --> <property name="audiofetchhint" value="safe"/> <property name="confidencelevel" value="0.75"/>

<form> <!-- Surclasse les valeurs par défaut pour ce seul formulaire --> <property name="confidencelevel" value="0.5"/> <property name="bargein" value="false"/> <grammar src="carnet_adresses.grxml" type="application/srgs+xml"/> <block> <prompt> Bienvenue sur le carnet d'adresse vocal </prompt> </block> <initial name="start"> <!-- Surclasse les valeurs d'expiration par défaut --> <property name="timeout" value="5s"/> <prompt> Voulez-vous appeler cette personne ? </prompt> </initial> <field name="personne"> <prompt> Dites le nom de la personne que vous souhaitez appeler. </prompt> </field> <field name="ville"> <prompt> Dites la ville de la personne que vous souhaitez appeler. </prompt> </field> <field name="confirmer"> <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/> <!-- Utiliser l'énoncé réel pour jouer les mots reconnus, plutôt que les valeurs de facette renvoyées --> <prompt> Vous souhaitez appeler <value expr="personne$.utterance"/> à <value expr="ville$.utterance"/>. Est-ce exact ? </prompt> <filled> <if cond="confirmer"> <submit namelist="personne ville" next="http://www.centralmessage.example.com/voix/appeler" /> </if> <clear/> </filled> </field> </form> </vxml>

6.4 L'élément param

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

165 of 212 27/07/2012 22:31

Page 166: vxml

L'élément param sert à indiquer les valeurs qui seront passées aux sous-dialogues ouaux objets. Il s'inspire de l'élément [HTML] <PARAM>. Ses attributs sont :

Tableau 64 : Les attributs de l'élément param

nameLe nom à associer à ce paramètre quand l'objet ou lesous-dialogue est invoqué.

expr Une expression qui calcule la valeur associée au nom.

value Associe une valeur de chaîne littérale au nom.

valuetype

L'une des valeurs "data" (la valeur implicite) ou "ref".Sert à indiquer à un objet si la valeur associée au nomse compose de données ou est une adresse URI.L'élément subdialog ne l'utilise pas car les valeurssont toujours des données.

type

Le type de média du résultat fourni par une adresseURI quand la valeur de l'attribut valuetype est "ref" ;son utilisation n'est pertinente que pour les élémentsparam dans les éléments object.

On doit définir exactement un seul d'entre les attributs expr ou value, sinon unévénement error.badfetch est suscité.

L'emploi des attributs valuetype et type est, en général, optionnel, bien qu'ils puissentêtre exigés par des objets particuliers. Lorsque les éléments param sont contenus dansun élément subdialog, les valeurs qu'ils indiquent servent à initialiser les élémentsvar du sous-dialogue invoqué. Voir le chapitre 2.3.4 pour des précisions à propos del'initialisation des variables dans les sous-dialogues utilisant des éléments param.Lorsque les éléments param sont contenus dans un élément object, l'utilisation qui estfaite des données des paramètres est propre à l'objet invoqué, et n'est pas décritedans la spécification VoiceXML.

Voici un exemple avec des éléments param faisant partie d'un élément object. Dansce cas, les deux premiers éléments param comportent des expressions (implicitementvaluetype="data"), le troisième param a une valeur explicite et le quatrième est uneadresse URI qui renvoie le type de média "text/plain". La signification de cesdonnées est particulière à l'objet :

<object name="debit" classid="method://carte-credit/collecter_et_debiter" data="http://www.enregistrements.example.com/invites/credit/jesse.jar"> <param name="amount" expr="document.amt"/> <param name="vendor" expr="num_vendeur"/> <param name="application_id" value="ADC5678-QWOO"/> <param name="serveur_authentification" value="http://serv-auth.example.com" valuetype="ref" type="text/plain"/> </object>

L'exemple suivant montre des éléments param avec un élément subdialog. Dans cecas, on utilise deux expressions pour initialiser les variables dans la portée du

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

166 of 212 27/07/2012 22:31

Page 167: vxml

formulaire du sous-dialogue :

Le formulaire avec un dialogue appelant

<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form> <subdialog name="resultat" src="http://autre.example.com/#obtenir_nss"> <param name="prenom" expr="document.le_prenom"/> <param name="nom" expr="document.le_nom"/> <filled> <submit namelist="resultat.nss" next="http://unservice.example.com/cgi-bin/traitement"/> </filled> </subdialog> </form></vxml>

Le sous-dialogue situé à http://autre.example.com

<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"><form id="obtenir_nss"> <var name="prenom"/> <var name="nom"/> <field name="nss"> <grammar src="http://grammaires/nss.grxml" type="application/srgs+xml"/> <prompt> Veuillez indiquer un numéro de sécurité sociale. </prompt> <filled> <if cond="nss_valide(prenom,nom,nss)"> <assign name="statut" expr="true"/> <return namelist="statut nss"/> <else/> <assign name="statut" expr="false"/> <return namelist="statut"/> </if> </filled> </field> </form></vxml>

L'utilisation d'éléments param dans un élément subdialog représente un moyencommode de passer des données à un sous-dialogue sans devoir faire appel à un scriptcôté serveur.

6.5 Les désignations des valeurs

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

167 of 212 27/07/2012 22:31

Page 168: vxml

Plusieurs valeurs de paramètre VoiceXML suivent les conventions employées dans larecommandation des feuilles de style en cascade du W3C [CSS2].

6.5.1 Les entiers et les nombres réels

Les nombres réels et les entiers s'expriment seulement en notation décimale. Unentier se compose d'un ou plusieurs chiffres de "0" à "9". Un nombre réel peutapparaître comme un entier ou se composer de zéro chiffre ou plus, suivis par un point(« . »), suivi par un ou plusieurs chiffres. Les entiers comme les nombres réels peuventêtre précédés par un caractère moins « - » ou plus « + » pour en indiquer le signe.

6.5.2 Les temps

Les désignations de temps se composent d'un nombre réel non négatif suivi d'unidentifiant d'unité de temps. Les identifiants d'unité de temps sont :

ms : la millisecondes : la seconde

Exemples : "3s", "850ms", "0.7s", ".5s" et "+1.5s".

Annexes

Annexe A : Le glossaire des termes

algorithme FIA (Form Interpretation Algorithm)L'algorithme mis en œuvre dans un interpréteur VoiceXML qui conduit l'interactionentre l'utilisateur et un formulaire ou un menu VoiceXML. Voir le chapitre 2.1.6 etl'annexe C.

applicationUne collection de documents VoiceXML étiquetés d'un attribut application ayant lamême valeur.

ASRAutomatic speech recognition.

auteurLe créateur d'un document VoiceXML.

contenu exécutableUne logique procédurale qui se déroule dans les éléments block, les élémentsfilled ou dans les gestionnaires d'événement.

contexte d'interprétation VoiceXMLUn logiciel qui emploie un interpréteur VoiceXML pour interpréter un documentVoiceXML et qui peut également interagir avec la plateforme d'implémentationindépendamment de l'interpréteur VoiceXML.

dialogueUne interaction avec l'utilisateur définie dans un document VoiceXML. Lesdialogues sont de plusieurs types : les formulaires et les menus.

document VoiceXMLUn document XML conforme à la spécification VoiceXML.

DTMF (Dual Tone Multi-Frequency)

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

168 of 212 27/07/2012 22:31

Page 169: vxml

Une composition par tonalités ou par touches. La pression d'un bouton sur unclavier téléphonique génère un son qui est la combinaison de deux tonalités :l'une de haute fréquence et l'autre de basse fréquence.

ECMAScriptUne version normalisée du langage JavaScript soutenue par l'European ComputerManufacturer's Association. Voir [ECMASCRIPT]

élément de captureUn bloc catch ou l'une de ses formes abrégées. Certains éléments de capturesont définis par l'interpréteur VoiceXML.

élément de commandeUn élément de formulaire destiné soit à contenir un bloc de procédures logiques(block), soit à permettre les invites initiales d'un dialogue à initiative mixte(initial).

élément d'entréeUn élément de formulaire destiné à entrer une variable d'élément d'entrée. Leséléments d'entrée comprennent les éléments field, record, object, subdialoget transfer.

élément de formulaireUn élément contenu dans un élément form susceptible d'être visité au cours del'exécution du formulaire : initial, block, field, record, object, subdialog ettransfer.

événementUne notification « lancée » par la plateforme d'implémentation, le contexted'interprétation VoiceXML, l'interpréteur VoiceXML ou un code VoiceXML. Lesévénements incluent les conditions exceptionnelles (les erreurs sémantiques), leserreurs normales (l'utilisateur veut quitter) et les événements définis parl'utilisateur.

formulaireUn dialogue qui interagit avec l'utilisateur de manière très souple, l'ordinateur etl'utilisateur partageant l'initiative.

grammaire activeUne grammaire vocale ou DTMF actuellement active. On le détermine à partir del'élément en cours d'exécution et des éléments scope des grammairesactuellement définies.

identificateur de langueUn identificateur de langue étiquette un contenu d'informations comme étantdans une variante d'une langue humaine particulière. D'après la spécification XMLpour l'identification d'une langue [XML], un identificateur de langue légal estdéterminé par un code RFC 3066 [RFC3066]. Selon le document RFC 3066, lecode de langue est obligatoire et le code de pays, ou une autre sous-étiquetted'identificateur, est optionnel.

initiative mixteUne interaction homme-machine selon laquelle soit l'ordinateur, soit l'humainprend l'initiative et décide quoi faire ensuite.

interpréteur VoiceXMLUn logiciel qui interprète un document VoiceXML afin de contrôler une plateformed'implémentation dans le but de conduire une interaction avec un utilisateur.

invites dégressivesUn ensemble d'invites utilisé pour varier le message donné à un humain. Lesinvites peuvent être réduites afin d'être plus concises à l'usage (invite de champ)ou plus explicites (invite d'assistance).

JSGF

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

169 of 212 27/07/2012 22:31

Page 170: vxml

Java API Speech Grammar Format. Un standard proposé pour représenter desgrammaires vocales. Voir [JSGF]

linkUn ensemble de grammaires qui, l'utilisateur ayant dit ou saisi quelque chose quiy trouve une correspondance, opère une transition vers un nouveau dialogue, ouun nouveau document, ou bien qui suscite un événement dans l'élément deformulaire courant.

menuUn dialogue qui présente un ensemble de choix à l'utilisateur et entreprend uneaction en fonction de la sélection.

objetUne fonctionnalité propre à une plateforme disposant d'une interface viaVoiceXML.

plateforme d'implémentationUn ordinateur pourvu du logiciel et/ou du matériel adéquats permettant de gérerles types d'interaction définis par VoiceXML.

requêteUne collection de données comprenant : une adresse URI indiquant un serveur dedocuments pour les données, un ensemble de couples nom/valeur des données àtraiter (optionnel) et une méthode de soumission pour le traitement (optionnel).

scriptUn fragment de logique écrit dans un langage de script côté client, en particulierle langage de script ECMAScript lequel doit être pris en charge par toutinterpréteur VoiceXML.

sessionUne connexion entre un utilisateur et une plateforme d'implémentation, parexemple, un appel téléphonique vers un système de réponse vocale. Une sessionpeut impliquer l'interprétation de plusieurs documents VoiceXML.

sous-dialogueUn dialogue (ou un document) VoiceXML invoqué depuis le dialogue courant demanière analogue à un appel de fonction.

Spécification des feuilles de style en cascade du W3C.Voir [CSS2]

SRGS (Speech Recognition Grammar Specification)Un format normalisé pour les grammaires de reconnaissance vocale à contextelibre en cours de développement par le groupe de travail Navigateur vocal duW3C. Les formats ABNF et XML sont tous deux définis [SRGS].

SSML (Speech Synthesis Markup Language)Un format normalisé pour la synthèse de la parole en cours de développement parle groupe de travail Navigateur vocal du W3C [SSML].

throwUn élément qui déclenche un événement.

TTStext-to-speech : synthèse de la parole.

URIUniform Resource Indicator.

URLUniform Resource Locator.

utilisateurUne personne dont l'interaction avec une plateforme d'implémentation estcontrôlée par un interpréteur VoiceXML.

variable d'élément de formulaire

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

170 of 212 27/07/2012 22:31

Page 171: vxml

Une variable, définie implicitement ou bien explicitement, associée à chaqueélément de formulaire dans un formulaire. Si la variable d'élément de formulairen'est pas définie, l'algorithme FIA visitera l'élément de formulaire et l'utiliserapour interagir avec l'utilisateur.

W3CWorld Wide Web Consortium http://www.w3.org/

Annexe B : La définition de type de document VoiceXML

Le DTD de VoiceXML se trouve à http://www.w3.org/TR/voicexml20/vxml.dtd .

En raison des limitations des DTD, le DTD de VoiceXML n'exprime pas correctement lefait que l'élément metadata puisse contenir des éléments issus d'autres espaces denommage XML.

Remarque : Le DTD de VoiceXML contient des éléments modifiés provenant des DTDde la spécification des grammaires de reconnaissance vocale 1.0 [SRGS] et du langagede balisage de la synthèse vocale [SSML].

Annexe C : L'algorithme d'interprétation des formulaires

L'algorithme d'interprétation des formulaires (FIA) conduit l'interaction entrel'utilisateur et un formulaire, ou un menu, VoiceXML. On peut assimiler un menu à unformulaire contenant un seul champ dont la grammaire et l'action filled sontconstruites à partir des éléments choice.

L'algorithme FIA doit prendre en charge :

L'initialisation du formulaire.Le mécanisme des invites, y compris la gestion des compteurs d'invites qui estnécessaire à la réduction des invites.L'activation et la désactivation des grammaires au niveau du formulaire et deséléments de formulaire.L'entrée dans le formulaire avec un énoncé qui correspondait à l'une desgrammaires de portée document du formulaire alors que l'utilisateur visitait unformulaire ou un menu différents.La sortie du formulaire parce que l'utilisateur a touché une autre grammaire deportée document d'un formulaire, d'un menu ou d'un lien.Le traitement de plusieurs remplissages de champs à partir d'un seul énoncé, ycompris l'exécution des actions filled concernées.La sélection de l'élément de formulaire suivant à visiter puis son traitement.Le choix du bon élément de capture pour gérer les éventuels événementssuscités au cours du traitement d'un élément de formulaire.

Nous définissons d'abord quelques termes et structures de données utilisés dansl'algorithme d'interprétation des formulaires :

jeu de grammaires actifL'ensemble des grammaires actives au cours de l'opération de collecte desentrées par le contexte d'interprétation VoiceXML.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

171 of 212 27/07/2012 22:31

Page 172: vxml

énoncéUn résumé de ce que l'utilisateur a dit ou saisi, y compris la grammaireparticulière qui correspond, et un résultat sémantique consistant en une structured'interprétation ou, quand il n'y a pas d'interprétation sémantique, le texte brutde l'entrée (voir le chapitre 3.1.6). Un exemple d'énoncé : « la grammaire 123correspond et l'interprétation sémantique est {boisson: "eau" pizza: {numero: "3"taille: "grande"}} ».

exécuterExécuter un contenu exécutable soit un élément block, soit une action filled ouun ensemble d'actions filled. Si un événement est suscité au cours del'exécution, l'exécution du contenu exécutable est abandonnée. Le gestionnaired'événement adéquat est alors exécuté, ce qui peut entraîner une reprise ducontrôle dans un élément de formulaire, dans l'itération suivante de la boucleprincipale du formulaire ou bien en dehors du formulaire. Si un élément goto estexécuté, le transfert intervient immédiatement, et le reste du contenu exécutablene sera pas exécuté.

Voici l'algorithme d'interprétation des formulaires présenté de manière conceptuelle.L'algorithme FIA peut démarrer sans énoncé initial ou avec un énoncé initial passé parun autre dialogue :

//// Phase d'initialisation//

foreach ( var, script et élément de formulaire, dans l'ordre du document ) if ( l'élément est un var ) Déclarer la variable, en l'initialisant à la valeur de l'attribut expr, le cas échéant, ou sinon à "undefined". else if ( l'élément est un script ) Évaluer le contenu du script si inscrit directement ou sinon depuis l'emplacement défini par l'attribut src. else if ( l'élément est un élément de formulaire ) Créer une variable à partir de l'attribut name, le cas échéant, ou sinon générer un nom interne. Assigner à cette variable la valeur de l'attribut expr, le cas échéant, ou sinon "undefined". foreach ( élément d'entrée et élément initial ) Declare a prompt counter and set it to 1.

if ( l'utilisateur est entré dans ce formulaire via une parole en correspondance à sa grammaire alors qu'il était dans un autre formulaire ){ Entrer dans la boucle principale ci-dessous, mais commencer dans la phase de traitement et non dans celle de sélection : on a déjà une collection à traiter.}

//// Boucle principale : Sélectionner l'élément de formulaire suivant et l'exécuter.//

while ( true ){ // // Phase de sélection : Choisir un élément de formulaire à visiter.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

172 of 212 27/07/2012 22:31

Page 173: vxml

//

if ( la dernière itération de la boucle principale a terminé par un <goto nextitem> ) Sélectionner cet élément de formulaire suivant.

else if ( il existe un élément de formulaire ayant une condition de veille non satisfaite ) Sélectionner le premier de ces éléments de formulaire, dans l'ordre du document.

else Effectuer un exit -- le formulaire est rempli et ne définissait pas de transition.

// // Phase de collecte : Exécuter l'élément de formulaire sélectionné. // // Mettre en file d'attente les invites de l'élément de formulaire.

unless ( à moins que la dernière itération de la boucle n'a terminé par une capture sans reprompt et que le dialogue actif n'a pas été changé ) {

Sélectionner les invites appropriées pour un élément d'entrée ou initial. Mettre en file d'attente les invites sélectionnées en vue d'une lecture avant l'opération de collecte suivante.

Incrémenter le compteur d'invites de l'élément d'entrée ou l'élément initial }

// Activer les grammaires de l'élément de formulaire.

if ( l'élément de formulaire est modal ) Fixer le jeu des grammaires actives sur les grammaires de l'élément de formulaire, le cas échéant. (Remarquez que certains éléments de formulaire, par exemple, block, ne peuvent pas avoir de grammaire). else Fixer le jeu des grammaires actives sur les grammaires de l'élément de formulaire et les éventuelles grammaires dans la portée du formulaire, du document courant et du document racine d'application.

// Exécuter l'élément de formulaire.

if ( un élément field a été sélectionné ) Collecter un énoncé ou un événement issus de l'utilisateur. else if ( un élément record a été choisi ) Collecter un énoncé (avec un couple nom/valeur pour les octets enregistrés) ou un événement issus de l'utilisateur. else if ( un élément object a été choisi ) Exécuter l'objet, en fixant la variable d'élément de formulaire de l'object à la valeur ECMAScript renvoyée. else if ( un élément subdialog a été choisi ) Exécuter le sous-dialogue, en fixant la variable d'élement de formulaire du subdialog à la valeur ECMAScript renvoyée. else if ( un élément transfer a été choisi ) Effectuer le transfert et (si wait="true") fixer la variable d'élément de formulaire de transfer à l'indicateur de statut du résultat renvoyé.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

173 of 212 27/07/2012 22:31

Page 174: vxml

else if ( un élément initial a été choisi ) Collecter un énoncé ou un événement issus de l'utilisateur. else if ( un élément block a été choisi ) { Fixer la variable d'élément de formulaire du block à une valeur définie.

Exécuter le contenu exécutable du block. }

// // Phase de traitement : Traiter l'énoncé ou l'événement résultant. //

Assigner l'énoncé et les autres informations concernant la dernière reconnaissance à application.lastresult$. // Doit avoir un énoncé

if ( l'énoncé correspondait à une grammaire appartenant à un link ) Si l'élément link définit un attribut next ou expr, effectuer la transition vers cette adresse. Sinon, si l'élément link définit un attribut event ou eventexpr, générer cet événement. else if ( l'énoncé correspondait à une grammaire appartenant à un choice ) Si l'élément choice définit un attribut next ou expr, effectuer la transition vers cette adresse. Sinon, si l'élément choice définit un attribut event ou eventexpr, générer cet événement. else if ( l'énoncé correspondait à une grammaire située hors du form ou menu courant ) { Effectuer la transition vers cet élément form ou menu, en apportant l'énoncé à la nouvelle instance FIA. }

// Traiter un énoncé sollicitant une grammaire provenant de ce formulaire. // Copier d'abord les valeurs de propriété du résultat de l'énoncé dans les // variables d'élément de formulaire correspondantes.

Effacer tous les drapeaux « juste_rempli ».

if ( la grammaire est dans la portée du niveau champ ) { // Cette grammaire doit être incluse dans un élément d'entrée. L'élément d'entrée // a une variable ECMAScript associée (appelée ici variable d'élément d'entrée) // et un nom de facette.

if ( le résultat n'est pas une structure ) Copier le résultat dans la variable d'élément d'entrée. elseif ( une propriété de niveau supérieur dans le résultat correspond au nom de facette ou le nom de facette est un chemin séparé par des points correspondant à une sous-propriété dans le résultat ) Copier la valeur de cette propriété dans la variable d'élément d'entrée. else Copier le résultat entier dans la variable d'élément d'entrée

Fixer le drapeau « juste_rempli » de cet élément d'entrée. } else { foreach ( propriété dans l'énoncé de l'utilisateur )

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

174 of 212 27/07/2012 22:31

Page 175: vxml

{ if ( la propriété correspond au nom de facette d'un élément d'entrée ) { Copier la valeur de cette propriété dans la variable d'élément de formulaire de cet élément d'entrée.

Fixer le drapeau « juste_rempli » de cet élément d'entrée. } } }

// Fixer toutes les variables d'élément de formulaire de l'élément initial, // si chaque élément d'entrée est rempli.

if ( toute variable d'élément d'entrée est fixée en résultat de l'énoncé de l'utilisateur ) Fixer toutes les variables d'élément de formulaire de initial à "true".

// Exécuter ensuite toutes les actions déclenchées par filled.

foreach ( action filled dans l'ordre du document ) { // Déterminer les variables d'élément d'entrée auxquelles le filled s'applique.

N = l'attribut namelist de l'élément filled.

if ( N égale "" ) { if ( l'élément filled est un enfant d'élément d'entrée ) N = le nom de la variable d'élément de formulaire de l'élément d'entrée. else if ( l'élément filled est un enfant de form ) N = les noms des variables d'élément de formulaire de tous les éléments d'entrée dans ce formulaire. }

// Est-ce que le filled est déclenché ?

if ( toute variable d'élément d'entrée du jeu N a été « juste_remplie » ET ( l'attribut mode de l'élément filled a la valeur "all" ET toutes les variables dans N sont remplies OU l'attribut mode de l'élément filled a la valeur "any" ET toutes les variables dans N sont remplies ) ) Exécuter l'action filled.

Si un événement est suscité au cours de l'exécution d'un élément filled, la sélection du gestionnaire d'événement commence dans la portée de l'élément qui pourrait être celle d'un élément d'entrée ou le formulaire en question. } // Si aucun élément d'entrée n'est rempli, juste continuer.}

Au cours de l'exécution de l'algorithme FIA, des événements peuvent être générés enplusieurs points. Ces événements sont traités différemment selon la phase qui estactive.

Avant qu'un élément de formulaire ne soit sélectionné (c'est-à-dire, au cours desphases d'initialisation et de sélection), les événements sont générés au niveau du

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

175 of 212 27/07/2012 22:31

Page 176: vxml

dialogue. Le gestionnaire de capture correspondant est localisé puis exécuté. Si lacapture n'aboutit pas à une transition à partir du dialogue courant, alors l'exécution del'algorithme FIA se terminera.

De même, les événements déclenchés après qu'un élément de formulaire a étésélectionné (c'est-à-dire, au cours des phases de collecte et de traitement) sonthabituellement générés au niveau de l'élément de formulaire. Il y a une seuleexception : les événements déclenchés par un élément filled de niveau dialoguesont générés au niveau dialogue. Le gestionnaire de capture correspondant est localisépuis exécuté. Si la capture n'aboutit pas à une transition, alors la boucle courante del'algorithme FIA est terminée et la phase de sélection est réitérée.

Annexe D : Les propriétés de temporisation

Les diverses propriétés de temporisation pour la reconnaissance vocale et DTMFs'accordent pour définir l'expérience d'utilisateur. Les modalités selon lesquelles cesdifférents paramètres de temporisation fonctionnent sont soulignées dans lesdiagrammes de temporisation ci-dessous. Dans ces diagrammes, le début d'attented'une entrée DTMF ou d'une parole de l'utilisateur commence au moment où ladernière invite a fini de jouer.

D.1. Les grammaires DTMF

Les grammaires DTMF utilisent les propriétés timeout, interdigittimeout, termtimeout ettermchar, décrites dans le chapitre 6.3.3, pour adapter l'expérience d'utilisateur. Leurseffets sont montrés dans les diagrammes de temporisation suivants :

La propriété timeout quand aucune entrée n'est fournie

Le paramètre timeout détermine le moment où l'événement noinput est suscité, parceque l'utilisateur n'a entré aucune tonalité DTMF (Figure 12). Dès que la premièretonalité DTMF a été entrée, ce paramètre n'a plus aucun effet.

Figure 12 : Diagramme de temporisation de la propriété timeout quand aucune entréen'est fournie.

La propriété interdigittimeout quand la grammaire n'est pas prête à terminer

Dans la figure 13, la propriété interdigittimeout détermine le moment où l'événementnomatch est suscité, parce qu'une grammaire DTMF n'est pas encore reconnue et quel'utilisateur n'a pas entré d'autre tonalité DTMF.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

176 of 212 27/07/2012 22:31

Page 177: vxml

Figure 13 : Diagramme de temporisation de la propriété interdigittimeout quand lagrammaire n'est pas prête à terminer.

La propriété interdigittimeout quand la grammaire est prête à terminer

L'exemple ci-dessous montre une situation où une grammaire DTMF pourrait terminerou se prolonger par l'entrée d'autres tonalités DTMF, tandis que l'utilisateur ne s'estpas décidé à fournir une autre entrée.

Figure 14 : Diagramme de temporisation de la propriété interdigittimeout quand lagrammaire est prête à terminer.

Les propriétés termchar et interdigittimeout quand la grammaire peut terminer

Dans l'exemple ci-dessous, la propriété termchar n'est pas vide et sa valeur est entréepar l'utilisateur avant l'expiration définie par la propriété interdigittimeout, signifiantainsi que l'entrée DTMF de l'utilisateur est complète ; le caractère de terminaison n'estpas inclus avec la valeur reconnue.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

177 of 212 27/07/2012 22:31

Page 178: vxml

Figure 15 : Diagramme de temporisation des propriétés termchar et interdigittimeoutquand la grammaire peut terminer.

La propriété termchar vide quand la grammaire doit terminer

Dans l'exemple ci-dessous, l'entrée de la dernière tonalité DTMF a mené la grammaireà un point de terminaison auquel on n'attend pas d'autre tonalité DTMF. Comme lapropriété termchar est vide, aucun caractère de terminaison optionnel n'est autorisé : lareconnaissance se termine donc et la valeur reconnue est renvoyée.

Figure 16 : Diagramme de temporisation de la propriété termchar vide quand lagrammaire doit terminer.

Les propriétés termchar non vide et termtimeout quand la grammaire doitterminer

Dans l'exemple ci-dessous, l'entrée de la dernière tonalité DTMF a mené la grammaireà un point de terminaison auquel la grammaire n'autorise aucune autre tonalité DTMF.Si la propriété termchar est non vide, alors l'utilisateur peut entrer un caractère determinaison DTMF optionnel dans l'intervalle défini par la propriété termtimeout : lareconnaissance se termine alors et la valeur reconnue est renvoyée. Si la valeur de lapropriété termtimeout est "0s" (la valeur implicite), alors la valeur reconnue estrenvoyée immédiatement après la dernière tonalité DTMF autorisée par la grammaire,sans attendre le caractère de terminaison optionnel. Remarque : la propriététermtimeout s'applique seulement quand la grammaire n'autorise aucune autre entrée,sinon, la propriété interdigittimeout s'appliquera.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

178 of 212 27/07/2012 22:31

Page 179: vxml

Figure 17 : Diagramme de temporisation de la propriété termchar non vide et de lapropriété termtimeout quand la grammaire doit terminer.

Les propriétés termchar non vide et termtimeout quand la grammaire doitterminer

Dans cet exemple, l'entrée de la dernière tonalité DTMF a mené la grammaire à unpoint de terminaison auquel la grammaire n'autorise aucune autre tonalité DTMF.Puisque la propriété termchar est non vide, l'utilisateur entre le caractère determinaison optionnel dans l'intervalle défini par la propriété termtimeout, provoquantainsi le retour de la valeur reconnue (en excluant le caractère de terminaison).

Figure 18 : Diagramme de temporisation de la propriété termchar non vide quand lagrammaire doit terminer.

Les entrées DTMF invalides

En attendant la première ou d'autres tonalités DTMF, trois délais différents peuventdéterminer l'instant où l'entrée d'utilisateur sera considérée comme complète : siaucune tonalité DTMF n'a été entrée, la propriété timeout s'appliquera ; si une certainetonalité DTMF a été entrée, une tonalité supplémentaire étant valide, alors la propriétéinterdigittimeout s'appliquera, et si aucune autre tonalité DTMF n'est valide, lapropriété termtimeout s'applique alors. Dans chaque cas, l'utilisateur peut entrer unetonalité DTMF interdite par la ou les grammaires actives. Ce qui entraîne l'invalidité dela chaîne DTMF collectée. D'autres chiffres seront collectés jusqu'à ce que la touche ducaractère de terminaison soit appuyée ou bien jusqu'à ce que la valeur indiquée par lapropriété interdigittimeout soit dépassée. Un événement nomatch est alors généré.

D.2. Les grammaires vocales

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

179 of 212 27/07/2012 22:31

Page 180: vxml

Les grammaires vocales utilisent les propriétés timeout, completetimeout etincompletetimeout, décrites dans le chapitre 6.3.4 et le chapitre 6.3.2, pour adapterl'expérience d'utilisateur. Leurs effets sont montrés dans les diagrammes detemporisation suivants :

La propriété timeout quand rien n'est dit

Dans l'exemple ci-dessous, la propriété timeout détermine quand l'événement noinputest suscité, parce que l'utilisateur n'a rien dit.

Figure 19 : Diagramme de temporisation de la propriété timeout quand rien n'est dit.

La propriété completetimeout avec une grammaire vocale reconnue

Dans l'exemple précédent, l'utilisateur fournissait un énoncé qui était reconnu par lagrammaire vocale. Après l'écoulement de la période de silence indiquée par lapropriété completetimeout, la valeur reconnue est renvoyée.

Figure 20 : Diagramme de temporisation de la propriété completetimeout avec unegrammaire vocale reconnue.

La propriété incompletetimeout avec une grammaire vocale non reconnue

Dans l'exemple précédent, l'utilisateur fournissait un énoncé qui n'était pas encorereconnu par la grammaire vocale tout en étant le préfixe d'un énoncé légal. Aprèsl'écoulement de la période de silence indiquée par la propriété incompletetimeout, unévénement nomatch est suscité.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

180 of 212 27/07/2012 22:31

Page 181: vxml

Figure 21 : Diagramme de temporisation de la propriété incompletetimeout avec unegrammaire vocale non reconnue.

Annexe E : Les formats des fichiers sons

Le langage VoiceXML demande à une plateforme qu'elle gère la lecture etl'enregistrement des formats audio définis ci-dessous :

Tableau 65 : Les formats audio que les plateformes doivent gérer

Format audio Type de média

Raw (sans en-tête) 8kHz 8-bit mono mu-law[PCM] canal seul (G.711)

audio/basic (selon[RFC1521])

Raw (sans en-tête) 8kHz 8-bit mono A-law[PCM] canal seul (G.711)

audio/x-alaw-basic

WAV (en-tête RIFF) 8kHz 8-bit mono mu-law[PCM] canal seul.

audio/x-wav

WAV (en-tête RIFF) 8kHz 8-bit mono A-law[PCM] canal seul.

audio/x-wav

Le type MIME "audio/basic" s'utilise couramment avec le format d'en-tête « au » ainsiqu'avec le format 8-bit 8Khz mu-law sans en-tête. Si ce type MIME est indiqué pourl'enregistrement, on doit utiliser le format mu-law. Pour la lecture avec le type MIME"audio/basic", les plateformes doivent gérer le format mu-law et elles peuvent gérerle format « au ».

Annexe F : La conformité

Ce chapitre est normatif.

F1. Le document VoiceXML conforme

Un document VoiceXML conforme est un document [XML] bien formé qui ne nécessiteque les facilités décrites comme obligatoires dans cette spécification. Un tel document

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

181 of 212 27/07/2012 22:31

Page 182: vxml

doit satisfaire à tous les critères suivants :

Le document doit se conformer aux contraintes exprimées dans le schémaVoiceXML (voir l'annexe O).

1.

L'élément racine du document doit être l'élément vxml.2.

L'élément vxml doit inclure un attribut version avec la valeur "2.0".3.

L'élément vxml doit désigner l'espace de nommage VoiceXML. On peut le faire endéclarant un attribut xmlns ou un attribut avec un préfixe xmlns [XMLNAMES].L'espace de nommage de VoiceXML est défini comme étant http://www.w3.org/2001/vxml.

4.

On recommande que l'élément vxml indique également l'emplacement duschéma VoixeXML (voir l'annexe O) via l'attribut xsi:schemaLocation issu de laspécification [SCHEMA1] :

xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"

Bien qu'elle ne soit pas obligatoire, le présent document fournit cette indicationdans tous les exemples pour en encourager l'utilisation.

5.

Il peut y avoir une déclaration de type de document DOCTYPE dans le documentavant l'élément racine. Le cas échéant, l'identificateur public inclus dans ladéclaration DOCTYPE doit appeler le DTD de VoiceXML (voir l'annexe B) enutilisant son identifiant public formel :

<!DOCTYPE vxml PUBLIC "-//W3C//DTD VOICEXML 2.0//EN" "http://www.w3.org/TR/voicexml20/vxml.dtd">

L'identifiant système peut se modifier de manière appropriée.

On ne doit pas utiliser le sous-ensemble de DTD pour surclasser les entitésparamètres dans le DTD.

6.

Voici un exemple de document VoiceXML conforme :

<?xml version="1.0" encoding="UTF-8"?>

<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd">

<form> <block>bonjour</block> </form>

</vxml>

Remarquez que cet exemple comprend les attributs recommandés xmlns:xsi etxsi:schemaLocation ainsi qu'une déclaration XML. Une déclaration XML comme celle-cin'est pas obligatoire dans tous les documents. Les auteurs de documents VoiceXMLsont fortement encouragés à employer des déclarations XML dans tous leursdocuments. Une telle déclaration est obligatoire lorsque le codage des caractères du

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

182 of 212 27/07/2012 22:31

Page 183: vxml

document diffère des codages implicites UTF-8 ou UTF-16 et qu'aucun codage n'a étédéterminé par un protocole de niveau supérieur.

Le langage VoiceXML ou ces critères de conformité n'indiquent aucune limite de taillesur un aspect quelconque des documents VoiceXML. Il n'y a aucune valeur maximumau nombre des éléments, à la quantité des données textuelles ou au nombre decaractères dans les valeurs des attributs.

F.2 L'utilisation du langage VoiceXML avec d'autres espaces denommage

On peut utiliser l'espace de nommage VoiceXML avec d'autres espaces de nommageXML selon la spécification [XMLNAMES], bien que de tels documents ne soient pas desdocuments VoiceXML strictement conformes comme défini précédemment. Destravaux ultérieurs du W3C proposeront des moyens d'indiquer la conformité desdocuments mettant en scène plusieurs espaces de nommage.

F.3 Les processeurs VoiceXML conformes

Un processeur VoiceXML est un agent utilisateur capable d'analyser et de traiter desdocuments VoiceXML conformes.

Dans un processeur VoiceXML conforme, l'analyseur XML doit pouvoir analyser ettraiter toutes les structures XML bien formées définies dans les spécifications [XML] et[XMLNAMES]. Un processeur VoiceXML conforme n'est pas obligé d'utiliser unanalyseur validant.

Un processeur VoiceXML conforme doit être un processeur SSML conforme [SSML] etun processeur de grammaire XML conforme [SRGS], sauf pour les différences décritesdans ce document. Si une erreur de syntaxe est détectée au cours du traitement d'undocument de grammaire, alors un événement error.badfetch doit être suscité.

Un processeur VoiceXML conforme doit gérer la syntaxe et la sémantique de tous leséléments VoiceXML décrits dans ce document. Par conséquent, un processeurVoiceXML conforme ne doit pas susciter d'événement error.unsupported.<élément>pour tout élément VoiceXML devant être géré au cours du traitement d'un documentVoiceXML conforme.

Lorsqu'un processeur VoiceXML conforme rencontre un document VoiceXML conformecontenant des éléments ou des attributs non-VoiceXML, lesquels sont propriétaires,définis seulement dans des versions précédentes du langage VoiceXML ou bien définisdans un espace de nommage non-VoiceXML et ne pouvant pas être traités, alors il doitsusciter un événement error.badfetch.

Lorsqu'un processeur VoiceXML conforme rencontre un document ayant un élémentracine qui désigne un espace de nommage autre que celui de VoiceXML, soncomportement n'est pas défini.

Toutefois, il n'y a aucune obligation de conformité concernant les caractéristiques desperformances du processeur VoiceXML.

Annexe G : L'internationalisation

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

183 of 212 27/07/2012 22:31

Page 184: vxml

Le langage VoiceXML est une application du langage [XML] et, de ce fait, gère[UNICODE] qui définit un jeu de caractères universel normalisé.

En outre, le langage VoiceXML fournit un mécanisme permettant le contrôle précis deslangues d'entrée et de sortie au travers de l'attribut xml:lang. Cette facilité offre :

La possibilité de définir la langue d'entrée et de sortie surclassant la langue pardéfaut du processeur VoiceXML ;La possibilité de produire une sortie multilangue ;La possibilité d'interpréter une entrée dans une langue différente de la langue (oudes langues) de sortie.

Annexe H : L'accessibilité

La voix est au centre des applications VoiceXML, mais n'en est pas la limite. Alors quela parole et l'écoute seront les techniques les plus couramment utilisées dans laplupart des circonstances et pour la plupart des utilisateurs en interaction avec desapplications VoiceXML, certains utilisateurs pourront être temporairement (ou de façonpermanente) incapables de parler et/ou d'écouter. Des personnes invalides,notamment celles ayant des difficultés pour parler et/ou entendre, peuvent avoirbesoin d'interagir autrement avec les applications VoiceXML :

Les utilisateurs sourds peuvent lire un texte sur un écran ou (s'ils sont aussiaveugles) lire un texte en Braille au toucher. Afin de prendre en compte lesappareils spéciaux employés par les personnes ayant une déficience de la vueet/ou de l'ouïe, les développeurs sont encouragés à fournir un équivalent textuelde chaque invite sonore à l'intérieur de l'élément audio. Par exemple :

<audio src="bienvenue.wav">Bienvenue</audio>

Cette déclaration ferait en sorte de jouer le fichier son « bienvenue.wav ».Toutefois, si le contexte d'interprétation VoiceXML avait détecté que l'utilisateurvoyait l'interaction sur un écran ou touchait un dispositif de sortie Braille, alors letexte « Bienvenue » serait restitué par l'écran ou le dispositif de sortie Braille.

1.

Les utilisateurs déficients de la parole peuvent saisir des séquences codées quisont converties en texte alphabétique avant d'alimenter la plateforme VoiceXML.Un dispositif matériel spécial accouplé à un téléphone pourrait convertir, parexemple, les touches d'un clavier QWERTY en un texte alphabétique. Cetteconversion pourrait également être effectuée par un logiciel traduisant lesséquences de tonalités DTMF d'un clavier téléphonique à douze touches en untexte alphabétique.

2.

La mise en place de voies alternatives pour la livraison des informations et pour lesentrées d'utilisateur est au centre de toutes les technologies du W3C destinées à êtreutilisées par les personnes. Bien qu'elles aient été conçues à l'origine pour rendreaccessible un contenu à l'écran, les directives pour l'accessibilité suivantes, publiéespar l'Initiative pour l'accessibilité du Web (WAI), s'appliquent aussi au langageVoiceXML :.

Les directives pour l'accessibilté du contenu Web 1.0 [WAI-WEBCONTENT]expliquent en détails comment rendre un site Web accessible aux personnes

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

184 of 212 27/07/2012 22:31

Page 185: vxml

ayant des déficiences diverses.Les directives pour l'accessibilité des outils de création 1.0 [ATAGIO]. Destinéesaux développeurs de logiciels, elles expliquent comment faire pour que des outilsde création divers soutiennent la production d'un contenu Web accessible et aussicomment rendre le logiciel lui-même accessible.Les directives pour l'accessibilité des agents utilisateurs 1.0 [UAAGIO]. Destinéesaux développeurs de logiciels, elles expliquent comment rendre accessibles lesnavigateurs, les lecteurs multimédias et les technologies d'assistance qui en sontles interfaces.Les directives pour l'accessibilité XML [XAG]. Destinées aux développeursd'applications fondées sur XML, elles expliquent comment assurer l'accessibilitéde leurs applications.

Voici d'autres directives permettant aux personnes invalides d'accéder auxapplications VoiceXML :

Réutiliser les structures de navigation qui sont très utilisables et mettent à profitun aprentissage entre plusieurs applications, par exemple, les techniques denavigation de la norme ANSI/NISO Z39.86-2002 Digital Talking book Standard,http://www.loc.gov/nls/z3986/.Chaque élément dans lequel un événement peut se produire devrait définir deséléments de capture, dont l'un avec une fonctionnalité d'échec en douceur ou derécupération.Permettre aux utilisateurs de contrôler la durée avant expiration, le débit de lasynthèse vocale et d'autres variables de ce type offrant un peu plus de tempspour répondre ou pour compléter une entrée, en particulier quand le contexted'interprétation VoiceXML aura déterminé que l'utilisateur emploie un dispositifauxilliaire au lieu d'écouter ou de parler. Ce sont des aspects particulièrementimportants pour les utilisateurs avec des difficultés cognitives.Mettre en avant les modes alternatifs au travers desquels un service équivalentest disponible, dont le transfert vers un opérateur humain, un servicetéléphonique textuel, etc., ou la disponibilité des mêmes informations sur le Web.

Annexe I : La vie privée

Une version future de VoiceXML pourra définir des critères selon lesquels unprocesseur VoiceXML protègera la confidentialité des données personnelles.

Annexe J : Les changements survenus depuis VoiceXML 1.0

Voici un résumé des différences entre VoiceXML 2.0 et VoiceXML 1.0 [VOICEXML-1.0].

Les développeurs d'application VoiceXML 1.0 devraient faire particulièrement attentionaux incompatibilités avec VoiceXML 1.0 mentionnées dans les sections « Les élémentsobsolètes » et « Les éléments modifiés de manière incompatible ».

Les éléments nouveaux

log pour définir un message de déboguage (5.3.13)metadata comme moyen de définir des informations de métadonnée en utilisant

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

185 of 212 27/07/2012 22:31

Page 186: vxml

un schéma (6.2, 6.2.2)

Les éléments obsolètes

dtmf remplacé par grammar avec mode="dtmf" (3.1.2)les éléments JSML <emp>, <div>, <pros> et <sayas> ont été remplacés par deséléments correspondants dans le langage de balisage de la synthèse vocale[SSML] (4.1.1)

Les éléments modifiés de manière incompatible

Changé lang pour xml:lang dans vxml (1.5.1).Ajouté l'attribut obligatoire xmlns dans vxml (1.5.1)Remplacé l'attribut base par xml:base dans vxml (1.5.1)Changé et précisé que si une implémentation ne gère pas un objet particulier, ellesuscite un événement error.unsupported.objectname. L'événementerror.unsupported.format n'est pas suscité pour les types d'objet non reconnus(2.1.2.1, 2.3.5, 5.2.6)L'attribut type d'un élément field n'indique pas une classe say-as à utiliser à laprononciation de la valeur du champ. On doit utiliser un élément say-as expliciteà la place (2.1.4, annexe P)Ajouté l'attribut accept aux éléments menu et choice (2.2.1, 2.2.2)Un événement error.badfetch (anciennement error.semantic) est suscité sil'attribut dtmf d'un élément menu est fixé à "true" et que des choix ont desséquences DTMF définies avec autre chose que "*", "#" ou "0" (2.2.1)Supprimé la gestion obligatoire de l'accès aux ressources intégrées telles que lesgrammaires et builtin est traité comme un système d'adresse URI propre à laplateforme pour l'accès aux ressources (2.3.1.2, annexe P)Ajouté l'attribut accept à l'élément option et modifié la description de la « phrasede choix » dans la génération d'une grammaire (2.3.1.3, 2.2.5)Supprimé l'attribut modal de l'élément subdialog (2.3.4)Supprimé l'attribut fetchaudio de l'élément object (2.3.5)Supprimé la capacité de l'élément value à jouer un enregistrement. Seull'élément audio peut servir à jouer un enregistrement (2.3.6, 4.1.3, 4.1.4)Si une plateforme gère la reconnaissance vocale et l'enregistrementsimultanément, alors l'entrée prononcée peut correspondre à une grammairevocale active non locale. Si des grammaires vocales locales sont définies, ellessont traitées comme inactives (c.à.d. qu'elle sont ignorées), même si laplateforme gère la reconnaissance et l'enregistrement simultanés (2.3.6)Remplacé le schéma d'adresse URI phone par le schéma tel dans l'attribut dest (etdestexpr) de l'élément transfer (2.3.7)Au cours d'un transfert de type pont, alors que l'interruption opère normalement,l'attribut bargeintype est fixé à "hotword", l'activation de grammaire est modale(seules les grammaires locales sont activées) et le son de chargement commenceà jouer au point où l'appel sortant commence (2.3.7)Supprimé l'équivalence de notation entre l'élément filled dans un champ et unfilled de niveau formulaire se déclenchant sur ce champ (2.4)Le traitement de l'attribut type dans l'élément grammar suit les pratiques standarddu W3C. Si un type de média est renvoyé par le protocole, alors il fait autorité : ilne peut pas être surclassé par la plateforme VoiceXML, même s'il ne correspondpas au type de média réel de la ressource ou s'il ne peut pas être traité commeune grammaire. La valeur de l'attribut type peut servir à influencer la négociation

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

186 of 212 27/07/2012 22:31

Page 187: vxml

de type de contenu (par exemple, dans HTTP 1.1) et il devient, seulement siaucun type de média n'est renvoyé par le protocole, le type de média autoritairede la ressource (3.1.1.2, 3.1.1.4)Le contenu TTS des éléments choice, prompt, enumerate et audio remplacé parune définition dans le langage de balisage de la synthèse vocale [SSML])Dans un élément audio, si le fichier son ne peut être joué et que le contenu del'élément est vide, aucun son n'est joué et aucune événement d'erreur n'estsuscité (4.1.3)Supprimé les attribut class, mode et recsrc de l'élément value (4.1.4)Supprimé la variable de session normalisée session.uui. Ajouté les nouvellesvariables de session génériques session.connection.protocol.name etsession.connection.aai, lesquelles fournissent ces informations et plus (5.1.4)Remplacé la variable d'espace session.telephone par l'espacesession.connection qui n'est pas propre à un protocole et qui est plus souple.Les noms d'erreur correspondants ont aussi changé (5.1.4)Le mécanisme selon lequel les objets ECMAScript, dans l'attribut namelist del'élément submit, sont soumis, n'est pas défini pour l'instant mais réservé à unedéfinition future. Les développeurs d'application peuvent soumettre explicitementles propriétés de l'objet au lieu de l'objet lui-même (5.3.8)Supprimé l'attribut caching (6.1)Ajouté les attributs maxage et maxstale (6.1)Supprimé "stream" comme valeur de la propriété fetchhint (6.1.1, 6.3.5)Supprimé caching des propriétés de chargement (6.3.5).Les grammaires de commande universelle propres à une plateforme sontoptionnelles (6.3.6)

Les éléments modifiés

Les plateformes peuvent faire la distinction entre un champ et le niveau defiabilité d'un énoncé, c'est-à-dire que field$.confidence etapplication.lastresult$.confidence peuvent différer (2.3.1, 3.1.6.4, 5.1.5,6.3.2 )Ajouté l'attribut srcexpr à l'élément subdialog (2.3.4)Ajouté la variable fictive maxtime à l'élément record (2.3.6)Ajouté l'attribut transferaudio à l'élément transfer ; ajouté "maxtimedisconnect" et"unknown" comme valeurs des transferts de type pont ; ajouté plusieursévénements de type error.connection (2.3.7)Ajouté les attributs aai et aaiexpr afin de permettre le passage de données avecl'élément transfer (2.3.7)Ajouté l'attribut dtmf à l'élément link (2.5).La forme XML de la spécification des grammaires de reconnaissance vocale duW3C [SRGS] doit être gérée dans l'élément grammar (3.1).Ajouté les attributs weight, mode, xml:lang, root et version à l'élément grammar (3.1).Ajouté l'attribut xml:lang à l'élément prompt (4.1).Ajouté l'attribut bargeintype à l'élément prompt, avec les valeurs "speech" et"hotword" (4.1).Ajouté l'attribut expr à l'élément audio (4.1.3)Ajouté la variable d'application application.lastresult$ décrivant le dernierrésultat de reconnaissance, y compris « n-best » (5.1.5).Ajouté les attributs event, eventexpr, message et messageexpr aux éléments throw,choice, link et return (5.2.1).Ajouté la variable _event à l'élément catch (5.2.2).

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

187 of 212 27/07/2012 22:31

Page 188: vxml

L'élément catch ne peut plus définir un attribut event dont la valeur est unechaîne vide (5.2.2, 5.2.4)Ajouté l'événement error.badfetch.http.<code de réponse> comme typed'erreur prédéfini (5.2.6)Ajouté l'événement error.badfetch.<protocole>.<code de réponse> commetype d'erreur prédéfini (5.2.6)Ajouté l'événement maxspeechtimeout (5.2.6)Ajouté l'événement error.unsupported.language comme type d'erreur prédéfini(5.2.6)Ajouté la gestion obligatoire de la valeur "multipart/form-data" pour l'attributenctype de l'élément submit (5.3.8)L'élément script peut apparaître dans l'élément form (5.3.12)L'échec du chargement du son de chargement à partir de son adresse URIn'aboutit pas à la génération d'un événement error.badfetch : aucun son n'estjoué pendant le chargement (6.1.1)Le protocole HTTP est obligatoire (6.1.4)Ajouté la propriété maxspeechtimeout (6.3.2)La gestion de la propriété completetimeout par la plateforme est optionnelle.Toutefois, une plateforme qui ne prendrait pas en charge cette propriété doitutiliser le maximum entre les valeurs des propriétés completetimeout etincompletetimeout comme valeur de la propriété incompletetimeout, et elle doit ledocumenter (6.3.2)Ajouté la propriété bargeintype (6.3.4)Ajouté fetchaudiodelay et fetchaudiominimum aux propriétés de chargement (6.3.5)Ajouté la propriété de session maxnbest (6.3.6)Ajouté la propriété universals (avec une valeur implicite de "none" (6.3.6).Ajouté des valeurs implicites aux attributs de chargement, ainsi que les attributsde chargement maxage et maxstale aux éléments choice, subdialog, object, link,grammar, audio, goto, submit et script

Les éclaircissements

Des éclaircissements sur la façon dont les résultats de grammaire sont mappés aulangage VoiceXML, à savoir : la notion d'« élément d'entrée » pour un élément deformulaire qui accepte une entrée ; seuls les éléments d'entrée peuvent êtreremplis en résultat d'une correspondance à une grammaire de niveau formulaire ;les correspondances aux grammaires de niveau champ ne peuvent pas remplird'autres éléments d'entrée que le champ courant ; précision selon laquellel'élément object peut se remplir et peut déclencher des actions filled ; ajoutd'un principe de création pour la correspondance sémantique et les effets sur lavariable lastresult$, les variables fictives et la phase de traitement dansl'algorithme FIA (1.2.4, 2.1.4, 2.1.5, 2.1.6.2.3, 2.2, 2.3.1, 2.3.1.3, 2.3.5, 2.3.6,2.3.7.2, 2.4, 2.5, 3.1.1, 3.1.6, 3.1.6.1, 3.1.6.2, 3.1.6.3, 3.1.6.4, annexe C).Si aucune entrée, ou sortie, audio n'est disponible, alors un événementerror.noresource doit être suscité (1.2.5, 5.2.6)Remplacé le terme confus « élément de champ » par « élément de formulaire »ou « élément d'entrée », selon les cas (1.3.1, 2.1.6.2.2, 2.3, 2.3.3, 2.3.5, 3.1.6.1,4.1.3, 5.1.1, 5.1.3, 6.3)Précisé que les grammaires de niveau application peuvent rester actives pour ladurée de l'application, selon les règles d'activation des grammaires dans lechapitre 3.1.4 (1.3.3)Définitions des documents racine et terminaux, et des transitions entre eux

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

188 of 212 27/07/2012 22:31

Page 189: vxml

(1.5.2).L'appel du document racine d'application et de ses grammaires (1.5.2).Lorsqu'un sous-dialogue est invoqué avec seulement un identificateur defragment, les pages racines et terminales restent inchangées, et elles servent àinitialiser les contextes de la racine et des terminaux (1.5.2)Dans une transition racine à racine, le contexte d'initialisation racine estdéterminé par la politique de mise en cache, même si l'application courante etcelle cible ont le même nom (1.5.2)Éclaircissement des transitions par adresse URI, notamment les identificateurs defragment, en relation avec le document RFC2396 (1.5.2, 2.3.4, 5.3.7, 5.3.8, 6.1.1)Un éclaircissement sur la façon dont les documents racines sont traités dans lesapplications multi-documents, et les avantages à utiliser des documents racines(1.5.2)Un événement error.badfetch est suscité lorsqu'un document appelle undocument racine inexistant et qu'un événement error.semantic est suscité s'ilappelle un document racine appelant à son tour un document racine (1.5.2)Un élément subdialog, transférant le contrôle à un autre élément subdialog etun autre dialogue, via l'élément goto (1.5.3).Ajouté une section décrivant l'état de traitement final quand il n'y a plus deconnexion entre l'interpréteur et l'utilisateur. Supprimé la description dutraitement final dans l'élément catch (1.5.4, 5.2.2)La portée définie sur les grammaires de formulaire individuel est prioritaire sur laportée de grammaire implicite dans un élément form (2.1).Le comportement lors de l'exécution des instances des éléments object nonreconnus (2.1.2.1, 2.3.5).Dans un élément object, lorsqu'une plateforme ne gère pas un objet particulier,un événement error.unsupported.objectname est suscité, le terme objectnameest une chaîne fixe qui ne se remplace pas par le nom de l'objet particulier enquestion. En général, les composants substituables d'un événement sont donnésen italiques (par exemple, « objet » dans error.unsupported.objet) (2.1.2.1,2.3.5, 5.2.6 )Si une plateforme ne gère pas un élément object particulier, alors un événementerror.unsupported.objectname est suscité (2.1.2)Les multiples éléments prompt dans un élément field n'ont pas besoin d'unattribut count. La ou les invites dans un champ sont mises en file d'attente en vuede leur lecture, selon l'algorithme de sélection des invites décrit dans lechapitre 4.1.6 (2.1.4)L'effet de la déclaration <goto nextitem> sur un élément de formulaire (2.1.5).Aucune variable ni aucune condition ni aucun compteur ne sont réinitialisés dansl'utilisation de <goto nextitem> (2.1.5).Précisé que les dialogues à initiative mixte nécessitaient des formulaires avec desgrammaires de niveau formulaire, et que plusieurs styles de création existentpour l'initiative mixte, dont utiliser l'élément initial et des attributs cond sur deséléments field (2.1.5)La déclaration <goto nextitem> force un transfert immédiat vers l'élément deformulaire indiqué, même si un quelconque attribut cond sur l'élément deformulaire s'évaluait à "false" (2.1.5.1)Le comportement des éléments transfer, subdialog et object avec la lectured'un son dans la phase de collecte (2.1.6).La sélection d'un gestionnaire d'événement dans la phase de traitement del'algorithme FIA et l'élément filled (2.1.6.2).Précisé que, lorsque des erreurs survenues au cours des phases de sélection ou

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

189 of 212 27/07/2012 22:31

Page 190: vxml

de collecte de l'algorithme FIA aboutissent à la génération d'un événement,l'algorithme FIA se place directement en phase de traitement (2.1.6.2, 2.1.6.2.1,2.1.6.2.3)Lorsqu'une erreur est suscitée dans un contenu exécutable, aucun des élémentsexécutables suivants du bloc procédural n'est exécuté et, si aucun transfertexplicite du contrôle n'a lieu, il se produit un exit implicite (2.1.6.2.1, 5.3)Énuméré les éléments d'un contexte exécutable qui terminent une exécution(2.1.6.2.3).L'élément reprompt ne termine pas l'algorithme FIA (2.1.6.2.3).Précisé que la valeur par défaut de l'attribut dtmf de l'élément menu est "false"(2.2.1)Précisé la définition et le comportement des attributs et des sous-élémentss'excluant mutuellement( 2.2.2, 2.3.4, 2.3.7, 2.5, 3.1.1.4, 4.1.3, 5.2.1, 5.3.7, 5.3.8,5.3.9, 5.3.10, 5.3.12, 6.4)Dans un élément menu, c'est une erreur sémantique si on a dtmf="true" et quedes éléments choice ont défini explicitement des valeurs autres que "0", "*" et "#"pour leur attribut dtmf. S'il y a plus de 9 éléments choice n'ayant pas définid'attribut dtmf, alors aucun attribut dtmf n'aura d'assignation automatique (aucuneentrée DTMF ne peut correspondre à un choix), mais aucune erreur n'est générée(2.2.3)L'utilisation de l'élément enumerate (2.2.4, 2.3.1)L'élément grammar surclasse les grammaires générées automatiquement dansl'élément choice (2.2.2).L'attribut expr de l'élément choice est évalué à l'adresse URI vers laquelleeffectuer une transition (2.2.2).Le gestionnaire d'événement d'un élément choice, sans contrôle de la transition,provoque la réexécution du menu (2.2.2).Les séquences DTMF indiquées par les attributs dtmf des éléments choice, optionet link sont équivalentes à des grammaires DTMF simples, dans lesquelles lespropriétés DTMF s'appliquent à la reconnaissance de la séquence. Toutefois,contrairement aux grammaires, les blancs sont optionnels dans les séquencesDTMF (2.2.2, 2.3.1.3, 2.5)Précisé que les grammaires vocales et DTMF, mais pas les fragments degrammaire, sont permises dans les éléments choice (2.2.2)Pour l'élément enumerate, si aucune séquence DTMF n'est assignée à l'élémentchoice, ou si un élément grammar est défini dans l'élément choice, alors lavariable _dtmf reçoit la valeur ECMAScript "undefined" (2.2.4)Pour l'élément enumerate, la valeur de la variable _dtmf est une représentationnormalisée de la séquence DTMF, c'est-à-dire, une seule espace entre les atomesDTMF (2.2.4)Définition de la génération de grammaire "approximate" dans les éléments menu etchoice (2.2.5)Un élément de formulaire est exécuté s'il n'est pas rempli et que son attribut condn'est pas défini, ou s'évalue à "true" (2.3, 2.3.1)Réorganisé la présentation des éléments de formulaire pour préciser quellescaractéristiques s'appliquent à tel élément de formulaire. Indiqué également quel'élément de formulaire initial peut contenir des éléments property et catch(2.3)L'évaluation d'une expression cond a lieu après une conversion en valeurbooléenne. Cela concerne l'attribut cond dans les éléments de formulaire field,block, initial, subdialog, object, record et transfer (2.3), prompt (4.1) etcatch (5.2.2, 5.2.4)

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

190 of 212 27/07/2012 22:31

Page 191: vxml

Précisé que les variables fictives sont réinscriptibles et susceptibles d'êtremodifiées par l'application. Changé la variable application.lastresult$, afinqu'elle soit également réinscriptible et puisse être modifiée par l'application (2.3,5.1.5 )L'assignation de la variable de champ quand l'attribut dtmf est défini (2.3.1).Le nom d'un champ doit être unique parmi les noms des éléments de formulairedont son formulaire. Les variables déclarées dans un élément script le sont dansla portée de l'élément contenant cet élément script (2.3.1, 5.3.12)Les noms des variable d'élément de formulaire doivent respecter les conventionsde nommage des variables ECMAScript (2.3.1, 5.1).Si un type intégré défini d'élément field n'est pas géré par la plateforme, unévénement error.unsupported.builtin est suscité. Si une plateforme gère lestypes intégrés, alors elle doit gérer tous les types intégrés dans le langage enquestion (2.3.1, 5.2.6, annexe P)L'utilisation des grammaires vocales et DTMF avec le système d'adresse URI"builtin: (2.3.1.2).La chaîne renvoyée pour une entrée DTMF, quand aucun attribut valuestring nidonnées PCDATA ne sont définis dans un élément option (2.3.1.3).On peut utiliser simultanément les éléments option et grammar pour définir lesgrammaires d'un élément field (2.3.1.3).Dans un élément option, si ni contenu de type CDATA ni séquence DTMF ne sontdéfinis, alors l'attribut value a la valeur implicite "undefined", et la variabled'élément de formulaire du champ n'est pas remplie (2.3.1.3)Dans un élément option, l'attribut dtmf est optionnel. Si aucune valeur n'estdéfinie pour l'attribut dtmf, alors aucune séquence DTMF n'est associée à l'optionlequel, de ce fait, ne peut pas être sélectionné par une entrée DTMF (2.3.1.3)Les règles de portée normales des grammaires s'appliquent lors de la visite d'unélément initial : en particulier, aucune grammaire d'élément d'entrée n'estactive (2.3.3)Précisé qu'un formulaire peut admettre plusieurs éléments initial, et commentils sont sélectionnés pour l'exécution (2.3.3, annexe C)La portée des variables dans un élément subdialog (2.3.4).Le contexte d'un élément subdialog est indépendant du contexte qui l'appelle(les instances de variable ne sont pas partagées), mais son contexte suit lesrègles de portée normales des grammaires, des événements et des variables(2.3.4).Dans un élément subdialog, utiliser l'attribut expr pour fixer une variable si aucunélément param correspondant n'est défini (2.3.4).Précisé la description du contexte d'exécution du sous-dialogue (2.3.4)Précision sur la façon dont l'élément return, dans un élément subdialog, passedes données à son dialogue appelant (2.3.4, 5.3.10)Les variables dans les sous-dialogues sont associées aux paramètres par leurnom, et dans l'ordre du document. Les valeurs des paramètres sont évaluéesdans le contexte de l'élément param (2.3.4)Un événement error.badfetch est suscité lors d'une tentative de transitioninvalide dans les éléments subdialog, goto et submit. La portée dans laquelleest gérée une erreur au cours d'une transition dépend de la plateforme (2.3.4,5.3.7, 5.3.8)Précisé qu'un subdialog sans élément return continue jusqu'à ce qu'il rencontreun élément exit ou qu'il ne reste aucun élément de formulaire susceptible d'unesélection par l'algorithme FIA, ce qui équivaut à un élément exit (2.3.4)Précisé qu'une chaîne de requête autonome n'est pas une adresse URI valide : par

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

191 of 212 27/07/2012 22:31

Page 192: vxml

conséquent, ces chaînes n'exigent aucune gestion particulière dans les adressesURI intermédiaires définies dans les éléments subdialog et goto (2.3.4, 5.3.7,6.1.1)Si l'attribut namelist, dans les éléments subdialog, submit, clear, exit oureturn, appellent une variable non déclarée, alors un événementerror.semantic est suscité ( 2.3.4, 5.3.3, 5.3.8, 5.3.9, 5.3.10 )Dans un élément subdialog, les paramètres doivent se déclarer en tantqu'éléments var dans le formulaire exécuté comme sous dialogue, sinon unévénement error.semantic sera suscité (2.3.4, 6.4)Précisé que l'élément object est lui-même responsable de déterminer si le nomou la valeur de paramètre qu'il reçoit est invalide. Le cas échéant, une erreur estsuscitée : il peut s'agir d'une erreur standard ou d'une erreur propre à l'objet(2.3.5)L'utilisateur qui raccroche au cours d'un enregistrement termine l'enregistrementnormalement. Les données enregistrées avant le raccrochage peuvent êtrerenvoyées au serveur (2.3.6).L'interprétation des grammaires dans l'élément record (2.3.6).La variable de champ dans un élément record est une référence à un sonenregistré. Pour la soumission des données enregistrées à un serveur, l'attributenctype de l'élément submit devrait avoir la valeur "multipart/form-data" (2.3.6,5.3.8).Précision de comportement lorsque l'attribut dtmfterm de l'élément record a lavaleur "false" à la réception de l'entrée DTMF (2.3.6)Précision sur le moment où l'enregistrement commence et sur le comportementquand il se termine, avant qu'une quelconque donnée audio ne soit collectée(2.3.6)Précisé que la façon dont la variable de l'élément record est mise en œuvre peutvarier entre les plateformes, bien que toutes les plateformes doivent gérer lecomportement qu'elle définit dans les éléments audio et submit (2.3.6)Précisé que les valeurs par défaut des attributs finalsilence et maxtime del'élément record sont propres à la plateforme (2.3.6)Pendant l'exécution de l'élément record, si aucun son n'est collecté avant quel'utilisateur ait terminé l'enregistrement par une entrée DTMF correspondant à ungrammaire DTMF locale (ou si l'attribut dtmfterm a la valeur "true, alors la variablede l'élément record n'est pas remplie (les variables fictives ne sont donc pasfixées), et l'algorithme FIA s'applique normalement, sans génération d'unévénement noinput. Toutefois, dans cette situation, les informations concernantl'entrée peuvent être disponibles via la variable application.lastresult$comme décrit dans le chapitre 5.1.5. (2.3.6)Dans l'élément record, l'attribut dtmfterm a priorité sur les grammaires DTMFlocales définies (2.3.6)Dans l'élément record, aucun son ne peut être collecté si l'entrée vocale, ouDTMF, est reçue pendant la lecture d'une invite ou avant que l'intervalle timeoutn'expire (2.3.6)La terminaison de l'élément transfer, par une parole ou une tonalité DTMF,renvoi le statut near_end_disconnect (2.3.7).La valeur de l'attribut dest sur l'élément transfer (2.3.7).La variable d'élément de formulaire de l'élément transfer vaut "undefined" pourun transfert de type aveugle (2.3.7).Révision de l'élément transfer, comprenant : les événements d'erreur quand laplateforme est incapable de manipuler les attributs dest/destexpr, une précisionselon laquelle la plateforme est déconnectée immédiatement quand un transfert

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

192 of 212 27/07/2012 22:31

Page 193: vxml

de type aveugle se produit, une définition des événements à générer si laplateforme ne peut réaliser un transfert de type pont ou de type aveugle, uneprécision selon laquelle le statut de connexion n'est pas disponible pour untransfert de type aveugle (bien que quelques conditions d'erreur puissent êtresignalées), l'attribut transferaudio est ignoré pour un transfert de type aveugle,une précision sur la lecture audio avant et pendant un transfert de type pont, ycompris le cas où le son de chargement se termine avant l'établissement de laconnexionsituation, et le son en file d'attente qui est purgé avant lecommencement du transfert, une précision sur les temporisations pour l'écouted'une entrée et la lecture du son, ajouté les variables fictives nom$.inputmode etnom$.utterance, précisé que la gestion par la plateforme de l'écoute d'uneentrée pendant un transfert est optionnel (2.3.7, 5.2.6)La valeur de l'attribut bargeintype sur un transfer de type pont est fixée à"hotword" pour la durée de l'appel sortant (2.3.7)Les plateformes qui gèrent soit le transfert de type aveugle soit celui de type pontpeuvent gérer les modes d'entrée interruptifs vocaux, DTMF, ou les deux, pendantle transfert d'appel pour abandonner la connexion distante. Dans le transfert detype aveugle comme celui de type pont, si le transfert n'a pas été terminé parune correspondance de grammaire, la variable fictive nom$.inputmode n'est pasdéfinie. On ne peut annuler les tentatives de transfert de type aveugle quejusqu'au point où l'appel sortant commence. Dans un transfert de type aveugle, leformat des conditions d'erreur propres à la plateforme devrait suivre lesconventions de nommage des autres valeurs de variable d'élément de formulairede transfert. L'appelant peut annuler une tentative de transfert de type aveugle,avant que l'appel sortant ne commence, en l'interrompant avec une commandevocale, ou DTMF, correspondant à une grammaire active, pendant la lecture den'importe quel fichier son dans la file d'attente : auquel cas la variable d'élémentde formulaire est fixée, ses variables fictives sont fixées, ainsi que la variableapplication.lastresult$. Si l'appelant se déconnecte en raccrochant au coursd'une tentative de transfert de type aveugle, avant que la connexion avecl'appelé ne commence, un événement connection.disconnect.hangup serasuscité, et l'exécution du dialogue se portera vers un gestionnaire de l'événementhangup. La variable d'élément de formulaire et donc les variables fictives neseront pas fixées. Si l'appelant annule la tentative de transfert de type aveuglevia une commande vocale, ou DTMF, avant que l'appel sortant ne commence(pendant la lecture d'un fichier son en file d'attente), la variable d'élément deformulaire est fixée à "near_end_disconnect". Dans un transfert de type pont,l'appelant peut annuler la tentative de transfert, avant que l'appel sortant necommence, en l'interrompant avec une commande vocale, ou DTMF,correspondant à une grammaire active pendant la lecture de n'importe quelfichier son en file d'attente (2.3.7)Précisé que la variable de l'élément transfer et les variables fictives ne sont pasfixées si l'appelant raccroche pendant un transfert d'appel ou une tentative detransfert d'appel. Si l'appel est terminé par l'appelant par une commande vocale,ou DTMF, avant une réponse, la variable fictive duration est fixée à "0 (2.3.7.2.2)Précisé que la variable fictive utterance de l'élément transfer est fixée à lavaleur du résultat DTMF, si le transfert a été terminé par une entrée DTMF(2.3.7.2.2)Répondu à la situation selon laquelle, dans un transfert de type pont, l'appelantforce l'appelé à se déconnecter via une commande vocale, ou DTMF, avant que laconnexion ne soit établie (2.3.7.2.2)Dans un élément transfer, la variable fictive nom$.inputmode n'est pas définie si

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

193 of 212 27/07/2012 22:31

Page 194: vxml

le transfert n'a pas été terminé par une correspondance de grammaire (2.3.7.2.2)Dans la rencontre d'un document contenant un élément filled définissant soitun attribut mode, soit un attribut namelist comme enfant d'un élément d'entrée,alors un événement error.badfetch est suscité par la plateforme. En outre, unévénement error.badfetch est suscité lorsque le document contient un élémentfilled avec un attribut namelist référençant une variable d'élément decommande (2.4)Les éléments link ont zéro grammaire, ou plus (2.5).Ls événements suscité par un élément link sont gérés par le mieux qualifié deséléments catch dans la portée active (2.5).Un élément link ne peut être un enfant que des éléments de formulaire fiel ouinitial (2.5)Précisé qu'un attribut scope sur l'élément contenant un élément link n'a aucuneffet sur la portée des grammaires de cet élément link (2.5)Précisé que, dans un élément link, toutes les adresses URI dans son contenu (parexemple, celles d'éléments grammar) s'évaluent/se résolvent là où l'élément linkest défini, alors que toutes les adresses URI et les expressions ECMAScript dansses attributs s'évaluent/se résolvent dans la portée du dialogue et le contexteactifs (2.5)Dans un élément link, les grammaires ne sont pas autorisées à définir de portéecomme décrit dans le chapitre 3.1.3 (2.5)Si l'exécution a lieu dans un élément de formulaire modal, alors les grammairesdes éléments link, au niveau application, ne sont pas actives (2.5)L'attribut xml:lang dans un élément grammar n'exige pas une gestion multilanguede la plateforme (3.1)La langue non gérée d'une grammaire aboutit à la génération d'un événementerror.unsupported.language (3.1.1)Une langue non gérée peut s'indiquer dans la variable message d'un élémentthrow (3.1.1).Un type « number » résulte en une chaîne laquelle sera automatiquementconvertie en un nombre dans une expression numérique par le langageECMAScript ; la chaîne ne doit pas utiliser de zéro en tête (3.1.1)Précisé que l'élément SRGS grammar est augmenté dans VoiceXML 2.0 afin depermettre des données de type « PCDATA » pour les formats des grammairesdirectes, parallèlement au format XML de SRGS ( 3.1.1, 3.1.1.4 )Les grammaires implicites (telles que les options) ne gèrent pas les poids(3.1.1.3).L'attribut type dans un élément grammar a priorité sur les autres sources possiblesde type de média. S'il est défini et qu'il entre en conflit avec le type de lagrammaire, alors une erreur est suscitée (3.1.1.2, 3.1.1.4)Précisé l'utilisation et l'interprétation des attributs de l'élément grammar héritésde la spécification SRGS (version, xml:lang, mode, root, tag-format, xml:base). Lesgrammaires SRGS directes de format XML suivent le comportement défini dans laspécification SRGS. En ce qui concerne les grammaires SRGS de type ABNF, ainsique les grammaires SRGS externes de type ABNF et de type XML, la plateformedoit ignorer ces attributs. Pour tous les autres types de grammaire, l'utilisation etl'interprétation de ces attributs dépendent de la plateforme (3.1.1.4)Précisé que la règle racine dans les grammaires SRGS n'a pas besoin d'être unerègle publique (3.1.1.4)Les formes d'appel de règle, définies par la spécification SRGS, et non géréesdans VoiceXML 2.0, ne s'appliquent qu'aux appels de grammaires externesutilisant l'attribut src (3.1.1.4)

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

194 of 212 27/07/2012 22:31

Page 195: vxml

Précisé la distinction entre les grammaires de niveau formulaire et celles deniveau champ (3.1.6, 3.1.6.1, 3.1.6.2 )L'attribut slot peut sélectionner des propriétés à des niveaux d'imbricationarbitraires en utilisant une liste séparée par des points ; supprimé le passagesuggérant que les expressions d'indexation de tableau (parexemple,« pizza.toppings[3] ») étaient gérées (3.1.6.1)Précisé qu'une correspondance à des grammaires de niveau formulaire peutsurclasser les valeurs existantes dans les éléments d'entrée, et que le traitementfilled de ces éléments a lieu selon les descriptions du chapitre 2.4 et del'annexe C (3.1.6.1)Aligné la description la description des grammaires DTMF sur celle desgrammaires vocales : les grammaires DTMF peuvent renvoyer un ensemble decouples attribut-valeur comme une valeur de chaîne (3.1.2)Si un document contient une grammaire définissant un portée et que cettegrammaire est contenu dans un élément field, un élément link ou dans unélément choice d'un menu, alors un événement error.badfetch est suscité(3.1.3)Si aucune grammaire n'est active quand une entrée est attendue dans unélément form ou menu, un événement error.semantic est suscité (3.1.4)La propriété inputmodes n'affecte pas l'activation des grammaires (3.1.4, 6.3.6)Si l'entrée correspond à plusieurs grammaires actives de même priorité, alors lapremière dans l'ordre du document sera prioritaire (3.1.4)Les travaux se poursuivent en ce qui concerne les attaches sémantiques dans unélément grammar (3.1.5)Les variables des éléments d'entrée peuvent être fixées par les résultatssémantiques d'autres éléments d'entrée (3.1.6)Les valeurs par défaut des attributs bargein et bargeintype de l'élément promptsont déterminés par les propriétés bargein et bargeintype (4.1)Précisé qu'un indicateur de temps est un nombre non négatif qui doit être suivipar « ms » ou « s ». Précisé que les attributs suivants admettent des indicateursde temps en tant que valeurs : timeout avec l'élément prompt, maxtime (la valeurimplicite est désormais "0s") et connecttimeout avec l'élément transfer, maxtime etfinalsilence avec l'élément record. Précisé que les propriétés suivantes ont desvaleurs d'indicateur de temps : fetchtimeout, completetimeout, incompletetimeout,maxspeechtimeout, interdigittimeout, termtimeout, timeout, fetchaudiodelay,fetchaudiominimum, fetchtimeout ( 4.1, 2.3.6, 2.3.7, 6.1.1, 6.3)L'attribut xml:lang dans un élément prompt ne nécessite pas une gestionmultilingue de la part de la plateforme (4.1.1)Une langue de synthèse non gérée aboutit à la génération d'un événementerror.unsupported.language (4.1.1).Un élément prompt englobant est nécessaire si le texte contient des balises desynthèse vocale (4.1.2).Quand un contenu d'invite est défini sans élément prompt explicite, alors lesattributs d'invite sont définis comme indiqué dans le tableau du chapitre 4.1(4.1.2)Le « contenu de remplacement » dans l'élément audio (4.1.3).Lorsque l'attribut expr d'un élément audio est évalué à la valeur ECMAScript"undefined", le contenu de l'élément est ignoré. S'il est évalué à une adresse URIinvalide, ou si le format n'est pas géré, etc., alors la stratégie de repli estinvoquée (4.1.3)Que la plateforme envoie en continu le son d'un élément audio constitue uneoptimisation (4.1.3)

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

195 of 212 27/07/2012 22:31

Page 196: vxml

Précisé que l'attribut expr d'un élément audio est une expression ECMAScript quiappelle un son enregistré précédemment dans un élément record, ou quis'évalue en l'adresse URI d'une source audio à charger (4.1.3)Un élément value autonome est légale hors d'un élément prompt (4.1.4).Simplifié l'évaluation de l'attribut expr dans un élément audio de façon à ce qu'ilne soit pas traité d'une manière particulière : il s'agit de données de type CDATAdans lesquelles les caractères spéciaux pour XML n'ont pas besoin d'êtreéchappés. Il n'est pas traité comme un document SSML ou un fragment dedocument (4.1.4)Une entrée DTMF mise en tampon est effacée lorsque l'attribut bargein del'élément prompt a la valeur "false" (4.1.5).Précisé le comportement selon lequel une interruption se produit pendant unesuccession d'invites (4.1.5)Précisé que, lorsque l'attribut bargein d'un élément prompt a la valeur "false,aucune entrée n'est mise en tampon tandis que l'invite joue, toute entrée DTMFdéjà mise en tampon est effacée (4.1.5)L'attribut bargeintype d'un élément prompt s'applique à une entrée DTMF comme àune entrée vocale (4.1.5.1)Quand la valeur de l'attribut bargeintype est "speech", l'invite est arrêtée, sans tenircompte des grammaires actives (4.1.5.1)Quand la valeur de l'attribut bargeintype est "hotword, l'entrée qui ne correspondpas à une grammaire est ignorée, même pendant la période indiquée parl'attribut timeout (4.1.5.1)Les compteurs d'invites sont également maintenus pour les éléments initialdans un formulaire (4.1.6)Dans la sélection d'une invite, dès lors que le système sélectionne un élémentd'entrée donné dans la phase de sélection de l'algorithme FIA et que l'algorithmeFIA effectue une sélection et une mise en file d'attente normales des invites, lecompteur d'invites associé à l'élément d'entrée est incrémenté (4.1.6)Précisé que chaque élément prompt a sa propre valeur d'expiration et quel'attribut timeout d'un élément prompt a pour valeur implicite la valeur de lapropriété timeout au moment où l'invite est mise en file d'attente (4.1.7)Les relations entre la mise en file d'attente des invites et la collecte des entrées(4.1.8).Les événements asynchrones, non apparentés à l'exécution d'une transition (parexemple, un événement disconnect), sont mis en tampon jusqu'à un étatd'attente avant d'être générés (4.1.8)Précisé les relations entre les états de l'interpréteur et l'algorithme FIA, et quel'activation des grammaires et l'attente d'une entrée se produisent simultanémentà la lecture des invites (4.1.8)Précisé que, lorsque l'attribut bargein d'un élément prompt a la valeur "false",l'entrée n'est pas collectée, et les tonalités DTMF mises en tampon dans l'état detransition sont effacées comme décrit dans le chapitre 4.1.5 (4.1.8)Les plateformes peuvent varier dans la mesure où elles écartent ou non uneentrée DTMF non correspondante lorsqu'une grammaire ASR correspond avec uneentrée (4.1.8)Les variables VoiceXML et ECMAScript font partie du même espace de variables :les variables déclarées dans ECMAScript peuvent servir directement dansVoiceXML (5.1).Les noms des variables VoiceXML, y compris les noms des champs, doivent suivreles règles de nommage ECMAScript ; les déclarations des noms de variable nepeuvent pas contenir de point : le nom de champ « a.b » est illégal (5.1).

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

196 of 212 27/07/2012 22:31

Page 197: vxml

Les variables VoiceXML et la portée des variables suivent les chaînes de portéeECMAScript. Par conséquent, l'appel à une variable ECMAScript non déclaréegénère un événement error.semantic (5.1.1, 5.1.2)La portée des variables (5.1.2).Précisé la portée des variables, dans l'application et dans le document, dans lesdocuments racines d'application (5.1.2)La portée du dialogue contient les variables des éléments de formulaire, non lesvariables définies dans chaque élément de formulaire (5.1.2)Seuls certains opérateurs cond nécessitent un échappement (5.1.3).Précisé qu'un document ayant une variable « x », mais sans racine d'applicationdéfinie, alors la variable peut être appelée par application.x et document.x(5.1.3)Précisé que application.lastresult$ est un tableau ECMAScript (5.1.5)Précision sur la persistence de la variable d'application lastresult (5.1.5)Les interprétations dans lastresult sont d'abord rangées selon la fiabilité, puisselon la priorité des portées des grammaires (5.1.5, 2.3.1, 3.1.4)Quand une grammaire DTMF a une correspondance, la variable interpretationde application.lastresult contient la chaîne numérique qui correspond (5.1.5)Après un nomatch, le tableau application.lastresult$ est bien fixé mais lesvaleurs dépendent de la plateforme (5.1.5)L'évaluation des adresse URI relatives par rapport au document actif (5.2).Précisé que les éléments catch se servent de la propriété la plus intérieure del'élément d'où l'événement est originaire, et non où l'élément catch est défini(5.2)Le langage VoiceXML ne définit généralement pas le moment où les événementssont générés (5.2.1).Les compteurs d'événements associés aux élément catch sont incrémentéslorsqu'un événement se produit avec le même nom correspondant, entier oupréfixe ; cela affecte la sélection du gestionnaire de capture avec le « comptecorrect » dans le chapitre 5.2.4 (5.2.2)La définition des attributs event et count de l'élément catch (5.2.2).Aucune limitation inhérente sur l'élément catch, par exemple, dans le cas d'unraccrochage de l'utilisateur (5.2.2).La valeur de l'attribut event d'un élément catch peut être la chaîne ".", signifiantque tous les événements sont susceptibles d'être capturés (5.2.2).Un élément catch sans attribut event défini équivaut à l'un déclarant event="."(5.2.2, 5.2.4)Précisé les moments où les compteurs d'événements des formulaires sontincrémentés et réinitialisés (5.2.2)L'élément catch s'applique aux éléments de formulaire, sauf à l'élément block(5.2.2)L'héritage de la capture « comme par copie » (5.2, 5.2.4).L'algorithme de sélection de l'élément catch (5.2.4).Défini la correspondance de préfixe comme un correspondance d'atome plutôtqu'une correspondance de chaîne (5.2.4).Dans l'élément catch, un attribut event ayant pour valeur une chaîne vide estinvalide d'un point de vue syntaxique. Pour capturer tous les événements, on peutomettre l'attribut event, ou lui donner la valeur "." pour filtrer tous les événementspar préfixe (5.2.4)Le type d'erreur prédéfini error.badfetch (5.2.6)Un événement error.badfetch est suscité tant que le document n'est pas prêtpour l'exécution. Que l'initialisation des variables fasse partie de l'exécution, ou

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

197 of 212 27/07/2012 22:31

Page 198: vxml

non, dépend de la plateforme (5.2.6)Précision sur les situations dans lesquelles un événement error.badfetch estsuscité. Un navigateur conforme peut également susciter des événements dont lenom prolonge celui d'événements prédéfinis (5.2.6)Les types d'événement propres à l'application et propres à la plateformedevraient suivre la convention de nom de domaine Internet inversée pour éviterles conflits de nommage (5.2.6)Le protocole HTTPS n'est pas le même protocole que HTTP (5.2.6)Les erreurs déclenchées dans le premier document d'une session, et cellesdéclenchées avant d'entrer dans l'algorithme FIA dans les documents chargésconsécutivement sont gérées d'une façon propre à la plateforme (5.2.6)Supprimé la « division par 0 » comme erreur à l'exécution, laquelle résulte dans lagénération d'un événement error.semantic, le langage ECMAScript ne signalantpas d'erreur (5.2.6)Précisé que l'événement error.noauthorization est suscité en plus decirconstances que simplement un échec d'authentification à la connexion (5.2.6)Précisé que l'événement error.unsupport.élément n'est généré que pour lesdocuments VoiceXML 2.0 (5.2.6)L'attribut name d'un élément var défini une variable sans préfixe de portée. S'ildéfinit une variable avec un préfixe de portée, alors un événementerror.semantic est suscité (5.3.1)Précisé qu'un événement error.semantic est suscité en cas de tentatived'assignation d'une variable non déclarée. Les propriétés des objets ECMAScriptobjects, par exemple, « obj.foo », peuvent être assignées directement : lestentatives pour les déclarer aboutissent à la génération d'un événementerror.semantic (5.3.2)L'attribut name d'un élément assign doit appeler une variable déjà déclarée, sinonun événement error.semantic sera suscité. Par défaut, la portée dans laquelle lavariable se résoud est la plus proche portée englobante de l'élément actuellementactif. Pour lever les ambiguïtés, le nom de la variable peut être préfixé par un nomde portée (5.3.2)L'attribut namelist d'un élément clear peut définir des variables autres que lesvariables d'élément de formulaire qui doivent être réinitialisées (5.3.3)Les appels de variable dans l'attribut namelist de l'élément clear se résolvent parrapport à la portée courante, selon le chapitre 5.1.3 (5.3.3)L'effet d'un élément reprompt dans les éléments de capture (5.3.6)Le comportement d'un élément reprompt lorsqu'il est contenu dans un élémentcatch ayant un élément goto final (5.3.6)L'algorithme FIA effectue une mise en file d'attente normale des invites aprèsl'exécution des éléments de capture lorsqu'ils se terminent par un élémentsubmit ou return, tout comme un élément goto (5.3.6, annexe C)Précisé qu'un élément reprompt n'a aucun effet en dehors d'un élément catch(5.3.6)L'effet d'une adresse URI dans un élément goto sur les variables de document(5.3.7)Précisé, pour les éléments goto, que si des erreurs se produisent au cours de latransition à un élément de formulaire, alors l'événement est géré dans la portéedu dialogue (5.3.7)Lorsque l'attribut nextitem, ou expritem, dans un élément goto appelle un élémentde formulaire inexistant, alors un événement error.badfetch est suscité (5.3.7)Les variables déclarées dans les langages VoiceXML ou ECMAScript peuvent êtresoumises (5.3.8).

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

198 of 212 27/07/2012 22:31

Page 199: vxml

Précisé quelques circonstances dans lesquelles un élément submit peut êtresatisfait par des caches intermédiaires (5.3.8)Dans l'élément submit, l'attribut enctype n'est pertinent que si l'attribut method estfixé à "post" (5.3.8)Un élément exit ne génère pas d'événement exit (5.3.9)La valeur de l'attribut expr d'un élément exit est une expression ECMAScript(5.3.9)L'exécution d'un élément disconnect incite l'interpréteur (a) à entrer dans l'étatde traitement final et (b) à purger la file d'attente des invites (5.3.11)Aucun attribut type sur l'élément script (5.3.12).L'élément script est évalué en même temps que les éléments var et lesvariables d'élément de formulaire dans un élément form (5.3.12)La définition de l'attribut charset dans l'élément script (5.3.12)La gestion des éléments log dépend de la plateforme (5.3.13)Les attributs label et expr de l'élément log sont optionnels (5.3.13)Revu le préchargement (6.1)L'effet de l'attribut fetchhint (6.1.1)La sélection de la politique de mise en cache (6.1.2)La mise en cache suit les règles d'exactitude du protocole HTTP 1.1 (6.1.2)Précisé qu'il n'existe pas de mécanisme de balisage pour contrôler la mise encache des documents racines d'application (6.1.2.1)Précisé que le premier type d'élément meta est exprimé par les attributs name etcontent, et le second type par les attributs http-equiv et content (6.2.1)Lorsque des valeurs différentes sont définies au même niveau pour un élémentproperty, alors le dernier dans l'ordre du document s'applique (6.3)On peut fixer les propriétés dans les éléments d'entrée field, mais pas dans leséléments d'entrée de commande (6.3)Précisé que, si une plateforme détecte une propriété ayant une valeur illégale,alors elle devrait générer un événement error.semantic (6.3)Le format des propriétés propres à une plateforme (6.3.1)Les définitions des propriétés des logiciels de reconnaissance vocalecompletetimeout et incompletetimeout (6.3.2)Les grammaires de commandes universelles sont toujours actives sauf dans lecas d'éléments d'entrée modaux (6.3.6)Les valeurs des paramètres passés à l'élément subdialog sont toujours desdonnées (6.4)La définition des valeurs de désignation de temps (6.5)Précisé que le format des nombres est celui employé dans la spécification CSS2,et que la valeur des propriétés ASR confidencelevel, sensitivity et speedvsaccuracysont dans ce format (6.5, 6.3.2)Restreint les noms des champs, l'attribut name de l'élément var et l'attributnextitem de l'élément goto au type « NMTOKEN » ; augmenté l'attribut name del'élément assign comme de type « NMTOKEN » mais autorisé le caractère « $ »,pour les assignations des variables fictives ; restreint l'attribut namelist del'élément filled au type « NMTOKENS » ; augmenté l'attribut namelist deséléments exit, submit, clear et return comme de type « NMTOKENS » maisautorisé le caractère « $ », pour les soumissions des variables fictives (annexe B,annexe O)Restreint le modèle de contenu de l'élément choice au type « PCDATA », et celuides éléments grammar ; précisé que l'élément enumerate ne peut pas apparaîtredans un autre élément enumerate (annexe B, annexe O, 2.2.4)Précisé que le DTD (conrairement au schéma) ne peut pas exprimer correctement

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

199 of 212 27/07/2012 22:31

Page 200: vxml

le fait que l'élément metadata ne puisse pas contenir d'éléments provenantd'autres espaces de nommage XML (annexe B)Le DTD définit l'attribut xmlns de l'élément vxml comme de type « FIXED », avec lavaleur par défaut "http://www.w3.org/2001/vxml" (annexe B)Aligné le DTD et le schéma sur le texte, de sorte que l'attribut accept de l'élémentchoice n'ait pas la valeur implicite "exact", s'il n'est pas défini (annexe B,annexe O)Précisé, dans l'algorithme FIA, qu'une assignation de application.lastresult$a lieu après chaque reconnaissance réussie (annexe C)Précisé, dans l'algorithme FIA, les correspondances aux grammaires des élémentslink à l'intérieur du formulaire, ou du menu, courant, et les correspondances auxgrammaires des éléments choice des menus hors du formulaire, ou du menu,courant (annexe C)Corrigé l'algorithme FIA tel que la collecte des grammaires actives n'inclut pas lesgrammaires des éléments dans la chaîne d'appels de l'élément subdialog(annexe C)Précisé la phase d'initialisation de l'algorithme FIA en ce qui concernel'initialisation des éléments script et des éléments de formulaire (annexe C)Précisé que des événements peuvent être générés en plusieurs points au cours del'exécution de l'algorithme FIA, et que la manière dont ils sont gérés dépend de laphase active de l'algorithme FIA (annexe C)Précisé que, dans la phase de collecte de l'algorithme FIA, seules les invites issuesdes éléments d'entrée et de l'élément initial sont sélectionnées, et leurcompteur d'invites incrémentés. La mise en file d'attente des invites dans unélément block a lieu lors de l'exécution de l'élément de formulaire (annexe C)Dans la phase de traitement de l'algorithme FIA, les actions filled ne sont passeulement déclenchées par l'entrée d'un énoncé, par exemple, elles peuventaussi être déclenchées quand la valeur de l'attribut maxtime est atteinte au coursde l'exécution d'un élément record (annexe C)Précisé l'emploi des divers délais pour une entrée DTMF (annexe D)Si un processeur conforme ne peut pas traiter un élément, ou un attribut,VoiceXML non standard, alors il doit générer un événement error.badfetch(annexe F)Des notes explicatives sur la portabilité de l'utilisation des intégrés et de la priseen charge attendue par les plateformes (annexe P)Le paramétrage des grammaires vocales et DTMF intégrées (annexe P).Le passage des paramètres contradictoires au chiffres intégrés (annexe P).La valeur de résultat renvoyée par le type intégré number (annexe P).Le code monétaire non défini si non prononcé (annexe P).Seules les grammaires de type "digit" et boolean peuvent être paramétrées(annexe P)La description de la restitution des valeurs intégrées au moyen de l'élémentsay-as (annexe P)Les grammaires vocales et DTMF des éléments grammar, dans un élément fieldavec un type intégré défini, s'ajoutent aux grammaires intégrées : elles ne lessurclassent pas (annexe P)

Divers

Mis à jour les exemples avec l'attribut XML encoding, recommandé les attributs duschéma et échappé les caractères XML illégaux (<, >, &, etc.)Utilisation des types de média temporaires (par exemple, "application/srgs+xml")

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

200 of 212 27/07/2012 22:31

Page 201: vxml

soumis à l'approbation de l'IETFAjouté une section décrivant les origines du langage VoiceXML, et comment il selie aux autres travaux dans le domaine (1)Défini l'ensemble des formats audio obligatoires pour les éléments audio etrecord (1.2.4).Les capacités des plateformes VoiceXML conformes en ce qui concerne la gestiondes grammaires vocales et DTMF, du son, de la synthèse vocale, del'enregistrement et du transfert (1.2.5).Les plateformes devraient s'identifier avec l'en-tête HTTP User-Agent (1.2.5).Les types intégrés et les grammaires fondamentales sont informatives et nonnormatives (2.3.1, 2.3.1.1, 2.3.1.2, annexe P)Mise à jour du chapitre en vue de son alignement sur la spécification SRGS 1.0 (3)La description de la façon dont les interprétations sémantiques sont associéesaux variables de formulaire (3.1.6).Mise à jour du chapitre en vue de son alignement sur la spécification SSML 1.0 (4)Réservé la variable d'espace de nommage _$ pour un usage interne (5.1).L'emploi de variables et d'éléments de formulaire ayant les noms « session »,« application », « document » et « dialog » n'est pas recommandé (5.1.2).Ajouté une recommandation selon laquelle les informations de métadonnées'expriment dans un élément metadata plutôt que dans un élément meta ;supprimé les informations de métadonnée recommandées utilisant l'élémentmeta ; ajouté les informations de métadonnée recommandées utilisant le schémaRDF et les propriétés Dublin Core (6.2)Changé le comportement de conformité lorsque l'interpréteur rencontre unepropriété qu'il ne peut traiter : il ne doit pas (au lieu de « ne devrait pas »)générer d'événement error.unsupported.property et doit (au lieu de« devrait ») ignorer la propriété (6.3.1)Le DTD est maintenant informatif au lieu de normatif (annexe B)L'ensemble des formats audio obligatoires (annexe E).Remplacé "audio/wav" par "audio/x-wav" dans les exemples, et ajouté une remarqueselon laquelle le type de média "audio/wav" sera adopté lorsqu'il seraofficiellement enregistré auprès de l'IETF (annexe E)Révisé la définition d'un processeur VoiceXML conforme, comprenant l'obligationde gérer la syntaxe et la sémantique de tous les éléments décrits dans cedocument (annexe F).La section sur les documents conformes référence les contraintes de schémaplutôt que de DTD (annexe F)La déclaration de conformité reflète le fait que le DTD est informatif, mais que leschéma est normatif. Un document conforme doit définir l'espace de nommageVoiceXML sur l'élément racine. Une déclaration version="2.0" doit également yêtre présente. On recommande d'utiliser l'attribut xsi:schemaLocation pour indiquerl'emplacement du schéma VoiceXML. La déclaration DOCTYPE est optionnelle. Lecomportement d'un processeur VoiceXML n'est pas défini lorsqu'il rencontre desdocuments désignant des éléments racines non-VoiceXML (annexe F)Révisé la description de la façon dont VoiceXML peut satisfaire aux exigences etaux problèmes d'accessibilité (annexe H)Une annexe sur la réutilisabilité (annexe K).Ajouté une annexe des références (annexe M)Ajouté une annexe décrivant le type de média et le suffixe de fichier VoiceXML, ycompris un lieu vers la note de l'IETF sur l'enregistrement du type de médiaVoiceXML (annexe N)Définition du schéma normatif de VoiceXML. Elle fait appel à divers autres

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

201 of 212 27/07/2012 22:31

Page 202: vxml

schémas pour adapter les définitions des schémas de base dans les spécificationsdes grammaires et de la synthèse vocale (annexe O)Vérifié le schéma au moyen de XML Spy 4.4, XSV (version de juin 2002) etXerces 2 (versions Java et C++) (annexe O)Ajouté un lien afin de compléter l'ensemble des schémas nécessaires àVoiceXML 2.0 (annexe O)

Annexe K : La réutilisabilité

K.1 Les composants de dialogue réutilisables

Définition : Un fragment d'application conditionné, destiné à être invoqué par desapplications arbitraires ou par d'autres composants de dialogue réutilisables. Uncomposant de dialogue réutilisable (RDC) encapsule le code d'une interaction avecl'appelant.

Les composants de dialogue réutilisables offrent des fonctionnalités « prêt-à-servir »pré-empaquetées qui permettent aux développeurs de construire des applicationsrapidement, en fournissant, par défaut, un paramétrage et un comportementnormalisés. Ils isolent les développeurs des complexités associées à la constructiond'un dialogue vocal fiable, par exemple, l'interprétation du score de fiabilité, lesmécanismes de récupération des erreurs, la génération des invites, etc. Ledéveloppeur peut, si nécessaire, personnaliser ce comportement afin de fournir lesinvites, le vocabulaire, le paramétrage des nouvelles tentatives, etc., qui soientpropres à l'application.

Dans cette version du langage VoiceXML, les seuls mécanismes d'appel de composantsauthentiquement réutilisables sont représentés par les éléments subdialog et object.Les composants appelés de cette façon obéissent à un modèle similaire auxsous-routines des langages de programmation : le composant est configuré par unensemble bien déterminé de paramètres qui lui sont passés, le composant a uneinteraction contrainte relativement à l'application appelante, le composant renvoie unrésultat bien défini et le contrôle revient automatiquement au point d'où le composanta été appelé. Le modèle réunit tous les avantages significatifs de modularité, deréentrée et de facilité de réemploi offerts par les sous-routines. Sur les deux types decomposant, seuls les composants subdialog sont assurés d'être aussi portables que lelangage VoiceXML lui-même. Par contre, les composants object peuvent empaqueterdes fonctionnalités réutilisables évoluées qui n'ont pas encore été introduites dans lanorme.

K.2 Les gabarits et les échantillons

Bien que les composants de dialogue réutilisables possèdent les avantages demodularité, de réentrée et de facilité de réemploi décrits ci-dessus, ces composantsont pour inconvénient de demander une conception très soigneuse, en gardant unevue sur la réutilisation, et même pour la conception la plus attentionnée, ledéveloppeur de l'application est susceptible de rencontrer des situations pourlesquelles le composant ne pourra pas être facilement configuré pour tenir lesconditions requises par l'application. En outre, alors que l'interaction contrainte d'uncomposant avec son environnement d'appel est susceptible de permettre à unconcepteur de créer un composant fonctionnant de manière prévisible dans des

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

202 of 212 27/07/2012 22:31

Page 203: vxml

environnements disparates, elle peut aussi faire que l'interaction de l'utilisateur avecle composant apparaisse désolidarisée du reste de l'application.

Auxquels cas, le développeur de l'application peut vouloir réutiliser un code sourceVoiceXML sous forme d'échantillons et de gabarits, les échantillons étant conçus pourêtre facilement personnalisables. Un tel code s'adaptera et s'intégrera plus aisément àune application particulière, aux dépends de la modularité et de la réentrée.

On peut créer ces gabarits et ces échantillons en séparant le code VoiceXMLintéressant du dialogue principal, puis en distribuant ce code par copies à utiliser dansd'autres dialogues. Cette forme de réutilisabilité permet à l'utilisateur du codeVoiceXML copié de le modifier au besoin et de continuer à utiliser indéfiniment laversion modifiée.

Le langage VoiceXML encourage cette forme de réutilisabilité en préservant laséparation d'état entre les éléments form. De ce point de vue, les langages VoiceXMLet [HTML] sont similaires. Un tableau HTML peut se copier d'une page HTML à uneautre, parce que le tableau peut s'afficher indépendamment du contexte précédent ousuivant l'élément <table>.

Même si cette approche peut sacrifier les possibilités de paramétrage, la modularité etle suivi, elle a l'avantage d'être simple, rapide et éminemment personnalisable.

Annexe L : Remerciements

Cette spécification du W3C est fondée sur VoiceXML 1.0, soumis par le ForumVoiceXML en mai 2000. Les auteurs du Forum VoiceXML étaient : Linda Boyer, IBM ;Peter Danielsen, Lucent Technologies ; Jim Ferrans, Motorola ; Gerald Karam, AT&T ;David Ladd, Motorola ; Bruce Lucas, IBM ; Kenneth Rehor, Lucent Technologies.

Cette version a été rédigée par les participants du groupe de travaile Navigateur vocaldu W3C. Les personnes suivantes ont contribué notablement à la rédaction de cettespécification :

Paolo Baggia, LoquendoDaniel C. Burnett, Nuance CommunicationsEmily Candell, ComverseJerry Carter, expert invitéDeborah Dahl, expert invitéPeter Danielsen, Lucent (jusqu'à octobre 2002)Martin Dragomirecky, CiscoJim Ferrans, MotorolaAndrew Hunt, ScanSoftGerald Karam, AT&TDave Ladd, DynamicsoftPaul Lamere, Sun MicrosystemsBruce Lucas, IBMScott McGlashan, HPMitsuru Oshima, General MagicBrad Porter, TellmeGavriel Raanan, NMS CommunicationsKen Rehor, Vocalocity

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

203 of 212 27/07/2012 22:31

Page 204: vxml

Steph Tryphonas, Tellme

Le groupe de travail voudrait remercier Dave Raggett et Jim Larson pour leurinestimable soutien.

Annexe M : Références

M.1. Les références normatives

[CSS2]« La spécification des feuilles de style en cascade (CSS2) », Bos et al.Recommandation du W3C, mai 1998Voir http://www.w3.org/TR/REC-CSS2/

[ECMASCRIPT]« La norme ECMA-262 : spécification du langage ECMAScript », StandardECMA-262, décembre 1999.Voir http://www.ecma-international.org/publications/standards/Ecma-262.htm

[RFC1521]« MIME (Multipurpose Internet Mail Extensions) 1ere partie : les mécanismes dedéfinition et de description du format des corps des message Internet », IETF RFC1521, 1993Voir http://www.ietf.org/rfc/rfc1521.txt

[RFC2396]« Les identificateurs de ressource uniformes (URI) : la syntaxe générique », IETFRFC 2396, 1998.Voir http://www.ietf.org/rfc/rfc2396.txt

[RFC2616]« Le protocole de transfert hypertexte - HTTP/1.1 », IETF RFC 2616, 1999.Voir http://www.ietf.org/rfc/rfc2616.txt

[RFC2806]« Les adresse URL pour les appels téléphoniques », IETF RFC 2806, 2000.Voir http://www.ietf.org/rfc/rfc2806.txt

[RFC3066]« Les étiquettes pour l'identification des langues », IETF RFC 3066, 2001.Remarquez que le langage [XML] a adopté RFC3066 au travers d'un errata endate du 2001-02-22. Le document RFC3066 remplace le document [RFC1766].Voir http://www.ietf.org/rfc/rfc3066.txt

[SCHEMA1]« Le schéma XML 1ere partie : les structures », Thompson et al. Recommandationdu W3C, mai 2001.Voir http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/

[SRGS]« La spécification des grammaires de reconnaissance vocale version 1.0 », Huntet McGlashan. Recommandation proposée du W3C, décembre 2003.Voir http://www.w3.org/TR/2003/PR-speech-grammar-20031218/

[SSML]« Le langage de balisage de la synthèse vocale version 1.0 », Burnett, Walker etHunt. Recommandation candidate du W3C, décembre 2003.Voir http://www.w3.org/TR/2003/CR-speech-synthesis-20031218/

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

204 of 212 27/07/2012 22:31

Page 205: vxml

[UNICODE]« Le standard Unicode », The Unicode Consortium.Voir http://www.unicode.org/unicode/standard/standard.html

[XML]« Le langage de balisage extensible (XML) 1.0 », Bray et al. Recommandation duW3C.Voir http://www.w3.org/TR/2000/REC-xml-20001006

[XML-BASE]« XML Base », J. Marsh, rédacteur, Recommandation du W3C, juin 2001.Voir http://www.w3.org/TR/2001/REC-xmlbase-20010627/.

[XMLNAMES]« Les espaces de nommage dans XML », Bray et al. Recommandation du W3C,janvier 1999.Voir http://www.w3.org/TR/1999/REC-xml-names-19990114/

M.2. Les références informatives

[ATAGIO]« Les directives pour l'accessibilité des outils de création 1.0 », Treviranus et al.Recommandation du W3C, février 2000.Voir http://www.w3.org/TR/2000/REC-ATAG10-20000203/

[DC]« L'initiative Dublin Core pour les métadonnées », un modèle de description decontenu simple pour les ressources électroniques.Voir http://dublincore.org/

[HTML]« La spécification HTML 4.01 », Dave Raggett et al. Recommandation du W3C,décembre 1999.Voir http://www.w3.org/TR/1999/REC-html401-19991224/

[IANA]« Les jeux de caractères IANA », IANA.Voir http://www.iana.org/assignments/character-sets

[ISO4217]« ISO 4217:2001 Codes pour la représentation des monnaies et des fonds », ISO,2001Voir http://www.iso.ch/

[JSAPI]« Java Speech API », Sun Microsystems, Inc.Voir http://java.sun.com/products/java-media/speech/index.jsp

[JSGF]« JSpeech Grammar Format », Andrew Hunt, Note du W3C, juin 2000.Voir http://www.w3.org/TR/2000/NOTE-jsgf-20000605/

[NLSML]« Le langage de balisage sémantique des langues naturelles du cadre desinterfaces vocales », Deborah A. Dahl. Brouillon du W3C, novembre 2000Voir http://www.w3.org/TR/2000/WD-nl-spec-20001120/

[RDF-SYNTAX]« La spécification du modèle et de la syntaxe du cadre de description desressources (RDF) », Ora Lassila et Ralph R.Swick. Recommandation du W3C,février 1999.Voir http://www.w3.org/TR/REC-rdf-syntax/

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

205 of 212 27/07/2012 22:31

Page 206: vxml

[RDF-SCHEMA]« La spécification du schéma du cadre de description des ressources (RDF) 1.0 »,Dan Brickley et R.V. Guha. Recommandation candidate du W3C, mars 2000.Voir http://www.w3.org/TR/2000/CR-rdf-schema-20000327/

[RFC1766]« Les étiquettes pour l'identification des langues », IETF RFC 1766, 1995Remarquez que le langage [XML] a adopté RFC3066 au travers d'un errata endate du 2001-02-22. Le document [RFC3066] remplace le document RFC1766.Voir http://www.ietf.org/rfc/rfc1766.txt

[RFC2119]« Les mots-clés à utiliser dans les documents RFC pour indiquer les niveauxd'obligation », IETF RFC 2119, 1997.Voir http://www.ietf.org/rfc/rfc2119.txt

[RFC2361]« Les registres des codecs WAVE et AVI », IETF RFC 2361, 1998.Voir http://www.ietf.org/rfc/rfc2361.txt

[SISR]« L'interprétation sémantique de la reconnaissance vocale », Luc Van Tichelen.Brouillon du W3C, avril 2003.Voir http://www.w3.org/TR/2003/WD-semantic-interpretation-20030401/

[UAAGIO]« Les directives pour l'accessibilité des agents utilisateurs 1.0 », Jacobs et al.Recommandation proposée du W3C, octobre 2002.Voir http://www.w3.org/TR/2002/PR-UAAG10-20021016/

[VOICEXML-1.0]« Le langage de balisage extensible de la voix 1.0 », Boyer et al, Note du W3C,mai 2000.Voir http://www.w3.org/TR/2000/NOTE-voicexml-20000505/

[WAI-WEBCONTENT]« Les directives pour l'accessibilité du contenu Web 1.0 », Chisholm et al.Recommandation du W3C, mai 1999Voir http://www.w3.org/TR/WAI-WEBCONTENT/

[XAG]« Les directives pour l'accessibilité du langage XML », Dardailler et al. Brouillondu W3C, octobre 2002Voir http://www.w3.org/TR/xag.html

Annexe N : Le type de média et le suffixe de fichier

Le groupe de travail Navigateur vocal du W3C a déposé, auprès de l'IETF, unedemande d'enregistrement pour un type de média du langage VoiceXML. Le type demédia demandé est : « application/voicexml+xml ».

Le groupe de travail Navigateur vocal du W3C a adopté la convention d'utiliser lesuffixe de nom de fichier « .vxml » pour les documents VoiceXML.

Annexe O : La définition du schéma XML du langage VoiceXML

Cette section est normative.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

206 of 212 27/07/2012 22:31

Page 207: vxml

La définition du schéma XML du langage VoiceXML se trouve à : http://www.w3.org/TR/voicexml20/vxml.xsd .

Le schéma VoiceXML dépend d'autres schémas définis dans l'espace de nommageVoiceXML :

vxml-datatypes.xsd : la définition des types de données utilisés dans le schémaVoiceXMLvxml-attribs.xsd : la définition des attributs et groupes d'attributs utilisés dans leschéma VoiceXMLvxml-grammar-restriction.xsd : ce schéma appelle le schéma sans espace denommage de la spécification des grammaires de reconnaissance vocale 1.0[SRGS], et il restreint certaines de ses définitions pour leur incorporation dansl'espace de nommage VoiceXML.vxml-grammar-extension.xsd : ce schéma appelle le schéma « vxml-grammar-restriction.xsd », et il augmente certaines de ses définitions pour VoiceXML.vxml-synthesis-restriction.xsd : ce schéma appelle le schéma sans espace denommage du langage de balisage de synthèse vocale 1.0 [SSML], et il augmentecomme il restreint certaines de ses définitions pour leur incorporation dansl'espace de nommage VoiceXML.vxml-synthesis-extension.xsd : ce schéma appelle le schéma « vxml-synthesis-restriction.xsd », et il augmente certaines de ses définitions pour VoiceXML.

Le jeu complet des schémas du cadre des interfaces vocales exigés pour VoiceXML 2.0est disponible à : http://www.w3.org/TR/2004/REC-voicexml20-20040316/vxml-schema.zip .

Annexe P : Les types des grammaires intégrées

L'attribut type de l'élément field dans le chapitre 2.3.1 sert à indiquer une grammaireintégrée de l'un des types fondamentaux. La prise en charge par la plateforme desgrammaires intégrées fondamentales est optionnelle. Si une plateforme gère les typesintégrés, alors elle doit suivre la description donnée dans cette annexe, d'aussi prêtque possible, y compris tous les grammaires intégrées d'une langue donnée.

Chaque type intégré suit une convention pour le format de la valeur renvoyée. Cesvaleurs sont indépendantes de la langue et de l'implémentation. Le type renvoyé pourles champs intégrés est une chaîne, sauf pour le type de champ boolean. Pour accéderau résultat réel de la reconnaissance, l'auteur peut appeler la variable fictivenom$.utterance de l'élément field. Autrement, le développeur peut accéder autableau application.lastresult$, dans lequel la variableapplication.lastresult$.interpretation a la même valeur que la variableapplication.lastresult$.utterance.

Les types intégrés sont définis de telle façon qu'un développeur d'application VoiceXMLpeut compter sur une certaine cohérence de l'entrée d'utilisateur à travers lesimplémentations. Cela permet aux messages d'assistance et à d'autres invites d'êtreindépendants de la plateforme de plusieurs façons. Par exemple, la grammaire de typeboolean devrait admettre au moins les réponses « oui » et « non » en français, maischaque implémentation est libre d'ajouter d'autres choix comme « ouais » et « nan ».

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

207 of 212 27/07/2012 22:31

Page 208: vxml

Au cas où une application exige un comportement particulier ou un comportementdifférent de celui défini pour un type intégré, elle devrait utiliser une grammaire dechamp explicite. Voici des circonstances dans lesquelles une application doit fournirune grammaire de champ explicite, pour assurer la portabilité de l'application avecune interface d'utilisateur cohérente :

Une plateforme n'est pas tenue d'implémenter une grammaire qui accepte toutesles valeurs possibles susceptibles d'être renvoyées par un type intégré. Parexemple, la grammaire intégrée de type currency définit le formatage de la valeurrenvoyée pour un très large éventail de monnaies ([ISO4217]). La plateformen'est pas obligée de gérée une entrée prononcée qui comprend l'une desmonnaies mondiales, dans la mesure où cela peut affecter négativementl'exactitude de la reconnaissance. De même, la grammaire intégrée number peutrenvoyer des nombres en virgule flottante, positifs ou négatifs, mais la grammairen'est pas obligée de reconnaître tous les nombres en virgule flottante possiblesprononcés.

Les grammaires intégrées sont également limitées dans leur capacité à manipulerune entrée prononcée insuffisamment définie. Par exemple, on ne peut résoudre« 20 peso » en un code de monnaie particulier [ISO4217], car le « peso » est lenom de la monnaie de nombreux pays. Auxquels cas, la plateforme doit renvoyerun code de monnaie particulier en fonction de la langue, ou elle peut omettre lecode de monnaie.

Tous les types intégrés doivent gérer à la fois les entrées vocales et DTMF.

L'ensemble des entrées prononcées acceptées pour chaque type intégré dépend de laplateforme, et il variera selon la langue.

La valeur renvoyée par un type intégré peut être lue au moyen de l'élément say-as. Lelangage VoiceXML augmente l'élément say-as dans [SSML] en lui ajoutant les valeursde l'attribut interpret-as, qui correspondent à chaque type intégré. Ces valeursprennent la forme « vxml:type », où « type » est un type intégré. La restitution précisedes types intégrés est propre à la plateforme, et elle variera selon la langue.

Les types intégrés sont les suivants :

Tableau 66 : Les types intégrés

boolean

Les entrées comprennent les phrases affirmatives etnégatives appropriées dans la langue courante. DTMF 1est affirmatif tandis que DTMF 0 est négatif. Le résultat estla valeur ECMAScript "true" pour l'affirmatif et "false" pourle négatif. La valeur sera soumise en tant que chaîne« true » ou « false ». Si la valeur de champ est utiliséeensuite dans un élément say-as avec un attributinterpret-as fixé à "vxml:boolean", elle sera prononcéecomme une affirmation, ou une négation, appropriée dansla langue courante.

date

Les entrées prononcées valides comprennent les phrasesqui indiquent une date, incluant le jour, le mois et l'année.Les entrées DTMF se composent de quatre chiffres pour

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

208 of 212 27/07/2012 22:31

Page 209: vxml

l'année, suivis de deux chiffres pour le mois et de deuxchiffres pour le jour. Le résultant est une chaîne delongueur fixe de format « aaaammjj », par exemple,« 20000704 ». Si l'année n'est pas indiquée, le composant« yyyy » est renvoyé comme étant « ???? », si c'est lemois, le composant « mm » est renvoyé comme « ?? », etsi c'est le jour, « jj » est renvoyé comme « ?? ». Si lavaleur est utilisée ensuite dans un élément say-as avecun attribut interpret-as fixé à "vxml:date", elle seraprononcée comme une date appropriée dans la languecourante.

digits

Les entrées prononcées ou DTMF valides comprennent unou plusieurs chiffres, de 0 à 9. Le résultat est une chaînede chiffres. Si le résultat est utilisé ensuite dans unélément say-as avec un attribut interpret-as fixé à"vxml:digits", il sera prononcé comme une séquence dechiffres appropriée dans la langue courante. Un utilisateurpeut dire, par exemple, « un neuf deux sept », mais pas« dix-neuf cent vingt-sept ». Une plateforme peut gérerdes constructions comme « deux (deux fois cinq) huit ».

currency

Les entrées prononcées valides comprennent les phrasesqui indiquent une quantité monétaire. Pour une entréeDTMF, l'étoile « * » fera office de point décimal. Le résultatest une chaîne dont le format est « UUUmm.nn », où« UUU » représente les trois caractères de l'indicateurmonétaire, selon le standard ISO 4217 [ISO4217], ou« mm.nn », si l'utilisateur ne dit pas l'unité monétaire ousi celle-ci ne peut pas être déterminée avec fiabilité (parexemple, « dollar » et « peso » sont ambigus). Si le champest utilisé ensuite dans un élément say-as avec unattribut interpret-as fixé à "vxml:currency", il sera prononcécomme une quantité monétaire appropriée dans la languecourante.

number

Les entrées prononcées valides comprennent les phrasesqui indiquent des nombres, tel que « cent vingt-sept », ou« cinq point trois ». Les entrées DTMF validescomprennent les nombres positifs saisis en utilisant lestouches de chiffres et l'étoile « * » pour représenter leséparateur décimal. Le résultat est une chaîne de chiffres,de 0 à 9, qui peut inclure, en option, un point décimal(« . ») et/ou un signe plus « + » ou « - ». Le langageECMAScript convertit automatiquement les chaînesrésultats en valeurs numériques utilisées dans lesexpressions numériques. Le résultat ne doit pas contenirde zéro de tête (ce qui le ferait interpréter comme unnombre octal par ECMAScript). Si le champ est utiliséensuite dans un élément say-as avec un attributinterpret-as fixé à "vxml:number", il sera prononcé commeun nombre approprié dans la langue courante.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

209 of 212 27/07/2012 22:31

Page 210: vxml

phone

Les entrées prononcées valides comprennent les phrasesqui indiquent un numéro de téléphone. L'étoile DTMF « * »représente « x ». Le résultat est une chaîne contenant unnuméro de téléphone composé d'une chaîne de chiffrescontenant, en option, le caractère « x », lequel indique unnuméro de téléphone avec une extension. Pour l'Amériquedu Nord, on aurait, par exemple, « 8005551234x789 ». Sile champ est utilisé ensuite dans un élément say-as avecun attribut interpret-as fixé à "vxml:phone", il sera prononcécomme un numéro de téléphone approprié dans la languecourante.

time

Les entrées prononcées valides comprennent les phrasesqui indiquent une heure, incluant les heures et lesminutes. Le résultat est une chaîne composée de cinqcaractères dans le format « hhmmx », où « x » prend lavaleur « a » pour AM, « p » pour PM, « h » pour une heuresur 24 heures ou « ? » pour indiquer une heure ambiguë.Il peut y avoir une entrée via DTMF. En l'absence deconvention DTMF pour indiquer AM/PM, le résultat seterminera toujours par « h » ou « ? ». Si le champ estutilisé ensuite dans un élément say-as avec un attributinterpret-as fixé à "vxml:time", il sera prononcé comme uneheure appropriée dans la langue courante.

Un exemple d'élément field avec un type de grammaire intégrée :

<field name="repas_dietetique" type="boolean">

<prompt> Voulez-vous un repas diététique sur ce vol ? </prompt> <help> Diététique signifie moins de 10 grammes de lipides, et moins de 250 calories. </help> <filled> <prompt> J'ai entendu <emphasis><say-as interpret-as="vxml:boolean"> <value expr="repas_dietetique"/></say-as></emphasis>. </prompt> </filled></field>

Dans cet exemple, le type boolean indique que les entrées auront la formed'affirmations ou de négations diverses. La valeur réellement placée dans le champsera soit "true", soit "false". Le champ sera lu en se servant de la réponse appropriée,affirmative ou négative, faite dans les invites.

Dans l'exemple suivant, le type digits indique que l'entrée prendra la forme de chiffresprononcés ou saisis. Le résultat est stocké comme une chaîne et restitué commechiffres en utilisant un élément say-as dont l'attribut interpret-as a la valeur"vxml:digits", c'est-à-dire « un deux trois », et non pas « cent vingt-trois ». L'actionfilled teste le champ afin de vérifier s'il a 12 chiffres. Dans le cas contraire,

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

210 of 212 27/07/2012 22:31

Page 211: vxml

l'utilisateur entend le message d'erreur :

<field name="ticket_num" type="digits"> <prompt> Lisez les 12 chiffres du numéro de votre ticket. </prompt> <help>Le nombre à 12 chiffres se trouve en bas à gauche.</help> <filled> <if cond="num_ticket.length != 12"> <prompt> Désolé, je n'ai pas entendu les 12 chiffres. </prompt> <assign name="num_ticket" expr="undefined"/> <else/> <prompt>J'ai entendu <say-as interpret-as="vxml:digits"> <value expr="num_ticket"/></say-as> </prompt> </if> </filled></field>

Les grammaires intégrées des types boolean et digits peuvent se paramétrer. On le faiten appelant explicitement les grammaires intégrées au moyen d'un système d'adresseURI « builtin » propre à la plateforme et d'une syntaxe de requête de style URI de laforme « type?paramètre=valeur », dans l'attribut src d'un élément grammar ou biendans l'attribut type d'un élément field, par exemple :

<grammar src="builtin:dtmf/boolean?y=7;n=9"/>

<field type="boolean?y=7;n=9"> <prompt> Si c'est exact, dites oui, ou pressez sept, sinon dites non, ou pressez neuf. </prompt></field>

<field type="digits?minlength=3;maxlength=5"> <prompt>Veuillez saisir votre code d'authentification</prompt></field>

Dans lequel, l'élément grammar paramètre la grammaire DTMF intégrée, le premierélément field paramètre la grammaire DTMF intégrée (la grammaire vocale seraactivée normalement) et le second élément field paramètre à la fois les grammairesintégrées vocale et DTMF. Les paramètres indéfinis pour un type de grammaire donnéseront ignorés, par exemple, « builtin:grammar/boolean?y=7 ».

Les grammaires intégrées de type digits et boolean peuvent se paramétrer commesuit :

Tableau 67 : Le paramétrage des grammaires de type digit et boolean

digits?minlength=n

Une chaîne d'au moins « n » chiffres.Applicable aux grammaires vocale et DTMF.Si minlength entre en conflit avec l'attributlength ou bien l'attribut maxlength, alors unévénement error.badfetch est suscité.

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

211 of 212 27/07/2012 22:31

Page 212: vxml

digits?maxlength=n

Une chaîne d'au plus « n » chiffres.Applicable aux grammaires vocale et DTMF.Si maxlenght entre en conflit avec l'attributlength ou bien l'attribut minlength, alors unévénement error.badfetch est suscité.

digits?length=n

Une chaîne d'exactement n chiffres.Applicable aux grammaires vocale et DTMF.Si length entre en conflit avec l'attributminlength ou bien l'attribut maxlength, alorsun événement error.badfetch est suscité.

boolean?y=dUne grammaire qui traite la touche dcomme une réponse affirmative. Applicableseulement à la grammaire DTMF.

boolean?n=dUne grammaire qui traite la touche dcomme une réponse négative. Applicableseulement à la grammaire DTMF.

Remarquez que l'on peut indiquer plusieurs paramètres, séparés par un caractère « ; »,comme illustré précédemment. Lorsqu'un élément grammar, avec un attribut mode fixé à"voice" (la valeur implicite), est défini dans un élément field, la grammaire s'ajoute àla grammaire vocale par défaut impliquée par l'attribut type de l'élément field. De lamême façon, lorsqu'un élément grammar avec un attribut mode fixé à "dtmf" est définidans un élément field, la grammaire s'ajoute à la grammaire DTMF par défaut del'élément field.

Table des matières

Le langage de balisage extensible vocal (VoiceXML) vers... http://www.yoyodesign.org/doc/w3c/voicexml20/

212 of 212 27/07/2012 22:31