资源描述
╳╳╳╳-╳╳-╳╳实施
╳╳╳╳-╳╳-╳╳发布
中国移动通信集团公司 发布
QB-╳╳-╳╳╳-╳╳╳╳
中国移动通信企业标准
语音内容服务VoiceXML接口规范
Title{英文黑体四号}
版本号:╳.╳.╳{黑体小四}
目次
1 范围 1
2 引用标准 1
3 术语和定义 1
4 概述 2
4.1 VoiceXML简介 2
4.2 VoiceXML的背景 4
4.2.1 VoiceXML的结构模型 4
4.2.2 VoiceXML的设计目标 5
4.2.3 VoiceXML的范围 6
4.2.4 VoiceXML的设计要点 6
4.2.5 对VoiceXML实现平台的要求 7
4.3 VoiceXML的一些概念 7
4.3.1 对话框和子对话框 7
4.3.2 会话 8
4.3.3 应用 8
4.3.4 语法 8
4.3.5 事件 9
4.3.6 链接 9
4.4 VoiceXML的元素 9
5 VXML元素说明 10
5.1 文档结构与文档执行 11
5.1.1VXML元素 11
5.1.2单文档应用 11
5.1.3多文档应用 12
5.1.4子对话框 13
5.2 业务控制与业务流程元素 13
5.2.1 对话框 13
5.2.1.1窗体 13
5.2.1.1.1 窗体的解释 14
5.2.1.1.2 窗体项 14
5.2.1.1.3 窗体项变量和条件 14
5.2.1.1.4 定向窗体 15
5.2.1.1.5 混合初始窗体 15
5.2.1.2 菜单(menu)元素 15
5.2.1.2.1 CHOICE元素和ENUMERATE元素 16
5.2.1.3 窗体项 17
5.2.1.3.1 FIELD元素 18
5.2.1.3.2 BLOCK元素 19
5.2.1.3.3 INITIAL元素 20
5.2.1.3.4 SUBDIALOG元素 20
5.2.1.3.5 OBJECT元素 22
5.2.1.3.6 RECORD元素 23
5.2.1.3.7 TRANSFER元素 25
5.2.1.3.8 FILLED元素 26
5.2.1.3.9 LINK元素 28
5.2.2 控制流和ECMAScript 29
5.2.2.1 变量和表达式 29
5.2.2.1.1 变量和表达式的一般信息 29
5.2.2.1.2变量的作用域 30
5.2.2.1.3标准会话变量 30
5.2.2.1.4标准应用变量 31
5.2.2.2事件处理 31
5.2.2.2.1 THROW元素 31
5.2.2.2.2 CATCH元素 32
5.2.2.2.3 事件处理的时机 33
5.2.2.2.4速记表示法 33
5.2.2.2.5 事件处理中的冲突 33
5.2.2.2.6 事件缺省动作 33
5.2.2.2.7事件类型 34
5.2.2.2.8定时器事件 34
5.2.3 执行上下文 35
5.2.3.1 VAR元素 35
5.2.3.2 ASSIGN元素 35
5.2.3.3 CLEAR元素 36
5.2.3.4 IF,ELSEIF和ELSE元素 36
5.2.3.5 PROMPT元素 37
5.2.3.6 REPROMPT元素 37
5.2.3.7 GOTO元素 37
5.2.3.8 SUBMIT元素 38
5.2.3.9 EXIT元素 39
5.2.3.10 RETURN元素 39
5.2.3.11 DISCONNECT元素 39
5.2.3.12 SCRIPT元素 39
5.2.3.13 LOG元素 41
5.3 业务功能实现元素 41
5.3.1语法 41
5.3.1.1 语音语法 42
5.3.1.2 语法的作用域 43
5.3.1.3 语法冲突 43
5.3.2 系统输出 43
5.3.2.1 语音合成标志语言 43
5.3.2.2 基本语音输出 44
5.3.2.3 播放语音文件 44
5.3.2.4 VALUE元素 45
5.3.2.5 打断语音输出 45
5.3.2.6 超时 45
5.3.3 环境与资源 45
5.3.3.1 资源 45
5.3.3.1.1资源获取 45
5.3.3.1.2 缓冲 46
5.3.3.1.3 预读 47
5.3.3.1.4 协议 47
5.3.3.2文档信息 47
5.3.3.2.1 META元素 47
5.3.3.2.2 METADATA元素 48
5.3.3.3平台属性 49
5.3.3.4 PARAM元素 49
5.3.3.5 时间设计 50
5.3.4 VoiceXML在独立外设中的应用 50
5.3.4.1对独立IP的硬件的要求 50
5.3.4.2 VoiceXML与多层次的业务 51
5.3.4.3 VoiceXML与其他功能实体的通信 51
5.3.5 各种功能的object说明 52
5.3.5.1会议桥资源的操作实现 52
5.3.5.1.1开始会议 52
5.3.5.1.2结束会议 53
5.3.5.1.3加入会议 54
5.3.5.1.4离开会议 55
5.3.5.1.5修改通话方的状态 56
5.3.5.2 连接两条话路 57
5.3.5.2.1操作申请 57
5.3.5.2.2主动方等待 57
5.3.5.2.3被动方接入 59
5.3.5.3 SCP与IP的UI操作实现 60
6 应用举例:无线广告业务的VoiceXML描述 60
7 TTS语法规则 65
8编制历史 71
前言
随着基于内容业务的不断发展和梦网模式的不断普及,移动用户对内容的需求也逐步增大。目前,运营商主要通过数据业务(短消息、GPRS等)向用户提供内容。
话音内容服务系统是通过话音为主的方式向用户提供内容服务。该系统由SCP、增强IP、SP等几个部分组成。本规范主要对增强IP设备与ICP接口的VXML语言规范进行描述。
本标准由中国移动通信集团公司技术部提出并归口。
本标准由标准提出并归口部门负责解释。
本标准起草单位:中国移动通信集团公司研发中心。
本标准主要起草人:魏冰、赵毓毅、孙楠。
本标准解释单位:中国移动通信集团公司技术部。
1 范围
本标准是对VoiceXML(the Voice Extensible Markup Language)语言的介绍。本规范中主要描述了VXML语言的结构、元素、语法及事件处理、资源获取的方法与机制。
本标准适用于对独立外设上应用的VoiceXML接口进行开发、规范。
2 引用标准
[1] W3C, Extensible Markup Language (XML),1998年1月, .w3.org/TR/REC-xml
[2] VoiceXML forum, VoiceXML Version 1.0, 2000年3月,
[3] Standard ECMA-262, Standard ECMA-262 ECMAScript Language Specification, 1999年10月
[4] IETF, Hypertext Transfer Protocol -- HTTP/1.1, 1999,
[5] Burnett、Walker、Hunt, Speech Synthesis Markup Language Version 1.0(W3C Working Draft), 2002年10月,
[6] Hunt、McGlashan , W3C Candidate Recommendation :Speech Recognition Grammar Specification Version 1.0,2002年5月,
[7]IETF,URLs for Telephone Calls,2000,
3 术语和定义
VXML:VoiceXML语音扩展标记语言
元素(element):元素是XML(VoiceXML是基于XML的)标记的基本组成部分,可以看成容器。它们可以有相关的属性和/或包含其它元素、注释等。下面是元素的例子:
<HTML>
<img src="logo.png" />
<author/>
</HTML>
其中,<img src="logo.png" />是<img src="logo.png"></img>的缩写,<author/>是空元素,不包含任何内容,注:在一些资料中,VoiceXML的元素又称“标记”。
属性(attribute):元素的某些附加信息可以作为元素的属性存在。属性是名-值对。上面关于元素的例子中,src=” logo.png”是元素img的属性。其中src是名;logo.png是值,用”(也可以用’)包围起来。
文档类型定义(DTD:Document Type Definition):用于结构化XML数据的一套规则。保证XML文档对XML语法和嵌套树结构的正确使用。
VoiceXML文档(VoiceXML Document):符合VoiceXML的文档类型定义的XML数据。
应用平台(Implementation Platform):应用平台是具有支持VoiceXML功能所需软硬件的计算机。
VoiceXML解释器(VoiceXML interpreter):VoiceXML解释器是一个(组)计算机程序,该程序通过解释开发人员编写的VoiceXML文档,控制应用平台和用户交互。
VoiceXML解释器上下文(VoiceXML interpreter context):VoiceXML解释器是一个(组)计算机程序,该程序使用VoiceXML解释器解释VoiceXML文档,同时独立(VoiceXML解释器)与应用平台交互。
对话框(dialog):由一个或者多个VoiceXML文档构成的应用系统是一个有限状态自动机,该自动机的一个状态成为一个对话框。对话框分两种:表单和菜单。
表单(form):用于收集输入内容,并向用户表示信息的对话框。
菜单(menu):菜单用于向用于提供选择,并根据用户的输入转到另一个对话框。
语法(grammar):语法指出了可以指定给字段的合法表示方式,如可以通过语法,要求用户输入布尔值。 VoiceXML使用的语法是基于JSGF(JSpeech Grammar Format)。
事件(event):应用平台会抛出一些事件来响应错误情况,如没有输入、不能理解的输入或者意外断开;特有的事件也可以通过脚本调用throw元素来产生。
4 概述
4.1 VoiceXML简介
VoiceXML是由IBM、Lucent、Motorola、AT&T四家公司于2000年提出的一种专门设计用来支持语音业务的可扩展标记语言,它建立在XML 标记语言规范的基础之上,是语音浏览技术的核心,其与数据库、HTML、WML以及其它文档处理和发布系统的资料交换几乎没有障碍。它的主要目标是在交互式语音应用中采用Web开发的结构和技术,做到了将Web和电话的结合,简化原本比较复杂的交互式语音业务开发,并使内容提供商的开发工作得到有效的保护,它可以应用于不同的系统,不会因为系统的扩容和系统切换导致业务的描述失效,真正做到了业务与平台无关。
下面是两个简短的VoiceXML的例子。第一个是著名的“Hello World”:
<?xml version="1.0"?>
<VXML version="1.0">
<form>
<block>Hello World!</block>
</form>
</VXML>
所有VoiceXML命令都封装在<VXML>……</VXML>之间。VoiceXML对话框用于描述脚本对用户输出的各种提示、定义和收集用户的响应,并且描述程序控制的流程。对话框分为两种,分别是窗体(forms)和菜单(menus)。窗体输出信息并且收集输入,菜单提供下一步作什么的选择。这个例子有一个单一的窗体,它包括一个块(block),该块合成并输出“Hello World!”。由于这个窗体没有后继的对话框,所以输出完“Hello World!”后,脚本结束。
第二个例子要求用户选择一种饮料,并把用户的选择提交到服务器:
<?xml version="1.0"?>
<VXML version="1.0">
<form>
<field name="drink">
<prompt>Would you like coffee, tea, milk, or nothing?</prompt>
<grammar src="drink.gram" type="application/x-jsgf"/>
</field>
<block>
<submit next=".asp"/>
</block>
</form>
</VXML>
域(field)用于输入。用户在处理窗体中下一个元素之前,必须为一个域提供相应的信息。以上脚本的一个交互例子如下:
C (computer): Would you like coffee, tea, milk, or nothing?
H (human): Orange juice.
C: I did not understand what you said.
C: Would you like coffee, tea, milk, or nothing?
H: Tea
C: (continues in document drink2.asp)
4.2 VoiceXML的背景
4.2.1 VoiceXML的结构模型
VoiceXML采用如下结构模型:
文档服务器(比如:Web服务器)处理来自客户端应用的请求,在应答中产生VoiceXML文档(VoiceXML documents),该文档在VoiceXML解释器中处理。VoiceXML解释器上下文(VoiceXML interpreter context)是VoiceXML解释器(VoiceXML interpreter)的执行环境。VoiceXML解释器上下文可以在监视用户输入的同时,解释执行VoiceXML文档。比如,一个VoiceXML解释器上下文可以一直监听一个用户需要帮助的事件,同时监听改变语音合成参数(如音量或者TTS特征)的事件。
实现平台受VoiceXML解释器上下文和VoiceXML解释器控制。
例如,在交互式语音应用中,VoiceXML解释器上下文可以负责检测呼叫并获得相应的VoiceXML文档,应答该呼叫。同时VoiceXML解释器开始执行文档中的对话框。
实现平台能够产生用户响应和动作(比如:讲话或输入字符,挂机)的事件和系统事件(比如:事件超时)。这些事件中一些由VoiceXML解释器本身进行处理,另外一些由VoiceXML解释器上下文进行处理。
4.2.2 VoiceXML的设计目标
VoiceXML的主要目标是将web应用开发的全部技术和经验引入到语音应答应用中,同时把这类应用的开发人员从底层编程和资源管理中解放出来。它利用熟悉的客户机服务器模式来实现语音业务和数据业务的集成。
VoiceXML将语音业务看作是用户和实现平台上一系列对话框的交互。对话框由VoiceXML文档描述,VoiceXML文档存放在文档服务器,而文档服务器可放置在实现平台之外。文档服务器管理着业务脚本,同时可以执行数据库操作,保留现有遗留系统,并且产生对话框。VoiceXML文档定义了一系列对话框,由VoiceXML解释器执行。用户的输入将作为对话框下一步执行的根据,同时根据需要,可以将用户的输入发送给文档服务器,文档服务器产生另一个VoiceXML文档作为应答,应答的VoiceXML文档将继续应用在当前的会话中。
VoiceXML具有以下优点:
l 每个文档可以指定多个对话框,减少了客户机与服务器的交互;
l 把开发人员从底层和具体平台的细节中解脱出来;
l 分离用户交互操作(in VoiceXML)和业务逻辑(CGI scripts);
l 跨实现平台。VoiceXML是内容提供商,工具提供商和平台提供商的公共语言;
l 提供构造复杂应用的语言特性。
当然,VoiceXML努力满足绝大多数语音交互业务的要求,但它不是万能的,当VoiceXML努力来满足绝大多数语音应答业务的要求时,那些有特殊要求的业务最好由专门应用来完成。
4.2.3 VoiceXML的范围
VoiceXML用于描述语音应答系统提供的人机交互功能,这些功能包括:
l 合成语音(TTS)的输出;
l 音频文件的输出;
l 语音输入的识别;
l DTMF输入的识别;
l 语音输入的记录;
l 电话的一些功能,如呼叫转移和挂机;
l 与业务相关的扩展。
VoiceXML提供多种方式来收集字符输入、语音输入,可以将输入赋值到在文档中定义好的相应变量中,并且决定文档以后的执行。VoiceXML之间通过统一资源标识符(URI)来相互链接。
4.2.4 VoiceXML的设计要点
VoiceXML基于XML。关于XML的细节,请参考相关的文档。以下是VoiceXML的设计要点:
l VoiceXML语言的跨平台特性,是通过对资源的抽象获得的。
l 为了满足了平台多样性的要求和市场竞争,VoiceXML语言不对平台支持音频文件格式,语音语法格式和URI方案等方面进行规范。
l VoiceXML语言只支持交互所需要的通用的特征。
l VoiceXML语言有确定语义,保证了开发人员的意图不被误解。客户机不需要决定文档元素的语义。
l VoiceXML语言有控制执行流的机制。
l VoiceXML语言使业务逻辑和交互行为相分离。
l VoiceXML语言不针对具有大量计算的应用,数据库操作和遗留系统的操作,这些任务由文档解释器外部的资源,如文档服务器来处理。
l 业务逻辑、状态管理、对话框的产生和对话框序列驻留在文档解释器的外部。
l VoiceXML语言利用URI来链接文档,同时也利用URI来向服务器脚本提交数据。
l VoiceXML语言提供方法来识别提交给服务器数据和提交的HTTP方法(get 或 post)。
l VoiceXML语言不要求文档作者明确分配和收回相应的资源,或者处理并发。实现平台处理资源分配和并发。
4.2.5 对VoiceXML实现平台的要求
本部分概括了支持VoiceXML解释器的软硬件的要求。
文档获取:解释器上下文负责获取VoiceXML解释器所需要的文档。在一些情况下,文档请求可由VoiceXML文档的解释过程产生,而其他请求由解释器上下文产生(当解释器上下文对VoiceXML语言之外的事件,比如入呼电话呼叫发生响应时)。
音频输出:实现平台能够通过使用音频文件、TTS方式,提供音频输出。当两种方式都支持时,平台必须能够自由地对TTS和音频进行序列输出。
音频输入:实现平台能同时检测和报告字符、语音输入,并且用计时器来控制输入间隙,这个间隙长度可以由VoiceXML文档来指定。实现平台必须能报告用户输入的字符(如:DTMF)。必须能动态接受语音识别语法数据,如通过一个URI来引用语音语法数据。对于语音输入,语音识别器可通过任意一种语音语法规范来监听。对接收自用户的音频进行记录,同时将信息保存到请求元素变量中。
必须能满足语音输入的动态更新,应该能对接收自用户的音频进行记录。实现平台必须能让录音对请求(request)变量可用。
4.3 VoiceXML的一些概念
一个VoiceXML文档(或者一个文档的集合,称为应用)构成一个有限会话的自动机。在某一时刻,用户总是在一个会话状态或者一个对话框中。每个对话框决定下一个要执行的对话框,对话框间的迁移用URI来指定,URI定义了下一个对话框和对话框所在的文档。如果URI没有给出文档,默认使用当前文档。如果URI没有给出对话框,则使用文档中的第一个对话框。当一个对话框没有指定后继对话框,或者对话框中执行到明确退出会话的元素,则执行被终止。
4.3.1 对话框和子对话框
对话框分为两类:窗体和菜单。窗体定义了一个交互,用来收集域的项目变量的值。每个域可以指定一个语法来定义某一个域允许的输入。窗体级的语法能用来填充几个域。菜单提供给用户一系列选择,基于选择的结果转到某一个对话框。
子对话框类似函数调用,它提供一个机制来调用新的交互,完成后可以返回原来的窗体。子对话框返回以后,将恢复原来的局部数据,语法和状态信息。例如,子对话框可用来创造一个带确认的数据库查询;在一个单一应用中创造一个可供各文档共享的组件;或者创建一个许多应用共享的可重用库。
4.3.2 会话
当用户与VoiceXML解释器上下文交互时,开始一个会话;文档装载和处理不中断会话;用户、文档或解释器上下文的请求可以结束一个会话。
4.3.3 应用
应用是共享应用根文档的文档集合。任何时候,当用户与应用中的某一个文档交互时,这个文档的应用根文档也被装载。当用户在同一个应用的文档中变迁时,应用根文档将保持装载。当用户变迁到一个非本应用的文档中去时,应用根文档将被卸载。当应用根文档装载后,应用根文档的变量作为应用变量,对其他文档可用,并且它定义的语法的状态在应用执行期间被置成激活。下图表示了共享应用根文档(root)的文档的变迁。
4.3.4 语法
每个对话框有一个或多个语音、DTMF语法与之关联。在机器主导应用中,每个对话框的语法只有当用户在那个对话框时是激活的。在混合主导应用中,由用户和机器交替决定下一步作什么。这种情况下,即使当用户在同一文档的其他对话框之中,或者当用户在同一应用的其他装载文档中时,一些对话框还将激活他们的语法(如:监听)。在这种情况下,如果用户输入与其他对话框活动条件相匹配的东西,则执行转移到相应的对话框,用户的输入如同那个对话框是当前的对话框。混合主导给语音应用增加弹性和能力。
4.3.5 事件
VoiceXML应用填表机制来处理用户的正常输入。同时,VoiceXML定义了一种机制来处理表机制不能处理的事件。在一定条件下,平台抛出事件,如用户未响应,没有正确响应,请求帮助。
解释器也可能扔出事件,如它发现了VoiceXML文档中的语义错误。事件由catch元素(或catch元素的简写)来捕获。每一个能发生事件的元素都可以指定catch元素。catch元素也可从高一级的封闭元素中继承。采用这种方式,共同事件处理行为可以在任一层指定,并应用到所有的低层。
4.3.6 链接
链接支持多种控制转移。当用户在链接的范围内时,链接指定一个活动语法。如果用户的输入与链接的语法相匹配,则控制转向此链接的目的URI。同时,link元素能够被用来把事件抛到相应的目的URI。
4.4 VoiceXML的元素
下表给出了VoiceXML的所有元素。
表4.4.1 VoiceXML的元素列表
元素
用途
<a不ssign>
对变量进行赋值
<audio>
播放带有提示的语音片断
<block>
非交互式的可执行代码的容器
<catch>
包含一个特定事件的处理程序
<choice>
定义菜单栏
<clear>
清除一个或多个变量,窗体变量清除成Undefined,事件计数器复位为0
<disconnect>
会话拆除
<else>
在<if>元素中使用
<elseif>
在<if>元素中使用
<enumerate>
用于记录菜单选项的简略表达
<error>
捕捉错误事件
<exit>
退出会话
<field>
在一个表格中声明输入域
<filled>
Field被填写后的执行动作
<form>
用于介绍信息和收集数据的对话
<goto>
跳转到在同一个和不同的文档中另一个对话
<grammar>
语音识别语法
<help>
捕获一个帮助事件
<if>
简单的条件逻辑
<initial>
声明进入一个表格的初始逻辑
<link>
在链接范围内对所有对话通用的转移
<log>
产生平台调试信息
<menu>
用于做出选择的对话
<meta>
定义一个元数据作为一个名/值对
<metadata>
通过元数据模式定义元数据
<noinput>
捕获一个没有输入的事件
<nomatch>
捕获一个不匹配事件
<object>
访问特定平台的资源
<option>
在field中定义一个选项
<param>
向<object> 或 <subdialog>传递的参数
<prompt>
TTS 序列或语音输出
<property>
用于设置平台属性
<record>
录制用户语音并将其存放到文件中
<reprompt>
当一个域被再次访问时播放的提示
<return>
从一个子对话中返回
<script>
一段ECMAScript 客户端的标记逻辑
<subdialog>
在当前对话中调用另一段对话
<submit>
向文件服务器脚本提交,用于产生下一个脚本
<throw>
抛弃一个事件
<transfer>
将用户转移到另一个目的地
<value>
在提示中插入一个变量的值
<var>
声明一个变量
<vxml>
VoiceXML 文件的顶层元素
下一章中将对以上元素进行详细介绍。
5 VXML元素说明
VXML的元素可以分为三个层次:
1、最顶层元素vxml,它封装其他所有的VoiceXML命令;
2、控制业务逻辑及业务流程的元素,如对话框form和menu,用于封装VoiceXML程序对用户输出的各种提示,定义和收集用户做出的响应,并且描述用户控制的流程;var、throw等控制流元素;
3、完成具体业务功能的元素,如窗体项元素,包括元素field、record、transfer、object、subdialog,用于提示用户,收集信息;控制项,包括block、initial元素;输入输出的相关元素如audio、prompt、grammar。
5.1 文档结构与文档执行
一个VoiceXML文档主要由称为对话框的顶层元素构成,所有的对话框都封装在vxml元素中。
5.1.1VXML元素
所有的VoiceXML命令都封装在<vxml>… …</ vxml >中,vxml元素的属性如下:
表5.1.1.1VXML元素的属性
version
这个文档的VoiceXML版本(必须的),当前版本号为2.0;要求平台能够同时支持1.0和2.0。
xmlns
VoiceXML文档的命名空间(必须的),VoiceXML的命名空间为。
xml:base
基本的URI,其他的非绝对URI的参考URI
xml:lang
文档的语言和本地类型
application
这个文档应用的根文档
下面是元素vxml的一个例子:
<?xml version="1.0" encoding="gb2312"?>
<vxml version="2.0"
xmlns=""
application="app-root.vxml">
</vxml>
5.1.2单文档应用
VoiceXML应用可以分为单文档应用和多文档应用。
单文档VoiceXML应用只有一个文件,缺省时,文档执行第一个对话,随着每一个对话的执行,会确定下一个对话。当一个对话没有指定后继对话时,文档的执行被中止。
5.1.3多文档应用
通常每个文档都是作为独立的应用来执行的,但VoiceXML支持多文档应用。多个文档组合成为一个应用时,需要选定一个文档作为应用的根文档,并在其它文档的<vxml>元素中指定它。这样做了之后,每一次解释器被告知加载这个文档时,如果它的根文档没有事先被加载的话,解释器加载相应的根文档。根文档一直驻留在解释器中,直到解释器被告知加载属于另一个应用的文档。解释器中总是会出现下列两种情况之一:
根文档(或单文档应用的文档)被加载且用户正在执行它。
根文档和这个应用的其它一个文档被加载且用户正在执行非根文档。
多文档应用有两个优点。首先,根文档中的变量可以被其它文档使用,这样信息可以被共享和保持。其次,根文档中的语法可以其它文档中仍旧保持激活状态,这样用户可以始终同公共的窗体、链接和菜单进行交互。(注:在多文档应用下,至多有两个文档同时被加载:一个是根文档,另一个是非根文档。用户没有同根文档进行交互的情况下,如果一个文档指向一个不存在的根文档,或一个应用的根文档还指向另一个应用的根文档,则产生错误语义,抛出相应的事件。)
下面的例子给出了一个利用根文档中的变量共享和保持信息的例子。
根文档app-root.vxml:
<vxml version="2.0"
xmlns="">
<var name=”userId” />
</vxml>
文档1对根文档中定义的变量进行赋值:
<vxml version="2.0"
xmlns=""
application="app-root.vxml">
<form>
<block>
<assign name="application.userId " expr="123918239" />
</block>
</form>
</vxml>
文档2通过根文档中定义的变量,引用文档1中的信息:
<vxml version="2.0"
xmlns=""
application="app-root.vxml">
<form>
<block>
<prompt>用户的ID值是<value expr=""></prompt>
</block>
</form>
</vxml>
5.1.4子对话框
子对话框是分解复杂对话框序列并使之有更好的结构,或产生可重用组件的一种机制。如果一个用户关心的业务是由几个相互独立的应用构成,它们共享基本的构造模块,则将这些模块构造为子对话的机制更为合理。
子对话增加了一种新的上下文执行关系。当它们被调用时,子对话可以是在现有文档中的一个新对话,也可以是在新文档中的一个新对话。注意,被调用的子对话仅激活自身的语法。
5.2 业务控制与业务流程元素
5.2.1 对话框
VoiceXML对话框用于描述VoiceXML程序对用户输出的各种提示,定义和收集用户做出的响应,并且描述用户控制的流程。对话框包括两种:窗体(form元素)和菜单(menu元素)。
5.2.1.1窗体
form元素(窗体元素)是VoiceXML文档的主要组成部分。窗体元素负责执行对话框定义中描述的所有操作。它用于封装与用户的输入、输出相关的命令,在文档中导航并且可以导航到其他的文档,可以说明变量并赋值,可以进行录音、电话转接。一个窗体包含:
l 一组窗体项,窗体项在窗体解释执行的主循环可以被访问到的项。窗体项可以细分为输入项和控制项,它们的区别是用户的输入可以激活输入项;控制项不受输入控制。
l 声明非窗体变量;
l 事件处理定义;
l filled动作,相应的域得到输入时执行的脚本。
窗体有以下属性:
id:窗体名;
scope:用于指明窗体中声明的任何语法的范围。
5.2.1.1.1 窗体的解释
窗体依据固有的窗体解释法则(FIA)解释,FIA包含一个主循环,重复选择每一个窗体项并访问它。
解释一个窗体项通常包含以下工作:
l 选择并播放一个或多个提示;
l 收集用户的输入,或者是对域的填充,或者是对某些事件的抛弃
l 解释任何新近填充的<filled>动作
当解释到控制转移元素或没有可以选择的窗体项时,窗体解释法则结束。
5.2.1.1.2 窗体项
窗体项是在FIA主循环中可被访问到的元素。分为两种,一种是域项,包括元素field、record、transfer、object、subdialog,用于提示用户,收集信息。另一种窗体项是控制项,控制项包括block、initial元素。
5.2.1.1.3 窗体项变量和条件
每一个窗体项都有一个关联的窗体项变量,当窗体被执行时缺省设置为未定义;开发人员也可以给它们赋初始值。窗体项变量可以依据命名规则赋名,也可以作为内部名称而不需要说明。同时,窗体项都有窗体项条件,用于控制是否执行该窗体项。如下表:
表5.1.3.1窗体项变量
name
窗体变量的名称
expr
变量的初始值。缺省值是ECMAScript的undefined
cond
一个表达式,表达式结果为真则可以访问对话项,为假则不能访问对话项。如果没有指定,默认为真
5.2.1.1.4 定向窗体
最简单和普遍的窗体类型是那种所有窗体项都按顺序执行而没有反复的窗体。
5.2.1.1.5 混合初始窗体
混合初始窗体是可以由计算机或人来主导会话的窗体,有一个或多个<initial>菜单项和一个或多个菜单级。混合初始窗体有两个特性:窗体中包含的各个字段可以按照任何顺序填写其信息,二是对语法的识别可以产生要填写的多个字段变量。
5.2.1.2 菜单(menu)元素
菜单和窗体元素同时VoiceXML的两种对话框之一。对于那种包含一个匿名域提示用户做出选择,根据用户选择转移到相应的窗体来说,菜单是一个很好的简化形式。同窗体一样,菜单也有语法,可以定义语法范围。
下面是菜单的一个例子:
<menu>
<prompt>
Welcome home. Say one of: <enumerate/>
</prompt>
<choice next="start.vxml">
Sports
</choice>
<choice next="">
Weather
</choice>
<choice next="">
Stargazer astrophysics news
</choice>
<noinput>Please say one of <enumerate/></noinput>
</menu>
菜单有以下属性:
表5.2.1 menu元素属性
id
菜单的名称
scope
对话文法的作用范围
dtmf
可以取“真”和“假”两个值。如果取真,menu下choice元素将按顺序分配1,2等(如果choice特别指明是“0”,“#”,“*”外)。缺省值是“假”
accept
如果该值设置为“exact”(缺省值),那么元素choice明确定义了识别的短语,否则,将是一个近似的识别短语(值为“approximate”)
5.2.1.2.1 CHOICE元素和ENUMERATE元素
元素choice用于设定口语语法或菜单语法的DTMF语法项。如果一个选项的语法项被设别,那么该choice元素的next、event或expr等属性将用于确定下一步将执行哪一个脚本。
choice元素有以下属性:
表5.2.2choice元素属性
dtmf
DTMF序列
accept
为这个choice重载<menu>中对accept的设置
next
下一个对话或文档的统一资源标识
expr
展开阅读全文