LINGUAGGIO X+V di Salvatore Zita
Un' applicazione X+V di esempio.
Questa applicazione � un classico sondaggio realizzato attraverso un form da riempire. L�accesso multimodale al form permette di poter interagire
con l�applicazione sia con il mouse che con la voce e rispondere alle domande poste con tecniche di accesso complementari.
L�applicazione � stata realizzata utilizzando lo strumento di sviluppo IBM Rational Software Development Platform integrato con il Multimodal Toolkit
versione 4.1.4.
Il file cos� realizzato (con estensione .mxml) puo� girare sui normali browser xhtml e in tal caso l�utente pu� interagire
solo attraverso le normali tecniche di interazione, oppure su di un browser multimodale in grado di interpretare sia la parte
XHTML sia quella in VoiceXML e in questa circostanza l�interazione � multimodale. Il browser utilizzato per testare l�applicazione
� stato Opera versione 7.55 incluso nel pacchetto multimodal toolkit gi� citato. Tale browser attualmente supporta soltanto un
TTS e un ASR in lingua inglese. Ci� significa sostanzialmente che il browser pu� parlare solo l�inglese.
Di seguito verranno descritte le singole parti che costituiscono l�applicazione.
Nel linguaggio X+V il lingguaggio che ospita � l�XHTML pertanto l�intestazione di ogni applicazione � simile a quella che si
trova in una normale pagina XHTML o XML in genere.
Ecco un esempio di come si presentano in genere le prime righe di codice di una applicazione X+V:
La prima riga di codice inserita � la dichiarazione XML, segue la dichiarazione del DOCTYPE; questa ha l�identificatore
PUBLIC quindi bisogna far riferimento alla DTD all�indirizzo:
http://www.voicexml.org/specs/multimodal/x+v/12/dtd/xhtml+voice12.dtd.
L�elemento radice dell�intera applicazione � l�elemento <html> che contiene gli attributi per la dichiarazione dei namespaces.
La prima dichiarazione � quella per il linguaggio XHTML che � assunto come namespace di default seguono le dichiarazioni dei
namespaces riguardanti gli altri linguaggi o moduli utilizzati nell�applicazione.
L�intestazione dei file html � usata anche qui con il medesimo scopo. In particolare in X+V il tag <head> diventa il contenitore di
tutta quella che � la parte vocale del progetto, ossia quella scritta nel linguaggio VoiceXML, assieme alla parte di sincronizzazione.
Questa � quella che non viene interpretata nel caso si utilizzi un browser non multimodale che interpreta solo la parte di codice
scritta in xhtml. La chiusura del tag indica quindi, implicitamente, l�inizio della parte visuale in xhtml.
Il tag <title> funziona come in un normale documento html in pratica serve a dare un titolo all�applicazione. Titolo che verr� mostrato
in cima alla finestra del browser.
La parte vocale pu� essere composta di tutti gli elementi presenti nel modulo vxml indicato nel namespace. Tutti questi dovranno
essere preceduti dal prefisso vxml: in accordo con la dichiarazione del namespace.
In questa applicazione la parte vocale � tutta contenuta in un unico elemento <form>, ma � ovvio che questa scelta pu� variare a seconda
delle necessit� del programmatore ed � quindi possibile anche l�inserimento di pi� elementi <form> indipendenti.
Usualmente si preferisce utilizzare lo schema con un unico elemento <form> e un insieme di campi <filed> quando vi � la necessit� di dover
sincronizzare la parte vocale con quella visiva. Quando invece � un evento ben definito ad attivare la parte vocale, conviene utilizzare
tanti elementi <form> indipendenti che poi potranno essere richiamati ad arte attraverso un handler.
Nell�applicazione in questione l�evento di load, che si ha al caricamento della pagina nel browser, attiva l�unico elemento <form> presente cio� fa
saltare il FIA ad interpretare la parte vocale.
Una volta �entrati� nel form il browser legge il contenuto dell�elemento <block> ovvero esegue un file audio pre-registrato.
Il form contiene tutti gli elementi field ognuno dei quali riguarda un campo che l�utente � chiamato a riempire. L�attributo xv:id �
un attributo appartenente al modulo per la sincronizzazione (ecco perch� ha il prefisso xv: ), in particolare esso serve a dare un
identificatore univoco necessario per sincronizzare la parte vocale con la parte visuale.
La prima cosa da fare quando si mette l�utente di fronte ad una scelta � la definizione di una grammatica, ossia di un dizionario delle
possibili parole o frasi che possono essere pronunciate dall�utente e ben interpretate dalla macchina. Le grammatiche possono essere scritte
in pi� linguaggi in parte equivalenti; quello standard a cui fa riferimento il consorzio W3C � il linguaggio SRGS, un altro forse pi�
immediato, ma con le stesse potenzialit� � JSGF. E� possibile realizzare grammatiche esterne scrivendole in file indipendenti dall�applicazione
multimodale e poi richiamarle attraverso l�attributo src nell�elemento <grammar>. Al contrario grammatiche meno articolate possono essere
sviluppate nello stesso file mxml all�interno dell�elemento <grammar>.
Nell�esempio mostrato c�e un commento di com�� possibile richiamare grammatiche esterne, tuttavia si � scelto di utilizzare grammatiche interne.
L�elemento <prompt>, figlio di <field>, svolge la stessa funzione di <block> in <form>: il browser legge ci� che � contenuto
al loro interno.
L�elemento <catch> correlato dell�attributo event serve per definire un�azione che l�interprete deve compiere al verificarsi dell�evento specificato.
Nell� esempio mostrato gli eventi sono:
help che accade quando l�utente pronuncia la parola help durante l�esecuzione dell�applicazione;
nomatch che accade quando l�utente da una risposta che non � tra quelle possibili ovvero tra quelle definite nella grammatica;
noinput che si verifica quando l�utente non da alcuna risposta, o nessuna risposta viene ascoltata dal browser.
L�attributo count serve a differenziare il contenuto di <catch> se gli stessi eventi si ripetono pi� volte, ad esempio se l�evento noinput si verifica
due volte di seguito la prima volta il browser chieder� all�utente di rispondere alla domanda, la seconda volta elencher� alcune possibili scelte.
L�elemento field nell�applicazione in analisi viene utilizzato ogni volta che c�� una domanda a cui l�utente pu� rispondere in maniera
complementare vale a dire sia con il mouse sia con la voce. Tuttavia la struttura dell�elemento, ovvero gli elementi in esso compresi,
non varia per nulla o varia di molto poco.
E� comunque bene fare alcune precisazioni.
Nella situazione in cui l�utente ha la possibilit� di rispondere alla stessa domanda in maniera diversa, in altre parole se pu� dare attraverso
la voce lo stesso input in maniera differente, va usata una particolare sintassi. Ad esempio nella grammatica riportata sopra l�utente pu�
rispondere alla domanda sullo stato civile widow oppure widower a seconda del proprio sesso. E� ovvio che il risultato deve comunque essere lo
stesso cio� la variabile riferita allo stato civile deve essere riempita con lo stesso valore sia che si tratti di un uomo che se si tratti di
una donna.
La sintassi utilizzata � : widower{$=widow} che significa: se l�utente risponde pronunciando la parola widower la variabile di pertinenza andr�
riempita con il valore widow.
In una circostanza monomodale questo artificio non ha molto senso, ma � necessario in ambito multimodale per far avvenire in maniera corretta
la sincronizzazione tra parte vocale e parte visuale: visto che non c�� distinzione tra le due scelte nella parte xhtml (abbiamo un solo radio
button sia per la scelta widow che per widower) non deve essercene nemmeno nella parte vxml.
Va ancora precisato che la grammatica mostrata in figura si presenta cos� semplice perch� l�input � costituito da una sola variabile. Ovviamente
� possibile gestire anche casi pi� complessi in cui l�elemento field � riempito con un vettore di variabili, ci� accade se si possono fare pi�
scelte per una stessa domanda. In tal caso la grammatica va integrata con la definizione di un vettore che viene costruito con le varie scelte.
La sintassi utilizzata a tal uopo pu� essere la seguente:
Una volta completata la parte vocale, cio� chiuso l�ultimo elemento <form> aperto precedentmente vi � la parte di sincronizzazione vera e
propria.
L�elemento di sincronizzazione � <sync> ed appartiene al modulo di sincronizzazione che nella definizione dei namespaces � stato indicato
con il valore xv .
Ecco un esempio dell�utilizzo dell�elemento in questione:
L�elemento sync nell�esempio ha due attributi. L�attributo input vuole il nome (name) dell�elemento <input>, della parte in html, che deve essere
sincronizzata; l�attributo field va completato con il nome dato a xv:id=�� nel campo field della parte vocale corrispondente. In poche parole
per eseguire la sincronizzazione delle due modalit� d�interazione c�� bisogno che queste vengano identificate: xv:input=�� serve ad indentificare
la parte visuale in html, xv:field=�� serve invece per indicare la parte vocale in vxml.
La chiusura dell�elemento <head> indica l�inizio della parte visuale in html.
Poich� il namespace di default � proprio quello relativo al linguaggio xhtml e quindi questo ospita tutti gli altri linguaggi, � possibile
scrivere la parte visuale come se si stesse realizzando una normale applicazione in xhtml. Gli elementi e gli attributi sono sostanzialmente gli
stessi, ma bisogna sempre aggiungere a questi gli strumenti necessari al collegamento tra i vari linguaggi.
E� possibile collegare i due linguaggi attraverso l�utilizzo di eventi ed handler oppure attraverso la sincronizzazione delle variabili di input.
Nel primo caso basta inserire in un elemento xhtml degli attributi del modulo XMLEvents:
In questo caso l�elemento body, che segna l�inizio della parte xhtml, contiene un attributo event del modulo xml-events settato a �load� e un
handler che indica l�identificativo del form a cui �saltare� nel caso l�evento si verifichi. Il risultato di questa riga di codice � che appena
viene caricata la applicazione su di un browser, cio� si verifica un evento di load, il FIA passa ad interpretare il form indicato nell�attributo
handler, cio� dalla parte visuale si passa a quella vocale.
Nel secondo caso, quello della sincronizzazione, bisogna stare attenti ai nomi e ai valori che vengono inseriti nel campo input:
Nell�esempio mostrato gli attributi dell�elemento <input> sono:
�type� indica il tipo di input che andr� visualizato a schermo,
�value� indica il valore che conterr� la variabile input se quel tipo di input � selezionato dall�utente.
Nel caso di sincronizzazione multimodale tale valore dovr� corrispondere a quello della relativa parte vocale: nell�esempio mostrato se alla
voce Profession l�attributo value � settato a housewife, l�utente che vuole rispondere a quella domanda con la voce deve pronunciare la parola
housewife o comunque una parola che restituisca il valore housewife. Sostanzialmente tutti gli attributi value degli input relativi ad una
stessa domanda devono corrispondere alla grammatica della corrispondente parte vocale.
�name� � il nome che viene dato all�elemento <input> necessario alla sua individuazione ai fini della sincronizzazione. E� importante che
ad una domanda con pi� risposte possibili il valore name sia settato allo stesso valore per tutte le possibili risposte in modo che tutte le
risposte ad una domanda siano sincronizzate con la stessa parte vocale. Il valore dell�attributo name � quello che va inserito nel campo xv:input
dell� elemento <sync>.
Clicca qui per scaricare l'applicazione
multimodale con estensione .mxml da poter testare con un browser multimodale.
Torna al primo articolo sul linguaggio X+V di Salvatore Zita.
|