铁观音

C++编程宝典

   ::  ::  ::  ::  :: 管理 ::
  1 随笔 :: 19 文章 :: 0 评论 :: 0 Trackbacks
第一节 Resource Fetching 第二节   第三节  第四节  第五节
 
一、Fetching
    VoiceXML解释器环境需要获取VoiceXML文档和其他的资源,例如声音文件,语法,脚本和object。下面的属性控制着每次和URI相关的资源的获取:
fetchtimeout 等待要获取的资源返回的时间,超过这个时间就抛出一个error.badfetch 时间。该值是一个Time Designation (见6.5节)。如果没有指定该属性,则使用最内部的fetchtimeout属性值。
fetchhint 它定义了解释器环境应该在何时从服务器上获取资源。该属性值为prefetch或safe。Prefetch表示当加载文档时,就可以获取该资源了;而safe表示只有在确实需要获取资源时才去获取资源。如果没有指定该属性,则使用最内部的fetchhint属性值。
maxage 表示如果该资源存在的时间没有超过指定的时间(以秒计),则文档可以使用该资源(类似于HTTP 1.1 RFC2616中的‘max-age’)。文档不会使用过期的资源,除非指定了maxstale属性。如果没有指定该属性,则使用最内部的maxage属性值。
maxstale 表示文档可以使用过期的资源(类似于HTTP 1.1 RFC2616中的‘max-stale’)。如果指定了该属性,则文档会接受过期时间不超过该属性值的资源。如果没有指定该属性,则使用最内部的maxstale属性值。
表53:获取的属性
    当从URI获取资源时,fetchtimeout属性决定了等待该资源返回的时间(由需要获取该资源的时候算起),fetchhint属性决定了何时获取该资源。VoiceXML解释器环境的缓存策略采用maxage和maxstale属性,详细的介绍请看下面。
    Fetchhint属性和其他的各种fetchhint property只是提示解释器环境何时可以获取资源。它告诉解释器环境,可以预取该资源,而不是要求该资源可预取;它只是提示该资源可以被预取。然而,一般都要求解释器环境使用safe fetchhint。
    当通过<subdialog>,<goto>,<submit>,<link>或<choice>元素从一个dialog跳转到另一个dialog时,下面的一些规则会影响到解释器的行为。
      1、如果引用的URI指向一个文档(如,“doc#dialog”),或者提供了一些查询的数据(通过POST或GET),则要获取这个新的文档(从本地缓存,或者中介缓存,或者从原始的web服务器)。当获取到这个文档时,则进入初始化阶段(即初始化一个新的应用根文档(如果需要的话),初始化该文档的变量,并执行脚本)。最后初始化并执行所请求的dialog(如果没有指定的话,就是第一个dialog)。
      2、通常,如果URI引用只包含一个段(如,“#my_dialog”),则不用获取任何文档,也不用执行该文档的任何初始化操作。然而,<submit>元素总是需要获取资源,且如果有包含一个段和指定namelist属性的话,也需要获取资源。
      3、如果在叶文档中的一个URI引用指向该文档的应用根文档,即使该URI引用包含的是绝对或相对的URI(见1.5.2节和RFC2396),则不用获取资源,也不用初始化。然而,如果指向应用根文档的URI引用包含了一个查询串或指定了namelist属性,则要重新获取该应用根文档。
    所有获取VoiceXML文档的元素也支持下面的属性:
fetchaudio 该URI指定了正在获取资源时要播放的音频。如果没有指定,则使用fetchaudio property值。如果fetchaudio property也没有设置,则在获取资源时不播放任何音频。audiofetchhint,audiomaxage,audiomaxstale property控制着该音频的获取,而fetchtimeout property则控制资源获取的时间。fetchaudiodelay property控制该音频的播放,fetchaudiominimum property控制该获取音频的时间。
表54:附加的获取属性
    当正在获取下一个文档有明显的延迟时,fetchaudio属性就很有用,它可用于播放背景音乐,或者公告。当需要的文档已经获取到时,如果还在播放音频,则中断播放。在获取fetchaudio属性指定的音频时,如果出现错误,则不抛出任何事件,在获取文档时也不播放任何音频。
 
二、Caching
    和HTML的可视浏览器一样,VoiceXML解释器环境也可以使用缓存以提高获取文档和其他资源时的性能。就像在HTML网页中有很多图片一样,在VoiceXML文档中也有很多声音剪辑。在可视的浏览器中,通常都包含有终端用户的控制,用于刷新那些快要过期的内容。而这在VoiceXML解释器中就做不到,因为它缺少响应的中断用户的控制。因此,实现缓存更新是通过在文档中适当使用maxage和maxstale属性判断的。
    注意,VoiceXML解释器环境使用的缓存策略必须遵循HTTP1.1(RFC2616)中的缓存正确性规则。特别是必须遵循到期和缓存控制头,下面的算法总结了这些规则,并说明了当请求资源时解释器环境的行为:
      ·如果该资源在缓存中不存在,则使用get方法从服务器获取。
      ·如果该资源在缓存中存在,
        o 如果有提供了maxage属性值,
          ·如果缓存中的该资源存在的时间<=maxage属性值,
            ·如果该资源已经过期,
              ·则检查maxstale属性值。
            ·否则使用使用缓存中的该资源。
          ·否则使用get方法从服务器获取相应的资源。
        o 否则,
          ·如果该资源已经过期,
            ·则检查maxstale属性值。
          ·否则使用使用缓存中的该资源。
    检查maxstale属性值是指:
      ·如果有提供maxstale属性值,
        o 如果缓存中的该资源已经过期,且过期的时间没有超过它的maxstale属性值,则使用缓存中的该资源。
        o 否则使用get方法从服务器获取相应的资源。
      ·否则使用get方法从服务器获取相应的资源。
    注意,当需要从服务器获取资源时,可以检查一下还在缓存中的文档,“如果该文档已经被更改了,则从服务器获取”。这是一个可行的优化。
    如果其他的协议也有maxage和maxstale属性,且直接由HTTP1.1支持,则有些资源除了可以由HTTP的URI定位,也可以由这些协议的URI定位。如果该协议不支持资源存在时间(age)的概念,则解释器环境在接收到该资源时开始计算其存在时间。如果该协议不支持资源失效(staleness)的概念,则解释器环境应该认为该资源在被接收后马上就过期。
    Controlling the Caching Policy
    VoiceXML允许开发者对每个资源(除了<vxml>元素的application属性引用的文档:对于应用根文档,没有任何机制可以控制它的缓存策略)的每次使用进行缓存策略的控制。
    每个和资源相关的元素都可以指定maxage和maxstale属性。给maxage指定一个非0的值,可用于获取缓存中还没有过期的最新的资源。如果maxage的属性值为0,则每次请求都无条件的去获取最新的资源。
    Maxstale属性使开发者可以规定使用不太陈旧的过期的资源(根据HTTP1.1的规则)。通过减少获取资源的次数来提高性能。该属性对于那些对服务器端大文件没有过期控制的开发者来讲,特别有用。
 
三、Prefetching
    预取资源是一个可选的特性,它使解释器环境在需要一个资源之前就可以去获取该资源。如果某元素的fetchhint属性值为“prefetch”,则由该元素确定的资源就可以进行预取。当解释器环境预取资源时,必须确保所预取的资源正好是所需要的资源。特别的,如果该URI由expr属性确定,在没有给该表达式的变量赋值之前,解释器环境一定不能提前获取资源。同样的,在给namelist属性的变量赋值之前,也不能提前获取<submit>元素需要的资源。
    每次使用资源都必须检查该资源的是否过期,如果它的fetchhint属性值为“prefetch”,则预取该资源。检查资源必须遵循6.1.2节中的缓存策略的规则。
 
四、Protocols
    VoiceXML平台必须支持“http”的URI协议,应该支持“https”协议,也可以支持其他的URI协议。

第二节 Metadata Information 第一节   第三节  第四节  第五节
 
    元数据信息是关于文档的信息,而不是关于文档内容的信息。VoiceXML提供了两个元素用于表示元数据信息:<meta>和<metadata>元素。对于元素据信息,<metadata>元素比<meta>元素提供了更全面、更强大的处理。
    VoiceXML没有指定必须的元素据信息。然而,我们推荐用<metadata>元素来表示元数据,该元素的信息是Dublin Core1.0版本RDF(Resource Description Framework)方案的RDF格式的(见6.2.2节)。
 
一、META
    <meta>元素指定了元信息,就如在HTML中一样。<meta>元素有两种类型。
    第一种是指定整个文档的元数据property,它由name和content这对属性表示。例如,指定VoiXML文档的维护人员:
      <?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">
        <meta name="maintainer" content="jpdoe@anycompany.example.com"/>
        <form>
          <block>
            <prompt>Hello</prompt>
          </block>
        </form>
      </vxml>
    第二种是指定了HTTP响应头,它由http-equiv和content这对属性表示。在下面的例子中,第一个<meta>元素设置了一个过期日期,以防止该文档缓存;第二个<meta>元素设置了日期头:
      <?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">
        <meta http-equiv="Expires" content="0"/>
        <meta http-equiv="Date" content="Thu, 12 Dec 2000 23:27:21 GMT"/>
        <form>
          <block>
            <prompt>Hello</prompt>
          </block>
        </form>
      </vxml>
    <meta>元素的属性:
name 该元数据的特性名。
content 该元数据的特性值。
http-equiv HTTP响应头的名称。
表55:<meta>元素的属性
    必须正确的指定属性“name”或“http-equiv”中的一个,否则抛出一个error.badfetch事件。
 
二、METADATA
    <metadata>元素是一个容器,所有关于文档的信息都可以使用元数据模式放在该元素中。虽然任何元数据方案都可以和<metadata>元素一起使用,但是我们建议使用RDF模式和Dublin Core Metadata初稿(Dublin Core Metadata Initiative)中定义的元数据特性。
    下面是DC中的元数据特性,我们建议在<metadata>元素中使用这些特性:
Creator 表示该资源的内容的作者。
Rights 表示该资源相关的版权信息。
Subject 表示该资源内容的主题。一般使用该资源的关键字、主要的短语或类别的代码来表示。建议最好从控制性词汇或正式的类别方案中选一个值。The topic of the content of the resource. Typically, a subject will be expressed as keywords, key phrases or classification codes. Recommended best practice is to select values from a controlled vocabulary or formal classification scheme.
表56:推荐的DC元数据特性
    下面的例子展示了在VoiceXML文档中怎样使用DC1.0版本的RDF模式包含<metadata>元素:
      <?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">
        <metadata>
          <rdf:RDF
             xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:rdfs = "http://www.w3.org/TR/1999/PR-rdf-schema-19990303#"
             xmlns:dc = "http://purl.org/metadata/dublin_core#">
										
          <!-- Metadata about the VoiceXML document -->
          <rdf:Description about="http://www.example.com/meta.vxml"
             dc:Title="Directory Enquiry Service"
             dc:Description="Directory Enquiry Service for London in VoiceXML"
             dc:Publisher="W3C"
             dc:Language="en"
             dc:Date="2002-02-12"
             dc:Rights="Copyright 2002 John Smith"
             dc:Format="application/voicexml+xml">
             <dc:Creator>
               <rdf:Seq ID="CreatorsAlphabeticalBySurname">
                 <rdf:li>Jackie Crystal</rdf:li>
                 <rdf:li>William Lee</rdf:li>
               </rdf:Seq>
             </dc:Creator>
           </rdf:Description>
         </rdf:RDF>
        </metadata>
        <form>
          <block>
            <prompt>Hello</prompt>
          </block>
        </form>
      </vxml>
 
第三节 Property 第一节   第二节  第四节  第五节
 
    <property>元素用于设置系统的特性值。系统的特性影响着平台的运转状态,例如识别方法,timeout,缓存策略等。
    可以在应用根文档中定义<property>元素,作用于整个应用;也可以在<vxml>级定义,作用于整个文档;也可以在<form>或<menu>级定义,作用于该dialog;或在一个form item中定义,作用于该form item。<property>元素作用于它的父元素及该父元素的所有子元素。对于相同的property,低级别的优先权高。当在同一级别中给某个property指定了两个不同的值,则以在文档顺序中排后面的为准。在应用根文档中指定的propery值是该应用中所有文档的propety的默认值。在单独的文档中指定的property值的优先权高于在应用根文档中指定的。
    如果平台检测到某个property值是非法的,应该抛出error.semantic事件。
    在某些情况下,<property>元素为其他元素的属性,如timeout或bargein属性,指定了默认值。例如,这个例子说明了怎样在form中设置属性bargein的默认值,使用户不能打断提示语:
      <?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="no_bargein_form">
          <property name="bargein" value="false"/>
          <block>
            <prompt>
               This introductory prompt cannot be barged into.
            </prompt>
            <prompt>
               And neither can this prompt.
            </prompt>
            <prompt bargein="true">
               But this one <emphasis>can</emphasis> be barged into.
            </prompt>
          </block>
          <field type="boolean">
            <prompt>
               Please say yes or no.
            </prompt>
          </field>
        </form>
      </vxml>
 
一、Platform-Specific Properties
    解释器环境可以任意的提供依赖于平台的property。例如下面的例子,在该文档内设置“multiplication factor”属性:
      <?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>
          <property name="com.example.multiplication_factor" value="42"/>
          <block>
            <prompt>Welcome</prompt>
          </block>
        </form>
      </vxml>
    依赖于平台的property引入了不兼容的因素,降低了平台的可移植性。为了最大限度的降低这些因素,我们强烈建议如下的方案:
      1、依赖于平台的property应使用反转域名命名,以减少潜在的冲突,例如,com.example.foo 和net.example.foo就明显的不一样。
      2、当解释器环境碰到不支持的property时,宁可忽略这个peoperty,一定不能抛出error.unsupported.property事件。
 
二、Generic Speech Recognizer Properties
    一般的语音识别器peoperty大部分来自JSAPI:
confidencelevel 语音识别的confidence级别,它是一个浮点数,取值范围从0.0到1.0。如果application.lastresult$.confidence 的值低于该property的值,识别结果会被拒绝(即抛出nomatch事件)。0.0表示识别需要的最低的confidence;1.0表示最高的confidence。该property的值是一个Real Number Designation(见6.5节)。默认值为0.5。
sensitivity 设置sensitivity级别。值为1.0表示对无噪声输入高度敏感,值为0.0表示对噪声的最低的敏感。该property的值是一个Real Number Designation(见6.5节)。默认值为0.5。
speedvsaccuracy 表示在速度和准确性上想要的平衡点。0.0表示最快的识别速度,1.0表示最高的准确性。该property的值是一个实数标识(Real Number Designation见6.5节)。默认值为0.5。
completetimeout 表示在用户语音输入之后和语音识别器得出识别结果(要么接收这个结果,要么抛出nomatch事件。)之前需要的静音的 时长。它用于决定语音输入是否为一个激活语法的完全匹配。相反,incompletetimeout用于决定语音输入是否为一个激活语法的不完全匹配。
长的completetimeout值会延迟识别结果的产生,并使得计算机的反应变慢。短的completetimeout值可能会导致用户说的话被不适当的结束。合理的completetimeout值一般为0.3秒到1.0秒。该值是一个Time Designation (见6.5节)。默认值是依赖于平台的,见附录D。
虽然平台必须解析completetimeout property,但是平台不是必须要支持completetimeout的 。 如果平台选择不支持completetimeout,则必须调整incompletetimeout property 的值。如下面描述的。
incompletetimeout 识别器得出识别结果后,跟在用户语音输入后面的需要的静音时长。当静音之前的语音是所有激活的语法的一个不完全匹配时,incompletetimeout就起作用了。在这种情况下,一旦触发了该属性,则平台不接受该不完全匹配的结果(即抛出一个nomatch事件)。
当静音之前的语音是一个激活的语法的完全匹配,且继续说下去也可能匹配该语法时,incompletetimeout也会起作用。相比之下,当语音是一个激活的语法的完全匹配,且平台不接受更多的语音时,使用的是completetimeout。
太长的incompletetimeout值会延迟识别结果的产生,且使计算机的响应变慢。太短的incompletetimeout值可能会导致用户说的话被不适当的结束。
Incompletetimeout值通常都比completetimeout值长,这样才能让用户在说话时可以停顿(例如,呼吸)。见附录D。
如果平台选择不支持completetimeout property (上面所讲的),则平台必须使用completetimeout和incompletetimeout中的最大值作为incompletetimeout 的值。
该值是一个Time Designation (见6.5节)。
maxspeechtimeout 用户语音输入的最大时长。如果用户语音输入的时间超过该时长,则抛出一个“maxspeechtimeout”事件。该值是一个Time Designation 。默认的值是依赖于平台的。
表57:一般的语音识别Properties
 
三、Generic DTMF Recognizer Properties
    下面这几个是属于DTMF语法识别的property:
interdigittimeout 当识别DTMF输入时才使用interdigittimeout值。该值是一个Time Designation (见6.5节)。默认的值是依赖于平台的。见附录D。
termtimeout 当识别DTMF输入时才使用termtimeout值。该值是一个Time Designation (见6.5节)。默认的值是“0s”。见附录D。
termchar DTMF输入识别时的结束DTMF字符。默认值为“#”。见附录D。
表58:一般的DTMF识别器的property
 
四、Prompt and Collect Properties
    下面的这些是用于控制平台的提示和收集的property。
bargein 值为true或false。该属性在播放提示语时起作用。值为true时允许bargein,值为false时则不允许bargein。默认的值为true。
bargeintype 值为speech或hotword。该属性用于设置bargein的类型。默认的值是依赖于平台的。见4.1.5.1。
timeout 当没有输入的时间超过该值时,平台就抛出一个noinput事件。该值是一个Time Designation (见6.5节)。默认的值是依赖于平台的。见附录D。
表59:提示和收集时的Properties
 
五、Fetching Properties
    下面的这些是属于在获取新文档和资源时的property。
audiofetchhint 值为safe或prefetch。该属性用于设置平台是否可以预取音频。当值为safe时,则该音频只有在需要时才去获取,在需要之前不能进行获取。当值为prefetch时,则允许平台预取音频,但不是必须要预取音频。默认值为prefetch。
audiomaxage 用于设置对于缓存中的音频资源平台可接受的最大的存在时间,单位为秒。默认的值是依赖于平台的。
audiomaxstale 用于设置对于缓存中已经过期的音频资源平台可接受的最大的失效时间。默认的值是依赖于平台的。
documentfetchhint 值为safe或prefetch。用于设置平台是否可以预取文档。默认值为safe。
documentmaxage 用于设置对于缓存中的文档平台可接受的最大的存在时间。单位为秒。默认的值是依赖于平台的。
documentmaxstale 用于设置对于缓存中的过期文档平台可接受的最大的失效时间,单位为秒。默认的值是依赖于平台的。
grammarfetchhint 值为safe或prefetch。用于设置平台是否可以预取语法。默认的值为prefetch。
grammarmaxage 用于设置对于缓存中的语法平台可接受的最大的存在时间,单位为秒。默认的值是依赖于平台的。
grammarmaxstale 用于设置对于缓存中过期的语法平台可接受的最大的失效时间,单位为秒。默认的值是依赖于平台的。
objectfetchhint 值为safe或prefetch。用于设置平台是否可以预取<object>元素URI的内容。默认的值为prefetch。
objectmaxage 用于设置对于缓存中的object平台可接受的最大的存在时间,单位为秒。默认的值是依赖于平台的。
objectmaxstale 用于设置对于缓存中过期的object平台可接受的最大的失效时间,单位为秒。默认的值是依赖于平台的。
scriptfetchhint 值为safe或prefetch。用于设置平台是否可以预取<script>。默认的值为prefetch。
scriptmaxage 用于设置对于缓存中的<script>平台可接受的最大的存在时间,单位为秒。默认的值是依赖于平台的。
scriptmaxstale 用于设置对于缓存中过期的<script>平台可接受的最大的失效时间,单位为秒。默认的值是依赖于平台的。
fetchaudio 在等待获取资源文档或其他资源时要要播放的音频的URI。默认是在获取时不播放任何音频。<audio>,<grammar>,<objects>和<scripts>元素 没有该property。音频的获取由audiofetchhint,audiomaxage,audiomaxstale控制,fetchtimeout则控制获取的时间 。音频的播放由fetchaudiodelay 控制,fetchaudiominimum peoperty则控制获取的时间。
fetchaudiodelay 在播放fetchaudio音频之前等待获取延迟的开始的时长。该值是一个Time Designation (见6.5节)。默认的值是依赖于平台的,如“2s”。当获取的延迟非常短时,不播放任何音频比刚播放一小段音频就被打断好。
fetchaudiominimum 播放fetchaudio音频最短的时长。一旦开始播放fetchaudio音频,即使资源已经获取到了,如果播放的时长还没有超过该值,也要继续播放。该值是一个Time Designation (见6.5节)。默认的值是依赖于平台的,如“5s”。一旦用户已经听到fetchaudio音频,则不应该很快就中断播放,这就是该属性的作用。
fetchtimeout 获取资源timeout的时长,该值是一个Time Designation (见6.5节)。默认的值是依赖于平台的。
表60:获取资源时的Properties
 
六、Miscellaneous Properties
inputmodes 值为dtmf或voice。该property用于确定要使用哪种输入方式。在两种方式都支持的平台中,默认的值为“dtmf voice”。要使语音识别失效,则把该property设置为“dtmf”,要使DTMF识别失效,则把该property设置为“voice”。该property的一个作用是,在嘈杂的环境中可以使语音识别失效,而只使用DTMF识别。在只希望DTMF识别时,也可以让语音识别失效。该property不能控制语法的激活。例如,当inputmodes为“dtmf”时,语音语法也可以被激活。然而,这些语音语法不会被匹配,因为语音输入方式没有激活。
universals 平台可以可选的提供一些依赖于平台的通用的语法(universal command grammars),例如“help”,“cancel”或“exit”语法,这些语法总是激活的,且会产生相应的事件。
一些应用通常需要定义它们自己的通用的语法,以提高应用的可移植性或提供一个与众不同的界面。他们通过<link>元素指定新的通用语法。然后用该property避开默认的语法。该property不会影响默认的<catch>的事件处理。
该property的默认值为“none”,它表示所有平台默认的通用语法都失效。若该property的值为“all”,则表示所有平台默认的通用语法都激活。要激活单个的语法,可以把该语法放在列表中,各个语法以空格隔开。例如,“cancel exit help”。
maxnbest 该property用于控制数组“application.lastresult$”的最大长度。该数组的长度不能超过maxnbest的值。该property的最小值为1。默认的值为1。
表61:其他的Properties
    下面的例子展示了在各个级别使用这些property。
      <?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">
        <!-- set default characteristics for page -->
        <property name="audiofetchhint" value="safe"/>
        <property name="confidencelevel" value="0.75"/>
										
          <form>
            <!-- override defaults for this form only -->
            <property name="confidencelevel" value="0.5"/>
            <property name="bargein" value="false"/>
            <grammar src="address_book.grxml" type="application/srgs+xml"/>
            <block>
              <prompt>Welcome to the Voice Address Book</prompt>
            </block>
            <initial name="start">
              <!-- override default timeout value -->
              <property name="timeout" value="5s"/>
              <prompt>Who would you like to call?</prompt>
            </initial>
            <field name="person">
              <prompt>Say the name of the person you would like to call.</prompt>
            </field>
            <field name="location">
              <prompt>Say the location of the person you would like to call.</prompt>
            </field>
            <field name="confirm">
              <grammar type="application/srgs+xml" src="/grammars/boolean.grxml"/>
              <!-- Use actual utterances to playback recognized words, rather than returned slot values -->
              <prompt>
                 You said to call <value expr="person$.utterance"/>
                 at <value expr="location$.utterance"/>.
                 Is this correct?
              </prompt>
              <filled>
               <if cond="confirm">
                 <submit namelist="person location"
                   next="http://www.messagecentral.example.com/voice/make_call" />
               </if>
               <clear/>
            </filled>
          </field>
        </form>
      </vxml>
 
第四节 Param 第一节   第二节  第三节  第五节
 
    <param>元素用于指定要传递给subdialog或oject的值。它是以HTML的<PARAM>元素为模型的。它的属性有:
name Object或subdialog调用时的参数名。
expr ECMASript表达式,它把它的结果值赋给相应的name属性指定的参数。
value Name属性指定的参数的值。
valuetype 它的值为data或ref,默认为ref。在object中,它用于表明name属性的值是数据还是URI(ref)。该属性不用在<subdialog>元素中,因为<subdialog>元素中的参数值都是数据。
type 它表示当valuetype的值为ref时,name属性指定的URI的媒体类型(media type)。该属性只用于<object>元素中的<param>元素。
表62:<param>元素的属性
    必须正确的指定属性expr或value中的一个,否则会抛出error.badfetch 事件。
    虽然特定的object可能需要指定valuetype和type的属性值,但是通常这两个属性是是可选的。当<param>元素包含在<subdialog>元素中时,<param>元素指定的值用于初始化subdialog调用的dialog的<var>元素。当<param>元素包含在<object>元素中时,参数的用法是依赖于所调用的object的,它不属于本规范说明书的范围。
    下面是一个<object>元素中的<param>元素的用法的例子。在这个例子中,前两个<param>元素包含有表达式(隐式的属性值valuetype="data"),第三个<param>元素有显式的值,而第四个<param>元素则包含了一个URI,该URI返回一个text/plain的媒体类型。
      <object name="debit"
          classid="method://credit_card/gather_and_debit"
           data="http://www.recordings.example.com/prompts/credit/jesse.jar">
        <param name="amount" expr="document.amt"/>
        <param name="vendor" expr="vendor_num"/>
        <param name="application_id" value="ADC5678-QWOO"/>
        <param name="authentication_server"
           value="http://auth_svr.example.com"
           valuetype="ref"
           type="text/plain"/>
      </object>
    下面的一个例子说明了<param>元素在<subdialog>元素中的用法。在这个例子中,<param>元素中的两个表达式用于初始化所调用的dialog中的变量。
    Form with calling 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="http://another.example.com/#getssn">
            <param name="firstname" expr="document.first"/>
            <param name="lastname"  expr="document.last"/>
            <filled>
            <submit namelist="result.ssn"
              next="http://myservice.example.com/cgi-bin/process"/>
            </filled>
          </subdialog>
        </form>
      </vxml>
    Subdialog in http://another.example.com
      <?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="getssn">
          <var name="firstname"/>
          <var name="lastname"/>
          <field name="ssn">
           <grammar src="http://grammarlib/ssn.grxml" type="application/srgs+xml"/>
            <prompt>Please say social security number.</prompt>
            <filled>
              <if cond="validssn(firstname,lastname,ssn)">
                <assign name="status" expr="true"/>
                <return namelist="status ssn"/>
             <else/>
               <assign name="status" expr="false"/>
               <return namelist="status"/>
             </if>
            </filled>
          </field>
        </form>
      </vxml>
    在<subdialog>元素中使用<param>元素是传递数据给subdialog的一种方便的方法,这样就不需要使用服务器端的脚本编程了。

第五节 Value Designations 第一节   第二节  第三节  第四节
 
    一些VoiceXML参数的值遵循在W3C CSS(Cascading Style Sheet)中使用的约定。
 
一、Integers and Real Numbers
    实数和整数只能在十进制中使用。整数由一个或多个“0”到“9”组成。实数可以是一个整数,也可以是0,或小数。实数和整数在前面加一个“+” 或“-”表示正负。
 
二、Times
    时间标识由一个非负的实数和时间单位标识符组成。时间的单位标识符有:
      ·ms:毫秒
      ·s:秒
    例如:“3s”,“850ms”,“0.7s”,“.5s”或“+1.5s”。
posted on 2006-09-16 22:56 铁观音 阅读(783) 评论(0)  编辑 收藏 引用 所属分类: VoiceXML2.0规范