Introduction
La grammaire VoiceXML regroupe l'ensemble des mots, phrases et signaux
DMTF qui sont reconnus par une application VoiceXML
2.0. Ceux-ci sont définis par la SRGS
(Speech Recognition Grammar Specification) introduite par
la W3C en conjonction avec la spécification VoiceXML 2.0
-- car il n'existait aucun standard de reconnaissance vocale dans
le spécification 1.0. Le DTMF est rendu nécessaire
par la possibilité d'une mauvaise réception téléphonique,
ou d'un problème de prononciation.
Cette grammaire permet donc de spécifier ce que comprend
l'application. Dès qu'il s'agit de générer
une réponse, c'est le SSML
(Speech Synthesis Markup Language) qui entre en jeu.
En pratique, les régles de grammaires créées
par les développeurs permettent de définir les mots
que les utilisateurs pourraient donner en réponse,
avec leurs variations. Par exemple, une réponse pourrait
être "oui", "ouais", "bien sûr",
"d'accord", ou bien "demain", "le vingt-six
octobre", "vingt-six dix zéro deux"...
Il existe deux
formes de syntaxe possibles pour la grammaire VoiceXML: la
syntaxe ABNF (Augmented Backus-Naur Form) et la
syntaxe XML.
La syntaxe ABNF est une représentation en texte seul (non-XML)
prochain de la grammaire BNF déjà utilisée
dans de nombreux formats (par exemple, le protocol HTTP est spécifié
au format ABNF). La syntaxe XML passe par les éléments
XML pour représenter ses constructions grammaticales.
Chaque syntaxe a ses avantages et ses inconvénients: XML
offre plus de portabilité, mais est beaucoup plus complexe,
et donc plus compliqué à lire qu'ABNF. Ceux qui auront
déjà utilisé les formats GSL
(Grammar Specification Language) ou JSGF
(Java Speech Grammar Format) seront plus à l'aise
avec ABNF, mais l'utilisation de la DTD dans un éditeur XML
permet de simplifier la tâche...
C'est pourquoi tous les exemples suivants utiliseront les deux syntaxes.
Une grammaire est appellée depuis un fichier VoiceXML à
l'aide de la balsie <grammar>:
<grammar xmlns="http://www.w3.org/2001/06/grammar"/>
...pour une grammaire en ligne, ou dans le cas d'une grammaire
externe:
<grammar src="Employees.grxml"
type="application/srgs+xml"/>
Entêtes
Comme en XML, sans le bon entête, l'interpreteur VoiceXML
ne reconnaîtra pas la grammaire correctement.
(fichier grammaire.gram)
# ABNF 1.0 ISO-8859-1;
language fr;
mode voice;
root $racine;
(fichier grammaire.grxml)
<?xml version="1.0"
encoding="ISO-8859-1"?>
<grammar mode="voice" version="1.0" xml:lang="fr"
root="racine"
xmlns="http://www.w3.org/2001/06/grammar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/06/grammar http://www.w3.org/TR/speech-grammar/grammar.xsd">
mode permet de spécifier
si les entrées sont vocales (voice,
par défaut) ou par touches (dmtf).
Deux modes ne peuvent coexister dans une même
grammaire: si la grammaire est en mode DMTF, alors les entrées
vocales ne seront pas acceptées, et inversement. Pour qu'une
application puisse accepter à la fois la voix et les entrées
DMTF, deux grammaires différentes doivent être définies.
root permet, lorsqu'un fichier contient
plusieurs sous-grammaires, de préciser à l'interpréteur
quelle est la grammaire principale.
Quelques mots-clés
Rule: une règle de grammaire, sorte de variable.
Elle peut être déclarée private ou
public selon qu'elle soit accessible uniquement depuis
son fichier, ou depuis son fichier et un fichier exterieur.
ABNF:
$prenom = Martin;
public $prenom = Martin;
XML:
<rule id="prenom">Martin</rule>
<rule id="prenom" scope="private">Martin</rule>
Ruleref: Une référence (Rule Reference)
à règle/variable (Rule) pointée par
un URI, pouvant être locale (auquel cas l'URI est de la forme
#nom) ou externe dans le cas où celle-ci est déclarée
public (l'URI pouvant alors être relatif ou absolu).
L'élément XML <ruleref> ne contient
pas de texte ni d'autre élément.
ABNF
public $paris
$<../villes.gram#paris>
$<http://www.monde.com/europe/france/villes.gram#paris>
$nomComplet = $prenom $nom
XML
<ruleref uri="#paris"
scope="public"/>
<ruleref uri="../villes.grxml#paris"/>
<ruleref uri="http://www.monde.com/europe/france/villes.grxml#paris"/>
<rule id="nomComplet">
<ruleref uri="#prenom"/>
<ruleref uri="#nom"/>
</rule>
Cela permet de faciliter l'encapsulation afin de créer des
phrases complètes:
ABNF
$villeArrivee se
trouve à $distKm kilomètres de $villeDepart
XML
<ruleref uri="#villeArrivee"/>
se trouve à <ruleref uri="#distKm"/> kilomètres
de $villeDepart
Le langage d'une grammaire peut par ailleurs être précisé
lorsqu'on l'appelle:
ABNF
$<http://www.le-site.com/villes.gram#argentine>!fr
$yes = yes | oui!fr;
XML
<ruleref uri="http://www.le-site.com/villes.gram#argentine"
xml:lang="fr"/>
<rule id="yes">
<one-of>
<item>yes</item>
<item xml:lang="fr">oui</item>
</one-of>
</rule>
Page 1| 2
|