• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            鐵觀音

            C++編程寶典

               ::  ::  ::  ::  :: 管理 ::
              1 隨筆 :: 19 文章 :: 0 評論 :: 0 Trackbacks
            第五章??Control flow and scripting
            ?
            第一節 Variables and Expressions ?
            ?
            ????VoiceXML變量和ECMAScript變量是完全等同的:它們在同一個變量空間。VoiceXML變量可在<scrpit>元素中使用,就像<scrpit>元素中定義的變量可在VoiceXML中使用一樣。使用<var>元素聲明一個變量和在<scrpit>元素中用var語句聲明的變量效果是等同的。<scrpit>元素可出現在任何<var>元素能夠出現的地方。Form item也可以聲明VoiceXML變量。
            ????VoiceXML中變量的命名規則與在ECMAScript中一樣,但是以下劃線“_”開頭或以美元符號"$"結尾命名的變量被保留用于內部使用。VoiceXML變量,包括form item變量,一定不能包含ECMAScript的保留字。在有關的正確性上必須遵循ECMAScript的規則。例如,變量名必須是唯一的,且聲明變量一定不能夠包括點號――“var x.y”在ECMAScript中是非法的聲明。如果變量名和命名規則或ECMAScript規則沖突,拋出‘error.semantic’事件。
            ?
            一、Declaring Variables
            ????變量聲明使用<var>元素:
                   <var name="home_phone"/>
                   <var name="pi" expr="3.14159"/>
                   <var name="city" expr="'Sacramento'"/> 
            ????form item也可以聲明變量:
                   <field name="num_tickets">
                     <grammar type="application/srgs+xml" src="/grammars/number.grxml"/>
                     <prompt>How many tickets do you wish to purchase?</prompt> 
                   </field>
            ????如果已聲明的變量沒有顯式的給定初始值,則該變量的默認值為ECMAScript的undefined。不管在VoiceXML中還是在ECMAScript中,變量在使用之前都要聲明。使用沒有聲明的變量會導致一個ECMAScript錯誤,并拋出error.semantic事件。<scrpit>元素中使用var語句聲明的變量可在VoiceXML中使用,就像VoiceXML變量可在<scrpit>元素中使用一樣。
            ????在form中,變量由<var>元素聲明,那些由form item聲明的變量在FIA進入該form item時被初始化。初始化是按照文檔順序進行的。例如,下面的例子是合法的:
                  <?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="one" expr="1"/>
                       <field name="two" expr="one+1">
                          <grammar type="application/srgs+xml" src="/grammars/number.grxml"/>
                       </field>
                       <var name="three" expr="two+1"/>
                       <field name="go_on" type="boolean">
                          <prompt>Say yes or no to continue</prompt>
                       </field>
                    </form>
                  </vxml>
            ????當用戶訪問該<form>元素時,該form的初始化首先聲明變量one,并把它的值置為1。然后聲明field變量two,并把它的值置為2。接著聲明變量three,并把它的值置為3。最后FIA進入解釋的主循環,從<field>元素go_on開始。
            ?
            二、Variable Scopes
            ????VoiceXML使用ECMAScript作用域鏈,允許在應用的不同層次中聲明變量。例如,在文檔的作用域中聲明的變量在該文檔的任何地方都可以引用。而在<catch>元素中聲明的本地變量只能在該<catch>元素中被引用。為了保護各個作用域變量的語義,所有的ECMAScript變量都要聲明。使用沒有聲明的變量會導致一個ECMAScript錯誤,并拋出error.semantic事件。
            ????變量有如下幾個作用域:
            session 這是一些只讀的變量,在整個用戶會話期間都是可用的。它們由解釋器環境聲明并設置。在VoiceXML文檔中不能再聲明新的session變量。見5.1.4節。
            application 這是一些由<var>元素和<script>元素聲明的變量,且<var>元素和<script>元素都是應用根文檔的<vxml>元素的子元素。這些變量在加載應用根文檔時被初始化。在應用根文檔被加期間,這些變量都是存在的,且在應用根文檔和應用葉文檔中都可以訪問它們。注意,當在應用根文檔中執行時,document.x和application.x是等價的。
            document 這是一些由<var>元素和<script>元素聲明的變量,且該<var>元素和<script>元素都是該文檔的<vxml>元素的子元素。這些變量在加載文檔時被初始化。在文檔被加期間,這些變量都是存在的,且只能在該文檔中訪問它們。除非該文檔是應用根文檔,在這種情況下,在應用根文檔和應用葉文檔中都可以訪問它們。
            dialog 每個dialog(<form>元素或<menu>元素)都有一個dialog作用域,當用戶訪問該dialog時,該作用域才存在。Dialog變量是由<var>元素和<script>元素聲明的變量,且該<var>元素和<script>元素都是<form>元素或<menu>元素的子元素;Dialog變量也可以是由各種form item聲明的變量。<form>元素的<var>子元素和<script>子元素在該<form>元素被首次訪問時初始化。<var>元素里面的可執行內容在執行可執行內容時被初始化。Form item變量在該form item被選定時初始化。
            (anonymous) 每個<block>元素,<filled>元素,和<catch>元素定義了一個新的anonymous作用域。在這些元素中聲明的變量的作用域即為anonymous 。它們只能在相應的<block>元素,<filled>元素,或<catch>元素中被引用。
            表39:變量的作用域
            ????下面的圖表就是作用域層次:
            圖11: 作用域層次
            ????在上面的圖中,彎曲的箭頭表示每個作用域都包含了一個和該作用域名稱一樣的預定義的變量,該變量引用的是作用域本身。例如,在anonymous, dialog, 和document作用域內可以使用document.x引用該文檔中作用域為document的變量x。另外一個例子,例如,<field>元素的變量作用域為anonymous,它只能在該<field>元素中使用,它上一級的變量作用域為該<field>元素所在的<form>元素內,即dialog。
            ????我們不推薦使用“session”,“application”,“document”和 “dialog”作為變量名或form item名。雖然它們不是保留字,但是由于VoiveXML使用的是ECMAScript的作用域規則,使用這些詞作為變量名的話,會覆蓋同名的預定義變量。
            ?
            三、Referencing Variables
            ????變量可以在屬性cond和expr中使用:
                   <if cond="city == 'LA'">
                     <assign name="city" expr="'Los Angeles'"/>
                   <elseif cond="city == 'Philly'"/>
                     <assign name="city" expr="'Philadelphia'"/>
                   <elseif cond="city =='Constantinople'"/>
                     <assign name="city" expr="'Istanbul'"/>
                   </if>
            										
                   <assign name="var1" expr="var1 + 1"/>
            										
                   <if cond="i > 1">
                     <assign name="i" expr="i-1"/>
                   </if>
            ????在屬性cond和expr中使用的表達式的語言正是ECMAScript。注意,屬性cond中的操作符“<”,“<=”和“&&”必須使用XML的轉義字符(如“<”,等等)。
            ????根據上述的變量作用域鏈,變量引用將匹配離其最近的包含它的作用域。你可以為變量引用加上前綴,前綴名即為作用域名,這樣變量引用將變得很明確。例如,保存一個field item變量為document變量,以被以后使用:
                   <assign name="document.ssn" expr="dialog.ssn"/>
            ????如果應用根文檔有一個變量x,則它可在非根文檔中使用application.x引用該變量,而在該應用根文檔中則可使用application.x或document.x引用該變量。如果該文檔有一個變量x,且沒有指定屬性application,則在該文檔中可使用application.x或document.x引用該變量。
            ?
            四、Standard Session Variables
            ????session.connection.local.uri
            ????該變量的值是一個執行本地解釋器環境設備的URI。
            ????session.connection.remote.uri
            ????該變量的值是一個指向遠程主叫設備的URI。
            ????session.connection.protocol.name
            ????該變量的值為連接協議的名稱,也可以通過該名稱的子對象名獲得該協議中特定的信息。例如,如果鏈接協議名為“q931”,則session.connection.protocol.q931.uui可能指定了該連接的user-to-user information的屬性值。
            ????session.connection.protocol.version
            ????該變量的值為連接協議的版本號。
            ????session.connection.redirect
            ????該變量是一個數組,內含連接重定向的路徑。第一個元素是原來的被叫號碼,最后一個元素是最后重定向的號碼。該數組中的每個元素都包含了URI,pi(presentation information), si(screening information)和reason屬性。Reason的屬性值可以是“unknown”,“user busy”,“no reply”,“deflection during alerting”,“deflection immediate response”,“mobile subscriber not reachable”。
            ????session.connection.aai
            ????該變量的值為連接建立時傳遞的application-to-application information信息。
            ????session.connection.originator
            ????該變量的值為該連接的local或remote屬性值,例如,如果是remote部分初始化該連接,則下面的ECMAScript將返回true:var caller_initiate = connection.originator == connection.remote。
            ?
            五、Standard Application Variables
            ????application.lastresult$
            ????該變量保存了該應用中最后一次識別的信息。它是一個數組,每個元素通過下面的變量表示一個可能的結果:
            ??????application.lastresult$[i].confidence
            ????該變量表示,這次解釋中整個utterance的confidence級別。取值的范圍為0.0-1.0。0.0表示最低的condence,1.0表示最高的confidence。對confidence的值的解釋是依賴于平臺的。
            ????application.lastresult$[i].utterance
            ????該變量表示,這次解釋被識別的詞的原始字符串。確切的標記和拼寫是依賴于平臺的(如“five hundred thirty”或者“5 hundred 30”或者“530”)。在DTMF的情況下,該變量包含的是匹配的數字的字符串。
            ????application.lastresult$[i].inputmode
            ????該變量表示,在這次解釋中用戶使用的輸入方式,值為dtmf或voice。
            ????application.lastresult$[i].interpretation
            ????該ECMAScript變量包含了這次識別的語義解釋,如3.1.5節中描述的。
            ????語義的解釋根據confidence的分數由高到低排序,若confidence的分數一樣,則根據產生該解釋的語法中的優先權(見3.1.4節)進一步排序。在變量application.lastresult$中,不同元素的utterance和interpretation一般都不一樣,或者兩者都不一樣。
            ????變量application.lastresult$中元素的數量總是大于或等于1,且小于或等于系統的“maxnbest” property值。如果系統沒有產生任何結果,則“application.lastresult$”的值應該為ECMAScript的undefined。
            ????另外,直接引用application.lastresult$的屬性confidence, utterance, inputmode, 和 interpretation等價于引用該數組中第一個元素的屬性(如application.lastresult$.confidence = application.lastresult$[0].confidence)。
            ????上述的影子變量在每次識別后馬上被賦值,在這種情況下,<nomatch>事件也是作為識別的結果的,且它會導致application.lastresult$被賦值,即使<nomatch>事件沒有影響到原有的field變量的值。相反,<noinput>事件不會改變application.lastresult$的值。一旦application.lastresult$被賦值后,它的值會一直保持不變(除非被該應用更改了),直到瀏覽器進入下一次的等待狀態才被置為undefined。類似于加載應用根文檔時,變量被置為undefined一樣。變量application.lastresult$和它的屬性都是可寫的,可被應用更改。
            ????下面的例子表明了,怎樣在field級別的<catch>元素中使用application.lastresult$變量訪問<link>元素中的語法的識別結果。
                  <?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="menulinkevent">
                       <grammar src="/grammars/linkgrammar.grxml" type="application/srgs+xml"/>
                    </link>
            										
                    <form>
                       <field>
                         <prompt> Say something </prompt>
                         <catch event="menulinkevent">
                           <if cond="application.lastresult$.confidence < 0.7">
                             <goto nextitem="confirmlinkdialog"/>
                           <else/>
                             <goto next="./main_menu.aspl"/>
                           </if>
                         </catch>
                       </field>
                    </form>
                  </vxml>
            ????下面的例子表明了,在<script>元素中怎樣遍歷application.lastresult$數組:
                  <?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="color">
                       <prompt> Say a color </prompt>
                       <grammar type="application/srgs+xml" src="color.grxml" />
                       <filled>
                       <var name="confident_count" expr="0"/>
                         <script>
                         <![CDATA[>
                        // number of results
                           var len = application.lastresult$.length;
            										
                           // iterate through array
                           for (var i = 0; i < len; i++) {
                            // check if DTMF
                             if (application.lastresult$[i].confidence > .7) {
                               confident_count++;
                             }
                           }
                          ]]>
                         </script>
                         <if cond="confident_count > 1">
                           <goto next="#verify"/>
                         </if>
                       </filled>
                      </field>
                    </form>
                  </vxml>
            ?
            第二節 Event Handling ?
            ?
            ????當用戶沒有響應,或沒有清楚的響應或請求幫助等,平臺會拋出事件。如果發現VoiceXML文檔中有語義錯誤時,或執行了<throw>元素時,解釋器會拋出事件。事件由字符串表示。
            ????每個可能發生事件的元素都可以有以下一組<catch>元素。
            ??????·<catch>
            ??????·<error>
            ??????·<help>
            ??????·<noinput>
            ??????·<nomatch>
            ????如果需要的話,元素會從他的上層元素繼承<catch>元素(“as if by copy”)。例如,<field>元素中沒有包含一個<nomatch>元素,但是包含它的<form>元素有,則使用該<form>元素中的<nomatch>元素。這樣,可以在任何層次指定公共的事件處理,該事件處理在該層次所包含的所有元素中都可以使用。
            ????“as if by copy”這句話表明,<catch>元素的繼承是指,當執行該<catch>元素時,變量解析和拋出的事件的處理是在事件被拋出的相關作用域內進行的,而不是在包含<catch>元素的作用域內。例如,考慮一下這種情況,在document的作用域內定義一個<catch>元素,該<catch>元素處理一個該文檔的<field>元素中產生的事件。在這種情況下,<catch>元素中的變量引用是相對于該<field>的作用域解析的。如果<catch>元素捕獲該<field>元素中的一個事件,也是相對于該<field>的作用域進行處理的。同樣的,<catch>元素中相對URI的引用也是相對于激活的文檔解析的,而不是相對于包含該<catch>元素的文檔。最后,對property的解析也是相對于產生事件的那個元素。例如,document級的<catch>元素中的<prompt>元素如果沒有指定timeout屬性的話,將使用離事件產生的地方最近的一層的timeout屬性值。
            ?
            一、Throw
            ????<throw>元素用于拋出一個事件。可以拋出預定義的事件:
                   <throw event="nomatch"/>
                   <throw event="connection.disconnect.hangup"/>
            ????也可以拋出應用定義的事件。
                   <throw event="com.att.portal.machine"/
            ????<throw>元素的屬性有:
            event 要拋出的事件。
            eventexpr ECMAScript表達式,它的結果值為要拋出的事件。
            message 有關被拋出的事件的信息。對于拋出的預定義的事件,該message的值是依賴于平臺的。在<catch>元素中,可通過“_message”變量取得該信息,見5.2.2節。
            messageexpr ECMAScript表達式。其結果值為有關被拋出的事件的信息。
            表40:<throw>元素的屬性
            ????必須正確的指定屬性“event”,“eventexpr”或 “namelist”中的一個,否則會拋出一個error.badfetch事件。可以正確的指定屬性“message”或“messageexpr”中的一個,否則會拋出一個error.badfetch事件。
            ????除非顯式的規定,否則VoiceXML不會指定事件何時會被拋出。
            ?
            二、Catch
            ????<catch>元素將文檔、對話、Form Item與事件捕獲聯系起來,它包含了可執行的內容。
                  <?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="launch_missiles">
                       <field name="user_id" type="digits">
                          <prompt>What is your username</prompt>
                       </field>
                       <field name="password">
                          <prompt>What is the code word?</prompt>
                          <grammar version="1.0" root="root">
                            <rule id="root" scope="public">rutabaga</rule>
                          </grammar>
                          <help>It is the name of an obscure vegetable.</help>
                          <catch event="nomatch noinput" count="3">
                            <prompt>Security violation!/prompt>
                            <submit next="http://www.example.com/apprehend_felon.vxml" 
                                    namelist="user_id"/>
                          </catch>
                       </field>
                    </form>
                  </vxml>
            ????<catch>元素的匿名變量包括一個專有的變量“_event”,它保存了被捕獲的事件名。例如,下面的<catch>元素可以處理兩種事件:
                  <catch event="event.foo event.bar">
                    <if cond="_event=='event.foo'">
                       <!-- Play this for event.foo events -->
                       <audio src="foo.wav"/>
                     <else/>
                       <!-- Play this for event.bar events -->
                       <audio src="bar.wav"/>
                     </if>
                     <!-- Continue with common handling for either event -->
                  </catch>
            ????上面的“_event”變量的作用是根據被捕獲的事件檢查該播放哪個音頻。如果event.foo事件被捕獲,就播放foo.wav;如果event.bar事件被捕獲,就播放bar.wav。<catch>元素包含的剩下的可執行內容對兩類事件的處理都是一樣的。
            ????<catch>元素的匿名變量也包括專有變量“_mesage”,它保存了來自相應的<throw>元素的message字符串的值,或者平臺為預定義事件產生的依賴于平臺的值。如果被拋出的事件沒有指定message,則該“_message”的值為ECMAScript 的undefined。
            ????如果<catch>元素包含了一個<throw>,且<catch>要捕獲的事件和<throw>元素拋出的事件一樣的話,會形成一個無限循環:
                  <catch event="help">
                    <throw event="help"/>
                  </catch>
            ????平臺要能夠檢測到這種情況,并拋出一個語義錯誤。
            ????<catch>元素的屬性:
            event 要捕捉的一個或多個事件。可以指定多個事件的列表,事件之間用空格隔開。這樣表示該<catch>元素將捕捉列表中所有的事件。在這種情況下,每個事件有一個單獨的計數器。如果沒有指定該屬性,則表示所有的事件都會被捕捉。
            count 表示事件發生的次數(默認為1)。該屬性可以讓你對同一事件發生的不同次數進行不同的處理。
            每個<form>,<menu>和form item對發生的每個事件都有一個事件計數器。Item級別的事件計數器用于在訪問該form item和執行該form item的<filled>元素時拋出的事件。Form級別和menu級別的事件計數器用于在初始化該dialog和執行form級別的<filled>元素時拋出的事件。
            當<menu>元素和<form>元素被重新進入時,該form級別或menu級別的事件計數器被重置。<clear>元素不會重置該form級別或menu級別的事件計數器。
            每當<form>元素被重新進入時,該<form>元素所包含的item的item級別的事件計數器被重置。當item被<clear>元素重置時,該item的事件計數器也被重置。如果沒有離開該form,且該item被重新進入時,該item的事件計數器不會被重置。
            事件計數器增加時,它的全名和匹配該事件的各個前綴都會增加。例如,事件“event.foo.1”的發生使“event.foo.1” 、“event.foo”和“event”的事件計數器都增加1。
            cond ECMAScript表達式。只有當其結果值為 boolean true,才執行該元素。缺省時為 true。
            表41:<catch>元素的屬性
            ?
            三、快捷標記
            ????<error>、<help>、<noinput>和<nomatch>元素都是<catch>元素特定形式的快捷標記。
            ????<error>元素是<catch event="error">的快捷標記,他用于捕獲所有類型的error事件:
                   <error>
                     An error has occurred -- please call again later.
                     <exit/>
                   </error>
            ????<help>元素是<catch event="help">的快捷標記。
                   <help>No help is available.</help>
            ????<noinput>元素是<catch event="noinput">的快捷標記
                   <noinput>I didn't hear anything, please try again.</noinput>
            ????< nomatch>元素是<catch event=" nomatch ">的快捷標記
                   <nomatch>I heard something, but it wasn't a known city.</nomatch>
            ????這些元素都有如下屬性:
            count 要捕獲的事件發生的次數(和<catch>元素中的count屬性一樣)。
            cond 一個表達式,用于測試該元素是否捕捉該事件(和<catch>元素中的cond屬性一樣),默認為true。
            表42:<catch>元素的快捷標記的屬性
            ?
            四、Catch Element Selection
            ????一個元素如果需要的話,將從它的每個上層元素繼承(“as if by copy”)<catch>元素。例如,如果<field>元素從文檔繼承<catch>元素
                  <?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">
                    <catch event="event.foo">
                       <audio src="beep.wav"/>
                    </catch>
            										
                   <form>
                       <field name="color">
                          <prompt>Please say a primary color</prompt>
                       <grammar type="application/srgs">red | yellow | blue</grammar>
                          <nomatch>
                            <throw event="event.foo"/>
                          </nomatch>
                       </field>
                    </form>
                  </vxml>
            ????則該<catch>元素被隱式的拷貝到該<field>元素中,如下:
                  <?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>
                          <prompt>Please say a primary color</prompt>
                       <grammar type="application/srgs">red | yellow | blue</grammar>
                          <nomatch>
                            <throw event="event.foo"/>
                          </nomatch>
                          <catch event="event.foo">
                            <audio src="beep.wav"/>
                          </catch>
                       </field>
                    </form>
                  </vxml>
            ????當拋出一個事件時,則檢查該事件被處理的作用域及包含該作用域的所有作用域,根據以下的算法以確定最合適的<catch>元素:
            ??????1、將當前作用域內和包含該作用域的所有作用域內的所有的<catch>元素形成一個列表,先以作用域排序(由當前作用域開始),在每個作用域內再以文檔順序排序。
            ??????2、去掉該列表中于當前拋出的事件不匹配的元素;去掉cond屬性值為boolean false的元素。
            ??????3、找出"正確的計數":在該列表的<catch>元素中count屬性值最高的,且小于或等于當前的count值的<catch>元素。
            ??????4、選定該列表中計數正確的第一個<catch>元素。
            ????如果拋出的事件名匹配了<catch>元素中的事件名,則這是一個精確匹配,或是前綴匹配,或者該<catch>元素沒有指定event屬性。如果<catch>元素event屬性值中的事件是所拋出的事件的前綴,則為前綴匹配。點號是前綴的分隔符,點號后面的字符都去掉。空的字符串可以匹配任何事件。例如:
                   <catch event="connection.disconnect">
                     <prompt>Caught a connection dot disconnect event</prompt>
                   </catch>
            ????在該例子中,事件connection.disconnect前綴匹配事件connection.disconnect.transfer。
                   <catch event="com.example.myevent">
                     <prompt>Caught a com dot example dot my event</prompt>
                   </catch>
            ????上面的例子中,事件com.example.myevent將前綴匹配事件com.example.myevent.event1., com.example.myevent. 和 com.example.myevent.event1,而事件com.example.myevents.event1則不會被匹配。
                   <catch event=".">
                     <prompt>Caught an event</prompt>
                   </catch>
            ????上面的例子中,點號將前綴匹配所有的事件(如同<catch>元素沒有指定event屬性一樣)。
            ????注意,在<catch>元素的選定算法中,文檔順序靠前的<catch>元素的優先權比文檔順序靠后的高。該算法并沒有規定,指定的事件越明確的<catch>元素的優先權越高。因此在一般情況下,我們建議,指定的事件越明確的<catch>元素,其文檔順序應越靠前;而越不明確的<catch>元素,其文檔順序應越靠后。例如,我們建議捕捉事件“error.foo”和“error”的文檔順序如下:
                   <catch event="error.foo">
                     <prompt>Caught an error dot foo event</prompt>
                   </catch>
                   <catch event="error">
                     <prompt>Caught an error event</prompt>
                   </catch>
            ????如果上述的<catch>元素的文檔順序相反,則捕捉事件“error.foo”的<catch>元素永遠都不會被執行。
            ?
            五、Default Catch Elements
            ????如果開發者沒有指定對noinput,help,nomatch,cancel,exit和error這幾個事件的事件處理,解釋器應該隱式的提供這些事件默認的事件處理。
            ????系統對各種事件和錯誤默認的事件處理可總結為以下兩點:1、是否提供音頻作為響應;2、執行什么操作。如果提供音頻作為響應,收集播放的內容是依賴于平臺的。
            事件類型 是否提供音頻 執行的操作
            cancel 沒有reprompt
            error 退出解釋器
            exit 退出解釋器
            help reprompt
            noinput reprompt
            nomatch reprompt
            maxspeechtimeout reprompt
            connection.disconnect 退出解釋器
            all others 退出解釋器
            表43:默認的<catch>元素的事件處理
            ????不同的平臺可能有不同的默認提示語。
            ?
            六、Event Types
            ????事件可分為預定義事件、應用和平臺指定的事件,還可分為普通事件(正常情況下發生的事件)和錯誤事件(非正常情況下發生的事件)。錯誤事件的命名規則允許使用多級命名。
            ????瀏覽器可以拋出一個預定義事件的擴展事件,該擴展事件是以指定的預定義事件名作為前綴的。處理預定義事件的應用是可以共用的,而處理擴展的預定義事件的應用則不能保證它的共用性。例如,如果在加載一個語法文件時檢測到一個語法錯誤,則平臺必須拋出“error.badfetch”事件,如果拋出“error.badfetch.grammar.syntax”也是可接受的。
            ????關于事件的更多的信息,可通過“_message”變量獲得(見5.2.2節)。
            ????預定義的事件有:
            ????cancel
            ????用戶要求取消播放當前提示語。
            ????connection.disconnect.hangup
            ????用戶掛機。
            ????connection.disconnect.transfer
            ????用戶被無條件轉接到另一條線路,且不會返回。
            ????exit
            ????用戶要求退出。
            ????help
            ????用戶請求幫助。
            ????noinput
            ????用戶在timeout的時間內沒有響應。
            ????nomatch
            ????用戶有輸入,但是和語法不匹配。
            ????maxspeechtimeout
            ????用戶輸入的事件超過了‘maxspeechtimeout’ property的值。
            ????另外,還有在跳轉中產生的錯誤(見2.4.7.3節),預定義的錯誤有:
            ????error.badfetch
            ????當解釋器環境已經解釋到某個文檔中需要獲取一個文檔的地方,且獲取該文檔失敗,則解釋器環境會拋出該事件。不支持的scheme應用,不對的URI,客戶端退出,信息傳送錯誤,timeout,安全違規,不支持的資源類型,資源類型不匹配,文檔解析錯誤和scheme指定的各種錯誤代碼的返回都會導致獲取失敗。
            ????如果解釋器環境根據環境預取了一個文檔,但是后來并不需要這個文檔,則不會拋出error.badfetch事件。類似的,如果獲取一個音頻文件失敗,但是該音頻有候補的音頻或有候補的文本,且獲取候補的音頻或文本成功,則不會拋出error.badfetch事件。
            ????當解釋器環境將要跳轉到一個新的文檔時,一直準備拋出error.badfetch事件,直到它能夠執行這個新的文檔為止。但是,如果拋出事件,也只是在需要該新文檔的時候才拋出。在需要該新文檔之前是不會拋出的。執行這個新文檔是否包括變量初始化是依賴于平臺的。
            ????error.badfetch.http.<response code>
            ????error.badfetch.protocol.<response code>
            ????當獲取失敗時,解釋器環境必須用一個具體的事件類型表明是遇到了哪一個特定的HTTP或其他的協議的響應碼(response code),RFC2616中定義了HTTP響應碼的值。這樣對于一個獲取失敗的文檔,應用就可以進行不同的處理。其他協議的響應碼的值是依賴于相應的協議的。
            ????error.semantic
            ????當在VoiceXML文檔中發現運行時(run-time)錯誤時,拋出該事件。例如取子串越界錯誤,或引用undefined的變量。
            ????error.noauthorization
            ????當應用試圖執行一個平臺沒有授權的操作時,拋出這個事件。例如,呼叫一個非法的電話號碼,或呼叫該用戶不允許呼叫的號碼,或通過依賴于平臺的object訪問受保護的數據庫,或不適當的進入內置語法等。
            ????error.noresource
            ????這是一個運行時錯誤。在執行期間,如果請求的平臺資源不可用時,拋出這個事件。
            ????error.unsupported.builtin
            ????當平臺不支持所請求的內置類型/語法時,拋出這個事件。
            ????error.unsupported.format
            ????當平臺不支持所請求的資源的格式時,拋出這個事件。例如一個不支持的語法格式,或媒體格式。
            ????error.unsupported.language
            ????當平臺不支持語音合成或語音識別的語言時,拋出這個事件。
            ????error.unsupported.element
            ????當平臺不支持給定的元素(該元素是這個技術規范中定義的VoiceXML元素)時,拋出這個事件。例如,如果平臺沒有實現<transfer>元素,在使用該元素時,必須拋出error.unsupported.transfer事件。這樣可以讓開發者使用事件處理來適應不同的平臺。
            ????在加載文檔時碰到的錯誤,包括傳送錯誤(沒有找到文檔、HTTP狀態碼404等等)和句法錯誤(沒有<vxml>元素等),會導致在調用的文檔中拋出一個error.badfetch事件。在加載文檔之后,進入FIA的初始化階段之前出現的錯誤按照平臺指定的方式進行處理。進入FIA的初始化階段之后出現的錯誤,在新文檔中拋出相應的事件,例如語義錯誤等。在加載會話的第一個文檔時出現的錯誤的處理方式是依賴于平臺的。
            ????依賴于應用和依賴于平臺的事件類型應該使用反轉域名的命名規則,以避免命名沖突。例如:
            ????error.com.example.voiceplatform.noauth
            ????表示用戶在該平臺上無權呼出。
            ????org.example.voice.someapplication.toomanynoinputs
            ????表示用戶沒有輸入的時間太長了。
            ????<catch>元素能捕捉特定的事件(cancel),或那些前綴(error.unsupported)相同的事件。

            第三節 Executable Content ?
            ?
            ????可執行內容指的是一段程序邏輯。例如出現在
            ??????·form item <block>元素中;
            ??????·<form>元素或input item的<filled>元素中;
            ??????·事件處理中(<catch>,<help>元素等)。
            ????可執行元素按照它們的文檔順序被依次執行。如果某個可執行元素產生一個錯誤,則這個錯誤馬上被拋出。其后的可執行元素就不會被執行了。
            ????這一節描述的是出現在可執行內容中的元素。
            ?
            一、VAR
            ????<var>元素用于聲明一個變量。它可以出現在任何可執行的內容中,也可以作為<form>元素或<vxml>元素的子元素出現。例如:
                   <var name="phone" expr="'6305551212'"/>
                   <var name="y" expr="document.z+1"/>
            ????如果它出現在可執行的內容中,它聲明的變量作用域為anonynous,且作用在包含它的<block>,<filled>或<catch>元素中。在這種情況下,只有<var>元素被執行的時候才聲明該變量。如果該變量在這個作用域已經聲明了,則其后的聲明將被看作是賦值,就像在ECMAScript中一樣。
            ????如果<var>元素作為<form>元素的子元素出現,則它聲明的變量的作用域為該form的dialog。在這種情況下,在該form的初始化階段就進行變量聲明(詳見2.1.6.1節)。<var>元素不是一個form item,因此,它不能被FIA的主循環訪問。
            ????如果<var>元素作為<vxml>元素的子元素出現,它聲明的變量的作用域為document;如果該文檔是應用根文檔,它聲明的變量的作用域為application。當文檔被初始化的時候就進行變量聲明,且初始化是按照文檔的順序進行的。
            ????它的屬性有:
            name 保存變量值的變量名。
            expr 該變量的初始值(可選的)。如果沒有指定該屬性,該變量保持它當前的值(如果它當前有值的話);如果沒有給定初始值,變量初始值默認為ECMAScript的undefined。
            表44:<var>元素的屬性
            ?
            二、ASSIGN
            ????<assign>元素用來給變量賦值:
                  <assign name="flavor" expr="'chocolate'"/>
                  <assign name="document.mycost" expr="document.mycost+14"/>
            ????給沒有用<var>元素或在<script>元素中的var語句顯式聲明的變量賦值是非法的。試圖給一個沒有聲明的變量賦值,平臺會拋出error.semantic事件。
            ????注意:如果一個ECMAScript對象已經被正確地初始化(例如“obj”),則它的屬性(例如“obj.prop1”)沒有顯式聲明就可以給它賦值(實際上,如果試圖聲明ECMAScript對象的屬性,如聲明“obj.prop1”平臺會拋出error.semantic事件)。
            ????<assign>元素的屬性:
            name 要被賦值的變量名。
            expr 要賦給該變量的值。
            表45:<assign>元素的屬性
            ?
            三、CLEAR
            ????<clear>元素的作用是重置(清零)一個或多個變量,包括form item。重置form item包括以下的操作:
            ??????1、把該form item變量置為ECMAScript的undefined。
            ??????2、重新初始化該form item的提示語計數器和事件計數器。
            ????例如:
                   <clear namelist="city state zip"/>
            ????它的屬性有:
            namelist 要重置的變量清單,它除了可以包括form item也可以包括變量名。如果沒有指定,當前form的所有form item都被重置。
            表46:<clear>元素的屬性
            ?
            四、IF, ELSEIF, and ELSE
            ????<if>元素用于判斷條件邏輯,它可以和<elseif>、<else>搭配使用。
                  <if cond="total > 1000">
                     <prompt>This is way too much to spend.</prompt>
                  </if>
            										
                 <if cond="amount < 29.95">
                    <assign name="x" expr="amount"/>
                 <else/>
                    <assign name="x" expr="29.95"/>
                  </if>
            										
                  <if cond="flavor == 'vanilla'">
                    <assign name="flavor_code" expr="'v'"/>
                  <elseif cond="flavor == 'chocolate'"/>
                    <assign name="flavor_code" expr="'h'"/>
                  <elseif cond="flavor == 'strawberry'"/>
                    <assign name="flavor_code" expr="'b'"/>
                  <else/>
                    <assign name="flavor_code" expr="'?'"/>
                  </if>
            ?
            五、PROMPT
            ????提示語可以<prompt>元素的一般形式出現在可執行內容中,除非不使用<prompt>元素的count屬性。特別的,它的cond屬性也可用在可執行內容中。提示語可以被封裝在<prompt>和</prompt>中,或使用PCDATA表示。只要是<prompt>元素允許出現的地方,使用PCDATA xyz等價于使用<prompt>xyz</prompt>。
                  <nomatch count="1">
                     To open the pod bay door, say your code phrase clearly. 
                  </nomatch>
            										
                 <nomatch count="2">
                    <prompt>
                       This is your <emphasis>last</emphasis> chance.
                   </prompt>
                 </nomatch>
            										
                  <nomatch count="3">
                     Entrance denied.
                    <exit/>
                 </nomatch>
            ?
            六、REPROMPT
            ????在處理一個事件的過程中,FIA需要一個<catch>元素對適當的提示語進行排隊。因此,在執行完一個<catch>元素后的下一次循環中,FIA一般不會進行正常的選定和提示語排隊。然而,有兩種情況下,FIA在執行完一個<catch>元素后的下一次循環中,會進行正常的選定和提示語排隊:
            ??????1、如果在<catch>元素中執行了<goto>元素或<submit>元素,跳轉到另一個dialog,或者執行了一個<return>元素,從一個subdialog中返回,在這些情況下,新的dialog需要保證它的初始提示語保持原樣;
            ??????2、如果在<catch>元素中執行了一個<reprompt>元素,要求FIA隨后要重新播放提示語。
            ????在這兩種情況中,FIA選定下一個要訪問的form item之后,會執行正常的提示語處理,包括選定該form item的提示語,對提示語進行排隊,和給該form item的提示語計數器加1。
            ????例如,下面的例子中的noinput事件處理希望FIA訪問下一個form item時,選定并播放它的提示語:
                  <field name="want_ice_cream">
                    <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/>
                    <prompt>Do you want ice cream for dessert?</prompt>
                    <prompt count="2">
                      If you want ice cream, say yes.
                      If you do not want ice cream, say no.
                   </prompt>
                   <noinput>
                      I could not hear you.
                      <!-- Cause the next prompt to be selected and played. -->
                     <reprompt/>
                   </noinput>
                 </field>
            ????可能的一個對話流程:
                  C: Do you want ice cream for dessert?
                  H: (silence) 
                  C: I could not hear you.
                  C: If you want ice cream, say yes. If you don't want ice cream, say no.
                  H: (silence) 
                  C: I could not hear you.
                  C: If you want ice cream, say yes. If you don't want ice cream, say no.
                  H: No.
            ????如果該例子中沒有<reprompt>元素,上面的流程變為如下所示:
                  C: Do you want ice cream for dessert?
                  H: (silence) 
                  C: I could not hear you.
                  H: (silence) 
                  C: I could not hear you.
                  H: No.
            ????注意,上面的例子中之所以略過了提示語選擇階段,是因為在執行完一個<catch>元素后(沒有執行<reprompt>元素,或沒有通過<goto>、<submit>、<return>元素跳轉到另一個dialog),被FIA選定的該form item的提示語計數器并沒有加1。
            ????同時注意,執行一個<catch>元素后(沒有執行<reprompt>元素,或沒有通過<goto>、<submit>、<return>元素跳轉到另一個dialog),FIA選定的下一個要訪問的form item的提示語選定階段也會被略過,即使該form item和前一個被選定的form item不是同一個。
            ????<reprompt>元素在<catch>元素之外是不會起作用的。
            ?
            七、GOTO
            ????<goto>元素用于:
            ??????1、跳轉到當前form的另一個form item;
            ??????2、跳轉到當前文檔的另一個dialog;
            ??????3、跳轉到另一個文檔。
            ????要跳轉到另一個form item,使用next屬性,或使用expritem屬性,如果該form item名可以通過ECMAScript表達式計算得到的話:
                  <goto nextitem="ssn_confirm"/>
                  <goto expritem="(type==12)? 'ssn_confirm' : 'reject'"/>
            ????要跳轉到同一個文檔的另一個dialog,使用next屬性,或使用expr屬性指定一個URI段:
                  <goto next="#another_dialog"/>
                  <goto expr="'#' + 'another_dialog'"/>
            ????要跳轉到另一個文檔使用next屬性,或使用expr屬性指定一個URI:
                  <goto next="http://flight.example.com/reserve_seat"/>
                  <goto next="./special_lunch#wants_vegan"/>
            ????URI可以是當前文檔的絕對或相對的URI。要指定下一個文檔開始的dialog,可以使用對應于該dialog的id屬性值的URI段。如果沒有指定URI段,則以要跳轉到的文檔的第一個dialog為開始的dialog。
            ????注意,跳轉到當前文檔的另一個dialog會導致舊的dialog變量丟失,即使是一個dialog跳轉到它自己也會丟失。同樣的,使用相對或絕對的URI跳轉到另一個文檔,也會丟失文檔變量,即使是一個文檔跳轉到它自己也會丟失。然而,當跳轉到一個帶有段標識符的空的URI引用時,文檔變量不會丟失。例如下面兩個語句在URI為http://someco.example.com/index.vxml的文檔中有不同的行為:
                  <goto next="#foo"/>
            										
                  <goto next="http://someco.example.com/index.vxml#foo"/>
            ????根據RFC2396,段標識符(“#”后面的部分)不是URI的一部分,到一個空的URI引用加上段標識符的跳轉永遠都不會獲取到一個新的文檔。因此,第一條語句中的“#foo”時一個帶有段標識符的空的URI引用,它的文檔變量不會丟失。在第二條語句中,“#foo”是一個絕對URI的一部分,該跳轉會導致文檔變量的丟失。如果想要在多文檔中保存數據,請把數據保存在應用根文檔中。
            ????在<goto>元素的next或expr屬性中,URI引用(詳見RFC2396)指定要跳轉到的dialog,如果這個URI引用包含一個絕對或相對的URI,該URI可以包含一個查詢串,則FIA獲取該URI,并且在目標文檔中尋找相應的dialog。
            ????如果該URI引用只包含一個段(即沒有絕對或相對的URI),則沒有任何文檔被獲取,FIA在當前文檔中尋找相應的dialog。
            ????URI引用中的段,如果有的話,以要跳轉到的dialog命名,如果URI引用中沒有段,則選定目標文檔的第一個dialog。
            ????如果要跳轉到的form item、dialog或文檔不可用(即該form item、dialog或文檔不存在),必須拋出error.badfetch事件。注意,對于在dialog或文檔跳轉時出現錯誤,處理錯誤的作用域是依賴于平臺的;對于在form item之間跳轉時出現的錯誤,事件在dialog的作用域內處理。
            ????<goto>元素的屬性:
            next 要跳轉到的URI。
            expr 一個ECMAScript表達式 ,其結果值為要跳轉到的URI。
            nextitem 當前form 中下一個要訪問的form item名。
            expritem 一個 ECMAScript表達式,其結果值為當前form中下一個要訪問的form item名。
            fetchaudio 見6.1節。它默認為fetchaudio <property>。
            fetchhint 見6.1節。它默認為documentfetchhint <property>。
            fetchtimeout 見6.1節。它默認為fetchtimeout <property>。
            maxage 見6.1節。它默認為documentmaxage <property>。
            maxstale 見6.1節。它默認為documentmaxstale <property>。
            表47:<goto>元素的屬性
            ????必須正確地指定屬性“next”、“expr”、“event”和“eventexpr”中的一個,否則會拋出error.badfetch事件。
            ?
            八、SUBMIT
            ????<submit>元素用于提交信息給web服務器,然后跳轉到web服務器響應后返回的文檔。和<goto>元素不一樣的是,<submit>元素可以通過HTTP GET或POST請求提交一個變量列表到文檔服務器。例如可以提交一組form item變量到服務器:
                  <submit next="log_request" method="post"
                     namelist="name rank serial_number"
                     fetchtimeout="100s" fetchaudio="audio/brahms2.wav"/>
            ????<submit>元素的next或expr屬性指定了要跳轉到的dialog。該URI每次都要被獲取,即使它只包含了一個段。在URI只包含一個段的情況下,請求的URI就是當前文檔的基本URI。因此,下面的兩個元素有完全不同的效果:
                  <goto next="#get_pin"/>
            										
                  <submit next="#get_pin"/>
            ????注意:雖然URI總是要被獲取,并且跳轉到目標文檔,但是通過緩存,還是能夠滿足某些<submit>元素請求的。例如,如果web服務器在響應時提供了一個顯式的過期時間,就可能發生這種情況。
            ????如果要跳轉到的dialog或文檔是非法的(即該dialog或文檔不存在),必須拋出一個error.badfetch事件。注意:對于那些在dialog或文檔跳轉時出現的錯誤,在哪個作用域內處理它們是依賴于平臺的。
            ????<submit>元素的屬性有:
            next 要引用的URI。
            expr ECMAScript表達式,它的結果值為要引用的URI。
            namelist 要提交的變量名列表。默認是提交所有有命名的input item。如果指定了namelist屬性,它可以包含一個或多個變量名,以空格隔開。在VoiceXML和ECMAScript中聲明的變量都能被提交。
            method 請求的方法:get(默認的)或post。
            enctype 被提交的文檔的媒體編碼類型,默認為application/x-www-form-urlencoded 。解釋器也必須支持multipart/form-data ,也可以支持其他的編碼類型。
            fetchaudio 見6.1節。它默認為fetchaudio <property>。
            fetchhint 見6.1節。它默認為documentfetchhint <property>。
            fetchtimeout 見6.1節。它默認為fetchtimeout <property>。
            maxage 見6.1節。它默認為documentmaxage <property>。
            maxstale 見6.1節。它默認為documentmaxstale <property>。
            表48:<submit>元素的屬性
            ????必須正確的指定屬性next或expr中的一個,否則會拋出error.badfetch事件。
            ????當一個ECMAScript變量被提交給服務器時,它先被轉換成一個字符串才被提交。VoiceXML目前還沒有定義一種提交ECMAScript對象的機制,將來會定義這種機制。一種變通的方法是,開發者可以顯式的提交對象的屬性,例如“date.month date.year”。
            ????如果<submit>元素包含的變量引用了一個錄制的音頻,但是沒有包含multipart/form-data的ENCTYPE的話,VoiceXML目前還沒有規定這種行為。試圖在URI中對大量的數據編碼顯然是不合實際的。
            ?
            九、EXIT
            ????<exit>把控制返回給解釋器環境,由解釋器環境決定下一步做什么。
                  <exit/>
            ????該元素和<return>元素的不同之處在于它終止了所有加載的文檔,而<return>則是從一個<subdialog>調用中返回。如果<subdialog>調用了一個新的文檔(或應用),則<return>會終止被調用的文檔,控制返回到<subdialog>元素繼續執行。
            ????注意,一旦<exit>把控制返回給解釋器環境,解釋器環境就可以做它想做的操作。例如,它可以給用戶播放上一級<menu>元素中的提示語,或者掛機,或者把用戶轉接到人工坐席。
            ????它的屬性有:
            expr 一個ECMAScript表達式,該表達式的值就是要返回的值(如“0”,“oops!”或“field1”)。
            namelist 要返回給解釋器環境的變量名清單。默認是返回0個變量,這樣意味著解釋器環境將接收到一個空的ECMAScript 對象。
            表49:<exit>元素的屬性
            ????可以正確地指定屬性“expr”和“namelist”中的一個,否則,會拋出error.badfetch事件。
            ????<exit>元素不會拋出一個“exit”事件。
            ?
            十、RETURN
            ????<return>元素用于結束一個subdialog的執行,并把控制和數據返回給調用它的dialog。
            ????它的屬性有:
            event 要返回并拋出的事件。
            eventexpr ECMAScript表達式。其結果值為拋出的事件。它的作用是從subdiaolog中返回,并拋出該事件 。
            message 有關被拋出的事件的信息。在<catch>元素中,可通過“_message”變量取得該信息,見5.2.2節。
            messageexpr ECMAScript表達式。其結果值為有關被拋出的事件的信息。
            namelist 要返回的變量名。默認為返回0個變量,即調用該subdialog的dialog將得到一個空的ECMAScript 對象 。
            表50:<return>元素的屬性
            ????可以正確的指定屬性“event”,“eventexpr”或“namelist”中的一個,否則會拋出一個error.badfetch事件。可以正確的指定屬性“message”或“messageexpr”中的一個,否則會拋出一個error.badfetch事件。
            ????當從一個subdialog中返回,一個事件在調用的地方被拋出,或者數據作為一個ECMAScript對象被返回,該對象的屬性對應于subdialog中的<return>元素的namelist屬性值。如果不是在subdialog中執行,卻碰到<return>元素,則會拋出一個語義錯誤。
            ????下面的例子展示了,當subdialog不能獲得一個可識別的結果時,一個nomatch事件通過subdialog在調用它的dialog中拋出。
                  <?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>
                       <subdialog name="result" src="#getssn">
                          <nomatch>
                            <!-- a no match event that is returned by the  subdialog indicates
                                 that a valid social security number could not be matched. -->
                            <goto next="http://myservice.example.com/ssn-problems.vxml"/>
                          </nomatch>
            										
                         <filled>
                           <submit namelist="result.ssn"
                              next="http://myservice.example.com/cgi-bin/process"/>
                         </filled>
                       </subdialog>
                     </form>
                    <form id="getssn">
                      <field name="ssn">
                      <grammar src="http://grammarlib/ssn.grxml" type="application/srgs+xml"/>
                       <prompt> Please say social security number.</prompt>
                       <nomatch count="3">
                         <return event="nomatch"/>
                       </nomatch>
                       <filled>
                         <return namelist="ssn"/>
                       </filled>
                      </field>
                    </form>
                  </vxml>
            ????subdialog中的nomatch事件處理在第三次匹配失敗時被觸發,然后從subdialog中返回,并在調用他的dialog中拋出該事件。在這種情況下,調用的dialog將執行它自己的nomatch事件處理,通過<goto>元素跳轉到另一個文檔,而不是執行<filled>操作。在一般的情況下,如果得到一個識別結果,就會執行該<subdialog>元素中的<filled>操作,該識別結果可通過result.ssn訪問。
            ?
            十一、DISCONNECT
            ????它的作用是使解釋器環境斷開和用戶之間的鏈接,此時,解釋器環境將拋出connection.disconnect.hangup事件,它可以被捕獲,以做一些清除的處理。
                  <disconnect/>
            ?
            十二、SCRIPT
            ????<script>元素允許在VoiceXML腳本中使用一段客戶端的腳本語言代碼,它和HTML的<SCRIPT>元素類似。例如下面的例子中<script>元素用于計算一個數的階乘:
                  <?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">
                   <script> <![CDATA[
                         function factorial(n)
                         {
                          return (n <= 1)? 1 : n * factorial(n-1);
                         }
                    ]]> </script>
            										
                   <form id="form">
                      <field name="fact">
                        <nomatch>
                         <grammar type="application/srgs+xml" src="/grammars/number.grxml"/>
                         <prompt>
                            Tell me a number and I'll tell you its factorial.
                         </promptd>
                         <filled>
                           <prompt>
                             <value expr="fact"/> factorial is
                             <value expr="factorial(fact)"/>
                           </prompt>
                         </filled>
                       </field>
                     </form>
                  </vxml>
            ????<script>元素可以出現在<vxml>元素和<form>元素中,或者出現在可執行的內容中(如<filled>,<if>,<block>,<catch>或<catch>元素的快捷標記)。在文檔被裝載后,<vxml>元素中的<script>元素和<var>元素都按照它們的文檔順序被依次求值。每次執行到<form>元素,該form中的<script>元素和<var>元素及form item 變量也是按照它們的文檔順序被依次求值。和其他的可執行元素一樣,當在可執行的內容中碰到<script>元素時,都會執行它。
            ????<script>元素的屬性有:
            src 如果腳本是外部的,則該屬性指定了該外部腳本的URI。
            charset 屬性src指定的腳本的字符編碼。平臺必須支持ISO/IEC 10646的UTF-8 和 UTF-16編碼,也可以支持其他的編碼,如IANA中定義的。默認為UTF-8。
            fetchhint 見6.1節。它默認為documentfetchhint <property>。
            fetchtimeout 見6.1節。它默認為fetchtimeout <property>。
            maxage 見6.1節。它默認為documentmaxage <property>。
            maxstale 見6.1節。它默認為documentmaxstale <property>。
            表51:<script>元素的屬性
            ????必須指定一個src屬性或一個聯機腳本中的一個(不是兩個都指定),否則,會拋出error.badfetch事件。
            ????VoiceXML中的<script>元素沒有type屬性(這一點和HTML的<SCRIPT>元素不一樣),ECMAScript是VoiceXML必須的腳本語言。
            ????每個<script>元素在它的父元素的作用域內被執行,即它沒有自己的作用域。例如在<script>元素用var語句聲明的變量的作用域為該<script>元素的父元素(用ECMAScript的術語來說,就是"變量對象"為包含<script>元素的元素的當前作用域)。
            ????下面的例子中<block>包含有<script>元素,并初始化該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> 
                      <var name="hours"/>
                      <var name="minutes"/>
                      <var name="seconds"/>
                      <block>
                        <script>
                          var d = new Date();
                          hours = d.getHours();
                          minutes = d.getMinutes();
                          seconds = d.getSeconds();
                        </script>
                       </block>
                       <field name="hear_another">
                         <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/>
                           <prompt>
                             The time is <value expr="hours"/> hours,
                             <value expr="minutes"/> minutes, and
                             <value expr="seconds"/> seconds.
                           </prompt>
                           <prompt>Do you want to hear another time?</prompt>
                          <filled>
                            <if cond="hear_another">
                              <clear/>
                            </if>
                          </filled>
                        </field>
                     </form>
                  </vxml>
            ????<script>元素的內容在和<var>元素一樣的作用域內被求值(見5.1.2和5.3.1節)。
            ????由于設置了ECMAScript的作用域鏈,因此,無論是<var>元素聲明的變量,還是在<script>元素中聲明的變量,它們的作用域都是包含該<var>元素或<script>元素的元素的作用域。例如,在<form>的<script>元素中聲明的變量的作用域為dialog,它能夠作為一個作用域為diaolog的變量被訪問:
                  <?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 now = new Date(); <!-- this has a dialog scope-->
                       </script>
                       <var name="seconds" expr="now.getSeconds()"/> <!-- this has a dialog scope-->
                       <block>
                         <var name="now" expr="new Date()"/> <!-- this has an anonymous scope -->
                         <script>
                            var current = now.getSeconds();<!-- "now" in the anonymous scope -->
                            var approx = dialog.now.getSeconds(); <!-- "now" in the dialog scope -->
                         </script>
                       </block>
                     </form>
                  </vxml>
            ????所有的變量在被ECMAScript腳本或VoiceXML元素引用之前都必須聲明,詳見5.1.1節。
            ?
            十三、LOG
            ????<log>元素讓應用程序可以產生日志或調試信息,這些信息能夠用來幫助開發者開發程序,或進行執行后的程序性能分析。
            ????<log>元素可以包含文本(CDATA)和<value>元素的任意組合,產生的信息由文本和<value>元素的cond屬性值串聯起來組成。
            ????信息的顯示和記錄方式是依賴于平臺的,lable屬性的用法也是依賴于平臺的。
            ????<log>元素中的ECMAScript表達式根據它們在文檔中的順序求值,使用<log>元素不應該對文檔的解釋產生任何的副作用。
                  <log>The card number was <value expr="card_num"/></log>
            ????<log>元素的屬性:
            label 一個字符串,例如它可以用來表明該<log>元素的目的。
            expr 一個ECMAscript表達式,它的結果值為一個字符串。
            表52:<log>元素的屬性
            posted on 2006-09-16 22:50 鐵觀音 閱讀(930) 評論(0)  編輯 收藏 引用 所屬分類: VoiceXML2.0規范
            97久久精品人人做人人爽| 色偷偷91久久综合噜噜噜噜| 精品多毛少妇人妻AV免费久久| 久久天天日天天操综合伊人av| 中文字幕精品久久久久人妻| 亚洲国产欧洲综合997久久| AV无码久久久久不卡网站下载| 国产高清美女一级a毛片久久w| 精品久久久无码21p发布| 久久精品成人免费网站| 久久久久久久女国产乱让韩| 青青草原1769久久免费播放| 伊人色综合久久天天网| 青青青青久久精品国产| 亚洲αv久久久噜噜噜噜噜| 精品国产91久久久久久久a| A级毛片无码久久精品免费| 久久精品国产亚洲5555| 精品久久久久久无码专区不卡| 色诱久久av| 日本久久久久久中文字幕| 99久久精品国产一区二区| 中文字幕久久亚洲一区| 一本久久久久久久| 国产精品免费看久久久| 亚洲国产精品无码久久一区二区| 久久久网中文字幕| 久久露脸国产精品| 亚洲国产成人精品女人久久久 | 久久九九久精品国产| 久久丫精品国产亚洲av不卡| 亚洲国产精品无码久久久久久曰 | 久久免费香蕉视频| 嫩草影院久久国产精品| 青青青国产精品国产精品久久久久 | 伊人热人久久中文字幕| 久久精品国产亚洲av麻豆色欲 | 国内精品久久久久久99| 亚洲va久久久噜噜噜久久天堂| 麻豆av久久av盛宴av| 久久久久久国产精品美女|