VoiceXML2.0规范 第二章 Dialog的结构

VoiceXML2.0规范
 
第二章  Dialog的结构 [第一章 ][前一章 ][后一章 ]
 
第五节 Links 第一节   第二节   第三节   第四节
 
    <link>元素可以有一个或几个语法,语法的作用域为包含该<link>元素的元素。该包含<link>元素的元素的scope属性不会影响<link>元素中语法的作用域。<link>元素被包含于一个<form>元素中,该<form>元素的scope属性为document,该<link>元素语法的作用域在该form内,而不是整个文档。<link>元素中的<grammar>元素是不允许指定scope属性的。当这些语法中的一个被匹配,<link>元素被激活,要么跳转到一个新的文档或dialog(如<goto>),要么抛出一个事件(如<throw>)。
    例如,当用户说“books”或按“2”时,<link>元素被激活:
      <link next="http://www.voicexml.org/books/main.vxml">
        <grammar mode="voice" version="1.0" root="root">
           <rule id="root" scope="public">
              <one-of>
                <item>books</item>
                <item>VoiceXML books</item>
              <one-of>
           </rule>
         </grammar>
         <grammar mode="dtmf" version="1.0" root="r2">
           <rule id="r2" scope="public"> 2 </rule>
        </grammar>
      </link>
    当语法被匹配时,下面的<link>元素动态的决定要跳转到当前文档的哪一个dialog:
      <link expr="'#' + document.helpstate">
        <grammar mode="voice" version="1.0" root="root">
           <rule id="root" scope="public"> help </rule>
        </grammar>
      </link>
    <link>元素可以是<vxml>和<form>的子元素,或form item<field>和<initial>的子元素。作为<vxml>的子元素,<link>元素的语法在整个文档中都是激活的;作为<form>的子元素,<link>元素的语法在该form中是激活的;如果应用根文档中有一个文档级的<link>元素,它的语法在该应用所有被加载的文档中都是激活的。
    如果在一个form item中执行,且该form item的modal属性为true,则form级或文档级的<link>元素的语法是不激活的。
    也可以定义一个<link>元素,当语法匹配时抛出一个事件,而不是跳转到一个新的文档或dialog,该事件是在当前执行的地方被抛出,而不是在定义<link>元素的地方被抛出。例如,当用户的输入匹配了<link>元素的语法或用户按键输入了"2",在用户正在访问的form item的地方抛出了help事件,由该form item的作用域内相应的<catch>元素处理(详见5.2.4节)。
      <link dtmf="2" event="help">
        <grammar mode="voice" version="1.0" root="r5">
           <rule id="r5" scope="public">
              <one-of>
                <item>arrgh</item>
                <item>alas all is lost</item>
                <item>fie ye froward machine</item>
                <item>I don't get it</item>
              <one-of>
           </rule>
        </grammar>
      </link>
    当匹配了<link>元素中的语法时,application.lastresult$也被赋值,这样才能允许呼叫流程在这个实际的语义结果的基础上往下走。在5.1.5中有一个例子。
    从概念上讲,可以认为<link>元素由两部分组成:条件和操作。“条件”就是<link>元素的内容,即它的语法,只有语法被匹配了,才能激活。“操作”由该元素的属性指定,即要跳转到哪里或抛出哪个事件。“条件”是静态地解决/求值的,而“操作”则是动态地解决/求值的。这意味着:
      1、该<link>元素的内容中的任何URI都是被静态地求值的,即根据定义了<link>元素的文档的基本URI求值(详见1.5.1节的xml:base)。
      2、<link>元素属性中的任何URI都是被动态的求值的,即根据语法被匹配时正在执行的文档的基本URI求值。
      3、<link>元素的属性中的任何ECMAScript表达式都是被动态地求值的,即在语法被匹配时的作用域内和执行的环境中求值的。
    <link>元素的属性有:
next要跳转到的URI,该URI是一个文档(也许有段标识符指定一个起始的dialog)或当前文档的一个dialog。
expr和next属性一样,只不过该URI是根据给定的ECMAScript表达式动态地求值的。
event当用户匹配了<link>元素中的一个语法时要抛出的事件。
eventexpr一个ECMAScript表达式,它的结果值为当用户匹配了<link>元素中的一个语法时要抛出的事件。
message描述事件产生原因的文本信息。
messageexpr一个ECMAScript表达式,它的结果值为描述事件产生原因的文本信息。
dtmf该<link>元素的DTMF序列,它的作用等同于一个简单的DTMF语法,和应用于该序列识别的DTMF<property>。它和DTMF语法不同的是,它的空格是不起作用的:dtmf=“123#”跟dtmf=“1 2 3 #”的效果是一样的。该属性能和其他的<grammar>同时使用。当用户的输入匹配了<link>元素中的一个语法或DTMF序列,该<link>元素被 激活。
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>的值。
表26:<link>元素的属性
    必须正确的指定属性“next”,“expr”,“event”或“eventexpr”中的一个,否则会抛出一个error.badfetch事件。必须正确的指定属性“message”或“messageexpr”中的一个,否则会抛出一个error.badfetch事件。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值