XML/VoiceXML

Wikibooks, manuali e libri di testo liberi.
< XML
Indice del libro

Obiettivi di apprendimento

  • Scoprire la storia di VoiceXML
  • Comprendere i requisiti hardware e software di VoiceXML
  • Scoprire gli elementi di base di VoiceXML

VoiceXML è stato creato per generare dialoghi audio che consentono l'uso di sintesi vocale, audio digitalizzato, riconoscimento di parlato e DTMF (Dual Tone Multi-Frequency, composizione a doppio tono multi-frequenza a tocco o pulsante). VoiceXML consente di usare insieme voci digitali, audio registrato e linguaggio umano, impiegando i telefoni come dispositivi di input e output.

Esempi VoiceXML[modifica]

Secondo il W3C, "VoiceXML è progettato per la creazione di dialoghi audio con la sintesi vocale, per l'audio digitalizzato, per il riconoscimento di input vocali e DTMF, per la registrazione di input vocali, per la telefonia e per le conversazioni di iniziative miste. Il suo obiettivo principale è portare i vantaggi dello sviluppo basato sul Web e distribuzione di contenuti ad applicazioni interattive di risposta vocale."

Ecco due brevi esempi di VoiceXML. Il primo è "Hello World":

<?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" version="2.0">
<form>
<block>Hello World!</block>
</form>
</vxml>

L'elemento di livello superiore è <vxml>, che è un contenitore per le finestre di dialogo. I due principali tipi di finestre di dialogo sono moduli (form) e menu. I moduli presentano informazioni e raccolgono input. I menu consentono di scegliere cosa fare dopo. Questo esempio ha un solo modulo, che contiene un blocco che sintetizza e presenta "Hello World!" per l'utente. Poiché il modulo non specifica una finestra di dialogo dopo "Hello World", la conversazione termina.

Il nostro secondo esempio chiede all'utente di scegliere una bevanda e quindi la invia a uno script del server:

<?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="drink">
<prompt>Vuoi caffè, tè, latte o niente?</prompt>
<grammar type="application/x-gsl" mode="voice">
<![CDATA[
[
[coffee] {<drink "Caffè">}
[tea] {<drink "Tè">}
[milk] {<drink "Latte">}
[nothing] {<drink "Niente">}
]
]]>
</field>
<block>
<submit next="http://www.drink.example.com/drink2.asp"/>
</block>
</form>
</vxml>

field è un campo di input. L'utente deve fornire un valore per il campo prima che venga fatto riferimento o eseguito l'elemento successivo nel modulo. Ecco un esempio di una semplice interazione:

  • C (computer): vuoi caffè, tè, latte o niente?
  • U (umano): succo d'arancia.
  • C: Non ho capito cosa hai detto. (un messaggio predefinito specifico della piattaforma.)
  • C: Vuoi caffè, tè, latte o niente?
  • U: Tè
  • C: (continua nel documento drink2.asp)
<?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">
<menu>
<property name="inputmodes" value="dtmf"/>
<prompt>
Per lo sport premere 1, Per il tempo premere 2, Per l'astrofisica Stargazer premere 3.
</prompt>
<choice dtmf="1" next="http://www.sports.example.com/vxml/start.vxml"/>
<choice dtmf="2" next="http://www.weather.example.com/intro.vxml"/>
<choice dtmf="3" next="http://www.stargazer.example.com/astronews.vxml"/>
</form>
</vxml>

Il computer o il ricevitore riconosce il numero e invia un messaggio per attivare la finestra di dialogo successiva, in base al numero scelto. Ecco come sarebbe una tipica conversazione:

  • C: Per lo sport premere 1, Per il tempo premere 2, Per l'astrofisica Stargazer premere 3.
  • U: 4
  • C: Non ho capito quale valore hai digitato. (un messaggio predefinito specifico della piattaforma.)
  • C: Per lo sport premere 1, Per il tempo premere 2, Per l'astrofisica Stargazer premere 3.
  • U: 1 "sport".
  • C: (passa a http://www.sports.example.com/vxml/start.vxml )

Le origini di VoiceXML[modifica]

VoiceXML è stato varato nel 1995 come linguaggio di progettazione di dialoghi basato su XML. È stato principalmente utilizzato per semplificare le applicazioni di riconoscimento vocale in un progetto AT&T chiamato Phone Markup Language (PML). Dopo la creazione di questo linguaggio, altre aziende hanno lavorato sui propri linguaggi simili a PML come Lucent, Motorola (VoxML), IBM (SpeechML), HP (TalkML) e PipeBeach (VoiceHTML). Dal 1998, il forum VoiceXML è stato sviluppato da AT&T, IBM, Lucent e Motorola per definire un linguaggio di progettazione standard per i dialoghi, che gli sviluppatori avrebbero potuto utilizzare per creare applicazioni conversazionali. Hanno scelto XML come base perché era chiaro per loro che questa era la direzione in cui la tecnologia stava andando. Nel 2000, il forum VoiceXML ha rilasciato VoiceXML 1.0 al pubblico e lo ha inviato al W3C per impostare il linguaggio come standard internazionale. Questa implementazione ha permesso il rilascio di VoiceXML 2.0, basato sull'input delle aziende membri del W3C, dei gruppi di lavoro del W3C e di tutti gli sviluppatori.

Modello architettonico di VoiceXML[modifica]

Un document server (ad esempio un server Web) elabora le richieste da un'applicazione client, in questo caso l'interprete VoiceXML, attraverso il contesto dell'interprete VoiceXML. Il server produce in risposta documenti VoiceXML, che vengono elaborati dall'interprete VoiceXML. Il contesto dell'interprete VoiceXML può monitorare gli input dell'utente in parallelo all'interprete VoiceXML. Ad esempio, un contesto di interprete VoiceXML può sempre ascoltare una frase di escape speciale che porta l'utente a un assistente personale di alto livello, e un altro può ascoltare le frasi di escape che alterano le preferenze dell'utente come il volume o le caratteristiche di sintesi vocale.

La piattaforma di implementazione è controllata dal contesto dell'interprete VoiceXML e dall'interprete VoiceXML. Ad esempio, in un'applicazione di risposta vocale interattiva, il contesto dell'interprete VoiceXML può essere responsabile del rilevamento di una chiamata in arrivo, dell'acquisizione del documento VoiceXML iniziale e della risposta alla chiamata, mentre l'interprete VoiceXML conduce la finestra di dialogo dopo la risposta. La piattaforma di implementazione genera eventi in risposta alle azioni dell'utente (ad esempio input vocali o ricevuti, disconnessione) ed eventi di sistema (ad esempio la scadenza del timer). Alcuni di questi eventi sono interpretati dall'interprete VoiceXML stesso, come specificato dal documento VoiceXML, mentre altri sono influenzati dal contesto dell'interprete VoiceXML.

Gli obiettivi di VoiceXML[modifica]

L'obiettivo principale di VoiceXML è portare tutta la potenza dello sviluppo web e della distribuzione dei contenuti alle applicazioni di risposta vocale, e liberare gli autori di tali applicazioni dalla programmazione e dalla gestione delle risorse di basso livello. VoiceXML imposta un ambiente di integrazione tra servizi vocali e servizi dati sfruttando il paradigma client-server. Un servizio vocale può essere definito come una sequenza di dialoghi interattivi tra un utente e una piattaforma di implementazione. Le finestre di dialogo sono archiviate in document server, consentendo una struttura indipendente dalla piattaforma di implementazione. Questi server mantengono la logica generale del servizio, eseguono operazioni su database e sistemi legacy e producono finestre di dialogo. Un documento VoiceXML interagisce con le finestre di dialogo dal server utilizzando un interprete VoiceXML. Gli input dell'utente generano richieste al document server e, infine, il document server risponde con un altro documento VoiceXML per continuare la sessione dell'utente con altre finestre di dialogo.

VoiceXML è un linguaggio di markup che:

  • riduce al minimo le interazioni client/server generando tutti i tipi di interazioni per il documento;
  • evita agli autori delle applicazioni i dettagli di basso livello e specifici della piattaforma;
  • separa il codice di interazione dell'utente (in VoiceXML) dalla logica di servizio (ad es. Script CGI);
  • consente lo sviluppo multipiattaforma, diventando un linguaggio comune per fornitori di contenuti, fornitori di strumenti e fornitori di piattaforme;
  • offre facilità d'uso per interazioni semplici e offre funzionalità linguistiche per supportare dialoghi complessi.

Mentre VoiceXML si sforza di soddisfare i requisiti della maggior parte dei servizi di risposta vocale, i servizi con requisiti rigorosi possono essere meglio serviti da applicazioni dedicate che impiegano un livello di controllo più fine.

Principi di progettazione[modifica]

VoiceXML è un'applicazione XML. Di seguito alcune delle sue funzionalità o abilità.

  • Il linguaggio promuove la portabilità dei servizi attraverso l'astrazione delle risorse della piattaforma.
  • Il linguaggio adatta la diversità della piattaforma nei formati di file audio supportati, nei formati di grammatica vocale e negli schemi URI.
  • Il linguaggio semplifica la creazione di tipi comuni di interazioni.
  • Il linguaggio ha standard ben definiti di formulazione e sintassi che consentono molto più facilmente l'intenzione dell'autore riguardo al comportamento delle interazioni con l'utente.
  • Il linguaggio riconosce le interpretazioni semantiche da tutti i tipi di grammatiche e rende queste informazioni disponibili per l'applicazione.
  • Il linguaggio ha un meccanismo di flusso di controllo.
  • Il linguaggio consente di separare della logica di servizio dal comportamento di interazione.
  • Non è destinato a calcoli intensivi, operazioni di database o operazioni di sistemi legacy. Si presume che vengano gestiti da risorse esterne all'interprete dei documenti, ad esempio un document server.
  • Si presume che la logica di servizio generale, la gestione dello stato, la generazione della finestra di dialogo e il sequenziamento della finestra di dialogo risiedano all'esterno dell'interprete del documento.
  • Il linguaggio fornisce modi per collegare documenti e inviare dati agli script del server utilizzando gli URI.
  • VoiceXML fornisce modi per identificare esattamente quali dati inviare al server e quale metodo HTTP (GET o POST) utilizzare nell'invio.
  • Il linguaggio non richiede agli autori di documenti di allocare e deallocare esplicitamente le risorse della finestra di dialogo.

Requisiti della piattaforma di implementazione[modifica]

Questa sezione descrive i requisiti hardware/software per supportare un interprete VoiceXML.

Acquisizione di documenti: il contesto dell'interprete dovrebbe acquisire documenti dall'interprete VoiceXML, richiedendo il supporto del protocollo URI "http". Ci saranno alcuni casi in cui la richiesta viene generata dall'interpretazione di un documento VoiceXML, ma può anche essere generata in risposta a eventi al di fuori dell'ambito del linguaggio, come una telefonata in arrivo. Quando si inviano richieste di documenti tramite http, il contesto dell'interprete si identifica utilizzando la variabile di intestazione "User-Agent" con il valore "<name>/<version>", ad esempio "acme-browser/1.2".

Uscita audio: una piattaforma di implementazione deve supportare l'uscita audio utilizzando file audio e sintesi vocale (text-to-speech, TTS). La piattaforma deve essere in grado di sequenziare liberamente TTS e uscita audio. Se una risorsa di uscita audio non è disponibile, deve essere generato un evento error.noresource. Questi file sono indicati da un URI specifico.

Ingresso audio: una piattaforma di implementazione deve trovare il modo di rilevare e segnalare simultaneamente caratteri e/o input vocali. Deve inoltre controllare la durata dell'intervallo di rilevamento dell'ingresso con un timer la cui lunghezza è specificata da un documento VoiceXML.

  • Le piattaforme devono supportare la forma XML delle grammatiche DTMF descritte nel SRGS della specifica grammatica del riconoscimento vocale del W3C.
  • Deve essere in grado di ricevere dinamicamente dati grammaticali di riconoscimento vocale.
  • Può supportare altri formati come JSpeech Grammar Format o formati proprietari.
  • Deve essere in grado di registrare l'audio ricevuto dall'utente.
  • La piattaforma dovrebbe essere in grado di supportare la connessione di terzi tramite una rete di comunicazione, come ad esempio il telefono.

Trasferimento: la piattaforma dovrebbe essere in grado di supportare la connessione di terze parti attraverso una rete di comunicazione, ad esempio il telefono.

Concetti base[modifica]

Un documento VoiceXML è una macchina a stati finiti colloquiale, in cui l'utente è sempre in uno stato o finestra di dialogo alla volta. Ogni finestra di dialogo determina la finestra di dialogo successiva a cui passare. Le transizioni possono essere definite utilizzando gli URI, che definiscono il documento e la finestra di dialogo successivi da utilizzare. Quando non ci sono più finestre di dialogo o c'è un elemento che esce esplicitamente dalla conversazione, l'esecuzione viene terminata. Un documento VoiceXML è composto principalmente da elementi di primo livello chiamati dialoghi.

Esistono due tipi di finestre di dialogo: moduli e menu. Un documento può anche avere elementi:

  • elementi <meta>
  • elementi <metadata>
  • elementi variabili
  • elementi <script>
  • elementi <property>
  • elementi <catch>
  • elementi <link>

I moduli definiscono un'interazione che raccoglie valori da un insieme di variabili di elementi di campo. Ogni campo può specificare una grammatica che definisce gli input consentiti per quel campo.

I menu visualizzano le informazioni all'utente con una scelta di opzioni e quindi passano a un'altra finestra di dialogo in base alla scelta selezionata. Ogni finestra di dialogo comporta una serie di grammatiche vocali e/o DTMF, che sono attive solo quando l'utente è in quella finestra di dialogo.

Un subdialog è come una chiamata di funzione perché fornisce un modo per creare e invocare una nuova interazione e tornare alla finestra di dialogo originale. Istanze variabili, grammatiche e informazioni sullo stato vengono salvate e sono disponibili al ritorno al documento chiamante. I subdialog possono essere utilizzati per creare una sequenza di conferma che potrebbe richiedere una query nel database, creare un set di componenti che possono essere condivisi tra documenti in una singola applicazione o eventualmente per creare una libreria riutilizzabile di finestre di dialogo condivise tra molte applicazioni.

Una sessione inizia quando l'utente comincia a interagire con un contesto di interprete VoiceXML, continua quando i documenti vengono caricati ed elaborati e termina quando richiesto dall'utente, da un documento o dal contesto dell'interprete.

Un'applicazione è un insieme di documenti che condividono lo stesso documento radice dell'applicazione. Ogni volta che l'utente interagisce con un documento in un'applicazione, viene caricato anche il documento radice dell'applicazione. Il documento radice dell'applicazione rimane caricato mentre l'utente sta effettuando la transizione tra altri documenti nella stessa applicazione e viene scaricato quando l'utente passa a un documento che non si trova nell'applicazione.

Grammatiche: a ogni finestra di dialogo sono associate una o più grammatiche vocali e/o DTMF. Nelle applicazioni dirette dalla macchina, le grammatiche di ciascuna finestra di dialogo sono attive solo quando l'utente si trova in quella finestra di dialogo. In applicazioni di iniziativa mista, in cui l'utente e la macchina si alternano nel determinare cosa fare dopo, alcune finestre di dialogo vengono contrassegnate per rendere attive le loro grammatiche (ovvero, ascoltate) anche quando l'utente si trova in un'altra finestra di dialogo nello stesso documento, oppure su un altro documento caricato nella stessa applicazione. In questa situazione, se l'utente dice qualcosa che corrisponde alle grammatiche attive di un'altra finestra di dialogo, l'esecuzione passa a quell'altra finestra di dialogo, con l'espressione dell'utente trattata come se fosse detta in quella finestra di dialogo. L'iniziativa mista aggiunge flessibilità e potenza alle applicazioni vocali.

Eventi: VoiceXML consente all'utente di compilare moduli nel modo tradizionale di input dell'utente e definisce meccanismi per la gestione di eventi non coperti dal meccanismo del modulo. Gli eventi possono essere generati quando l'utente non risponde, non risponde correttamente o richiede assistenza. Allo stesso modo, l'interprete VoiceXML può anche generare eventi se trova un errore semantico in un documento VoiceXML utilizzando elementi di cattura che consentono all'interprete di attivare tali eventi.

Un collegamento specifica una grammatica attiva ogni volta che l'utente interagisce con essa. Se l'input dell'utente corrisponde alla grammatica del collegamento, controlla i trasferimenti all'URI di destinazione del collegamento. Un collegamento può essere utilizzato per lanciare un evento o andare a un URI di destinazione.

Elementi VoiceXML[modifica]

Per ulteriori informazioni sugli elementi, vai alla pagina W3C: http://www.w3.org/TR/2004/REC-voicexml20-20040316/

Elemento Funzione
<assign> Assegna a una variabile un valore
<audio> Riproduce una clip audio in un prompt
<block> Un contenitore di codice eseguibile (non interattivo)
<catch> Cattura un evento
<choice> Definisce una voce di menu
<clear> Cancella una o più variabili di elementi del modulo
<disconnect> Disconnetti una sessione
<else> Utilizzato in <if> elementi
<elseif> Utilizzato in <if> elementi
<enumerate> Abbrevia per elencare le scelte in un menu
<error> Cattura un evento di errore
<exit> Esci da una sessione
<field> Dichiara un campo di input in un modulo
<filled> Un'azione eseguita quando i campi sono riempiti
<form> Una finestra di dialogo per presentare informazioni e raccogliere dati
<goto> Va a un'altra finestra di dialogo nello stesso documento o in un documento diverso
<grammar> Specifica un riconoscimento vocale o una grammatica DTMF
<help> Cattura un evento di aiuto
<if> Logica condizionale semplice
<initial> Dichiara la logica iniziale all'entrata in un modulo (di iniziativa mista)
<link> Specifica una transizione comune a tutte le finestre di dialogo nell'ambito del collegamento
<log> Genera un messaggio di debug
<menu> Una finestra di dialogo per la scelta tra destinazioni alternative
<meta> Definire un elemento di metadati come coppia nome/valore
<metadata> Definire le informazioni sui metadati utilizzando uno schema di metadati
<noinput> Cattura un evento noinput
<nomatch> Cattura un evento nomatch
<object> Interagisce con un'estensione personalizzata
<option> Specificare un'opzione in <field>
<param> Parametro in <object> o <subdialog>
<prompt> Sintesi vocale in coda e uscita audio per l'utente
<property> Controlla le impostazioni della piattaforma di implementazione
<record> Registra un campione audio
<reprompt> Esegue un prompt dei campi quando un campo viene nuovamente visitato dopo un evento
<return> Ritorna da un dialogo secondario
<script> Specificare un blocco di logica di scripting lato client ECMAScript
<subdialog> Richiamare un'altra finestra di dialogo come subdialog di quella corrente
<submit> Invia valori a un server di documenti
<throw> Lancia un evento
<transfer> Trasferisci il chiamante a un'altra destinazione
<value> Inserisci il valore di un'espressione in un prompt
<variable> Dichiara una variabile
<vxml> Elemento di primo livello in ogni documento VoiceXML

One Document Execution[modifica]

Per impostazione predefinita, l'esecuzione del documento inizia con la prima finestra di dialogo. Man mano che viene eseguita ogni finestra di dialogo, viene determinata quale sarà la finestra di dialogo successiva. Quando una finestra di dialogo non fa riferimento a un'altra finestra di dialogo, l'esecuzione del documento si interrompe.

Ecco l'esempio "Hello World!" ampliato per illustrare l'esecuzione di VoiceXML. Ora ha una variabile a livello di documento chiamata "hi" che contiene il saluto. Il suo valore viene utilizzato come prompt nel primo modulo. Una volta che il primo modulo riproduce il messaggio di saluto, passa al modulo denominato "say_goodbye", che restituisce all'utente "Goodbye!" Poiché il secondo modulo non ha una transizione verso un'altra finestra di dialogo, l'esecuzione del documento si ferma.

<?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="hello-support@hi.example.com"/>
 <var name="hi" expr="'Hello World!'"/>
 <form>
  <block>
  <value expr="hi"/>
  <goto next="#say_goodbye"/>
  </block>
 </form>
 <form id="say_goodbye">
  <block>
  Goodbye!
  </block>
 </form>
</vxml>

Variabili ed espressioni[modifica]

Le variabili VoiceXML sono sotto tutti gli aspetti equivalenti alle variabili ECMAScript: fanno parte dello stesso spazio. Le variabili VoiceXML possono essere utilizzate in un <script> così come le variabili definite in uno <script> possono essere utilizzate in VoiceXML. Dichiarare una variabile usando var equivale a usare un'istruzione var in un elemento <script>. <script> può anche apparire ovunque possa apparire var. Le variabili VoiceXML sono anche dichiarate dagli elementi del modulo.

La convenzione per la denominazione delle variabili è la stessa di ECMAScript, ma i nomi che iniziano con il carattere underline ("_") e i nomi che terminano con un simbolo di dollaro ("$") sono riservati per uso interno. Le variabili VoiceXML, comprese le variabili degli elementi del modulo, non devono contenere parole riservate ECMAScript. Devono inoltre seguire le regole ECMAScript per la correttezza referenziale. Ad esempio, i nomi delle variabili devono essere univoci e la loro dichiarazione non deve includere un punto - "var xy" è una dichiarazione illegale in ECMAScript. I nomi di variabili che violano le convenzioni di denominazione o le regole ECMAScript causano un evento error.semantic.

Le variabili sono espresse usando l'elemento var:

<var name="room_number"/> 
<var name="avg_mult" expr="2.2"/> 
<var name="state" expr="'Georgia'"/>

Elemento <vxml>[modifica]

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

Gli attributi di <vxml> includono:

version La versione di VoiceXML di questo documento (richiesto). Il numero della versione corrente è 2.0
base Definisce un URI di base, da utilizzare quando si risolvono gli URI relativi nel documento
xmlns Lo spazio dei nomi designato per VoiceXML (obbligatorio). Lo spazio dei nomi per VoiceXML è definito come http://www.w3.org/2001/vxml
xml:base L'URI di base per questo documento come definito nella base xml. È un URI che prende come base tutti i riferimenti relativi all'interno del documento
xml:lang L'identificatore della lingua per questo documento. Se omesso, il valore è un valore predefinito specifico della piattaforma
Xmlns:xsi Usato insieme a xsi:schemalocation per indicare la posizione dello schema per lo spazio dei nomi VoiceXML
xsi:schemalocation Utilizzato insieme a xmlns:xsi per indicare la posizione dello schema per lo spazio dei nomi VoiceXML
application L'URI del documento radice dell'applicazione di questo documento, se presente

Elemento <field>[modifica]

Un campo (<field>) specifica un elemento di input che deve essere raccolto dall'utente. Alcuni attributi di questo elemento sono:

name La variabile dell'elemento del modulo nell'ambito della finestra di dialogo che conterrà il risultato. Il nome deve essere univoco tra gli elementi del modulo nel modulo
expr Il valore iniziale della variabile dell'elemento del modulo; il valore predefinito è ECMAScript non definito
cond Un'espressione che deve essere valutata come vera dopo la conversione in booleana affinché l'elemento del modulo venga visitato. L'elemento del modulo può essere visitato anche se l'attributo non è specificato
Type Il tipo di campo

Elemento <grammar>[modifica]

L'elemento <grammar> è usato per fornire una grammatica vocale che

  • specifica le espressioni che un utente può utilizzare per eseguire un'azione o fornire informazioni;
  • restituisce un'interpretazione semantica corrispondente come valori semplici (stringhe), coppie attributo-valore (giorno, mese e anno) o oggetti nidificati.

Alcuni attributi dell'elemento <grammar> sono:

version Definisce la versione della grammatica
xml:lang L'identificatore per la lingua di quella grammatica specifica ("fr-CA" per il francese canadese)
mode Definisce la modalità della grammatica seguendo le modalità del SRGS della grammatica per il riconoscimento vocale del W3C
root Definisce la regola radice della grammatica
tag-format Definisce il formato del contenuto dei tag per tutti i tag all'interno della grammatica
xml:base Dichiara l'URI di base da cui vengono risolti gli URI relativi nella grammatica. Questa dichiarazione di base ha la precedenza sulla dichiarazione URI di base <vxml>

Elemento <block>[modifica]

Questo è un elemento del modulo. Ha contenuto eseguibile che viene eseguito se la variabile dell'elemento del modulo del blocco non è definita e l'attributo cond del blocco, se presente, viene valutato come vero.

<block>
* Welcome to Flamingo, your source for lawn ornaments.
</block>

La variabile dell'elemento del modulo viene automaticamente impostata su true appena prima dell'inserimento del blocco. Pertanto, i blocchi vengono in genere eseguiti quando viene chiamato il modulo. A volte potresti aver bisogno di un maggiore controllo sui blocchi. Per fare ciò, è possibile nominare la variabile dell'elemento del modulo e impostarla o deselezionarla per controllare l'esecuzione del <block>. Questa variabile è dichiarata nell'ambito della finestra di dialogo del modulo. Gli attributi di <block> includono:

name Il nome della variabile dell'elemento del modulo utilizzata per tenere traccia dell'idoneità all'esecuzione di questo blocco; il valore predefinito è una variabile interna inaccessibile
expr Il valore iniziale della variabile dell'elemento del modulo; il valore predefinito è ECMAScript non definito
cond Un'espressione che deve essere valutata come vera dopo la conversione in booleana affinché l'elemento del modulo venga visitato

Elemento <prompt>[modifica]

Questo elemento controlla l'uscita del parlato sintetizzato e dell'audio preregistrato. I prompt vengono messi in coda per il gioco e l'interpretazione inizierà quando l'utente fornisce un input. Ecco un esempio di un prompt:

<prompt>Per favore pronuncia il tuo nome</prompt>

Puoi tralasciare <prompt> ... </prompt> se:

  • Non è necessario specificare un attributo prompt (come bargein) e
  • Il prompt è costituito interamente da PCDATA (non contiene markup vocali) o è costituito solo da un elemento <audio> o <valore>.

Ad esempio, questi sono anche prompt:

Per favore, pronuncia il tuo nome.

<audio src="sayname.wav"/>

Ma a volte è necessario utilizzare i tag <prompt> quando si aggiungono markup vocali incorporati, come:

<prompt> Per favore <emphasis>di'</emphasis> la tua città.</prompt>

L'elemento <prompt> ha i seguenti attributi:

Cond Espressione che deve essere valutata come vera dopo la conversione in booleana per poter riprodurre il prompt. L'impostazione predefinita è vera
Count Numero che consente di emettere prompt diversi se l'utente sta facendo qualcosa ripetutamente. Se omesso, il valore predefinito è "1".
Timeout Il timeout che verrà utilizzato per il seguente input utente. Il timeout di noinput predefinito è specifico della piattaforma.
xml:lang La lingua per l'identificativo del prompt
xml:base Dichiara l'URI di base da cui vengono risolti gli URI relativi nel prompt

Collegamenti esterni[modifica]