铁观音

C++编程宝典

   ::  ::  ::  ::  :: 管理 ::
  1 随笔 :: 19 文章 :: 0 评论 :: 0 Trackbacks
附  录 [第一章][前一章][后一章]
 
附录 A Glossary of Terms 附录 B   附录 C  附录 D  附录 E  附录 F
  附录 G   附录 H  附录 I  附录 J  附录 K
  附录 L   附录 M  附录 N  附录 O  附录 P
 
active grammar
    当前激活的语音或DTMF语法。它是相对于当前正在执行的元素和当前定义语法的元素的作用域的。
 
application
    一些VoiceXML文档的集合,这些文档的application属性值相同。
 
ASR
    自动语音识别。
 
author
    VoiceXML文档的作者。
 
catch element
    <catch>元素或它的一些缩写形式包含的代码块。一些默认的catch element由VoiceXML解释器定义。
 
control item
    即form item,其目的要么是包含一个程序逻辑块(如<block>元素),要么是允许混合主动式dialog播放提示语(如<initial>元素)。
 
CSS W3C Cascading Style Sheet specification.
    见CSS2。
 
dialog
    在VoiceXML文档中指定的和用户的一个交互。Dialog包括form和menu两种。
 
DTMF(Dual Tone Multi-Frequency)
    按键式或以按钮操作的拨号。在电话键盘上按一个按键产生一个声音,该声音由两种音调组成,一种是高频的,另一种是低频的。
 
ECMAScript
    Javascript的一个标准版本,由欧洲计算机厂商协会(European Computer Manufacturer's Association)提出。见ECMASCRIPT。
 
event
    由执行平台、VoiceXML解释器环境、VoiceXML解释器或VoiceXML代码抛出的一个标志信息。事件包括异常(语义错误)、正常错误(用户没有说出可以识别的内容)、正常事件(用户退出)和用户定义的事件。
 
executable content
    出现在<block>,<filled>元素和事件处理中的程序逻辑。
 
form
    计算机用一种非常灵活的方式和用户交互的dialog。用户和计算机都有主动性。
 
FIA (Form Interpretation Algorithm)
    在VoiceXML解释器中执行的算法。VoiceXML解释器用于驱动用户和VoiceXML的form或menu之间的交互。见2.1.6节和附录C。
 
form item
    <form>元素的子元素,在执行该form期间,它们可以被访问,包括的元素有:<initial>,<block>,<field>,<record>,<object>,<subdialog>和<transfer>元素。
 
form item variable
    在一个form中和每个form item相关的一个变量,该被显式或隐式的定义。如果该form item变量为undefined,则解释算法将访问该form item,并让它跟用户交互。
 
implementation platform
    有必要的软件和/或硬件来支持VoiceXML定义的交互类型的一台计算机。
 
input item
    即一个form item,用于输入一个input item变量。Input item包括<field>,<record>,<object>,<subdialog>和<transfer>元素。
 
language identifier
    语言标识符用于标注一种特定的人类语言。根据XML技术规范中的语言标识,合法的语言标识符应该为RFC3066的一个代码。语言代码在RFC3066中是必须的,而国家代码或其他的子标签代码在FRC3066中则是可选的。
 
link
    一组语法,当匹配用户输入时,要么跳转到一个新的dialog或文档,要么在当前的form item中抛出一个事件。
 
menu
    一个dialog,它给用户提供了一组选项,并执行被选中的选项的操作。
 
mixed initiative
    一种人机交互,计算机和人都具有主动性,都可以决定下一步要做的。
 
JSGF
    Java API Speech Grammar Format,一种被提议的语音语法标准。见JSGF。
 
object
    依赖于平台的一种功能,它有一个接口让VoiceXML调用。
 
request
    数据的收集,包括:指定文档服务器的URI,要处理的一组名称――值的数据对(可选的),和处理的方法(可选的)。
 
script
    用客户端脚本语言(特别是ECMAScript)编写的一个逻辑段,该语言必须是任何VoiceXML解释器所支持的语言。
 
session
    用户和执行平台之间的一个连接,例如用电话呼入一个语音应答系统。一个session可以包含多个VoiceXML文档的解释。
 
SRGS(Speech Recognition Grammar Specification)
    一个跟环境无关的语音识别语法的标准版本,是由W3C语音浏览器项目组开发的。在SRGS中有ABNF和XML格式。
 
SSML(Speech Synthesis Markup Language)
    语音合成的标准版本,W3C语音浏览器项目组正在开发的。
 
subdialog
    当前dialog调用的一个VoiceXML diaolog(或文档),类似于函数调用。
 
tapered prompts
    用于提供不同的信息给用户的一组提示语。提示语可以越来越简洁(如<field>元素中的提示语),也可以越来越详细(如帮助的提示语)。
 
throw
    用于抛出事件的元素。
 
TTS
    文本语音转换,即语音合成。
 
user
    和执行平台交互的人,它受VoiceXML解释器的控制。
 
URI
    统一资源指示器。
 
URL
    统一资源定位器。
 
VoiceXML document
    遵循VoiceXML技术规范的XML文档。
 
VoiceXML interpreter
    一个计算机程序,用于解释VoiceXML文档,以控制执行平台引导与用户之间的交互。
 
VoiceXML interpreter context
    一个计算机程序,它使用VoiceXML解释器来解释VoiceXML文档,它也可以独立于VoiceXML解释器和执行平台进行交互。
 
W3C
    国际互联网联盟http://www.w3c.org/。

附录 B VoiceXML Document Type Definition 附录 A   附录 C  附录 D  附录 E  附录 F
  附录 G   附录 H  附录 I  附录 J  附录 K
  附录 L   附录 M  附录 N  附录 O  附录 P
 
    VoiceXML的DTD位于http://www.w3.org/TR/voicexml20/vxml.dtd。
    <metadata>元素能够包含其他的XML命名空间的元素,但是由于DTD的限制,VoiceXML的DTD不能正确的表达这一点。
    注意, SRGS和SSML的DTD中有更改的元素都包含在VoiceXML的DTD中了。
 
附录 C Form Interpretation Algorithm 附录 A   附录 B  附录 D  附录 E  附录 F
  附录 G   附录 H  附录 I  附录 J  附录 K
  附录 L   附录 M  附录 N  附录 O  附录 P
 
    Form解释算法(FIA)用于驱动用户和VoiceXML的form或menu之间的交互。Menu可看作是一个form,该form包含了一个简单的field,它的语法和<filled>操作由<menu>元素中的<choice>元素组成。
    FIA必须要处理的有:
      ·form的初始化;
      ·播放提示语,包括分级提示的提示语计数器的管理;
      ·在form和form item级别的语法的激活和失效;
      ·和一个utterance一起进入一个form,该utterance在用户访问另一个form或menu时,匹配了该form中作用域为document的一个语法;
      ·因用户匹配了另一个form或menu或link中的作用域为document的语法而离开一个form;
      ·处理一个utterance填充多个field的情况,包括执行相应的<filled>操作;
      ·选定下一个要访问的form item,并处理该form item;
      ·选择正确的<catch>元素处理当前的form item抛出的事件。
    首先,我们要定义在FIA中使用的一些术语和数据结构:
 
active grammar set
    在VoiceXML解释器环境的输入收集操作期间激活的一组语法。
 
utterance
    用户所说的或所键入的内容的总和,包括被匹配的特定的语法,和由一个解释结构组成的语义结果,如果没有语义解释,则使用输入的原始文本(见3.1.6节)。例如,当语法123被匹配时,相应的语义解释可能为{drink: "coke" pizza: {number: "3" size: "large"}}。
 
execute
    执行可执行的内容,可以是<block>元素,一个<filled>操作,或一组<filled>操作。如果在执行期间抛出了一个事件,则退出正在执行的可执行内容。然后执行正确的事件处理,它可以让控制在FIA主循环的下一次循环时回到原来的form item中,也可以让控制跳转到该form以外的地方。如果执行了<goto>元素,则立即进行跳转,剩下的可执行内容将不再被执行。
 
    下面是一个FIA的概念模型。FIA可以不带任何初始的utterance开始,也可以带着由另一个dialog传进来的utterance开始:
      //
      //   Initialization Phase
     //
										
     foreach ( <var>, <script> and form item, in document order )
        if ( the element is a <var> )
          Declare the variable, initializing it to the value of
          the "expr" attribute, if any, or else to undefined.
        else if ( the element is a <script> )
          Evaluate the contents of the script if inlined or else
          from the location specified by the "src" attribute.
        else if ( the element is a form item )
          Create a variable from the "name" attribute, if any, or
          else generate an internal name.  Assign to this variable
          the value of the "expr" attribute, if any, or else undefined.
          foreach ( input item and <initial> element )
             Declare a prompt counter and set it to 1.
										
      if ( user entered this form by speaking to its
            grammar while in a different form)
      {
         Enter the main loop below, but start in
         the process phase, not the select phase:
         we already have a collection to process.
      }
										
      //
      //   
Main Loop: select next form item and execute it.
      //
										
      while ( true )
      {
           //
           //   
Select Phase: choose a form item to visit.
           //
										
          if ( the last main loop iteration ended with a <goto nextitem> )
              Select that next form item.
          else if (there is a form item with an unsatisfied guard condition )
              Select the first such form item in document order.
          else
              Do an <exit/> -- the form is full and specified no transition.
										
           //
           //   
Collect Phase: execute the selected form item.
           //
          //   Queue up prompts for the form item.
										
          unless ( the last loop iteration ended with
                     a catch that had no <reprompt>, 
                     and the active dialog was not changed )
          {
                   Select the appropriate prompts for an input item or <initial>.
                   Queue the selected prompts for play prior to the next collect operation.
										
                   Increment an input item’s or <initial>'s prompt counter.
           }
										
            // Activate grammars for the form item.
										
           if ( the form item is modal )
               Set the active grammar set to the form item grammars,
               if any. (Note that some form items, e.g. <block>,
               cannot have any grammars).
           else
               Set the active grammar set to the form item
               grammars and any grammars scoped to the form,
               the current document, and the application root document.
										
           // Execute the form item.
										
           if ( a <field> was selected )
                Collect an utterance or an event from the user.
           else if ( a <record> was chosen )
                Collect an utterance (with a name/value pair
                for the recorded bytes) or event from the user.
           else if ( an <object> was chosen )
                Execute the object, setting the <object>' s
                form item variable to the returned ECMAScript value.
          else if ( a <subdialog> was chosen )
                Execute the subdialog, setting the <subdialog>' s
                form item variable to the returned ECMAScript value.
          else if ( a <transfer> was chosen )
                Do the transfer, and (if wait is true) set the
                <transfer> form item variable to the returned
                result status indicator.
          else if ( an <initial> was chosen )
                Collect an utterance or an event from the user.
          else if ( a <block> was chosen )
          {
                Set the block' s form item variable to a defined value.
										
                Execute the block' s executable context.
          }
										
          //
          //  Process Phase: process the resulting utterance or event.
          //
										
          Assign the utterance and other information about the last
          recognition to application.lastresult$.
                // Must have an utterance
          if ( the utterance matched a grammar belonging to a <link> )
                If the link specifies an "next" or "expr" attribute,
                transition to that location.  Else if the link specifies an
                "event" or "eventexpr" attribute, generate that event.
										
         else if ( the utterance matched a grammar belonging to a <choice> )
               If the choice specifies an "next" or "expr" attribute,
               transition to that location.  Else if the choice specifies
               an "event" or "eventexpr" attribute, generate that event.
										
         else if ( the utterance matched a grammar from outside the current
                   <form> or <menu> )
         {
               Transition to that <form>  or <menu> , carrying the utterance to the new FIA.
         }
										
         //  Process an utterance spoken to a grammar from this form.
         //  First copy utterance result property values into corresponding
         //  form item variables.
										
         Clear all "just_filled" flags.
										
         if ( the grammar is scoped to the field-level ) {
            // This grammar must be enclosed in an input item.  The input item
            //  has an associated ECMAScript variable (referred to here as the input
            //  item variable) and slot name.
            if ( the result is not a structure )
               Copy the result into the input item variable.
            elseif ( a top-level property in the result matches the slot name
                       or the slot name is a dot-separated path matching a
                       subproperty in the result )
               Copy the value of that property into the input item variable.
             else
               Copy the entire result into the input item variable.
             Set this input item's "just_filled" flag.
         }
         else {
               foreach ( property in the user' s utterance )
               {
                  if ( the property matches an input item' s slot name )
                   {
                      Copy the value of that property into the input item' s form item variable.
										
                      Set the input item' s "just_filled" flag.
                   }
                }
           }
										
        //  Set all <initial> form item variables if any input items are filled.
										
         if ( any input item variable is set as a result of the user utterance )
            Set all <initial> form item variables to true.
										
         // Next execute any <filled> actions triggered by this utterance.
										
         foreach ( <filled> action in document order )
         {
            // Determine the input item variables the <filled> applies to.
										
             N = the <filled>' s "namelist" attribute.
										
            if ( N equals "" )
             {
                 if ( the <filled> is a child of an input item )
                    N = the input item’s form item variable name.
                 else if ( the <filled> is a child of a form )
                    N = the form item variable names of all the input items in that form.
             }
										
             // Is the <filled> triggered?
										
             if ( any input item variable in the set N was "just_filled"
                    AND  (  the <filled> mode is "all"
                                AND all variables in N are filled
                                OR the <filled> mode is "any"
                                AND any variables in N are filled) )
                 Execute the <filled> action.
										
            If an event is thrown during the execution of a <filled>,
               event handler selection starts in the scope of the <filled>,
            which could be an input item or the form itself.
         }
         // If no input item is filled, just continue.
     }
    在FIA的执行期间,几个地方都可以产生事件,根据激活的不同阶段,这些事件被分别处理。
    在选定一个form item之前(也就是在初始化和选定阶段),事件是在dialog级别产生的。FIA定位相应的事件处理并执行它。如果<catch>元素最终没有跳转到一个dialog,则FIA的执行结束。
    类似的,在选定一个form item之后(也就是在收集和处理阶段),事件通常是在form item级别产生的。这里有一个例外:由dialog级别的<filled>元素触发的事件是在dialog级别产生的。FIA定位相应的事件处理,并执行它。如果<catch>元素最终没有跳转到一个dialog,则当前FIA的循环结束,并重新进入选定阶段。

附录 D Timing Properties 附录 A   附录 B  附录 C  附录 E  附录 F
  附录 G   附录 H  附录 I  附录 J  附录 K
  附录 L   附录 M  附录 N  附录 O  附录 P
 
    VoiceXML定义了几个时间的property,这几个peoperty一起用于控制和用户之间的交互。下面的图表描述了这些时间参数工作的方式。在这些图表中,等待DTMF输入或语音输入的起始点都是在最后一个提示语播放结束的时候。
 
一、DTMF Grammars
    DTMF语法使用的property,如timeout, interdigittimeout, termtimeout和termchar在6.3.3节有详细的描述。下面的图表显示了这些property的作用。
    timeout, No Input Provided
    当用户没有输入DTMF按键时,timeout用于确定何时抛出<noinput>事件。一旦输入了第一个DTMF按键,该参数就不再起作用了。
图12:Timing diagram for timeout when no input provided.
    interdigittimeout, Grammar is Not Ready to Terminate
    在图表13中,当没有一个DTMF语法被识别,且用户不再输入DTMF按键时,interdigittimeout用于确定何时抛出<nomatch>事件。
图13:Timing diagram for interdigittimeout, grammar is not ready to terminate.
    interdigittimeout, Grammar is Ready to Terminate
    下面的例子显示了当用户不在输入DTMF按键时,DTMF语法何时可以结束,或继续接受DTMF输入。
图14:Timing diagram for interdigittimeout, grammar is ready to terminate.
    termchar and interdigittimeout, Grammar Can Terminate
    在下面的例子中,termchar为非空,且用户在没有到达interdigittimeout的时长前输入了termchar的字符,用于表示DTMF输入已经结束。输入的termchar的字符不包括在被识别的值中。
图15:Timing diagram for termchar and interdigittimeout, grammar can terminate.
    termchar Empty When Grammar Must Terminate
    在下面的例子中,最后一个DTMF按键的输入使语法结束,此时语法不再接受用户的任何DTMF输入。由于termchar为空,不允许输入任何结束符,因此,识别结束,且返回识别结果。
图16:Timing diagram for termchar empty when grammar must terminate.
    termchar Non-Empty and termtimeout When Grammar Must Terminate
    在上面的例子中,最后一个DTMF按键的输入使语法结束,此时语法不再接受用户的任何DTMF输入。如果termchar为非空,则用户可以继续输入DTMF按键。如果用户在termtimeout的时长内没有继续输入DTMF按键,则识别结束,并返回识别结果。如果termtimeout值为0s(默认值),则在用户输入语法允许的最后一个DTMF按键后立即返回识别结果,而不再等待输入termchar。注意,只有当语法不允许有额外的输入时才使用termtimeout,否则使用interdigittimeout。
图17:Timing diagram for termchar non-empty and termtimeout when grammar must terminate.
    termchar Non-Empty and termtimeout When Grammar Must Terminate
    在下面的例子中,最后一个DTMF按键的输入使语法结束,此时语法不再接受用户的任何DTMF输入。由于termchar非空,用户在termtimeout的时长内输入了termchar的字符后,返回了识别结果(termchar的字符不包括在内)。
图18:Timing diagram for termchar non-empty when grammar must terminate.
    Invalid DTMF Input
    当等待第一或另外的DTMF,当用户输入完成后,三种不同的timeout可以判断用户的输入是否已经完成。如果没有任何的DTMF输入,则使用timeout property;如果输入了一些DTMF按键,但是可以输入额外的DTMF时,则使用interdigittimeout;如果不允许输入额外的DTMF时,则使用termtimeout。在每种情况下,用户都可以输入当前激活的语法不允许的DTMF,但是会导致所收集到的DTMF的字符串不合法。额外的DTMF按键将被收集,除非用户输入termchar的字符,或超过interdigittimeout的时长,此时会产生一个nomatch事件。
 
二、Speech Grammars
    语音语法使用的property,如timeout,completetimeout,和incompletetimeout在6.3.2节和 6.3.4节有详细的描述。下面的图表展示了这些peoperty的作用。
    timeout When No Speech Provided
    在下面的例子中,当用户没有输入语音时,timeout用于确定何时抛出一个noinput事件。
图19:Timing diagram for timeout when no speech provided.
    completetimeout With Speech Grammar Recognized
    在下面的例子中,用户输入了语音,且被语音语法识别。当静音的时间超过了completetimeout的时长后,返回了识别结果。
图20:Timing diagram for completetimeout with speech grammar recognized.
    incompletetimeout with Speech Grammar Unrecognized
    在下面的例子中,用户输入了语音,且没有被语音语法识别,但是用户输入的是一个合法的utterance的前缀。在静音的时间超过incompletetimeout的时长后,抛出了一个nomatch事件。
图21:Timing diagram for incompletetimeout with speech grammar unrecognized.

附录 E Audio File Formats 附录 A   附录 B  附录 C  附录 D  附录 F
  附录 G   附录 H  附录 I  附录 J  附录 K
  附录 L   附录 M  附录 N  附录 O  附录 P
 
    VoiceXML要求平台支持的播放和录音的音频格式如下:
音频格式 媒体类型
Raw(headerless)8kHz 8-bit mono mu-law [PCM] single channel. (G.711) audio/basic(from [RFC1521])
Raw(headerless)8kHz 8 bit mono A-law [PCM] single channel. (G.711) audio/x-alaw-basic
WAV (RIFF header)8kHz 8-bit mono mu-law [PCM] single channel. audio/x-wav
WAV(RIFF header)8kHz 8-bit mono A-law [PCM] single channel. audio/x-wav
表63:Audio Formats Which Platforms Must Support
    ‘audio/basic’ mime type通常使用‘au’头格式和无头的8-bit 8Khz mu-law的格式。如果该mime type用于录音,则必须使用mu-law格式。为了能够播放‘audio/basic’ mime type,平台必须支持mu-law格式,也可以支持‘au’格式。
 
附录 F Conformance 附录 A   附录 B  附录 C  附录 D  附录 E
  附录 G   附录 H  附录 I  附录 J  附录 K
  附录 L   附录 M  附录 N  附录 O  附录 P
 
    这一节是标准化的。
 
一、Conforming VoiceXML Document
    一个合格的VoiceXML文档(Conforming VoiceXML document)是一个格式规范的XML文档。这样的文档必须遵循下面所列出的标准:
      1、该文档必须符合VoiceXML Schema(附录O)中所规定的约束。
      2、该文档的根元素必须是<vxml>元素。
      3、<vxml>元素必须包含“version”属性,且属性值为“2.0”。
      4、<vxml>元素必须使用“xmlns”属性指定VoiceXML的命名空间,值为http://www.w3.org/2001/vxml。
      5、我们推荐,<vxml>元素也要包含“xmlns:xsi”和 “xsi:schemaLocation”属性,表明VoiceXML命名空间的schema的位置。如果指定了“xsi:schemaLocation”属性,则必须包含VoiceXML Schema的一个引用:
      xsi:schemaLocation="http://www.w3.org/2001/vxml
        http://www.w3.org/TR/voicexml20/vxml.xsd"
      6、在根元素之前可以有一个DOCTYPE的声明。如果有DOCTYPE的声明的话,声明中包含的public标识符必须使用正是的公共标识符(Formal Public Identifier)引用VoiceXML的DTD(见附录B)。
      <!DOCTYPE vxml 
             PUBLIC "-//W3C//DTD VOICEXML 2.0//EN"
             "http://www.w3.org/TR/voicexml20/vxml.dtd">
    系统的标识符可以适当的更改。
    DTD的子集一定不能用于覆盖VoiceXML DTD中的任何参数实体。
    下面的例子是一个合格的VoiceXML文档:
      <?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>
           <block>hello</block>
        </form>
										
      </vxml>
    注意,在这个例子中,文档中包含了“xmlns:xsi”和“xsi:schemaLocation”属性,就像是一个XML声明一样。像上面这样的XML声明并不是在所有的XML文档中都是必须的。但是我们强烈鼓励VoiceXML文档的作者在他们的文档中使用XML声明。如果文档的字符编码方式不是默认的UTF-8或UTF-16,且更高级的协议也没有指定一种编码方式,则必须有上述的声明。
    VoiceXML语言或这些合格文档的标准在VoiceXML文档的任何方面都没有指定数量上的限制。元素和字符数据的数量没有最大值,属性值中的字符的长度也没有最大值。
 
二、Using VoiceXML with other namespaces
    VoiceXML的命名空间可以和其他的XML命名空间一起使用,虽然这样的文档不是如上面定义的那种严格的合格VoiceXML文档。在将来,W3C将会提供解决包含多个命名空间的文档的一致性的方法。
 
三、Conforming VoiceXML Processors
    VoiceXML处理器用于解析和处理合格的VoiceXML文档。
    在合格的VoiceXML处理器中,XML解析器必须能够解析和处理在XML和XMLNAMES中定义的格式规范的XML结构。我们不要求合格的VoiceXML处理器使用确认解析器(validating parser)。
    除了该文档描述的一些差别以外,合格的VoiceXML处理器必须是一个合格的SSML处理器和XML语法处理器。如果在处理一个语法文档时检测到一个句法错误,则必须抛出一个“error.badfetch”事件。
    一个合格的VoiceXML处理器必须支持该文档所描述的、所有的VoiceXML元素的句法和语义。因此,当处理一个合格的VoiceXML文档时,对于任何一个VoiceXML支持的元素,它一定不能抛出一个‘error.unsupported.<element>’事件。
    如果一个合格的VoiceXML文档中有非VoiceXML元素,或有一些只在VoiceXML的早期版本中定义的属性,或有在非VoiceXML的命名空间上定义的属性,或有一些不能处理的属性,则当一个合格的VoiceXML处理器碰到这些情况时,必须抛出一个“error.badfetch”事件。
    当合格的VoiceXML处理器碰到一个文档,该文档的根元素指定的命名空间不是VoiceXML而是其他的命名空间,此时VoiceXML处理器要怎样处理还没有明确。
    然而,对于VoiceXML处理器相关的性能特征却没有什么合格不合格的要求。

附录 G Internationalization 附录 A   附录 B  附录 C  附录 D  附录 E
  附录 F   附录 H  附录 I  附录 J  附录 K
  附录 L   附录 M  附录 N  附录 O  附录 P
 
    VoiceXML是XML的一个应用,因此它支持UNICODE。UNICODE定义了一套标准的通用的字符集。
    另外,VoiceXML通过“xml:lang”属性提供了对输入和输出语言的精确控制。它能方便的:
      ·指定输入和输出的语言以覆盖VoiceXML处理器的默认语言;
      ·产生多种语言的输出;
      ·用相应的语言解释用户的输入,即使输入和输出不是同一种语言。

附录 H Accessibility 附录 A   附录 B  附录 C  附录 D  附录 E
  附录 F   附录 G  附录 I  附录 J  附录 K
  附录 L   附录 M  附录 N  附录 O  附录 P
 
    语音是VoiceXML应用中的主要组成部分,但VoiceXML应用中不是只有语音。然而,在大多数的环境中和对于与VoiceXML应用交互的大多数用户来说,听和说讲是最广泛应用的技术,有些用户可能由于暂时(或永久的)情况不能够听和/或说。不能听或说的的用户,特别是那些听力或说话有缺陷的,他们可以通过其他的途径和VoiceXML应用进行交互:
      1、听力有缺陷的用户可以在显示终端上看文本,或者(如果他们同时也不够看的话)通过触觉识别盲文。为了支持那些给语言和/或听力有缺陷的用户使用的特殊的设备,开发者应该在<audio>标记内提供和相应的音频的内容相同的文本。例如:
      <audio src="greetings.wav">Greetings</audio>
    在这个例子中,正常情况下会播放greetings.wav这个音频。然而,如果VoiceXML解释器环境检测到用户正在通过显示终端,或通过触摸输出的盲文和VoiceXMl应用进行交互,则相应的文本"Greetings"会显示在显示终端或输出到盲文设备。
      2、语音有障碍的用户可以通过输入编码的序列与VoiceXMl应用交互,该编码序列在传给VoiceXML平台之前会被转换成文本。这种转换可能是由连接在电话上的一种特殊的硬件装置完成,该硬件把用户的按键(例如传统的标准键盘)转化成文本。也可能是由软件来完成,该软件把12键的电话键盘的DTMF序列转换成文本。
    对于打算使用W3C技术的用户来说,提供多种途径用于信息交互和用户输入是W3C的主要工作。在合适的时候,下面的这些由W3C 的WAI(Web Accessibility Initiative)可达性指导方针也会应用到VoiceXML中:
      ·WAI-WEBCONTENT(Web Content Accessibility Guidelines 1.0)详细解释了怎样让有各种缺陷的人可以容易的进入一个网站。
      ·ATAGIO(Authoring Tool Accessibility Guidelines 1.0)。面向软件开发者的,它说明了怎样使各种创作工具(authoring tools)支持获取web内容的产品,也说明了怎样使软件本身也是可获取的。
      ·UAAGIO(User Agent Accessibility Guidelines 1.0)。面向软件开发者的,它说明了怎样制作可获取的浏览器,多媒体播放器和与它们接口的相关技术。
      ·XAG(XML Accessibility Guidelines)。它是基于XML应用的,面向开发者的。它说明了怎样确保基于XML的应用支持可获取性。
    让有缺陷的人可以进入VoiceXML应用的其他原则如下:
      ·重新使用具有高度可用性的导航结构,例如ANSI/NISO Z39.86-2002 Digital Talking book Standard,http://www.loc.gov/nls/z3986/的导航技术。
      ·在每个可能产生事件的元素中都指定<catch>元素,包括有故障弱化或恢复的功能。
      ·让用户可以控制时间的长度(在timeout之前),合成语音的语速,或其他的一些可以增加(或减少)应答(或完成输入)的时间的变量,特别是当VoiceXML解释器环境已经检测到用户正在使用听/说的辅助设备时。这对于那些有缺陷的用户特别有用。
      ·告诉用户模式是可选的,这样用户就可以另一种方式获得相同的服务,包括转接到人工台和文本电话服务等,或通过互联网获得同样的信息。

附录 I Privacy 附录 A   附录 B  附录 C  附录 D  附录 E
  附录 F   附录 G  附录 H  附录 J  附录 K
  附录 L   附录 M  附录 N  附录 O  附录 P
 
    在VoiceXML的后继版本可能会制定一些标准,通过这些标准,VoiceXML处理器可以保护用户的私有数据。
 

附录 J 与VoiceXML1.0的不同之处 附录 A   附录 B  附录 C  附录 D  附录 E
  附录 F   附录 G  附录 H  附录 I  附录 K
  附录 L   附录 M  附录 N  附录 O  附录 P
 
    以下是VoiceXML1.0和VoiceXML2.0之间的不同之处[VOICEXML-1.0(http://www.w3.org/TR/voicexml20/#re_VOICEXML-1.0)]。
    VoiceXML1.0开发者也许要特别注意VoiceXML2.0与VoiceXML1.0之间的区别。这些区别在Obsolet ElementsIncompatibly Modified Elements章节中有详细的说明。
New Elements
    ·<log>用来记录debug信息(5.3.13)。
    ·<metadata>作为一种用schema来指定metedata信息的方法(6.2,6.2.2)。
Obsolete Elements
    ·<dtmf>被带有“mode=dtmf”属性的<grammar>元素所取代(3.1.2)。
    ·<emp>、<div>、<pros>和<sayas>JSML元素已经被语音合成标记语言[SSML]所取代(4.1.1)。
Incompatibly Modified Elements
    ·在<vxml>元素中,“lang”已变为“xml:lang”(1.5.1)。
    ·在<vxml>元素中,增加必须的xmlns属性。
    ·在<vxml>元素中,用“xml:base”属性取代“base”属性(1.5.1)。
    ·如果平台不支持一个指定的对象,抛出error.unsupported.objectname。对于不支持的对象类型,error.unsupported.format不抛出(2.1.2.1,2.3.5,5.2.6)。
    ·当说出域的值时,一个域的值不表示一个隐含的<say-as>类,一个清晰的<say-as>必须用到。(2.1.4,附录P)。
    ·在<menu>和<choice>中增加“accept”属性(2.2)。
    ·如果<menu>的dtmf属性设为真,而且指定“*”、“#”、“0”之外的DTMF值,error.badfetch(以前是error.semantic)抛出。
    ·去除访问内置资源如语法所需的支持,“builtin”当做访问资源特定平台的URI(2.3.1.2,附录P)。
    ·在<option>元素中增加“accept”属性,在生成语法时,修改“choice phrase”的描述(2.3.1.3,2.2)。
    ·从<subdialog>元素中去掉了“modal”属性。
    ·从<object>元素中,去掉“fetchaudio”属性。
    ·去掉了用<value>去播放一个录音的能力,只有<audio>元素可以用来播放录音(2.3.6,4.1.3,4.1.4)。
    ·在<transfer>元素的dest属性中,用“tel”格式来取代“phone”URI格式。
    ·去掉了在field和form中<filled>元素的同一性(2.4)。
    ·用语音合成标记语言[SSML]中的定义来取代<choice>、<prompt>、<enumerate>和<audio>中的TTS内容。
    ·在<audio>,如果语音文件不能播放,而且元素的内容是空,将不播放语音,并且没有错误事件抛出(4.1.3)
    ·从<value>元素中去掉“class”、“mode”和“recsrc”属性(4.1.4)。
    ·改变标准session变量“session.uui”成“session.telephone.uui”,增加新的通用的session变量“session.connection.protocol.name”和“session.connection.aai”,它们将提供这些或更多的信息(5.1.4)。
    ·用session.connection来取代session.telephone变量。Session.connection不是协议指定的,但更具扩展性。相应的错误名字也有所改变。(5.1.4)。
    ·在<submit>元素的namelist中的ECMAScript对象现在没有定义,但保留作未来的定义。应用程序开发者也许会清晰地object的属性,而不是object自身(5.3.8)。
    ·去除“caching”属性(6.1)。
    ·增加“maxage”和“maxstale”属性(6.1)。
    ·从fetchint属性中去掉“stream”(6.1.1,6.3.5)。
    ·从fetching属性中去除“caching”(6.3.5)。
    ·特定平台的全局命令语法是可选的(6.3.6)。
Modified Elements
    ·平台也许会在field和utterance level confidence之间有些微差别。Field$confidence和application.lastresult$.confidence也许有所不同(2.3.1,3.1.6.4,5.1.5,6.3.2)。
    ·<subdialog>元素增加了“srcexpr”属性(2.3.4)。
    ·<record>元素增加了“maxtime”和“dest”影子变量(2.3.6)。
    ·<transfer>元素增加了“transferaudio”属性;为bridge transfer增加“maxtimedisconnect”和“unknown”值,并增加了更多的error.connection事件(2.3.7)。
    ·<transfer>增加“aai”和“aaiexpr”属性,这样<transfer>元素可以传递数据(2.3.7)。
    ·<link>元素增加“dtmf”属性(2.5)。
    ·W3C Speech Recognition Grammar Specification[SRGS]的XML Form必须在<grammar>中支持(3.1)。
    ·<prompt>元素中增加“xml:lang”属性(4.1)。
    ·<prompt>元素中增加可以是“speech”和“hotword”值的“bargeintype”属性(4.1)。
    ·<audio>元素增加“expr”属性(4.1.3)。
    ·增加描述最后识别结果的应用程序变量“application.lastresult$”,包含n-best(5.1.5)。
    ·元素<throw>、<choice>、<link>和<return>增加“event”、“eventexpr”、“message”和“messageexpr”属性(5.2.1)。
    ·<catch>增加“_event”变量(5.2.2)。
    ·<catch>元素不再允许用一个空串值去指定事件属性(5.2.4)。
    ·增加“error.badfetch.http.nnn”作为预定义的错误类型(5.2.6)。
    ·增加“error.badfetch.protocol.<response code>”作为预定义的错误类型(5.2.6)。
    ·增加“maxspeechtimeout”事件(5.2.6)。
    ·增加“error.unsupported.language”预定义错误类型(5.3.6)。
    ·<submit>元素用“enctype”来提供“multipart/form-data”值(5.3.8)。
    ·<script>可以出现在<form>元素中(5.3.12)。
    ·不能从URI中提取fetchaudio不再产生badfetch事件;而是不再播放语音文件。(6.1.1)。
    ·HTTP是强制性的(6.1.4)。
    ·增加“maxspeechtimeout”属性(6.3.2)。
    ·平台对“completetimeout”属性的支持是可选的。然而,不支持此属性的平台必须用completetimeout的最大值和incompletetimeout值来作为incompletetimeout的值,而且必须证明它(6.3.2)。
    ·增加“bargeintype”属性(6.3.4)。
    ·对fetch增加“fetchaudiodelay”和“fetchaudiominimum”属性(6.3.5)。
    ·增加“maxnbest”session属性(6.3.6)。
    ·增加“universals”属性(缺省值为“none”)(6.3.6)。
    ·为fetching属性增加缺省值。对fetching的属性是“maxage”和“maxstale”,这两属性同样适用于<choice>、<subdialog>、<object>、<link>、<grammar>、<audio>、<goto>、<submit>和<script>。
说明
    ·说明语法结果是怎样映射到VoiceXML的,包括如下部分:接受输入的“input items”的概念;为了匹配form_level语法,只有input items可以被填充;field_level的语法不能填充input items,但可以填充当前的field。<object>元素可填充并可以触发filled动作;为语义映射和在lastresult$上的效应、影子变量和在FIA中的处理过程增加设计原则(1.2.4,2.1.4,2.1.5,2.1.6.2.3,2.2,2.3.1,2.3.1.3,2.3.5,2.3.6,2.3.7.2,2.4,2.5,3.1.1,3.1.6,3.1.6.1,3.1.6.2,3.1.6.3,3.1.6.4,附录C)。
    ·如果没有输入输出语音资源,必须抛出error.noresource事件(1.2.5,5.2.6)。
    ·根文档叶文档之间的定义和转接(1.5.2)。
    ·引用应用程序根文档和它的语法(1.5.2)。
    ·当一个子对话框以唯一fragment identifier调用时,根和叶文档没有改变,这些文档用来初始化根和叶的关联关系(1.5.2)。
    ·在根到根的转换中,当前和目标应用程序有同样的名字时,根关联关系的初始化是由缓存策略决定的。(1.5.2)。
    ·URI的说明,特别是fragment identifiers,与RFC2396相关(1.5.2,2.3.4,5.3.7,5.3.8,6.1.1)。
    ·根文档是怎样在多文档应用程序中处理的说明和用根文档的好处(1.5.2)。
    ·用<goto>元素,<subdialog>把控制转向别一个<subdialog>和另一个对话框(1.5.3)。
    ·当在解释和用户之间不再有联接时,增加区域描写最终处理状态。在<catch>元素中取消最终处理描述(1.5.4,5.2.2)。
    ·在Form中指定的语法优先于<Form>元素中的缺省语法(2.1)。
    ·当运行不支持的<object>实例时的行为(2.1.2.1,2.3.5)。
    ·如果平台不支持指定的<object>元素,error.unsupported.object.objectname抛出(2.1.2)。
    ·在field中的多重提示不必有count属性。在field中的一个或多个语音提示根据4.1.6中的提示选择算法依次播放(2.1.4)。
    ·在form item中的<goto nextitem>的效果(2.1.5)。
    ·当用<goto nextitem>元素时,变量、条件和计数没有重设(2.1.5)。
    ·mixed initiative对话需要form级的语法,对mixed initiative对话有许多开发风格,包括在<field>元素中用<initial>和cond属性(2.1.5)。
    ·在collect phase中,带有语音播放的<transfer>、<subdialog>、<object>元素的行为(2.1.6)。
    ·在FIA处理过程和<filled>元素中的事件句柄选择(2.1.6.2)。
    ·在FIA的select和collect phase,如果发生错误,会抛出一个事件,FIA将直接进入process phase(2.1.6.2,2.1.6.2.1,2.1.6.2.3)。
    ·当一个错误抛出,后续的执行元素并没有执行。如果没有清晰的转接控制,隐含的<exit>将执行(2.1.6.2.1,5.3)。
    ·引起运行中断的列举的执行关联元素(2.1.6.2.3)。
    ·<reprompt>元素不能中止FIA(2.1.6.2.3)。
    ·说明互斥孤立属性和子内容的规定和行为(2.2,2.3.4,2.3.7,2.5,3.1.1.4,4.1.3,5.2.1,5.3.7,5.3.8,5.3.9,5.3.10,5.3.12,6.4)。
    ·在<menu>中,如果dtmf="true"但<choice>已经明显地指定不是“0”、“*”、“#”的DTMF,这是一个语法错误。如果有多于9个choice而没有指定dtmf,这样就没dtmf就不会自动地赋值(就没有dtmf输入可以匹配choice),但不会产生错误(2.2.3)。
    ·<enumerate>元素的使用(2.2.4,2.3.1)。
    ·<grammar>覆盖在<choice>中自动产生的语法(2.2.2)。
    ·<choice>用expr求值URI,以便转向相应的文档(2.2.2)。
    ·<choice>事件句柄没有控制转向,引起menu重执行(2.2.2)。
    ·在<choice>、<option>、<link>DTMF属性中指定的DTMF序列等同于简单的DTMF语法,在此,DTMF属性适用于序列的识别,然而不象语法,空格在DTMF序列里是可选的(2.3.1.3,2.5)。
    ·在<menu>、<choice>中,大致的语法生成规范(2.2.5)。
    ·如果form item没有填充,而且其cond属性没有指定,或者其值为true,它被运行(2.3,2.3.1)。
    ·在form中,form item的名字必须是唯一的。在<script>元素中声明的变量声明在包含<script>元素的范围中(2.3.1,5.3.12)。
    ·重组整个form item以便澄清特征适用于哪上form item。这也表明了<initial> form item也包含<property>和<catch>元素(2.3)。
    ·在转换到boolean后,求出“cond”的表达式。这影响在form item<field>、<block>、<initial>、<subdialog>、<object>、<record>和<transfer>(2.3);<prompt>(4.1)和<catch>(5.2.2)中的“cond”属性。
    ·影子变量是可写的而且可以被应用程序修改。改变“application.lastresult$”以便其是可写而且可被应用程序修改(2.3,5.15)。
    ·当DTMF属性定义后,给field变量赋值(2.3.1)。
    ·form item变量必须遵循ECMAScript变量的命名规范(2.3.1,5.1)。
    ·如果一个指定的<field> builtin类型不被平台支持,将抛出一个error.unsupported.builtin事件,如果一个平台支持builtin类型,它必须在指定的语言中支持所有的builtin类型(2.3.1,5.2.6,附录P)。
    ·用带有“builtin:”URI scheme的DTMF和speech语法(2.3.1.2)。
    ·当在<option>中没有指定“value”或CDATA时,输入DTMF时,串返回(2.3.1.3)。
    ·<option>和<grammar>可以并发地在<field>中指定语法(2.3.1.3)。
    ·当访问<initial>时,通常的语法范围规则有效;在特殊情况下,没有field语法被激活(2.3.3)。
    ·一个Form允许多重的<initial>元素,在运行中它是怎样被选择的(2.3.3,附录 C)。
    ·在<subdialog>中的变量范围(2.3.4)。
    ·<subdialog>的关联是独立于它的呼叫关联的(变量实例是不能共享的),但是它的关联是符合语法、事件、和变量的通常范围规则(2.3.4)。
    ·如果没有指定相应的<param>,在<subdialog>中,用“expr”属性设置变量(2.3.4)。
    ·子对话框的执行关联的描述(2.3.4)。
    ·说明<return>怎样传递<subdialog>中的数据到调用它的对话框(2.3.4,5.3.10)。
    ·子对话框中的变量以名字和在文档的次序上匹配参数,参数值在<param>元素的关联关系上求值(2.3.4)。
    ·当一个无效的转接发生在<subdialog>、<goto>、<submit>中,error.badfetch错误抛出,在转接过程中错误在此处理的区域是依赖于平台的(2.3.4,5.3.7,5.3.8)。
    ·没有<return>的<subdialog>继续运行,直到它遇到一个<exit>或直到没有符合条件的form item让FIA去选择(等于一个<exit>)(2.3.4)。
    ·一个独立查询串不是一个有效的URI:没有特别的处理,因此需要在<subdialog>和<goto>中指定的转接URI(2.3.4)。
    ·<object>元素自己可以断定它接受的参数名字或值是不有效。如果这样,一个错误抛出(它也许是一个标准错误或者是一个特定对象错误)(2.3.5)。
    ·在录音过程中用户挂机正常中止录音。先于挂机录下来的数据可以返回到服务器(2.3.6)。
    ·在录音过程中的语法解释(2.3.6)。
    ·在<record>中的field变量是对录下来的语音文件的引用,当传递录下来的数据到服务器,<submit>元素的“enctype”应该设为“multipart/form-data”(2.3.6,5.3.8)。
    ·当<record>的dtmfterm属性设为false,DTMF输入接收,行为的说明(2.3.6)。
    ·在得到语音数据时,录音开始时的说明和录音中止时的行为(2.3.6)。
    ·<record>变量是怎样执行的随平台而有所不同。(虽然所有的平台必须支持在<audio>和<submit>中指定的行为)(2.3.6)。
    ·缺省时,<record>的finalsilence和maxtime属性等于平台指定的值(2.3.6)。
    ·语音和DTMF中止的<transfer>返回near_end_disconnect状态(2.3.7)。
    ·在<transfer>元素中的“dest”属性的值(2.3.7)。
    ·<transfer>元素form item变量对于blind transfer是没有定义的(undefined)(2.3.7)。
    ·<transfer>的修改包括:当平台不能处理“dest”或“destexpr”URI的错误事件。当 blind transfer发生时,平台马上挂断的说明。如果平台不能执行blind或bridge transfer事件抛出的规定。(虽然有些错误条件也许会报告)对blind transfer来讲,联接状态不能得到的陈述。对blind transfer来讲,transferaudio被忽略。在bridged transfer之中和之前的语音播放,包括这些情形,在联接建立前transferaudio结束;在开始transfer前,队列中的语音开始播放,等待输入和播放语音时序的陈述。增加name$.inputmode和name$utterance影子变量。在转接过程中,平台支持等待输入是可选的。(2.3.7,5.2.6)。
    ·在bridged <transfer>元素中,在外呼期间,bargetype是固定为“hotword”(2.3.7)
    ·在呼叫转移或者试图呼叫转移时,如果主叫挂机,<transfer>变量和影子变量没有设置。如果一个呼叫先于应答被主叫用语音或DTMF中断,duration影子变量置为零(2.3.7.2.2)。
    ·<transfer>的utterance影子变量设为DTMF结果,如果转接被DTMF输入中止(2.3.7.2.2)。
    ·在bridge transfer中,在联结建立之前,主叫通过DTMF或语音命令强迫被叫挂机的地址状态(2.3.7.2.2)。
    ·<link>有零和更多的语法(2.5)。
    ·<link>元素抛出的事件在激活的区域中是由最有资格的<catch>元素处理的(2.5)。
    ·<link>元素可以是<field>和<initial> form item的child(2.5)。
    ·包含<link>有“scope”属性的元素,在<link>语法的范围内没有任何效果(2.5)。
    ·在<link>中,其内容(如:<grammar>)的任何URI被求值。在激活的对话区域和上下文中,其属性中的URI和ECMAScript表达式被求值(2.5)。
    ·在<grammar>元素中的“xml:lang”属性在平台上不必有多语言的支持(3.1)。
    ·不支持的语法语言产生error.unsupported.language事件(3.1.1)。
    ·不支持的语言可以表明在<throw>元素message 变量中(3.1.1)。
    ·在数字表达式中一个串的数字结果(ECMAScript将自动地变换成数字);串不能有前导零(3.1.1)。
    ·除了XML的SRGS的XML格式,对于inline语法格式SRGS <grammar>元素在VoiceXML 2.0被扩展以允许PCDATA(3.1.1,3.1.1.4)。
    ·隐含的语法(如option)不支持weight(3.1.1.3)。
    ·在<grammar>中的type属性优先于其它可能的media类型;如果指定了,与语法的类型冲突,一个错误将抛出(3.1.1.2,3.1.1.4)。
    ·<grammar>属性的应用和解释从SRGS中继承(version、xml:lang、mode、root、tag-format、xml:base),在线XML SRGS语法遵从SRGS中的行为。对于在线ABNF SRGS语法以及外部的ABNF和XML SRGS语法,必须忽略这些属性。对所有其它的语法类型,这些属性的解释和应用是依赖于平台的(3.1.1.4)。
    ·在SRGS语法的root rule中,不必是public rule(3.1.1.4)。
    ·在form_level和field_level之间的差别(3.1.6,3.1.6.1,3.6.1.2)。
    ·<grammar>元素的“mode”属性与grammar mode冲突(3.1.1.4)。
    ·“slot”可以在任意的嵌套级别上用圆点分隔选择属性,去掉寓意排列的索引表达式(如“pzza.toppings[3]”)文本是支持的(3.1.6.1)排列的DTMF和语音语法描述;DTMF语法可以返回一组属性对和一个串值(3.1.2)。
    ·匹配的form_level语法在input item可以覆盖存在的值,这些<filled>以Section 2.4和附录 C(3.1.6.1)所描写的方式处理(3.1.6.1)。
    ·排列的DTMF和语音语法描述;DTMF语法可以返回一组属性对和一个串值(3.1.2)。
    ·如果一个文档包含一个指定范围的语法,在<link>或者在菜单<choice>中,此语法包含一field,error.badfetch抛出(3.1.3)。
    ·当<form>和<menu>等待输入时,如果没有语法激活,error.semantic事件抛出(3.1.4)。
    ·inputmodes属性不影响语法的激活(3.1.4,6.3.6)。
    ·在<grammar>元素内正在运行的语义附件(3.1.5)。
    ·<prompt>的“bargein”和“bargeintype”属性的缺省值是由“bargein”和“bargeintype”决定的(4.1)。
    ·时间是一个非负的数值,其后须有ms或s。下列属性以时间作为它们的值:<prompt>-timeout;<transfer>-maxtime(NB:现在缺省是“0s”),connecttimeout;<record>-maxtime,finalsilence。下列属性有时间值:fetchtimeout、completetimeout、incompletetimeout、maxspeechtimeout、interdigttimeout、termtimeout、timeout、fetchaudiodelay、fetchaudiominimum、fetchtimeout(4.1,2.3.6,2.3.7,6.1.1,6.3)。
    ·如果文本中包含语音合成标志,应将之放在<prompt></prompt>对之间(4.1.2)。
    ·在<prompt>中的“xml:lang”属性不需要多语言的支持(4.1.1)。
    ·不支持的合成语言产生error.unsupported.language事件(4.1.1)。
    ·在<audio>元素中的可选内容(4.1.3)。
    ·当<audio>的“expr”的值是ECMAScript的undefined,元素的内容忽略。如果它等于一个无效的URI,或者格式不支持,等等,将激活回调策略(4.1.3)。
    ·在<audio>中,平台优化stream audio(4.1.3)。
    ·在<prompt>元素之外的单独的<value>元素是合法的(4.1.4)。
    ·在<audio>中的expr的简单求值,以便它不被特别对待;可以用CDATA来处理一引起特别的XML字符。它不会当做SSML文档或一个文档片断来对待(4.1.4)。
    ·当<prompt>元素的“bargein”是false,DTMF输入缓冲区被删除(4.1.5)。
    ·在一组语音提示中bargein出现时的行为(4.1.5)。
    ·当prompt的“bargein”属性是false,当提示语音播放输入没有缓存(任何已经缓存的DTMF被抛弃)(4.1.5)。
    ·<prompt>的“bargeintype”属性应用于DTMF输入以及语音输入(4.1.5.1)。
    ·在Form的<initial>元素中,支持语音提示的计数(4.1.6)。
    ·每个<prompt>有它自己的timeout值,当语音提示排队,在缺省情况下,<prompt>的timeout属性等于timeout property(4.1.7)。
    ·在语音队列和input collection之间的关系(4.1.8)。
    ·与转接执行无关的异步事件(如disconnect)是可缓存的,它一直缓存到抛出前的等待状态(4.1.8)。
    ·说明解释器和FIA之间的映射;语法的激活、并发等待伴有语音播放的输入的出现(4.1.8)。
    ·当prompt的bargein属性是false,输入没有收集,在转接状态下缓存的DTMF如4.1.5中所描述的一样被删除(4.1.8)。
    ·VoiceXML和ECMAScript变量是同样的变量空间的一部分;在ECMAScript中申明的变量可以直接用在VoiceXML中(5.1)。
    ·VoiceXML变量名,包括域名,必须符合ECMAScript规则;在申明的变量名中不能包含一个点;在field名字中,“a.b”是非法的(5.1)。
    ·VoiceXML变量和变量区域必须符合ECMAScript区域链;作为结果,对一个没有声明的变量的引用产生error.semantic错误。(5.1.1,5.1.2)。
    ·变量的范围(5.1.2)。
    ·在应用程序根文档下的应用程序和文档的变量范围(5.1.2)。
    ·只有一些cond操作符需要转义(5.1.3)。
    ·没有指定根、带有变量X的文档,这个变量可以用application.x和document.x引用(5.1.3)。
    ·说明“application.lastresult$”是一个ECMAScript数组(5.1.5)。
    ·lastresult应用程序变量的持续性说明(5.1.5)。
    ·lastresult以confidence和语法的区域排序(5.1.5,2.3.1,3.1.4)。
    ·当DTMF语法匹配,application.lastresult$的解释变量包含匹配的数字串(5.1.5)。
    ·对激活文档的相对URL的求值(5.2)。
    ·catch 元素用最深层(事件在此激发,但catch不在此定义)的元素属性。(5.2)。
    ·当事件抛出后,VoiceXML通常不指定(5.2.1)。
    ·VoiceXML事件的处理通常符合XML和DOM2事件处理的模式(5.2,5.2.2,5.2.4)。
    ·当有同样的或有同样前缀的名字事件出现时,与<catch>相关的事件计数是递增的,这影响到5.2.4部分的有正确计数的catch句柄的选择(5.2.2)。
    ·<catch>的“event”和“count”属性的定义(5.2.2)。
    ·当用户挂机时在<catch>中没有内在的限制(5.2.2)。
    ·<catch>的事件必须是串“.”,它表示所有的事件将被捕获(5.2.2)。
    ·没有指定的事件属性的<catch>等于带有event="."的<catch>(5.2.2,5.2.4)。
    ·“as if by copy”catch inheritance(5.2,5.2.4)。
    ·catch元素选择算法(5.2.4)。
    ·用前缀匹配作为符号匹配,而不是字符串匹配(5.2.4)。
    ·“error.badfetch”预定义的错误类型(5.2.6)。
    ·直到文档准备运行,error.badfetch抛出。变量初始化是不是执行的一部分依赖于平台(5.2.6)。
    ·“error.badfetch”事件抛出的情形说明,一个相似的浏览器也许抛出其名字是扩展的预定义事件(5.2.6)。
    ·应用程序和平台指定的事件类型应该用反转的Internet域名习惯以防名字的冲突(5.2.6)。
    ·HTTPS不象HTTP一样是同样的协议(5.2.6)。
    ·在SESSION的第一个文档中出现的错误,在装载文档、进入FIA前,错误出现时以特定平台的方法处理(5.2.6)。
    ·不将“divide by 0”作为一个run_time错误,但它抛出error.semantic错误(ECMAScript不报告一个错误)(5.2.6)。
    ·在大多数情况下,事件error.noauthorization被抛出的情况多于连接失败(5.2.6)。
    ·error.unsuport.element事件只在VoiceXML 2.0元素中抛出(5.2.6)。
    ·如果试图赋值给一个没有声明的变量,error.semantic事件抛出。ECMAScript对象,如:o.foo,可以直接赋值,如果试图去声明它们,将产生一个error.semantic事件(5.3.2)。
    ·<clear>的namelist也许指定变量而不是form item变量,它们可以被重设置(5.3.3)。
    ·在catch元素中的<reprompt>的效果(5.3.6)。
    ·<reprompt>元素在有<goto>元素的<catch>中的行为(5.3.6)。
    ·当它们以<submit>、<return>、<goto>结束,在执行<catch>元素后,FIA执行通常的语音队列(5.3.6,附录 C)。
    ·在<catch>外面,<reprompt>没有任何效果(5.3.6)。
    ·在文档变量中的<goto>的URI的效果(5.3.7)。
    ·在Form item转换时,<goto>所出现的错误,这些错误事件在对话的范围里被处理(5.3.7)。
    ·在<goto>中,如果nextitem和expritem引用一个不存在的form item,一个error.badfetch事件被抛出(5.3.7)。
    ·在VoiceXML或ECMAScript中声明的变量可以被提交(5.3.8)。
    ·在一些情况下,<submit>可以被中间缓存满足(5.3.8)。
    ·<exit>不能抛出一个“exit”事件(5.3.9)。
    ·<exit>的“expr”属性的值是一个ECMAScript表达式(5.3.9)。
    ·没有<script>的“type”属性(5.3.12)。
    ·<script>与<var>元素和<form>元素中的form item变量一起求值(5.3.12)。
    ·在<script>元素中的“charset”的定义(5.3.12)。
    ·<log>的处理是依赖平台的(5.3.13)。
    ·预取的修改(6.1)。
    ·“fetchint”属性的效果(6.1.1)。
    ·缓存策略的选取(6.1.2)。
    ·缓存遵循HTTP 1.1的缓存纠正规则(6.1.2)。
    ·没有标志机制去控制应用程序根文档(6.1.2.1)。
    ·<meta>的第一个类型是由属性名字和内容表达,第二个类型是由http-equiv和内容表达(6.2.1)。
    ·当<property>元素的不同的值在同一级别上被指定,在文档次序上的最后一个有效。
    ·属性可以在field input items但不是在control items上设置(6.3)。
    ·平台指定的属性的格式(6.3.1)。
    ·语音合成属性“completetimeout”和“incompletetimeout”的定义(6.3.2)。
    ·传向<subdialog>元素的参数值永远是数据(6.4)。
    ·时间指定值的定义(6.5)。
    ·数字格式用在CSS2中,ASR属性confidencelevel、sensitivity和speedvsacurracy的值也是这种格式(6.5,6.3.2)。
    ·在<var>中限制域名和名字属性,在<goto>中限制nextitem属性到NMTOKEN;扩展<assign>中的名字属性如NMTOKEN,但也允许“$”(对于影子变量的同值);限制在<filled>中的namelist属性到NMTOKENS;扩展<exit>、<submit>、<clear>和<return>的namelist属性如NMTOKENS,但允许“$”(附录 B,附录 O)。
    ·限制<choice>的内容模式到PCDAT和<grammar>元素;<emumerate>不能出现在另一个<enumerate>元素里(附录 B,附录 O,2.2.4)。
    ·(不象schema)DTD不能正确地表达,<metadata>元素可以从其它XML名字空间包含元素(附录 B)。
    ·FIA说明,application.lastresult$在每一次成功的识别后赋值(附录 C)。
    ·FIA说明,在当前form和menu里的匹配<link>语法,在当前form和menu之外的匹配菜单<choice>语法(附录 C)。
    ·FIA规定,活动语法的收集不包括<subdialog>链的语法(附录 C)。
    ·FIA初始化期间,<script>和form item元素的初始化(附录 C)。
    ·在FIA执行期间,事件也许在数点上产生,它们是怎样处理的取决于FIA的激活部分(附录 C)。
    ·在FIA的collect phase,只有从input item和<initial>的语音提示被选择,它们的提示计数不增加。当form item执行时,在<block>中的语音提示排序开始(附录 C)。
    ·对各种DTMF输入的timeout的使用(附录 D)。
    ·如果不能处理非标准VoiceXML元素和属性,它必须抛出error.badfetch错误(附录 F)。
    ·记录在内置应用的解释和希望的平台的依赖性(附录 P)。
    ·内置DTMF和语音语法的参数化(附录 P)。
    ·相反的参数到内置数据的处理(附录 P)。
    ·从内置类型“number”返回的结果值(附录 P)。
    ·如果不说的话,货币码不指定(附录 P)。
    ·只有数字和boolean语法可以参数化(附录 P)。
    ·用<say-as>表达内置值的描写(附录 P)。
    ·在<field>中带有指定内置类型语音和DTMF<grammar>元素。
Miscellaneous
    ·用XML编码属性、推荐的schema属性和转义的非法XML字符(<、>、&等)更新例子。
    ·用试验性的media type(如:“application/srgs+xml”)传递到IETF。
    ·增加描写VoiceXML的初始化和它是怎样与其它工作相关连的部分(1)。
    ·为<audio>、<record>指定一组需要的语音格式(1.2.4)。
    ·关于语音和DTMF语法、语音、TTS、录音和Tansfer支持(1.2.5)。
    ·平台应该用User_Agent HTTP header来鉴别它们自身(1.2.5)。
    ·内置类型和基础语法是提供信息的而不是标准化的(2.3.1,2.3.1.1,2.3.1.2,附录P)。
    ·匹配SRGS 1.0规范的更新部分(3)。
    ·语义解释器怎样映射到form变量的描述(3.1.6)。
    ·匹配SSML 1.0更新的部分(4)。
    ·保留变量名字空间“_$”作内部应用(5.1)。
    ·带有“session”、“application”、“document”、“dialog”名字的变量和form items不鼓励使用(5.1.2)。
    ·metadata信息在<metadata>中而不是在<meta>中表达,用<meta>取除推荐的metadata信息。用RDF schema和Dubin Core属性增加推荐的metadata信息(6.2)。
    ·当解释器遇到不能处理的属性时,改变一致性行为。它不能抛出error.unsupport.property,必须忽略属性(6.3.1)。
    ·DTD更多用于提供信息而不是标准化(附录 B)。
    ·一组需要的语音格式(附录 E)。
    ·例如用“audio/x-wav”不代替“audio/wav”,当正式地用IETF登记时,增加媒体类型将被采纳的记录 (附录 E)。
    ·修改符合VoiceXML处理器的定义,包含需要支持在文档中描写的所有元素的语法和语义(附录 F)。
    ·符合文档部分引用格式而不是DTD限制(附录 F)。
    ·符合DTD是提供信息的,而schema是标准化的。一个符合的文档必须在根元素中指定VoiceXML名字空间。Version="2.0"属性也必须写明,应提供“xsi:schemaLocation”来指明VoiceXML schema的位置。DOCTYPE的声明是任选的。当遇到没有VoiceXML指定根元素时,文档时处理器的行为是没有定义的(附录 F)。
    ·修改VoiceXML可以表达可访问性的需要和论点描述(附录 H)。
    ·可重用的附录(附录 K)。
    ·增加引用附录(附录 M)。
    ·增加描述VoiceXML媒体类型和带有包含致电IETF备忘录来登记VoiceXML媒体类型的文件附录(附录 N)。
    ·VoiceXML标准化定义,在语法和合成规范中,从部分schema中,用两个其它的schema来改编定义(附录 O)。
    ·用XML Spy4.4,XSV(June 2002 version)和Xerces 2(Java和C++版本)验证schema(附录 O)。
    ·为VoiceXML 2.0增加完整的Schema链接(附录 O)。

附录 K 重用性 附录 A   附录 B  附录 C  附录 D  附录 E
  附录 F   附录 G  附录 H  附录 I  附录 J
  附录 L   附录 M  附录 N  附录 O  附录 P
 
一、可重用的对话成分
    定义:一个应用程序包的片断可以被任何应用程序和其它可重用的对话框组件调用。一个可重用的对话框组件(RDC)封装了与访问者交互的代码。
    可重用的对话框组件提供了pre_packaged的“out-of-box”功能,此功能可以让开发者去快速地用所提供的标准的缺省的设置和行为去建立应用程序。他们将开发人员从繁重而错综复杂的开发任务(如创建一个稳定的语音对话框、信任分数解释器、错误恢复机制、提示等等)中解脱出来。如果有必要提供应用程序指定的提示、词汇、重试设置等等,上述的行为可以由开发人员定制。
    在此VoiceXML版本中,只有<subdialog>和<object>是可重用组件。这些组件与在应用程序中调用子过程相同的方式被调用。这些组件用一组定义得很好的参数配置,它们以一种相对有所限制的方式与调用者交互,在调用结束后,组件会返回一个定义得很好的结果,并控制返回到组件被调用点。这对模块化的重用性有着重要的意义,而且特别容易使用。在<subdialog>和<object>这两种组件中,只有<subdialog>是VoiceXML的固有功能。从另一个角度来讲,<object>也许可以提供更高级、重用性更好的功能,而这些功能是标准中所没有的。
 
二、模板和例子
    虽然可重用的对话框组件有上面描述的模块化、重用性和易于使用等优点。这些组件的缺点是它们必须非常小心地设计。有时还会出现下面的情况,尽管你非常小心地去设计了,应用程序开发者仍会遇到组件不能很方便地配置以便处理应用设备的情况。另外,当组件与调用者之间的交互使得组件设计者可能去创建一个组件,这个组件可以工作在一个全异的环境中。它也可能使得用户的与组件的交互看起来与应用程序的其它部分分离。
    在这种情形下,应用程序开发者也许希望以例子和模板的方式重用VoiceXML源代码。这些代码可以非常容易地用来集成到一个特定的应用程序中。
    这些模板和例子可以被分离的VoiceXML代码创建,然后可以分发而应用到其它应用程序中。这种形式的可重用性允许用户拷贝VoiceXML代码在必要时去修改它。
    VoiceXML通过保持在Form元素之间的分离促进了这种形式的可重用性。就这点来讲,VoiceXML和[HTML]是相同的。一个HTML表可以从一个HTML页面拷贝到另一个,因为表可以不管它的前后链接而显示出来。
    虽然参数化、模块化和可维护性可以被这种方式牺牲,但是它有简单、快速和不寻常的可定制性。

附录 L Acknowledgements 附录 A   附录 B  附录 C  附录 D  附录 E
  附录 F   附录 G  附录 H  附录 I  附录 J
  附录 K   附录 M  附录 N  附录 O  附录 P
 
    此W3C规范基于VoiceXML 1.0,VoiceXML 1.0是2000年5月由Voice Forum制定的。 VoiceXML Forum的作家有:IBM的Linda Boyer;Lucent Technologies的Peter Danielsen;Motorola的Jim Ferrans;AT&T的Gerald Karam;Motorola的David Ladd;IBM的Bruce Lucas;Lucent Technologies的Kenneth Rehor。
    参与此版本写作的有W3C Voice Browser Working Group的成员。下列人员对此规范作出了特别的贡献。
       ·Nuance Communications的Dan Burnett
       ·Unisys的Deborah Dahl
       ·Lucent的Peter Danielsen
       ·Cisco的Martin Dragomirecky
       ·Motorola的Jim Ferrans
       ·SpeechWorks International的Andrew Hunt
       ·AT&T的Gerald Karam
       ·Dynamicsoft的Dave Ladd
       ·Sun Microsystems的Paul Lamere
       ·IBM的Bruce Lucas
       ·PipeBeach的Scott McGlashan
       ·General Magic的Mitsuru Oshima
       ·Tellme的Brad Porter
       ·Nuance Communications的Ken Rehor
       ·Tellme的Steph Tryphonas
    VoiceXML工作组还将感谢Dave Raggett和Jim Larson在管理上所给予的无价的支持。

附录 M 参考 附录 A   附录 B  附录 C  附录 D  附录 E
  附录 F   附录 G  附录 H  附录 I  附录 J
  附录 K   附录 L  附录 N  附录 O  附录 P
 
一、标准化参考
[CSS2]
    "Cascading Style Sheets,level 2,CSS2 Specification",Bos et al.W3C Recommendation,May 1998.
    请参照:http://www.w3c.org/TR/REC-CSS2/
[ECMASCRIPT]
    "Standard ECMA-262 ECMAScript Language Specification", Standard ECMA-262, December 1999.
    请参照:http://www.ecma.ch/ecma1/STAND/ECMA-262.asp
[RFC1521]
    "MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies", IETF RFC 1521, 1993.
    请参照:http://www.ietf.org/rfc/rfc1521.txt
[RFC2396]
    "Uniform Resource Identifiers (URI): Generic Syntax", IETF RFC 2396, 1998.
    请参照:http://www.ietf.org/rfc/rfc2396.txt
[RFC2616]
    "Hypertext Transfer Protocol -- HTTP/1.1", IETF RFC 2616, 1999.
    请参照:http://www.ietf.org/rfc/rfc2616.txt
[RFC2806]
    "URLs for Telephone Calls", IETF RFC 2806, 2000.
    请参照:http://www.ietf.org/rfc/rfc2806.txt
[RFC3066]
    "Tags for the Identification of Languages", IETF RFC 3066, 2001.
    Note that [XML] adopted RFC3066 through an errata as of 2001-02-22. RFC3066 obsoletes [RFC1766].
    请参照:http://www.ietf.org/rfc/rfc3066.txt
[SSML]
    "Speech Synthesis Markup Language Version 1.0". Burnett, Walker and Hunt. W3C Working Draft, December 2002.
    请参照:http://www.w3.org/TR/2002/WD-speech-synthesis-20021202/
[SRGS]
    "Speech Recognition Grammar Specification Version 1.0". Hunt and McGlashan. W3C Candidate Recommendation, June 2002.
    请参照:http://www.w3.org/TR/2002/CR-speech-grammar-20020626/
[UNICODE]
    "The Unicode Standard". The Unicode Consortium.
    请参照:http://www.unicode.org/unicode/standard/standard.aspl
[XML]
    "Extensible Markup Language (XML) 1.0". Bray et al. W3C Recommendation.
    请参照:http://www.w3.org/TR/2000/REC-xml-20001006
[XML-BASE]
    "XML Base", J. Marsh, editor, W3C Recommendation, June 2001.
    请参照:http://www.w3.org/TR/2001/REC-xmlbase-20010627/
[XMLNAMES]
    "Namespaces in XML". Bray et al. W3C Recommendation, January 1999.
    请参照:http://www.w3.org/TR/1999/REC-xml-names-19990114/
 
二、Informative References
[ATAGIO]
    "Authoring Tool Accessibility Guidelines 1.0", Treviranus et al. W3C Recommendation, Feburary 2000.
    请参照:http://www.w3.org/TR/2000/REC-ATAG10-20000203/
[DC]
    "Dublin Core Metadata Initiative", a Simple Content Description Model for Electronic Resources.
    请参照:http://purl.org/DC/
[HTML]
    "HTML 4.01 Specification", Dave Raggett et al. W3C Recommendation, December 1999.
    请参照:http://www.w3.org/TR/1999/REC-html401-19991224/
[IANA]
    "IANA Character Sets", IANA.
    请参照:http://www.iana.org/assignments/character-sets
[ISO4217]
    "ISO 4217:2001 Codes for the representation of currencies and funds", ISO, 2001.
    请参照:http://www.iso.ch/
[JSAPI]
    "Java Speech API", Sun Microsystems, Inc.
    请参照:http://www.javasoft.com/products/java-media/speech/index.aspl
[JSGF]
    "JSpeech Grammar Format", Andrew Hunt, W3C Note, June 2000.
    请参照:http://www.w3.org/TR/2000/NOTE-jsgf-20000605/
[NLSML]
    "Natural Language Semantics Markup Language for the Speech Interface Framework", Deborah A. Dahl. W3C Working Draft, November 2000.
    请参照:http://www.w3.org/TR/2000/WD-nl-spec-20001120/
[RDF-SYNTAX]
    "Resource Description Framework (RDF) Model and Syntax Specification", Ora Lassila and Ralph R. Swick. W3C Recommendation, February 1999.
    请参照:http://www.w3.org/TR/REC-rdf-syntax/
[RDF-SCHEMA]
    "Resource Description Framework (RDF) Schema Specification 1.0", Dan Brickley and R.V. Guha. W3C Candidate Recommendation, March 2000.
    请参照:http://www.w3.org/TR/2000/CR-rdf-schema-20000327/
[RFC1766]
    "Tags for the Identification of Languages", IETF RFC 1766, 1995.
    Note that [XML] adopted RFC3066 through an errata as of 2001-02-22. [RFC3066] obsoletes RFC1766.
    请参照:http://www.ietf.org/rfc/rfc1766.txt
[RFC2119]
    "Key words for use in RFCs to Indicate Requirement Levels", IETF RFC 2119, 1997.
    请参照:http://www.ietf.org/rfc/rfc2119.txt
[RFC2361]
    "WAVE and AVI Codec Registries", IETF RFC 2361, 1998.
    请参照:http://www.ietf.org/rfc/rfc2361.txt
[SISR]
    "Semantic Interpretation for Speech Recognition", Luc Van Tichelen. W3C Working Draft, November 2001.
    请参照:http://www.w3.org/TR/2001/WD-semantic-interpretation-20011116/
[UAAGIO]
    "User Agent Accessibility Guidelines 1.0", Jacobs et al. W3C Proposed Recommendation, October 2002.
    请参照:http://www.w3.org/TR/2002/PR-UAAG10-20021016/
[VOICEXML-1.0]
    "Voice eXtensible Markup Language 1.0", Boyer et al, W3C Note, May 2000.
    请参照:http://www.w3.org/TR/2000/NOTE-voicexml-20000505/
[WAI-WEBCONTENT]
    "Web Content Accessibility Guidelines 1.0", Chisholm et al. W3C Recommendation, May 1999.
    请参照:http://www.w3.org/TR/WAI-WEBCONTENT/
[XAG]
    "XML Accessibility Guidelines", Dardailler et al. W3C Working Draft, October 2002.
    请参照:http://www.w3.org/TR/xag.aspl

附录 N 媒体类型和文件后缀 附录 A   附录 B  附录 C  附录 D  附录 E
  附录 F   附录 G  附录 H  附录 I  附录 J
  附录 K   附录 L  附录 M  附录 O  附录 P
 
    W3C Voice Browser Working Group已经应用IETF为VoiceXML登记一个媒体类型(http://www.ietf.org/internet-drafts/draft-tryphonas-voicexml-media-reg-00.txt),要求的媒体类型为application/voicexml/+xml。
    W3C Voice Browser Working Group已经采纳用“.vxml”作为VoiceXML文档的文件名后缀。

附录 O Schema 附录 A   附录 B  附录 C  附录 D  附录 E
  附录 F   附录 G  附录 H  附录 I  附录 J
  附录 K   附录 L  附录 M  附录 N  附录 P
 
    这部分是标准化的。
    VoiceXML Schema位于http://www.w3.org/TR/voicexml20/vxml.xsd
    VoiceXML schema依赖于定义于VoiceXML名字空间的其它schema。
      ·grammar-adapter.xsd:用于VoiceXML名字空间数据类型的定义。
      ·synthesis-adapter.xsd:用于VoiceXML schema中的属性和属性组。
      ·vxml-grammar-restriction.xsd:此schema参照Speech Recognition Grammar Specification 1.0[SRGS]和限制嵌入在VoiceXML名字空间的一些定义。
      ·vxml-grammar-extension.xsd:此schema参照vxml-grammar-restriction.xsd以及为VoiceXML扩展一些定义。
      ·vxml-synthesis-restriction.xsd:此schema参照Speech Synthesis Markup Language 1.0[SSML]非名字空间的schema,扩展和限制一些嵌入在VoiceXML名字空间的定义。
      ·vxml-synthesis-extension.xsd:此schema参照vxml-synthesis-restriction.xsd和扩展一些VoiceXML的定义。
    VoiceXML 2.0中的完整Speech Interface Framwork schema可以从下面网页得到:http://www.w3.org/TR/voicexml20/vxml-schema.zip
 
附录 P 内置语法类型 附录 A   附录 B  附录 C  附录 D  附录 E
  附录 F   附录 G  附录 H  附录 I  附录 J
  附录 K   附录 L  附录 M  附录 N  附录 O
 
    在章节2.3.1中的<field>属性用来为某个基本类型指定内置语法的。平台对基本内置语法的支持是可选的。如果一个平台确实支持内置类型,它必须尽可能地遵照本附录中的描述。此规范中的后一个版本也许会提供一个机制,映射基本内置语法到特定的应用程序语法。
    每个内置类型有一个对返回值格式的约定,它是独立于语言和执行的。内置域的返回类型是除Boolean域类型之外的串。要访问实际的识别结果,作者可以访问影子变量name$.utterance。做为选择,开发者可以访问application.lastresult$,在此,application.lastresult$.interpretation与application.lastresult$.uttrance同样的串值。
    内置类型以VoiceXML应用程序开发人员可以假定一些用户输入的持续性来定义。这允许帮助信息和其它提示独立于平台。例如,boolean类型的语法应该在最低限度上允许用英语来回答“yes”和"“no”。但是可以增加其它选择,如“yeah”和“nope”。
    当一个应用程序需要超过内置类型的行为时,就应该用清晰的域语法。下面是这样一些情况,应用程序必须提供一个清晰的域语法,以便保证有着持续用户界面的应用程序的强移植性。
      ·一个平台是不需要去执行一种语法,它可以接受所有可能的、能被内置语法返回的值。例如,货币内置语法定义了一种返回值,其格式可以容纳很大范围的货币值[ISO4217]。平台不必支持包括任何世界货币的语音输入,因为它会消极地影响识别的精确度。相似的,数值内置语法可以返回正的或负的浮点数,但是语法不必支持所有可能说出来的浮点数。
      ·内置语法也限制了处理没有指定的语音输入的能力。例如,“20 peso”不能解决指定的[ISO4217]货币码,因为“peso”是许多国家的货币名字。在这种情况下,平台根据语言也许会返回一个指定的货币码,或消去货币码。
    所有的内置类型必须支持语音和DTMF输入。
    对于每一种内置类型,一组可以接受的语音输入是依赖于平台的,而且随语言而变化。内置类型返回的值可以用<say-as>元素读出。VoiceXML通过增加对应于每个内置类型的“type”值,在[SSML]中扩展<say-as>。这些值取“vxml:<type>”的形式,其中type是内置类型。内置类型的精确表现是随平台和语言而变化的。
    内置类型是:
boolean 输入包括适于现今语言中肯定和否定的词句。DTMF1是肯定的,2是否定定的。对肯定来讲,其结果是ECMAScript的true,对否定来讲是false。值将作为“true”和“false”串发送。如果field的值后来用在带有“vxml:boolean”类型的<say-as>中,它将作为适于当前语句的肯定和否定的词句。
date 指定日期的有效语音输入,包括月天和年。DTMF输入是:四个数字表达年,后面的两个数字表达月,两个数字表达天。结果是yyyymmdd格式的固定日期串,如20000704。如果年没有指定,yyyy是以这样的格式返回的“????”;如果月没有指定,mm用“??”返回。如果天没有指定,天以“??”的格式返回。如果“vxml:date”类型的值用在<say-as>中,它将按照当前指定的语言说出。
digits 有效的语音和DTMF输入包括一个或多个数字,0到9。其结果是一个数字串。如果结果以“vxml:digits”的类型用在<say-as>中,它将以适于当前语言的数字序列说出。一个用户可以说出“two on two seven”,但不是“twenty one hundred and twenty-seven”。一个平台也许支持这样的结构“two double-five eight”。
currency 有效的语音输入包括指定货币数量的词句。对于DTMF输入,“*”键作为小数点,其结果将是UUUmm.nn格式的串。在这里,根据ISO标准4217[ISO4217]UUU是三个字符的货币标志。如果货币不能被用户说出,如果货币不能可靠地决定(是“dollar”还是“peso”?),如果field是带有“vxml:currency”类型用在<say-as>中的,它将被作为下货币数量用当前的语言说出。
number 数字的语音输入,如“one hundred twenty-three”,或“five point three”。用“*”表示小数点的有效的正数DTMF输入,结果是一个从0到9的串。也许还包含小数点(“.”)和加号、减号。当用在数字表达式中时,ECMAScript自动地将结果串转换成数值。结果不能有前导零(如果有的话,ECMAScript会将它解释成八进制)。如果带有“vxml:number”类型的field用在<say-as>中,它将用适于当前语言的数字说出。
phone 有效的语音输入包括指定电话号码的句子。DTMF星号“*”代表“x”,其结果是一个串,它包含由一串数字和可选地包含字符“x”来表示带有分机的电话号码。对北美来讲,这个电话号码可能是“8005551234x789”。如果带有“vxml:phone”类型的field用在<say-as>中,它将作为电话号码用当前的语言说出。
time 用来指定时间的有效语音输入,包括时和分。其结果是hhmmx格式的五字符串。X是“a”或“p”,“a”代表AM,“p”代表PM。H用24制式的时钟表示time,“?”表示模糊time。输入可以用DTMF。因为没有DTMF的约定来达AM/PM,所以时间的输入往往以“h”、“?”结束。如果带有“vxml:time”类型的field用在<say-as>中,它将用适用于当前语言的时间说出。
表64:内置类型
    一个带有内置语法类型的<field>元素的例子:
      <field name="lo_fat_meal" type="boolean">
        <prompt>
           Do you want a low fat meal on this flight?
        </prompt>
        <help>
           Low fat means less than 10 grams of fat, and under 250 calories.
       </help>
        <filled>
          <prompt>
             I heard <emphasis><say-as interpret-as="vxml:boolean">
            <value expr="lo_fat_meal"/></say-as></emphasis>.
          </prompt>
       </filled>
      </field>
    在这个例子中,boolean类型表示输入是各种true和false形式。给field实际赋值可能是true或false。它将用合适的肯定和否定方式读出。
    在下一个例子中,数字表示输入可能是语音输入或是键盘数字。结果保存为串,用“vxml:digits”的<say-as>类型表达为数字。也就是念作“one-two-three”而不是“one hundred twenty-three”。<filled>元素检查field是否有12个数字。如果没有,用户便会听到错误信息。
      <field name="ticket_num" type="digits">
        <prompt>
           Read the 12 digit number from your ticket.
        </prompt>
        <help>The 12 digit number is to the lower left.</help>
        <filled>
          <if cond="ticket_num.length != 12">
            <prompt>
               Sorry, I didn't hear exactly 12 digits.
            </prompt>
            <assign name="ticket_num" expr="undefined"/>
          <else/>
            <prompt>
               I heard <say-as interpret-as="vxml:digits">
               value expr="ticket_num"/></say-as>
            </prompt>
          </if>
       </filled>
      </field>
    内置boolean和内置数字语法可以参数化。这可以清晰地用“builtin:”URI格式引用内置语法。用一个URI-style的查询语法,在<grammar>元素中具有type?param=value格式的src属性,或在field中的type属性。
      <grammar src="builtin:dtmf/boolean?y=7;n=9"/>
										
      <field type="boolean?y=7;n=9">
        <prompt>
           If this is correct say yes or press seven, if not, say no or press nine.
        </prompt>
       </field>
										
        <field type="digits?minlength=3;maxlength=5">
          <prompt>Please enter your passcode</prompt>
       </field>
      </field>
    在此,<grammar>元素参数化内置DTMF语法。第一个<field>参数化内置DTMF语法(语音语法将象通常一样激活),第二个<field>参数化内置的DTMF和语音语法。没有给指定语法类型定义的参数将被忽略。如:“builtin:grammar/Boolean?y=7”。
    digits和boolean语法可以参数化如下:
Digits?minlength=n 具有至少n位数字的串,应用于语音和DTMF语法。如果minlength与length或maxlength属性冲突,error.badfetch事件将抛出。
Digits?maxlength=n 一个串最多有n位数,应用于语音和DTMF语法,如果maxlength与length或minlength属性冲突,error.badfetch事件将抛出。
Digits?length=n 一个有n位数的串,应用于语音和DTMF输入,如果length与minlength或maxlength冲突,error.badfetch事件抛出。
Boolean?y=d 一个语法,它视d键为肯定,它只适用于DTMF语法。
Boolean?n=d 一个语法,它视d键为否定,它只适用于DTMF语法。
表65:digits和boolean语法的参数化
    记住,可以指定多于一个语法,它们之间用“;”分隔,上面有这样的例子。在<grammar>元素中,src属性URI象上面所指示的一样,必须以builtin:grammar或builtin:dtmf开头,象上面所表示的一样。当<grammar>元素的mode属性设为“DTMF”,而且用在<field>中,它将覆盖缺省的DTMF语法。
posted on 2006-09-16 23:07 铁观音 阅读(3229) 评论(0)  编辑 收藏 引用 所属分类: VoiceXML2.0规范