Voice Xml规范的XML语音交互(含jdom解析)

VoiceXml简称Vxml通过它可以实现,网页文字发出语音并且可以接收客户端键盘输入操作来进行交互,也可以实现电信服务那种电话自动语音服务。关于Vxml说明文档请见附件!
用VXML实现像中国移动10086那样的自动语音服务,可以通过写出VXML规范的XML文件来实现,在这里只介绍一下怎么写出可以交互的VXML文件,和怎样用软件来测试它的效果。测试可以用这个免费软件但是它只能读英文和阿拉伯数字,无法读出中文。软件名称:prophecy-8.0.252.0-small-tts-ds.msi在google刻意搜到。下面这个文件是xml格式的jsp文件。这个文件的访问地址可以配置在prophecy软件里,作为语音程序的入口。具体操作可参照prophecy软件附带说明书。这个文件在运行的时候会自动被解析成XML文件并用软件自动读出内容,实现交互。可以写多个嵌套的文件来实现一层一层的交互。需要注意的是这里的动态数据的代码只能内嵌java代码,EL表达式是无法被解析的。例如:
		<% 
TDictionaryMaintenance parentDic = (TDictionaryMaintenance)request.getAttribute("parentDic");
TDictionaryMaintenance objectDic = (TDictionaryMaintenance)request.getAttribute("objectDic");
List dicList = (List)request.getAttribute("childrenDics");
%>
<prompt>
<% out.print("Please press 1 to find sites of the "+objectDic.getName()+"."); %>
<c:if test="<%=dicList!=null%>">
<%
for(int i=0;i<dicList.size();i++)
{
TDictionaryMaintenance dic = (TDictionaryMaintenance)dicList.get(i);
String str = "Please press "+(i+2);
str += " to find "+dic.getName()+".";
out.print(str);
}
%>
</c:if>
<% out.print("Please press 0 to return parent menu."); %>
</prompt>

<%@page contentType="application/voicexml+xml; charset=UTF-8" %>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<?xml version="1.0"?>
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
<form>
<field name="input" type="number">
<property name="bargein" value="false"/>
<prompt>
I will write content.<!--要读出的内容。-->
</prompt>
<!--filled为根据输入的操作来执行方法-->
<filled>
<!--当按1时,执行如下操作。-->
<if cond="input == 1">
<!--服务请求地址,如下: &等同于以往web下的&符号。-->
<goto next="<c:url value='/html/voicexml/article.ao?method=searchArticle&code=zcfg'/>"/>
<elseif cond="input == 2"/>
<goto next="<c:url value='/html/voicexml/site.ao?method=searchSite&code=zcfg'/>"/>
<else/>
input error,please input again.
</if>
</filled>
</field>
</form>
</vxml>


可以通过jdom对Vxml进行读写操作:
package vxml;
import java.io.IOException;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;


public class VxmlReader {

private static VxmlReader instance = null;
private static final String VXML_FLIE_NAME = "VoiceXml.xml";
private Element vxmlElt;

private VxmlReader() {
SAXBuilder sb = new SAXBuilder();
try {
Document doc = sb.build(Thread.currentThread().getContextClassLoader().getResourceAsStream(VXML_FLIE_NAME));
this.vxmlElt = doc.getRootElement();
List<Element> list = this.vxmlElt.getChildren();
for(Element l : list) {
System.out.println(l.getValue());
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

private static VxmlReader getInstance() {
if(null == instance) {
instance = new VxmlReader();
}
return instance;
}

public static void main(String[] args) {
VxmlReader.getInstance();
}
}

package vxml;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;


public class VxmlWriter {

public static void main(String[] args) {
DateFormat dateParser = new SimpleDateFormat("yyyyMMddhhmmss");
Element vxmlElt = new Element("vxml");
vxmlElt.setAttribute("version", "2.1");
Element formElt = new Element("form");
Element blockElt = new Element("block");
Element promptElt = new Element("prompt");
promptElt.addContent("Things are working correctly! Congratulations.");
blockElt.addContent(promptElt);
formElt.addContent(blockElt);
vxmlElt.addContent(formElt);
Document doc = new Document(vxmlElt);

Format format = Format.getCompactFormat();
format.setEncoding("utf-8");
format.setIndent(" ");//设置缩进

XMLOutputter out = new XMLOutputter(format);
String str = out.outputString(doc);
System.out.println(str);

try {
out.output(doc, new FileOutputStream("c:/VoiceXml" + dateParser.format(new Date()) + ".xml"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

}

需要jdom.jar
目次 1 范围 1 2 引用标准 1 3 术语和定义 1 4 概述 3 4.1 VoiceXML简介 3 4.2 VoiceXML的背景 4 4.2.1 VoiceXML的结构模型 4 4.2.2 VoiceXML的设计目标 5 4.2.3 VoiceXML的范围 6 4.2.4 VoiceXML的设计要点 7 4.2.5 对VoiceXML实现平台的要求 7 4.3 VoiceXML的一些概念 8 4.3.1 对话框和子对话框 8 4.3.2 会话 8 4.3.3 应用 8 4.3.4 语法 9 4.3.5 事件 9 4.3.6 链接 10 4.4 VoiceXML的元素 10 5 VXML元素说明 11 5.1 文档结构与文档执行 11 5.1.1VXML元素 11 5.1.2单文档应用 12 5.1.3多文档应用 12 5.1.4子对话框 13 5.2 业务控制与业务流程元素 14 5.2.1 对话框 14 5.2.1.1窗体 14 5.2.1.1.1 窗体的解释 14 5.2.1.1.2 窗体项 15 5.2.1.1.3 窗体项变量和条件 15 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 窗体项 18 5.2.1.3.1 FIELD元素 18 5.2.1.3.2 BLOCK元素 20 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元素 27 5.2.1.3.9 LINK元素 28 5.2.2 控制流和ECMAScript 29 5.2.2.1 变量和表达式 30 5.2.2.1.1 变量和表达式的一般信息 30 5.2.2.1.2变量的作用域 31 5.2.2.1.3标准会话变量 31 5.2.2.1.4标准应用变量 31 5.2.2.2事件处理 32 5.2.2.2.1 THROW元素 32 5.2.2.2.2 CATCH元素 32 5.2.2.2.3 事件处理的时机 33 5.2.2.2.4速记表示法 33 5.2.2.2.5 事件处理中的冲突 34 5.2.2.2.6 事件缺省动作 34 5.2.2.2.7事件类型 34 5.2.2.2.8定时器事件 35 5.2.3 执行上下文 35 5.2.3.1 VAR元素 36 5.2.3.2 ASSIGN元素 36 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元素 38 5.2.3.8 SUBMIT元素 38 5.2.3.9 EXIT元素 39 5.2.3.10 RETURN元素 39 5.2.3.11 DISCONNECT元素 40 5.2.3.12 SCRIPT元素 40 5.2.3.13 LOG元素 42 5.3 业务功能实现元素 42 5.3.1语法 42 5.3.1.1 语音语法 42 5.3.1.2 语法的作用域 43 5.3.1.3 语法冲突 43 5.3.2 系统输出 43 5.3.2.1 语音合成标志语言 44 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 超时 46 5.3.3 环境与资源 46 5.3.3.1 资源 46 5.3.3.1.1资源获取 46 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元素 48 5.3.3.2.2 METADATA元素 48 5.3.3.3平台属性 49 5.3.3.4 PARAM元素 50 5.3.3.5 时间设计 50 5.3.4 VoiceXML在独立外设中的应用 51 5.3.4.1对独立IP的硬件的要求 51 5.3.4.2 VoiceXML与多层次的业务 51 5.3.4.3 VoiceXML与其他功能实体的通信 51 5.3.5 各种功能的object说明 53 5.3.5.1会议桥资源的操作实现 53 5.3.5.1.1开始会议 53 5.3.5.1.2结束会议 54 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主动方等待 58 5.3.5.2.3被动方接入 59 5.3.5.3 SCP与IP的UI操作实现 60 6 应用举例:无线广告业务的VoiceXML描述 63 7 TTS语法规则 68 8编制历史 73
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值