VXML開發(fā)接口說明V1.0rmd_第1頁(yè)
VXML開發(fā)接口說明V1.0rmd_第2頁(yè)
VXML開發(fā)接口說明V1.0rmd_第3頁(yè)
VXML開發(fā)接口說明V1.0rmd_第4頁(yè)
VXML開發(fā)接口說明V1.0rmd_第5頁(yè)
已閱讀5頁(yè),還剩113頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

./目錄TOC\o"1-3"第1章VoiceXML標(biāo)準(zhǔn)概述1-11.1簡(jiǎn)介1-21.2概念說明1-2VoiceXML與XML的關(guān)系1-2執(zhí)行的原則1-2DialogandSubdialog 1-3Session 1-3Application 1-3語法1-4事件1-4Link 1-41.3VoiceXML基本元素列表1-51.4Document的結(jié)構(gòu)和執(zhí)行1-7第2章VoiceXML標(biāo)準(zhǔn)基本元素功能及使用介紹2-12.1Subdialog 2-22.2Form 2-2Form的解釋2-2FormItem 2-3FormItem的變量和條件2-4引導(dǎo)型Form 2-5混合引導(dǎo)型Form 2-7Form的解釋規(guī)則2-72.3MENU 2-102.4LINK 2-152.5變量和表達(dá)式2-17變量的聲明2-17變量的范圍2-18引用變量2-19標(biāo)準(zhǔn)的session變量2-202.6語法2-21語音語法2-21DTMF語法2-22語法的范圍2-23語法的激活2-242.7事件處理2-25Throw 2-25Catch 2-25快捷元素2-26catch元素的選擇2-27默認(rèn)屬性的catch元素2-27事件類型2-282.8資源的獲取2-30獲取2-30緩存2-312.9<prompt>元素2-33基本的提示音格式2-33語音標(biāo)記2-33音頻提示2-35<value>元素2-36打斷功能2-37選擇放音功能2-37Timeout屬性2-392.10FORMITEM 2-402.11<filled>元素2-422.12<meta>元素2-442.13<property>元素2-462.14PARAM 2-512.15可執(zhí)行內(nèi)容2-54<var>元素2-54<assign>元素2-54<clear>元素2-55<if>元素2-55<prompt>元素2-56<reprompt>元素2-56<goto>元素2-58<submit>元素2-59<exit>元素2-60<return>元素2-61<disconnect>元素2-62<script>元素2-622.16時(shí)間的指定2-66第3章語法3-13.1語音語法3-23.1.1引言3-2定義語法3-7語法編譯3-14自然語言理解3-213.2DTMF語法3-30第4章VoiceIE系統(tǒng)與ICP業(yè)務(wù)接口說明4-14.1VoiceIE語音瀏覽系統(tǒng)結(jié)構(gòu)4-24.2VoiceIE系統(tǒng)對(duì)VoiceXML標(biāo)準(zhǔn)支持的說明4-4VoiceIE系統(tǒng)對(duì)VoiceXML標(biāo)準(zhǔn)的支持4-4VoiceIE系統(tǒng)擴(kuò)展VoiceXML標(biāo)準(zhǔn)OBJECT使用說明4-84.3計(jì)費(fèi)接口說明4-20按點(diǎn)擊次數(shù)計(jì)費(fèi)4-20按流量計(jì)費(fèi)4-21按內(nèi)容計(jì)費(fèi)4-23計(jì)費(fèi)接口補(bǔ)充說明4-244.4鑒權(quán)接口說明4-264.5其他說明4-27語音文件格式要求4-27版本說明4-27附錄縮略語及專用術(shù)語表A-1.VoiceXML標(biāo)準(zhǔn)概述本章目標(biāo)介紹VoiceXML及相關(guān)的一些概念。介紹VoiceXML的一些基本元素。描述VoiceXMLDocument的執(zhí)行規(guī)則。簡(jiǎn)介VoiceXML〔VoiceeXtensibleMarkupLanguage,語音擴(kuò)展標(biāo)識(shí)語言為合成語音,數(shù)字音頻,語音識(shí)別和DTMF〔DualToneMulti-frequency,雙音多頻收號(hào)器鍵輸入,語音紀(jì)錄、電話、多方會(huì)議等提供音頻交互手段。它的主要目標(biāo)是將基于WEB的開發(fā)內(nèi)容移植到IVR〔InteractiveVoiceResponse,交互式聲音應(yīng)答應(yīng)用中。概念說明VoiceXML與XML的關(guān)系XML〔eXtensibleMarkupLanguage,可擴(kuò)展標(biāo)記語言和HTML〔HypertextMarkupLanguage,超文本鏈接標(biāo)識(shí)語言都是由SGML〔StandardGeneralizedMarkupLanguage,標(biāo)準(zhǔn)通用標(biāo)記語言派生而來的。HTML是SGML的一個(gè)實(shí)例,而XML則是SGML的一個(gè)子集;VoiceXML是XML的一個(gè)實(shí)例。XML是一個(gè)可無限擴(kuò)展的標(biāo)記語言,是用來設(shè)計(jì)各種各樣的標(biāo)記語言的準(zhǔn)則,即通常所說的"元語言"—Meta-Language〔即可產(chǎn)生其它語言的語言。VoiceXML是XML在語音方面的一個(gè)實(shí)例。VoiceXML標(biāo)準(zhǔn)必須先遵循XML規(guī)范〔有關(guān)XML規(guī)范請(qǐng)參看相關(guān)資料,本手冊(cè)不予說明。執(zhí)行的原則一個(gè)VoiceXMLdocument〔文檔或同一個(gè)application〔應(yīng)用中的一系列document形成一個(gè)交互式的有限狀態(tài)自動(dòng)機(jī)。用戶任何時(shí)刻只能處于一個(gè)會(huì)話狀態(tài),即處于某一個(gè)dialog。每個(gè)dialog決定下一個(gè)躍遷到的dialog,躍遷時(shí)指定將使用到的URI〔UniformResourceIndicator,統(tǒng)一資源指示,即指出了下面使用那個(gè)document和dialog;如果該URI沒有指定下一個(gè)document,則假定為當(dāng)前document;如果沒有指定下一個(gè)dialog,則假定為document中的第一個(gè)dialog。如果當(dāng)前運(yùn)行完的dialog沒有指定下一個(gè)跳轉(zhuǎn)的目標(biāo),或者其中出現(xiàn)明確要求退出的元素,則終止當(dāng)前的交互。DialogandSubdialogdialogdialog〔對(duì)話有以下兩類:form表示信息的收集輸入。定義了一個(gè)交互接口,通過收集輸入信息為一系列fielditem域項(xiàng)變量賦值。其中每個(gè)field可以指定一個(gè)語法,用以定義該field允許的輸入信息。如果存在form級(jí)別的語法,則它可以對(duì)會(huì)話內(nèi)的field起作用。menu提出下一步作什么樣的選擇。向用戶提交一系列可選項(xiàng),并且下一步的躍遷將基于用戶的選擇。Subdialogsubdialog〔子對(duì)話,類似函數(shù)調(diào)用,它提供了調(diào)用一個(gè)新的交互的機(jī)制,并返回到原來的form。返回時(shí)保存內(nèi)部數(shù)據(jù)、所用語法以及狀態(tài)信息,以供在調(diào)用該subdialog的document中使用。例如可在下列場(chǎng)合使用subdialog:創(chuàng)建一個(gè)要求訪問數(shù)據(jù)庫(kù)的驗(yàn)證片斷。創(chuàng)建一個(gè)在一個(gè)應(yīng)用中被多個(gè)文檔共用的元件。創(chuàng)建一個(gè)在多個(gè)應(yīng)用中可重用的對(duì)話庫(kù)〔libraryofdialogs。Session一個(gè)session的活動(dòng)周期為:開始于:當(dāng)用戶開始和一個(gè)VoiceXML解釋器上下文〔interpretercontext交互時(shí)。繼續(xù)于:當(dāng)獲取和處理document時(shí)。結(jié)束于:當(dāng)用戶、document、或者解釋器上下文要求結(jié)束時(shí)。Application一個(gè)application由一系列共享同一個(gè)rootdocument〔根文檔的document構(gòu)成。在一個(gè)application內(nèi),不管用戶是通過某一個(gè)document進(jìn)行交互,還是從一個(gè)document轉(zhuǎn)換到另一個(gè)document,rootdocument總是處于加載狀態(tài),此時(shí)rootdocument的變量作為application的變量,可以被同一application內(nèi)的document所使用,并且它的語法在整個(gè)application內(nèi)都是保持激活狀態(tài)。只有在用戶切換到本application之外的document時(shí),rootdocument才會(huì)被卸載。語法每一個(gè)dialog聯(lián)系著一個(gè)或多個(gè)語音語法、DTMF語法,在機(jī)器引導(dǎo)〔machinedirected的application中,每個(gè)dialog的語法只有在用戶使用該dialog時(shí),才處于激活狀態(tài);在混合引導(dǎo)〔mixedinitiative的application中,用戶和機(jī)器交互控制下一步做什么;某些dialog會(huì)保持其語法為激活狀態(tài)〔例如監(jiān)聽,即使用戶轉(zhuǎn)換到同一document中的另一個(gè)dialog或同一application的另一個(gè)已加載的document,在這種情況下,如果輸入的用戶語言匹配了另一個(gè)dialog的激活語法,執(zhí)行將轉(zhuǎn)移到該dialog,用戶的語言將被當(dāng)作對(duì)此dialog的操作?;旌弦龑?dǎo)的application增加了語音應(yīng)用的靈活性與處理能力。事件對(duì)于各種的情況,由平臺(tái)拋出事件〔event,如:用戶沒用響應(yīng),請(qǐng)求幫助。當(dāng)VoiceXML文檔有語義錯(cuò)誤時(shí),解釋器也會(huì)拋出事件。事件由catch元素或由它的快捷形式捕捉;一個(gè)事件能產(chǎn)生的每個(gè)元素都可指定catch元素。此外catch元素還可以附加元素"asifbycopy"來繼承。這樣,在任何層次都可以指定共有事件的處理方式,并且這適用于所有較低層。Linklink支持混合引導(dǎo)。如果用戶進(jìn)入link的范圍,link指定的語法就處于激活狀態(tài),一旦用戶輸入匹配了link的語法,控制就轉(zhuǎn)移到link的目標(biāo)URI。link可以被用來拋出事件以跳轉(zhuǎn)到指定的URI目的地。VoiceXML基本元素列表元素功能<assign>給一個(gè)變量賦值<audio>在一個(gè)提示中放音頻片段<block>可執(zhí)行代碼的容器〔container,這些代碼不是交互代碼<break>在輸出中增加暫停的JSML元素<catch>捕捉一個(gè)事件<clear>清除一個(gè)或多個(gè)form變量<choice>定義一個(gè)菜單項(xiàng)目<disconnect>退出一個(gè)session<div>把一些text定義為特殊類的JSML元素<dtmf>定義一個(gè)按鍵文法<enumerate>在一個(gè)菜單中枚舉選擇的縮寫<error>抓獲一個(gè)錯(cuò)誤事件<exit>退出一個(gè)document或者application<else><if>元素中使用<elseif><if>元素中使用<emp>改變語音輸出重音的JSML元素<form>提交信息和收集數(shù)據(jù)的dialog<field>定義一個(gè)form中的field<filled>field被填充完畢后要執(zhí)行的動(dòng)作<goto>到同一個(gè)或另外一個(gè)文件的其它dialog<grammar>定義一個(gè)語音識(shí)別的語法<help>捕捉一個(gè)help事件<if>簡(jiǎn)單的條件邏輯<initial>在form的入口定義初始化邏輯<link>為link中的所有dialog定義一個(gè)轉(zhuǎn)移<menu>定義一個(gè)選擇菜單<nomatch>捕捉一個(gè)nomatch事件<noinput>捕捉一個(gè)noinput事件<option>為<field>域指定一個(gè)option<object>在一個(gè)特定的范圍內(nèi)作用〔例如、講話對(duì)象<param><subdialog>和<object>中的參數(shù)<prompt>向用戶輸出音頻文件語音和TTS〔Text-To-Speech,文本到語音的轉(zhuǎn)化語音<property>控制實(shí)現(xiàn)平臺(tái)參數(shù)的設(shè)置<pros>改變語音輸出的重音和語調(diào)模式的JSML元素<record>記錄一個(gè)音頻采樣<reprompt>當(dāng)再次訪問一個(gè)field,請(qǐng)求播放提示音<return>從subdialog中返回<sayas>修改怎樣拼寫一個(gè)詞或短語的JSML元素<script>指定一塊ECMAscript客戶端的腳本邏輯<subdialog>調(diào)用另一個(gè)dialog,作為當(dāng)前dialog的subdialog<submit>將值提交給文檔服務(wù)器<throw>拋出一個(gè)事件<transfer>把呼叫轉(zhuǎn)移到另外一個(gè)目的地<value>在提示中插入變量值<var>聲明變量<vxml>每個(gè)VoiceXML文件的最高層元素Document的結(jié)構(gòu)和執(zhí)行一個(gè)VoiceXMLdocument由高層的元素dialog組成。有兩種類型的dialog:form和menu。一個(gè)document也可以有<meta>、<var>、<script>、<property>、<catch>、<link>等元素。單個(gè)document內(nèi)的執(zhí)行缺省是從第一個(gè)dialog開始執(zhí)行。當(dāng)前執(zhí)行的dialog決定下一個(gè)要執(zhí)行的dialog。當(dāng)所執(zhí)行的dialog沒有指定下一個(gè)dialog時(shí),就結(jié)束運(yùn)行。含多個(gè)document的application的執(zhí)行通常application是在獨(dú)立的document內(nèi)進(jìn)行的。當(dāng)需要在一個(gè)application里使用多個(gè)document時(shí),應(yīng)選一個(gè)document作為rootdocument,并且在其他document的<vxml>元素里引用它。如圖1-1所示。圖1-1含多個(gè)document的application的執(zhí)行application中的rootdocument一直駐留在內(nèi)存中。通常,可以見到下面的兩種情況:application中的rootdocument〔或者一個(gè)獨(dú)立的document已加載,用戶在執(zhí)行它。application中的rootdocument和其他的document被加載,用戶在執(zhí)行非rootdocument。在含多個(gè)document的application中,rootdocument的變量和語法可以共享,這樣在整個(gè)application中用戶都可以與共同的〔即rootdocument中的form、link,還有menu進(jìn)行交互。值得注意的是在含多個(gè)document的application中,最多只能有兩個(gè)document可以同時(shí)被加載,一個(gè)是正在執(zhí)行的document,另一個(gè)是rootdocument。如果一個(gè)document引用了不存在的rootdocument,或者某個(gè)application的rootdocument引用了另外一個(gè)application的rootdocument,就會(huì)引發(fā)語義錯(cuò)誤事件。.VoiceXML標(biāo)準(zhǔn)基本元素功能及使用介紹本章目標(biāo)簡(jiǎn)單翻譯介紹VoiceXML1.00標(biāo)準(zhǔn)中一些基本元素的功能及應(yīng)用。Subdialog使用subdialog可以減小dialog的復(fù)雜序列,改善程序的結(jié)構(gòu),或者用于生成一個(gè)可重用的組件。調(diào)用subdialog時(shí)增加了新的上下文。被調(diào)用的可以是當(dāng)前document中一個(gè)dialog,也可以是另外的document中的dialog。一個(gè)subdialog的調(diào)用與其語法的有效范圍相關(guān)。Form它是VoiceXMLdocument的關(guān)鍵元件??梢园?lt;1>一組formitem。formitem又分為fielditem和controlitem。其中:fielditem定義fielditem的變量,FIA〔FormInterpretationAlgorithm,form的解釋算法主循環(huán)里要訪問的元素。controlitem幫助控制field的收集信息。<2>聲明non-fielditem變量。<3>事件處理器〔eventhandlers。<4>過程邏輯塊。form的屬性:Id標(biāo)識(shí)form的名稱。Scopeform語法的默認(rèn)范圍。如果默認(rèn)范圍是dialog,則form語法的默認(rèn)范圍僅在form內(nèi)激活;如果默認(rèn)范圍是document,form語法的默認(rèn)范圍在同一document內(nèi)的任一dialog內(nèi)激活;如果默認(rèn)范圍是document,并且該document是rootdocument,則form語法在該application的任一document的內(nèi)的任一dialog內(nèi)激活;如果一個(gè)form的語法標(biāo)明了scope為dialog,則它僅在該form內(nèi)激活。Form的解釋form由內(nèi)含的FIA解釋。FIA循環(huán)重復(fù)地選擇一個(gè)formitem,然后訪問它,這個(gè)被選的formitem是第一個(gè)警戒條件不滿足的formitem。例如,formitem的默認(rèn)警戒條件檢驗(yàn)該formitem的變量是否被賦值,這樣對(duì)于僅有fielditem的簡(jiǎn)單form,用戶將被提示依次處理各fielditem。解釋一個(gè)formitem通常包括以下步驟:選擇并播放一段或多段提示音。收集用戶輸入,或者填充一個(gè)或多個(gè)field,或者拋出各種事件〔如幫助事件。解釋field中最近填充的<filled>動(dòng)作。在遇到控制狀態(tài)轉(zhuǎn)移時(shí),如轉(zhuǎn)換到其他dialog或者document的<goto>,或向服務(wù)器提交數(shù)據(jù)的<submit>,FIA將結(jié)束。當(dāng)遇到暗含的<EXIT>結(jié)束標(biāo)志,如沒有合法的formitem,FIA也將結(jié)束。FormItem一個(gè)form的formitem是指可以被FIA的主循環(huán)訪問到的元素〔element,formitem指引FIA收集特定的field,FIA選擇到的一個(gè)控制item,可能包含一段需要運(yùn)行的程序代碼,或者它將告訴FIA為一個(gè)混合引導(dǎo)型form提供初始化了的提示放音集。FieldItem一個(gè)fielditem指定了一個(gè)fielditem變量,它的值從用戶那里收集。fielditem帶有提示音,以告訴用戶說什么或者按什么鍵,以及定義允許輸入內(nèi)容的語法和處理任何結(jié)果事件的處理器。fielditem也可能帶有一個(gè)<filled>元素,它定義fielditem變量賦值后應(yīng)該做的動(dòng)作。fielditem可以細(xì)分為:<field>通過ASR〔AutomaticSpeechRecognition,自動(dòng)語音識(shí)別或者DTMF語法來賦值的fielditem。<record>內(nèi)容為一段音頻剪輯的fielditem,例如一個(gè)<record>元素可以收集語音郵件。<transfer>該fielditem將用戶的電話轉(zhuǎn)接到另一個(gè)電話上。<transfer>有兩種類型,一種將用戶轉(zhuǎn)過去以后,流程就結(jié)束;另一種<transfer>,將用戶轉(zhuǎn)過去以后,等待其結(jié)束,然后返回控制,這時(shí)field變量的值將被設(shè)置成結(jié)束的狀態(tài),如:busynoanswer;network_busy;Near_end_disconnect;far_end_disconnect;network_disconnect。<object>該fielditem調(diào)用一個(gè)帶有各種變量的平臺(tái)指定的對(duì)象〔其返回值是帶有一個(gè)或多個(gè)屬性的ECMAScript對(duì)象。平臺(tái)指定的對(duì)象可以是一個(gè)用來收集信用卡信息的內(nèi)嵌的對(duì)話,也可以是使用某些專用的DTMF文本輸入法收集的文本信息。說明:<1><object>元素支持調(diào)用一個(gè)帶有各種變量的平臺(tái)指定的對(duì)象,但并不要求應(yīng)用必需提供平臺(tái)指定的對(duì)象。<2>ECMAScript,AstandardversionofJavaScriptbackedbytheEuropeanComputerManufacturer'sAssociation,歐洲計(jì)算機(jī)制造商協(xié)會(huì)所支持的一個(gè)JavaScript的標(biāo)準(zhǔn)版本。<3>JavaScript,Java描述語言。<subdialog><subdialog>大體上就象函數(shù)調(diào)用,它調(diào)用在當(dāng)前頁(yè)的對(duì)話,或者調(diào)用另一個(gè)VoiceXML文檔,結(jié)束時(shí)返回一個(gè)ECMAScript對(duì)象。ControlItem有兩種類型的controlitem:<block>一系列的程序化的聲明,用來提示和計(jì)算,但是不收集輸入。block通常有一個(gè)隱含的formitem,它在被解釋前設(shè)為true。<initial>它用在混合引導(dǎo)型form里控制初始的交互。它提示用戶,使輸入可以匹配form級(jí)的語法。當(dāng)識(shí)別的結(jié)果使至少一個(gè)fielditem的變量被賦值時(shí),<initial>的formitem變量變?yōu)閠rue,然后將它作為一個(gè)可選項(xiàng)移交給FIA。FormItem的變量和條件每個(gè)formitem都對(duì)應(yīng)一個(gè)formitem變量,當(dāng)開始解釋一個(gè)form時(shí),其中的formitem變量都默認(rèn)為未定義的。formitem變量將保存解釋formitem的結(jié)果。每個(gè)fielditem也都對(duì)應(yīng)一個(gè)fielditem變量,它將保存從用戶那里收集來的變量值。formitem變量可以用name屬性起名字。也可以不用名字,這時(shí)會(huì)產(chǎn)生一個(gè)內(nèi)部的名字。每個(gè)formitem都有一個(gè)警戒條件,它決定該formitem在執(zhí)行FIA算法時(shí)是否被訪問。默認(rèn)的警戒條件只是判斷該formitem變量是否有值,如果已經(jīng)有值了,在對(duì)該dialog執(zhí)行FIA算法時(shí),該formitem就不會(huì)被訪問〔執(zhí)行。典型情況是,fielditem有名字而controlitem沒有。通常formitem變量沒有初始值,也不指定附加的警戒條件。在form中可以先將某個(gè)formitem初始化賦值,將它隱藏起來,以后再清空它的值,使它被選中執(zhí)行。另外,field可以在其他field被賦值而它本身沒有被賦值時(shí),將警戒條件激活。block內(nèi)容只有在其條件為true時(shí)才會(huì)執(zhí)行,這樣就可以控制FIA選擇和執(zhí)行了,從而實(shí)現(xiàn)良好的控制。不過實(shí)際上,大多數(shù)的dialog并沒有采用這樣復(fù)雜的控制。簡(jiǎn)單的說,所有的formitem都有下列的屬性:Name對(duì)話范圍內(nèi)的formitem變量的名字。Exprformitem變量的初始值,默認(rèn)值是ECMAScript標(biāo)準(zhǔn)中的undefined。如果有了初始值,該formitem將不會(huì)被FIA選中執(zhí)行,除非它的值被清空。Cond一個(gè)表達(dá)式,用在檢測(cè)formitem變量時(shí)進(jìn)行評(píng)價(jià)。如果沒有此項(xiàng),缺省認(rèn)為是true,或者在<initial>中,用來檢查是否有formitem變量被賦值。引導(dǎo)型Form最簡(jiǎn)單也是最常見的form類型是在應(yīng)用中formitem被按照次序一次執(zhí)行的計(jì)算機(jī)引導(dǎo)型的交互〔acomputer-directedinteraction。<formid="weather-info"><block>Welcometotheweatherinformationservice.</block><fieldname="state"><prompt>Whatstate?</prompt><grammersrc="state.gram"type="application/x-jsgf"/><catchevent="help">Pleasespeakthestateforwhichyouwanttheweather.</catch></field><fieldname="city"><prompt>Whatcity?</prompt><grammersrc="city.gram"type="application/x-jsgf"/><catchevent="help">Pleasespeakthestateforwhichyouwanttheweather.</catch></field><block><submitnext="/servlet/weather"namelist="citystate"/></block></form>對(duì)話將如下進(jìn)行:C<computer>:Welcometotheweathereinformationservice.Whatstate?H<human>:helpC:Pleasespeakthestateforwhichyouwanttheweather?H:GeorgiaC:whatcity?H:TblisiC:didnotunderstandwhatyousaid。whatcity?H:MaconC:TheconditioninMacongeorgiaaresunnyand...field構(gòu)成form的主要成分,一個(gè)field聲明了一個(gè)變量,指定了提示音、識(shí)別的語法、DTMF聲明、幫助信息以及其他的事件處理器。每個(gè)field在form的對(duì)話范圍內(nèi)〔intheform'sdialogscope聲明了一個(gè)VoiceXMLfielditem變量。一旦在form中有用戶的輸入,這些變量被提交,或是拷貝到其它的變量中。每個(gè)field都有自己的語音語法或DTMF語法,或者兩者都有,這是由<grammar>和<dtmf>元素明確指定的,或者用type屬性暗含的。type屬性是用來指定內(nèi)嵌的標(biāo)準(zhǔn)語法,如數(shù)字,布爾量等。type屬性也指明了語音合成器怎樣來讀field的值。每個(gè)field可以擁有一個(gè)或多個(gè)提示音。如果只有一個(gè),它將在用戶沒有輸入時(shí)不斷重復(fù)的提示。如果有幾個(gè),則必須給出count屬性,它將決定每次播放哪個(gè)提示音。<catchevent="help">元素定義了用戶請(qǐng)求幫助時(shí)應(yīng)該如何處理。幫助信息也可以是漸變內(nèi)容,即每次播放的內(nèi)容可以不同。<catchevent="help">可以使用略寫形式,下面的兩個(gè)元素是相等的:<catchevent="help">Pleasesayvisa,mastercard,oramex.</catch><help>Pleasesayvisa,mastercard,oramex.</help><filled>元素定義了前面field被執(zhí)行賦值后做什么事情,它的一種用處是再次完整地檢查語法或其他內(nèi)容?;旌弦龑?dǎo)型Form混合引導(dǎo)型form是指由計(jì)算機(jī)和用戶共同來決定談話,它必須有一個(gè)或多個(gè)<initial>formitem,且必須有一個(gè)或多個(gè)form級(jí)語法〔form-levelgrammar。如果有了form級(jí)語法就會(huì)出現(xiàn):field可以以任意次序執(zhí)行〔不一定按前后排列次序。用戶的一次談話可能會(huì)引起多于一個(gè)的field被執(zhí)行。并且,可以激活不是當(dāng)前dialog的form語法。如果document中有兩個(gè)form,比如說一個(gè)是carrentalform,另一個(gè)是hotelreservationform,并且兩個(gè)form的語法在整個(gè)文檔內(nèi)都激活,則用戶在被提示輸入關(guān)于hotelreservationform內(nèi)的信息時(shí),輸入關(guān)于carrentalform內(nèi)的信息,這樣將引導(dǎo)計(jì)算機(jī)進(jìn)行關(guān)于carrentalform內(nèi)的對(duì)話。用戶可以輸入任何被激活語法可以識(shí)別的內(nèi)容,并且相關(guān)field的賦值流程也會(huì)相應(yīng)執(zhí)行。可以有若干種辦法〔個(gè)性化定制FIA。一種辦法是給formitem變量賦值,這樣該formitem就不會(huì)被FIA選中執(zhí)行,同樣,可以清空formitem變量的值,這樣就引導(dǎo)FIA重新訪問該formitem。另一種辦法是用<gotonextitem>明確的指定下一個(gè)將要訪問的fielditem,這將立即轉(zhuǎn)換到該fielditem,如果在<filled>中出現(xiàn)<gotonextitem>,剩余的<filled>動(dòng)作以及未決的<filled>動(dòng)作將被忽略。Form的解釋規(guī)則下面將討論FIA的實(shí)現(xiàn)細(xì)節(jié)。初始化階段當(dāng)進(jìn)入一個(gè)form時(shí),它將被初始化。內(nèi)部提示計(jì)數(shù)器變量〔在form的對(duì)話范圍內(nèi)被設(shè)置為1,每個(gè)變量〔form級(jí)的<var>元素和formitem變量被初始化:按照document內(nèi)的次序,被置為未定義undefined,或是相對(duì)應(yīng)的表達(dá)式屬性。主循環(huán)FIA的主循環(huán)有三個(gè)階段:選擇階段選擇下一個(gè)訪問的formitem。收集階段訪問下一個(gè)需要用戶輸入的formitem。此item提示用戶輸入,激活相應(yīng)的語法并且等待和收集用戶的輸入〔語音輸入或是DTMF輸入或是事件〔例如幫助請(qǐng)求或是輸入超時(shí)事件。處理階段處理輸入的內(nèi)容,執(zhí)行formitem并運(yùn)行<filled>元素,完成諸如輸入合法性檢查等。由適當(dāng)?shù)氖录幚砥魈幚頀伋龅氖录?。注意:如果控制流程是從別的form的FIA轉(zhuǎn)換過來的,FIA已經(jīng)有了收集到的輸入,這種情況下,FIA主循環(huán)的的第一次執(zhí)行將跳過選擇和收集階段,直接用提供的輸入進(jìn)入處理階段。<1>選擇階段其目標(biāo)是選擇下一個(gè)訪問的formitem。它的執(zhí)行規(guī)則如下:如果上一個(gè)主循環(huán)的處理階段指定了一個(gè)<gotonextitem>,則所指定的formitem被選中,否則,第一個(gè)警戒條件為false的formitem被選中。如果沒有警戒條件為false的formitem,則FIA將執(zhí)行隱含的<exit>操作。<2>收集階段其目的是收集輸入或事件。被選中的formitem被訪問,所執(zhí)行的動(dòng)作由formitem的類型決定:如果訪問的是fielditem,FIA將被訪問fielditem的所有提示音,按其標(biāo)明的次數(shù)以及放音條件進(jìn)行排隊(duì)和選擇。然后監(jiān)聽field級(jí)的語法和所有激活的高級(jí)語法,并等待語法匹配或者某些事件。如果訪問的是<initial>,FIA將被訪問<initial>的所有提示音,按其標(biāo)明的次數(shù)以及放音條件進(jìn)行排隊(duì)和選擇。然后監(jiān)聽form級(jí)的語法和所有激活的高級(jí)語法,并等待語法匹配或者某些事件。如果訪問的是<block>,通過設(shè)置它的formitem變量為true,評(píng)估它的內(nèi)容,然后跳過處理階段。不收集任何輸入,并且執(zhí)行完以后進(jìn)入下一次的FIA主循環(huán)。<3>處理階段其目標(biāo)是處理在收集階段收集的輸入或事件。如下所述:如果事件〔如沒有輸入或用戶掛機(jī)發(fā)生,對(duì)應(yīng)的catch元素將進(jìn)行識(shí)別和處理,這可能造成FIA結(jié)束〔如跳轉(zhuǎn)到另外的dialog或者document,或者執(zhí)行<exit>,或者FIA進(jìn)入下一輪的主循環(huán)〔如執(zhí)行默認(rèn)的幫助事件處理器。如果輸入內(nèi)容匹配了<link>的語法,則將執(zhí)行<link>的跳轉(zhuǎn),或產(chǎn)生相關(guān)事件。如果<link>產(chǎn)生一個(gè)事件,該事件將由當(dāng)前上下文中的formitem處理。如果輸入內(nèi)容匹配了別的form的語法,則FIA將結(jié)束,別的form將初始化,它的FIA將用該輸入內(nèi)容從執(zhí)行處理階段開始執(zhí)行。如果輸入內(nèi)容匹配了本form的語法,則:輸入內(nèi)容的語法匹配值將被賦給相應(yīng)的fielditem變量;<filled>中的動(dòng)作將被一些指定的任務(wù)觸發(fā);每個(gè)<filled>中確定的動(dòng)作將按文檔中的次序執(zhí)行。如果遇到<goto>或<throw>,剩余的<filled>中的動(dòng)作將不再執(zhí)行,并且FIA結(jié)束,或者FIA進(jìn)入下一輪的主循環(huán)。完成處理階段后,FIA又回到選擇階段。MENUmenu是一種便捷的語法快捷形式,它用于在form中提供一個(gè)單獨(dú)的匿名field,以提示用戶進(jìn)行選擇并根據(jù)選擇轉(zhuǎn)換到不同的地方。類似于正常的form,它有自己的語法范圍,即用戶執(zhí)行別的dialog而依然保持激活的范圍。下面的menu向用戶提供了三種選擇:<menu><prompt>Welcomehome.Sayoneof:<enumerate/></prompt><choicenext="http://www.sports.example/vxml/start.vxml">Sports</choice><choicenext="http://www.weather.example/intro.vxml">Weather</choice><choicenext="http://www.stargazer.example/voice/astronews.vxml">Stargazerastrophysicsnews</choice><noinput>Pleasesayoneof<enumerate/></noinput></menu>對(duì)話將如下進(jìn)行:C:Welcomehome.sayoneof:sports;weather;Stargazerastrophysicsnews.H:Astrology.C:Ididnotunderstandwhatyousaid.<aplatform-specificdefaultmessage.>C:Welcomehome.sayoneof:sports;weather;Stargazerastrophysicsnews.H:sports.<menu>元素它用于標(biāo)識(shí)menu,并決定語法的范圍。menu的屬性如下:Id用于標(biāo)識(shí)menu,它可以使menu成為<goto>或<submit>的目標(biāo)。Scopemenu的語法范圍。如果它是dialog〔默認(rèn)的,則menu的語法僅在用戶進(jìn)入到該menu后才激活。如果范圍是document,則menu的語法在整個(gè)document中都是激活的,如果該menu是在application的rootdocument中,則其語法范圍是整個(gè)application。Dtmf如果其設(shè)置為true,任何沒有明確指定DTMF元素的選項(xiàng)被缺省的依次指定為暗含的"1","2"等。<choice>元素<choice>元素用于以下幾種目的:用于指定一個(gè)語音語法片斷,或一個(gè)DTMF語法片斷,或其組合,以用于決定用戶的選擇。用于構(gòu)成一列<enumerate>提示串。它指定選項(xiàng)被選中后將要跳轉(zhuǎn)的目標(biāo)URI。choice的屬性如下所示:Dtmf用于選擇的DTMF次序。Next下一個(gè)dialog或document的URI。Event指定拋出一個(gè)事件而不是指定一個(gè)next。Expr指定一個(gè)expression用于評(píng)估,而不是指定一個(gè)next。Caching參見節(jié)。Fetchaudio參見節(jié)。Fetchhint參見節(jié)。Fetchtimeout參見節(jié)。menu中的DTMFmenu可以只使用語音,或DTMF,也可以通過<menu>包含<property>元素來使用兩者的結(jié)合。下面是一個(gè)僅用DTMF的例子,它用每個(gè)選項(xiàng)的dtmf屬性明確指定了各自的DTMF次序:<menu><propertyname="inputmodes"value="dtmf"/><prompt>Forsportspress1,Forweatherpress2,ForStargazerastrophysicspress3.</prompt><choicedtmf="1"next="http://www.sports.example/vxml/start.vxml"/><choicedtmf="2"next="http://www.weather.example/intro.vxml"/><choicedtmf="3"next="http://www.stargazer.example/voice/astronews.vxml"/></menu>也可以設(shè)置menu的dtmf屬性為true,以對(duì)前9個(gè)選項(xiàng)依次指定DTMF數(shù)字,第一個(gè)選項(xiàng)被指定為"1",其余類推。<menudtmf="true"><propertyname="inputmodes"value="dtmf"/><prompt>Forsportspress1,Forweatherpress2,ForStargazerastrophysicspress3.</prompt><choicenext="http://www.sports.example/vxml/start.vxml"/><choicenext="http://www.weather.example/intro.vxml"/><choicenext="http://www.stargazer.example/voice/astronews.vxml"/></menu>這樣menu的提示將為:C:Welcomehome.Forsports,press1.Forweather,press2.ForStargazerastrophysicsnews,press3.在<field>的提示中可以類似的運(yùn)用<enumerate>元素,以自制一系列可選項(xiàng)。語法的產(chǎn)生任何一個(gè)選擇短語都指定了一系列被監(jiān)聽的詞和短語。用戶可以任意講所被監(jiān)聽的詞和短語中的子集,它們要按先前出現(xiàn)的次序排列。選擇短語是從直接或間接包含在<choice>中的元素中的PCDATA構(gòu)造的。例如,根據(jù)提示:"stargazerastrophysicsnews",用戶可以說"stargazer","astrophysics","stargazernews","astrophysicsnews"等,對(duì)應(yīng)的JSGF〔JavaSpeechGrammarFormat,Java語音語法格式語法將是:"[Stargazer][astrophysics][news]"〔[…]表示可選項(xiàng)。說明:PCDATA與CDATA的區(qū)別:PCDATA是真正意義上的字符串:例如"你好";CDATA是一個(gè)結(jié)構(gòu),例如"<![CDATA[你好]]>",他代表了PCDATA的"你好"。下面是使用<choice>元素子集的PCDATA的例子。<choicenext="http://www.stargazer.example/voice/astronews.vxml"><prompt><audiosrc="http://www.stargazer.example/space.wav">Stargazer<emp>astrophysics</emp>news</audio></prompt></choice>可選項(xiàng)將從音頻文件讀出。如果音頻文件沒有播放,將會(huì)提示"stargazerastrophysicsnews"。對(duì)應(yīng)的語法應(yīng)為"[stargazer][astrophysics][news]",從<choice>元素的子集的PCDATA中收集。解釋模式menu的行為就像一個(gè)完成所有任務(wù)的單獨(dú)field的form,menu的提示音和field的提示音相似,menu的事件處理與field的事件處理相似,menu的語法與form的語法相似。進(jìn)入menu后,其語法加載激活,播放提示。當(dāng)用戶的選擇匹配了可選項(xiàng)時(shí),控制將依照next,expr,或<choice>的事件屬性值轉(zhuǎn)向其中之一,只有其中之一被指定。LINK<link>元素有一個(gè)或多個(gè)語法,其范圍是包含它的元素的范圍。<link>包含的語法并沒有指定范圍,當(dāng)其中一個(gè)語法匹配時(shí),link激活,并且:轉(zhuǎn)換到新的document或dialog〔類似于<goto>。拋出一個(gè)事件〔類似于<throw>。下面的例子中,當(dāng)你說"books"或按"2"時(shí),link激活。<linknext="/books/main.vxml"><grammar>books|VoiceXMLbooks</grammar><dtmf>2</dtmf></link>下面的link給你一個(gè)當(dāng)前document內(nèi)的動(dòng)態(tài)決定的dialog:<linkexpr="‘#’+document.helpstate"><grammar>help</grammar></link><link>可以是<vxml>,<form>的子成員,或者是一個(gè)formitem的子成員。<vxml>級(jí)的link的語法在整個(gè)文檔內(nèi)是激活的。form級(jí)的link的語法在用戶進(jìn)入該form時(shí)激活,如果一個(gè)application的rootdocument有document級(jí)link,則其語法在應(yīng)用的任意地方都是激活的。如果執(zhí)行到了一個(gè)modalformitem,form或document級(jí)的link語法將不激活??梢栽趌ink語法匹配時(shí)拋出一個(gè)事件而不是進(jìn)入另一個(gè)document,這個(gè)事件在當(dāng)前位置上被拋出,而不是指定link的地方。例如下面的例子,當(dāng)用戶的輸入匹配了link語法,幫助事件將在用戶訪問到的地方引發(fā):<linkevent="help"><grammar>arrgh|alasallislost|fieyefrowardmachine|Idon'tgetit</grammar></link><link>的屬性如下:Next指定下面將去的URI,該URI是document〔有可能指定將要執(zhí)行的dialog,或者是當(dāng)前document中的一個(gè)dialog。Expr類似Next,只是其URI是由ECMAScript表達(dá)式的計(jì)算來動(dòng)態(tài)地決定。Event當(dāng)用戶的輸入匹配link語法時(shí)拋出的事件。Caching參見節(jié)。Fetchaudio參見節(jié)。Fetchhint參見節(jié)。Fetchtimeout參見節(jié)。要注意的是,next、expr、event中只能指定一個(gè)。變量和表達(dá)式VoiceXML變量等同于ECMAScript的變量。變量命名規(guī)則也同于ECMAScript中的規(guī)定,但下劃線開頭的詞匯內(nèi)部保留使用。變量的聲明變量由<var>聲明:<varname="home_phone"/><varname="pi"expr=3.14159/><varname="city"expr="'Sacramento'"/>另外也可以由formitem聲明:<fieldname="num_tickets"type="number"><prompt>Howmanyticketsdoyouwishtopurchase?</prompt></field>沒有明確指定初始值的變量在初始化時(shí)將被賦為未定義〔ECMAScriptundefined。變量必須在使用前聲明。在form中,用<var>聲明的與用formitem聲明的變量將在進(jìn)入form時(shí)初始化。初始化是按照文檔中出現(xiàn)的順序進(jìn)行的。所以,下面的例子是合法的:<formid="test"><varname="one"expr="1"/><fieldname="two"expr="one+1"type="number"></field><varname="three"expr="two+1"/><fieldname="go_on"type="boolean"><prompt>Sayyesornotocontinue</prompt></field><filled><gotonext="#tally"/></filled></form>當(dāng)用戶訪問該form時(shí),form初始化第一個(gè)變量one,并將它的值設(shè)為1。然后聲明fielditem變量two,并給它賦值為2。然后初始化邏輯聲明變量three,并給它賦值3。最后FIA進(jìn)入主循環(huán),并開始進(jìn)入go_onfield。變量的范圍變量可以在下列范圍內(nèi)聲明:<1>session適合于在整個(gè)用戶交談期間起作用的只讀變量。它們由解釋程序的上下文來聲明和賦值。VoiceXMLdocument不能聲明新的session變量。<2>application他們由應(yīng)用的根文檔〔application’srootdocument的<vxml>元素的子成員<var>來聲明。當(dāng)應(yīng)用的根文檔開始加載時(shí)對(duì)他們進(jìn)行初始化。在根文檔被加載期間,它們一直存在,并且不僅對(duì)于根文檔而且對(duì)其他加載的葉文檔都是可見的〔即可被訪問。<3>document它們由document的<vxml>元素的子成員<var>來聲明,它們?cè)赿ocument開始加載時(shí)初始化,document加載期間一直存在并僅對(duì)于該document可訪問。<4>dialog每個(gè)dialog〔form或menu都有一個(gè)在用戶訪問該dialog期間內(nèi)存在的范圍〔dialogscope,而且它對(duì)于該dialog的元素都是可見的。dialog變量用form的子成員<var>來聲明,或由內(nèi)部可執(zhí)行內(nèi)容的<var>來聲明〔如<block>內(nèi)容或catch元素內(nèi)容,還可以由formitem元素聲明。<form>的子<var>元素在form第一次被訪問時(shí)初始化,內(nèi)部可執(zhí)行內(nèi)容內(nèi)置的<var>變量在內(nèi)部可執(zhí)行內(nèi)容被執(zhí)行時(shí)初始化。formitem變量在formitem被收集時(shí)初始化。<5>annoymous〔匿名的<block>、<filled>,以及catch元素定義了一個(gè)新的匿名的范圍,以容納這些元素聲明的變量。下面的圖顯示了范圍的繼承關(guān)系:圖2-1范圍的層次圖2-1中曲線箭頭標(biāo)明每個(gè)范圍容納的與范圍同名的變量,這樣就可以,比如說在匿名的dialog和document范圍內(nèi)這樣引用變量x:在document范圍內(nèi)使用document.X。引用變量變量在cond和expr屬性里被引用。如:<ifcond="city=='LA'"><assignname="city"expr="'LosAngeles'"/><elseifcond="city=='Philly'"/><assignname="city"expr="'Philadelphia'"/><elseifcond="city=='Constantinople'"/><assignname="city"expr="'Istanbul'"/></if><assignname="var1"expr="var1+1"/><ifcond="i>1"><assignname="i"expr="i-1"/></if>cond和expr所用的表達(dá)式語言就是ECMAScript的語言。變量引用匹配最里層的范圍〔在如上所示的范圍鏈中。為了明確,你可以在變量前加上前綴。例如,將formfielditem變量的值賦給最近使用的document:<assignname="document.ssn"expr="dialog.ssn"/>如果應(yīng)用的根文檔有一個(gè)變量x,它可以在非根文檔里用application.x的方式引用,在根文檔里可以用application.x或document.x的形式引用。標(biāo)準(zhǔn)的session變量Session.telephone.ani自動(dòng)號(hào)碼識(shí)別〔主叫號(hào)碼識(shí)別,該變量提供自動(dòng)號(hào)碼識(shí)別服務(wù)的結(jié)果,自動(dòng)號(hào)碼識(shí)別服務(wù)用電話號(hào)碼的形式向電話呼叫的接收者提供來電號(hào)碼。該信息僅在有此項(xiàng)服務(wù)的情況下提供,否則,將是Undefined。Session.telephone.dnis被叫號(hào)碼識(shí)別,該變量提供被叫號(hào)碼識(shí)別服務(wù)的結(jié)果,被叫號(hào)碼識(shí)別服務(wù)為接收者識(shí)別呼叫者所撥的號(hào)碼。該信息僅在有此項(xiàng)服務(wù)的情況下提供,否則,將是Undefined。信息指示數(shù)字。該變量提供一些有關(guān)主叫方的信息。該信息僅在有此項(xiàng)服務(wù)的情況下提供。Session.telephone.uui用戶到用戶的信息。該變量提供一個(gè)ISDN呼叫建立時(shí)主叫方的補(bǔ)充信息。該信息僅在有此項(xiàng)服務(wù)的情況下提供。語法語音語法<grammar>元素通常提供語音語法,用以:指定一系列用戶想提供信息或完成一項(xiàng)動(dòng)作時(shí)的說話方式。提供相應(yīng)的字符串〔對(duì)于field語法,或一系列屬性——值對(duì)〔對(duì)于form語法,以描述信息或行為。<grammar>元素可以被設(shè)計(jì)成兼容上述兩個(gè)條件的任意語法格式。現(xiàn)在VoiceXML沒有指定一種語法格式,也沒有要求支持特別的語法格式。這一點(diǎn)和VoiceXML的音頻記錄格式類似,也類于HTML的通用媒體格式。語音語法的引用<grammar>元素通??梢灾付▋?nèi)嵌語法或外部語法。<1>內(nèi)嵌語法由<grammar>元素的內(nèi)容指定。<2>外部語法由form的元素指定。語音語法的屬性<grammar>包含的屬性:Src如果語法是外部的,其URI指定了語法的位置。Scope其范圍或者是document,以使語法在當(dāng)前document〔包括相關(guān)的application的頁(yè)級(jí)document的所有dialog里被激活;或者是dialog,語法在整個(gè)form內(nèi)激活。該項(xiàng)如果省略,語法范圍由其父元素決定。Type語法的MIME類型。說明:華為VoiceIE僅支持Nuance格式的語音語法,建議不使用type="mime-type",type="application/x-jsgf"。Caching參見節(jié)。Fetchhint參見節(jié)。Fetchtimeout參見節(jié)。DTMF語法<dtmf>元素通常定義DTMF語法,用以:定義一系列按鍵,使用戶可以執(zhí)行一定的行動(dòng)或提供信息。定義描述行動(dòng)或信息的對(duì)應(yīng)的字符串。<dtmf>元素可以被設(shè)計(jì)成兼容上述兩個(gè)條件的任意語法格式?,F(xiàn)在VoiceXML沒有指定一種語法格式,也沒有要求支持特別的語法格式。這一點(diǎn)和<grammar>類似。DTMF語法的引用<dtmf>的特性和<grammar>類似。<dtmf>元素同樣可以指定內(nèi)嵌語法或外部語法。<1>外部語法<dtmf>元素可以引用外部語法:<dtmfsrc="URI"type="mime-type"/><2>內(nèi)嵌語法<dtmf>元素可以引用外部語法:<dtmftype="mime-type"><!--inlinedtmfgrammar--></dtmf>DTMF語法的屬性Src如果語法是外部的,其URI指定了語法的位置。Scope其范圍或者是document,以使語法在當(dāng)前document〔包括相關(guān)的application的頁(yè)級(jí)document的所有dialog里被激活;或者是dialog,語法在整個(gè)form內(nèi)激活。該項(xiàng)如果省略,語法范圍由其父元素決定。Type語法的MIME類型。Caching參見節(jié)。Fetchhint。參見節(jié)。Fetchtimeout參見節(jié)。語法的范圍<1>field語法的范圍field語法的范圍總是其自身的范圍,即僅在解釋器訪問該field時(shí),其語法才激活。field的語法不能指定一個(gè)范圍。<2>link的語法范圍link的語法范圍是包含link元素的范圍,所以如果在應(yīng)用的根文檔里定義了link,它的語法范圍將是整個(gè)應(yīng)用。link里包含的語法不能指定一個(gè)范圍。<3>form語法范圍form語法默認(rèn)是dialog的范圍。所以,僅當(dāng)用戶訪問該form時(shí)才激活。如果該語法給定的范圍是document,則在整個(gè)document內(nèi)語法都是激活的。如果它是給定了范圍是document的語法,并且該document是根文檔,則在整個(gè)應(yīng)用內(nèi)語法都是激活的。要指定form語法范圍為文檔,或者在form元素的scope屬性里指定,或者在grammar元素里指定scope屬性。如果兩處都指定了,以grammar元素里指定的為準(zhǔn)。<4>menu語法范圍menu語法同樣默認(rèn)是dialog的范圍,僅當(dāng)用戶訪問該menu時(shí)才激活。如果該語法給定的范圍是document,則在整個(gè)document內(nèi)語法都是激活的,并且,若該document是應(yīng)用的根文檔〔applicationrootdocument,則在整個(gè)應(yīng)用內(nèi)語法都是激活的。menu內(nèi)選項(xiàng)〔choice的語法不可以指定范圍。有時(shí)form需要某些語法在整個(gè)document內(nèi)激活,而另外的語法僅在自身form范圍內(nèi)激活,這樣做的目的是將語法重疊的問題減少到最小。要實(shí)現(xiàn)這點(diǎn),當(dāng)每個(gè)獨(dú)立的<grammar>和<dtmf>元素的使用范圍與form元素自身的不同時(shí),都指定自己的使用范圍。<formscope="document"><grammar>?</grammar><grammarscope="dialog">?</grammar></form>語法的激活當(dāng)解釋器在等待用戶的輸入以作為被訪問field的值時(shí),下列語法將激活:該field的語法,包括field中的link包含的語法。其所在的form的語法,包括form內(nèi)包含的link語法。document中包含的link語法,以及document中具有整個(gè)document范圍的menu的語法和其他的form語法。應(yīng)用根文檔〔applictionrootdocument中包含的Link的語法,以及根文檔中給與了整個(gè)document范圍的menu和form的語法。當(dāng)輸入匹配了多個(gè)激活語法時(shí),上面的列表定義了優(yōu)先級(jí)。如果輸入匹配了多個(gè)同一優(yōu)先級(jí)的激活語法時(shí),按照〔document文檔次序決定優(yōu)先級(jí)。menu對(duì)待語法的方式與form相同。如果form是模式的〔modal,如它的模式屬性設(shè)為true,除了它自身的語法以外,在等待輸入時(shí)都將關(guān)閉。如果輸入匹配的是別的form或menu的語法而不是當(dāng)前的form,控制將離開當(dāng)前的form,轉(zhuǎn)移到匹配的form,所有當(dāng)前form的數(shù)據(jù)都會(huì)丟失。事件處理當(dāng)在用戶沒有反應(yīng)、輸入沒法理解、請(qǐng)求幫助等情況時(shí),平臺(tái)將拋出事件。當(dāng)解釋器在VoiceXML中發(fā)現(xiàn)語義錯(cuò)誤時(shí),或遇到<throw>元素時(shí)會(huì)拋出事件。用特征字符來標(biāo)識(shí)事件。每個(gè)可以引發(fā)事件的元素都有一系列catch元素,包括:<catch><error><help><noinput><nomatch>如果有必要,元素可以從它的祖先元素那里繼承catch元素。例如,某個(gè)field不包含處理的nomatch的catch元素,但是它的form有,則就會(huì)使用該form的catch元素。通用的事件處理器可以指定為任意一級(jí),并且它可以對(duì)所有其子孫元素有效。Throw<throw>元素拋出一個(gè)事件,它可以是預(yù)定義的事件:<throwevent="nomatch"/><throwevent="telephone.disconnect.hangup"/>或者是由應(yīng)用定義的事件:al.machine"/><throw>的屬性為:Event,它就是被拋出的事件。Catchcatch元素將捕捉事件和某個(gè)document,dialog或formitem關(guān)聯(lián)。它包含了可執(zhí)行的內(nèi)容。<formid="launch_missiles"><fieldname="password"><prompt>Whatisthecodeword?</prompt><grammar>rutabaga</grammar><help>Itisthenameofanobscurevegetable.</help><catchevent="nomatchnoinput"count="3"><prompt>Securityviolation!</prompt><submitnext="apprehend_felon"namelist="user_id"/></catch></field><block><gotonext="#get_city"/></block></form>catch元素的屬性有:Event捕捉的事件。Count事件發(fā)生的次數(shù),使用該count,可以針對(duì)不同次出現(xiàn)的同一事件采取不同的處理。當(dāng)各formitem和menu被訪問時(shí),它們各自維護(hù)一個(gè)計(jì)數(shù)器以記錄每次事件的發(fā)生。當(dāng)Formitem和menu重新進(jìn)入時(shí),它們的計(jì)數(shù)器將重新復(fù)位。Cond它是一個(gè)可選項(xiàng),用于測(cè)試事件是否要被捕獲處理,默認(rèn)是true??旖菰?lt;error>,<help>,<noinput>,以及<nomatch>是非常通用的<catch>元素的快捷形式。<error>是<catchevent="error">的快捷形式,將捕捉所有類型的錯(cuò)誤:<error>Anerrorhasoccurred--pleasecallagainlater.<exit/></error><help>是<catchevent="help">的快捷形式:<help>Nohelpisavailable.</help><noinput>是<catchevent="noinput">的快捷形式:<noinput>Ididn'thearanything,pleasetryagain.</noinput><nomatch>是<catchevent="nomatch">的快捷形式:<nomatch>Iheardsomething,butitwasn'taknowncity.</nomatch>這些元素的屬性有:Count事件發(fā)生的次數(shù)〔同catch元素。Cond它是一個(gè)可選項(xiàng),用于測(cè)試事件是否要被捕獲處理。默認(rèn)是true〔同catch元素。catch元素的選擇如果有必要,元素可以從它的祖先元素那里繼承catch元素。當(dāng)一個(gè)事件拋出后,發(fā)生事件的范圍和包含它的范圍都會(huì)被檢查,以選擇最佳的catch元素。檢查按如下的邏輯:<1>構(gòu)造一個(gè)按序排列的catch元素列表,它包含由在所有發(fā)生事件的范圍和包含它的范圍〔formitem,form,document,applicationrootdocument,interpretercontext內(nèi)的catch元素。按范圍排序,從當(dāng)前范圍開始,然后是按文檔次序逐層向外。<2>去掉排列表中事件名稱和該事件不匹配的catch元素,包括那些cond評(píng)估不通過的。<3>找到"正確的事件次數(shù)":在隊(duì)列中所有catch元素的次數(shù)屬性低于或等于當(dāng)前事件次數(shù),次數(shù)屬性最高的那個(gè)catch元素。<4>選擇隊(duì)列中的第一個(gè)帶有"正確的事件次數(shù)"的catch。被拋出的事件的名稱要求和catch元素的處理事件名稱匹配,或者是精確匹配,或者是前綴匹配。當(dāng)catch元素事件屬性有一個(gè)有共有前綴的事件。例如:<catchevent="telephone.disconnect">將和事件Telephone.disconnect.transfer前綴匹配。默認(rèn)屬性的catch元素在沒有明確地指定關(guān)于noinput,help,nomatch,cancel,exit,及error事件的處理器,將由解釋器提供默認(rèn)的處理器,如表2-1所示。設(shè)計(jì)系統(tǒng)默認(rèn)的處理各種事件與錯(cuò)誤的處理器,概括來說有以下兩點(diǎn):指定是否提供有語音反饋。怎樣影響執(zhí)行情況。注意:提供語音反饋時(shí),具體的內(nèi)容由平臺(tái)決定。表2-1部分事件的默認(rèn)處理EventTypeAudioProvidedActionCancelnoDon’trepromptErroryesExitinterpreterExitnoExitinterpreterHelpyesRepromptNoinputnoRepromptNomatchyesRepromptTelephone.disconncetnoExitinterpreterAllothersYesExitinterpreter特定的平臺(tái)和場(chǎng)所對(duì)默認(rèn)的事件處理可能有所不同。事件類型事件可以分為預(yù)定義的事件和應(yīng)用中定義的事件。事件同樣也可分為普通事件〔正常情況下發(fā)生和錯(cuò)誤事件〔異常情況下產(chǎn)生。預(yù)定義事件有:Cancel用戶請(qǐng)求取消當(dāng)前播放的提示音用戶掛機(jī)用戶被轉(zhuǎn)移到其他的電話上并且不再返回〔原流程Exit用戶請(qǐng)求退出Help用戶請(qǐng)求幫助Noinput用戶在timeout時(shí)間內(nèi),沒有輸入反應(yīng)Nomatch用戶的輸入無法識(shí)別預(yù)定義的錯(cuò)誤有:Error.badfetch失敗的獲取。比如遇到:缺少文檔、錯(cuò)誤的URI、獲取過程中的通信故障、超時(shí)、侵犯安全,或者是錯(cuò)誤格式的文檔。Error.semantic語義錯(cuò)誤,在解釋VoiceXML時(shí)發(fā)生的運(yùn)行錯(cuò)誤,例如,除零、截短字符串邊界錯(cuò),或引用沒定義的變量。Error.noauthorization用戶沒有執(zhí)行其操作請(qǐng)求的權(quán)限〔如撥打錯(cuò)誤的電話號(hào)碼或用戶嘗試做被禁止操作。Error.unsupported.format不支持的格式。平臺(tái)不支持所請(qǐng)求的資源的格式。如不支持的語法文件格式、音頻文件格式對(duì)象格式或MIME格式。不支持的元素。平臺(tái)不支持所給的元素的格式。如有的平臺(tái)不支持<record>,則遇到它時(shí)就會(huì)引起,這就可以使用事件處理器以實(shí)現(xiàn)對(duì)不同平臺(tái)的兼容。應(yīng)用指定的錯(cuò)誤格式應(yīng)遵循下面的格式::不允許獲取私人的簡(jiǎn)介信息: 文檔試圖獲取受限的資源catch元素可以捕捉到指定的事件〔cancel,或者它們都可以用前綴匹配捕捉到。資源的獲取獲取在對(duì)VoiceXML流程的解釋過程中,發(fā)生的從URL〔UniformResourceLocator,統(tǒng)一資源位置中獲取的內(nèi)容用于:獲取VoiceXML文檔。獲取其他文檔類型,如:音頻文檔、對(duì)象、語法、腳本等。所有在VoiceXML解釋過程中發(fā)生的獲取內(nèi)容過程由下面的三個(gè)屬性控制:<1>Caching可以在安全獲取方式下,直接獲取最新版本的內(nèi)容;或者在快速獲取方式下獲取沒有過期的緩存內(nèi)容。如果沒有指定,則內(nèi)部產(chǎn)生的值將使用緩存。<2>Fetchtimeout等待獲取內(nèi)容的事件期限,超出此期限則拋出錯(cuò)誤獲取事件error.badfetchevent,如果不指定,則使用內(nèi)部產(chǎn)生的fetchtimeout特性。<3>Fetchhint定義什么時(shí)候解釋器需要繼續(xù)從服務(wù)器上獲取內(nèi)容。一種情況是預(yù)獲取指示,指示當(dāng)服務(wù)器上有新文件加載時(shí)何時(shí)預(yù)獲取,而不是在需要時(shí)才獲取。另一種情況是獲取非常大的文件〔意味著很長(zhǎng)的時(shí)間,或下載音頻文件流時(shí),作流指示,指示解釋器在什么時(shí)候開始處理,而不必等到全部到達(dá)后才處理。如果不指定,則使用內(nèi)部產(chǎn)生的fetchhint特性。當(dāng)從URI上獲取內(nèi)容時(shí),caching屬性決定它是否在緩存中,fetchtimeout屬性決定花多長(zhǎng)時(shí)間來等待下載內(nèi)容〔從需要資源開始,fetchhint屬性決定什么時(shí)候獲取內(nèi)容。在下一個(gè)section將會(huì)做更詳細(xì)的解釋。通過指示什么時(shí)候可以獲取內(nèi)容,fetchhint特性通??梢詭椭忉屍魈岣咝阅?。盡管并不一定要求解釋器在獲取文檔時(shí)遵循安全獲取設(shè)定,但不管怎么說,任何一個(gè)在預(yù)獲取和流設(shè)置中有管理能力的解釋器,必須同樣能在遵循安全獲取設(shè)定的情況下運(yùn)行。當(dāng)通過<subdialog>,<goto>,<submit>,<link>或<choice>元素,從一個(gè)文檔轉(zhuǎn)到另一個(gè)文檔時(shí),有一些其它的規(guī)則來約束解釋器的行為。如果引用的URI是一個(gè)文檔〔例如"doc#dialog"或請(qǐng)求提供數(shù)據(jù)〔通過POST或GET,則將要獲取一個(gè)新的文檔〔或者在緩存里或者在服務(wù)器上。當(dāng)獲取到文檔后,就開始它的初始化階段〔如有必要的話,獲取并初始化一個(gè)新應(yīng)用的根文檔,初始化文檔變量,執(zhí)行文檔腳本。所請(qǐng)求的dialog〔如果沒有指定,將是文檔的第一個(gè)dialog將會(huì)隨后初始化并從dialog的開始處執(zhí)行。如果引用的URI僅是一個(gè)片斷〔如"#dialog",則不用獲取文檔,也不用執(zhí)行初始化。被請(qǐng)求的dialog將象前面的一樣處理。獲取VoiceXMLdocuments也支持Fetchaudio特性:Fetchaudio,在獲取音頻剪輯時(shí)可以同時(shí)播放。如果沒有指定,缺省將使用該特性。如果不用該特性,則在獲取時(shí)不會(huì)播放。Fetchaudio特性在獲取下一個(gè)文檔有顯著延時(shí)的情況下,對(duì)于改善用戶長(zhǎng)時(shí)等待很有幫助。它可以用于播放背景音樂,或一系列公告。在文檔重新獲得時(shí),如果音頻文件正在播放,則它將被打斷。緩存在獲取文檔和其他資源的時(shí)候,VoiceXML解釋器就象HTML瀏覽器一樣可以運(yùn)用緩存caching技術(shù)來提高性能。VoiceXML解釋器處理音頻記錄〔可能很龐大就象HTML瀏覽器處理圖片一樣。對(duì)于可視的瀏覽器,當(dāng)緩存中內(nèi)容陳舊的時(shí)候,通??梢酝ㄟ^終端用戶來控制更新,但這種方法對(duì)于VoiceXML解釋器來說卻不可以,因?yàn)樗鄙俳K端用戶的控制。不過VoiceXML解釋器可以運(yùn)用適當(dāng)?shù)氖褂镁彺娌呗?來判斷并強(qiáng)制緩存刷新。缺省使用的VoiceXML解釋器的緩存策略和通常在HTML瀏覽器中運(yùn)用的一樣:如果緩存中通過URI引用的文檔沒有過期,那就使用緩存中的拷貝。如果緩存中的通過URI引用的文檔已經(jīng)過期或不存在,那就從服務(wù)器上獲取。注意:對(duì)緩存中過期的文檔采取"只獲取改變了的"〔"getifmodified"的辦法是最優(yōu)的。這種緩存策略是速度最快的。但

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論