首页> 中国专利> 用于WEB启用的识别的服务器

用于WEB启用的识别的服务器

摘要

一种用于在客户机/服务器系统中的客户机设备上执行的标记语言,包括用于在无显示的基于声音输入的客户机设备与一个基于多重模式的客户机上统一用于与每一个客户机设备交互作用的网络服务器的识别相关事件、GUI事件和电话事件中的至少一个。还提供了一个识别服务器,用于接收指示了提供给一个客户机设备的输入数据的数据、以及一个用于识别的语法的指示。

著录项

  • 公开/公告号CN1420446A

    专利类型发明专利

  • 公开/公告日2003-05-28

    原文格式PDF

  • 申请/专利权人 微软公司;

    申请/专利号CN02131806.9

  • 发明设计人 王冠三;洪小文;

    申请日2002-04-30

  • 分类号G06F15/16;G06F17/27;G06F9/45;

  • 代理机构上海专利商标事务所;

  • 代理人钱慰民

  • 地址 美国华盛顿州

  • 入库时间 2023-12-17 14:44:30

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-04-17

    未缴年费专利权终止 IPC(主分类):G06F15/16 授权公告日:20060726 终止日期:20190430 申请日:20020430

    专利权的终止

  • 2015-05-20

    专利权的转移 IPC(主分类):G06F15/16 变更前: 变更后: 登记生效日:20150430 申请日:20020430

    专利申请权、专利权的转移

  • 2006-07-26

    授权

    授权

  • 2004-07-14

    实质审查的生效

    实质审查的生效

  • 2003-05-28

    公开

    公开

说明书

背景技术

本发明涉及对在诸如Internet的广域网上的信息的访问。具体地说,本发明涉及WEB启用的识别,该识别将允许使用各种方法输入在客户端上的信息和控制。

在人们的日常生活中越来越频繁地使用诸如个人信息管理器(PIM)、设备以及便携式电话的小型计算设备。伴随着现在可以得到用于运行这些设备的微处理器的处理能力的增加,这些设备的功能也正在增加,并且在某些情况下正在集成在一起。例如,当前的很多便携式电话能够被用于访问和浏览Internet以及能够被用于存储诸如地址、电话号等的个人信息。

鉴于这些计算设备一直被用于浏览Internet,或者被用于其他服务器/客户机结构,因此,必须输入信息到所述计算设备中。遗憾的是为了让这些设备容易携带而保持他们尽可能地小,所以,由于在所述计算设备的壳体上可以得到的表面区域有限,因此具有所有字母表字符作为孤立按钮的传统键盘通常是不可能的。

最近,诸如借助于使用VoiceXML(声音可扩展的标记语言)的声音入口已经发展到允许仅仅使用电话对所述Internet的内容进行访问。在这种结构中,文档服务器(例如,网络服务器)经过VoiceXML翻译机对来自一个客户机的请求进行处理。作为应答,所述网络服务器能够产生由所述VoiceXML翻译机处理、并且能够可听地发送给所述用户的VoiceXML文档。使用经过声音识别的声音命令,所述用户能够导航所述Web。

VoiceXML是一种具有流控标记的标记语言;但是,所述流控不能遵循包括事件和单独脚本在内的HTML(超级文本标记语言)流控模型。相反,VoiceXML通常包括一种特别适用于仅仅基于电话的语音交互、和从所述用户获得的信息在所述系统或应用程序控制之下的场合的格式解释算法。将voiceXML直接插入到其中也提供了图形用户接口的客户机-服务器关系中可以得到的应用程序中,将需要开发器精通两种格式的Web创作,一种用于VoiceXML,另一种使用HTML(或与其类似的),每一种都遵循不同的流控模型。

由此,需要改善用于在诸如Internet的服务器/客户机结构中提供语音识别的结构或者部分结构和方法。用于语音识别的所述创作工具能够很容易地适用于诸如PIM以及电话等的小型计算设备。特别需要致力于解决一个、多个或全部上述缺点的Web创作的结构或方法。

发明概述

一种用于处理数据的服务器/客户机系统包括一个具有一个带有可远程访问的信息的网络服务器的网络。一个客户机设备包括一个诸如话筒的输入设备以及一个诸如扬声器或显示器的显示部件。该客户机设备被配置为从该网络服务器获取信息并记录与包含在该信息中的字段相关的输入数据。该客户机设备适于将该输入数据和一个用于识别的语法的指示发送至一个远程地点。

作为本发明的第一个方面,一个识别服务器接收该输入数据以及该语法指示。该识别服务器将指示输入了什么的数据返回给该客户机和网络服务器中的至少一个。

作为本发明的第二个方面,一种用于在一个客户机/服务器系统中的一个客户机设备上执行的标记语言,包括用于在无显示的基于声音输入的客户机设备和基于多重模式的客户机上、统一用于与每个客户机设备交互的一个网络服务器的识别相关事件、GUI事件和电话事件中的至少一个的指令。

附图简述

图1的平面视图示出了一个计算设备操作环境的第一实施例。

图2的框图示出了图1的计算设备。

图3是一个电话的平面视图。

图4的框图示出了一个通用计算机。

图5的框图示出了一个用于客户机/服务器系统的结构。

图6示出了一个用于获得信用卡信息的显示。

图7示出了可在客户机上执行的标记语言的一个页。

图8示出了可在具有显示和语音识别能力的一个客户机上执行的标记语言的一个范例页。

图9A和9B示出了可以在仅仅具有可听播放和系统启动的客户机上执行的标记语言的范例页。

图10A和10B示出了可在仅仅具有可听播放和混合启动的客户机上执行的标记语言的范例页。

图11示出了可由服务器侧插件模块执行的脚本。

图12示出了识别服务器的第一运行模式。

图13示出了所述识别服务器的第二运行模式。

图14示出了所述识别服务器的第三运行模式。

图15A和15B示出了可在没有脚本的客户机上执行的说明标记语言的范例页。

所述实施例的详细描述

在描述一个基于Web的识别结构和用于实现同一个结构的方法之前,描述能够在所述结构中起作用的通用计算设备可能是有用的。参看图1,标号30示出了一个数据管理设备(PIM、PDA等)的范例格式。但是,可以预期本发明也能够使用下述的其他计算设备、特别是那些具有有限表面面积用于输入按钮等的计算设备实现。例如,电话和/或数据管理设备也将从本发明中获得益处。与现存的便携式个人信息管理设备和其它便携式电子设备比较,这种设备将具有增强的实用性,这种设备的功能和紧凑尺寸将很可能鼓励所述用户随时携带所述设备。因此,这里所描述的所述结构范围并不受这里所描述的范例数据管理或PIM设备、电话或计算机的限制。

图1中示出了一种数据管理移动设备30的一个示范形式。移动设备30包括壳体32并具有一个用户界面,该用户界面包括一个结合指示笔33使用的触敏显示屏的显示器34。所述指示笔33被用于在指定坐标处按压或接触显示器34以选择一个字段、选择性地移动光标的起始位置,或反之提供诸如通过手势或手写的命令信息。作为替换或者添加,可以在设备30上包括一个或多个用于导航的按钮35。另外,也可以提供诸如旋转轮和滚柱等的其他输入机制。但是,应当说明,这些输入机制的形式并不对本发明构成限制。例如,其他形式的输入能够包括诸如通过计算机视觉的虚拟输入。

现在参看图2,其框图示出了一个包括移动设备30的功能组件。中央处理单元(CPU)50执行软件控制功能。CPU50被连接到显示器34上,从而使依据控制软件产生的文本和图形图标显示在显示器34上。扬声器43能够被连接到通常具有数/模转换器59的CPU50上以提供可听输出。由用户下载或输入到移动设备30中的数据被存储在一个被双向连接到CPU50上的非易失性读/写随机存取存储器54中。随机存取存储器(RAM)54对由CPU50执行的指令提供易失存储,并存储诸如寄存器值的暂存数据。用于配置选项和其他变量的缺省值存储在只读存储器(ROM)58中。ROM58也能够用于为设备存储控制移动设备30基本功能性和其他操作系统的核心程序功能的操作系统软件(例如将软件组件下载到RAM54中)。

RAM54还可以用做一个存储器,用于以和在PC机上用于存储应用程序的硬件驱动的功能类似的方式存储代码。应当注意,虽然非易失性存储器被用于存储所述代码,所述代码也可以存储在不用于执行所述代码的易失性存储器中。

利用移动设备经过连接到CPU50上的无线收发信机52可以发送/接收无线信号。也可以提供一个可选的通信接口60,用于如果需要的话从一个计算机(例如台式计算机)或从一个有线网络直接下载数据。因此,接口60可以包括各种形式的通信设备,例如,红外线链接、调制解调器、网卡等等。

移动设备30包括话筒29、模/数(A/D)转换器37和存储在存储器54中的可选识别程序(语音、DTMF、手写、手势或计算机视觉)。借助于举例,响应来自设备30的用户的可听信息、指令或命令,话筒29提供被A/D转换器37数字化的多个语音信号。该语音识别程序可以在数字化的信号上执行正规化和/或特征提取功能,以便获得中间语音识别结果。使用无线收发信机52或通信接口60,语音数据被发送给下面将要讨论并示于图5结构中的一个远程识别服务器204。然后,识别结果被返回到移动设备30用于在其上面实现(例如,可视或者可听地),并最终发送给网络服务器202(图5),其中,网络服务器202和移动设备30以客户机/服务器的关系运行。类似的处理可以用于其他形式的输入。例如,可以在设备30上进行或不进行预处理的情况下数字化手写输入。与语音数据类似,这种形式的输入能够被发送给识别服务器204用于识别,其中所述识别结果被返回到设备30和/或网络服务器202中的至少一个。同样,DTMF数据、手势数据和可视数据也能够被进行类似的处理。取决于输入的形式,设备30(和下面将要讨论的其他形式的客户机)应当包括诸如用于可视输入的摄象机的必要硬件。

图3是一个平面图,它示出了便携式电话80的一个示例实施例。电话80包括显示器82和键盘84。尽管可能需要执行其他功能的附加电路,但是通常图2的框图可应用到图3所示的电话中。例如,图2所示的实施例将被要求作为电话运行所需要的一个收发信机。但是,这种电路与本发明不相关。

应当理解,除了上述便携或移动计算设备以外,本发明能够和诸如通用台式计算机的多种其他计算设备一起使用。例如,当诸如全字母-数字键盘的其它传统输入设备操作太困难时,本发明允许具有有限物理能力的用户将文本输入或键入到计算机或其他计算设备中。

本发明还可以和多种其他通用或专用计算系统、环境或结构共同操作。适于和本发明一起使用但不作为限制的公知计算系统、环境和/或结构的例子包括常用的电话(没有任何屏幕)、个人计算机、服务器计算机、手持或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程的消费电子、网络PC、小型计算机、巨型计算机和包括任意上述系统或设备的分布式计算环境等。

下面简要描述图4所示的通用计算机120。但是,计算机120仅仅是适当计算环境的一个例子,并不对本发明的使用或者功能范围作出限定。计算机120将不会被解释为相对于这里所述组件的任何一个或组合具有相关性或要求。

本发明可以在诸如正由一台计算机执行的程序模块的计算机可执行指令的一般上下文中进行描述。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。本发明还可以用于分布式计算环境中,在这种环境中,使用经过通信网络链接的远程处理设备执行任务。在一个分布式计算环境中,程序模块可以被定位于包含存储器存储设备的本地和远程计算机存储介质中。下而结合附图描述由所述程序和模块执行的任务。本领域的普通技术人员可以把这些描述和附图实现为处理器可执行指令,所述处理器可执行指令能被写入到以任何形式的计算机可读介质上。

参看图4,计算机120的组件可以包含但不局限于:处理单元140、系统存储器150、将包括所述系统存储器的各种系统组件连接到处理单元140的系统总线141。系统总线141可以是包括存储器总线或存储器控制器、外围总线和使用各种总线结构中任何一种的局部总线中的任何一种。借助于举例但不作为限制,这样的结构包括工业标准结构(ISA)总线、通用串行总线(USB)、微信道结构(MCA)总线、增强的ISA(EISA)总线、视频电子标准关联(VESA)局部总线和也被公称为Mezzanine总线的外设部件互联(PCI)总线。计算机120通常包括各种计算机可读的介质。计算机可读介质可以是能够被计算机120访问并包括易失和非易失介质、可拆卸和不可拆卸介质的任何介质。借助于举例但不作为限制,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括易失和非易失、可拆卸和不可拆卸的介质,其以任一方法或技术实现用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息。计算机存储介质包含但不局限于RAM、ROM、EEPROM、闪速存储器或其他存储器技术、CD-ROM、数字通用盘(DVD)或其他光盘存储器、卡式磁带、磁带、磁盘存储器或其他磁存储设备、或其他任何能够用于存储所需要的信息和能够被计算机120访问的介质。

通信介质通常包含以诸如载波或其他传输机制的调制数据信号形式的计算机可读指令、数据结构、程序模块或其他数据并包括任一信息传送介质。术语“已调制数据信号”的意思是指具有一个或多个特征集或者以这样的方式进行改变、对信号中的信息进行编码的信号。借助于不作为限制的举例,通信介质包括诸如有线网络或直接有线连接的有线介质和诸如声学、FR、红外和其他无线介质的无线介质。上述任意的组合也可以包括在计算机可读介质的范围之内。

系统存储器150包括以诸如只读存储器(ROM)151和随机存取存储器(RAM)152的易失和/或非易失存储器形式出现的计算机存储介质。包含诸如在启动期间,帮助在计算机120内的元件之间传输信息的基本例程的基本输入/输出系统153(BIOS)通常被存储在ROM151中。RAM152通常包含可以被处理单元140直接访问和/或当前正在操作的数据和/或程序模块。借助于不作为限制的举例,图4示出了操作系统54、应用程序155、其他的程序模块156和程序数据157。

计算机120还可以包括其它可拆卸/不可拆卸、易失/非易失计算机存储介质。仅仅作为例子,图4示出了一个从或向不可拆卸非易失磁存储介质读出或写入的硬盘驱动161、从或向可拆卸非易失磁盘172读出或写入的磁盘驱动171、以及从或向诸如CD ROM或其他光介质的可拆卸、非易失光盘176读出或写入的光盘驱动175。能够在范例操作环境中使用的其它可拆卸/不可拆卸、易失/非易失计算机存储介质包含但不局限于,卡式磁带、闪速存储器卡、数字通用盘、数字视频磁带、固态RAM和固态RAM等。硬盘驱动161通常经过一个诸如接口160的不可拆卸的存储器接口连接到系统总线141上,磁盘驱动器171和光盘驱动器175通常经过一个诸如接口170的可拆卸存储器接口连接到系统总线141上。

上述图4所示的设备及其相关的计算机存储介质提供计算机可读指令、数据结构、程序模块和用于计算机120的其他数据的存储。在图4中,例如,硬盘驱动161被表示为存储操作系统164、应用程序165、其他的程序模块166和程序数据167。注意,这些组件既可以相同于也可以不同于操作系统154、应用程序155、其他的程序模块156和程序数据157。操作系统164、应用程序165、其他的程序模块166和程序数据167在这里被给予不同的号码以至少表示它们是不同的拷贝。

用户可以经过诸如键盘182、一活筒183的输入设备和诸如鼠标、跟踪球或触摸板的定点设备181将命令和信息输入到计算机120中。其它的输入设备(未示出)可以包括游戏杆、游戏操纵杆、卫星盘、扫描器等。这些和其他的输入设备经常经过连接到所述系统总线上的用户输入接口180连接到处理单元140上,但是也可以由诸如并行端口、游戏端口或通用串形总线(USB)的其他接口和总线结构连接。监视器184或其他类型的显示设备也经过诸如视频接口185的一个接口连接到系统总线141上。除了所述监视器以外,所述计算机还可以包括诸如扬声器187和打印机186的外围输出设备,它们可以经过输出外设接口188进行连接。

计算机120可以使用到一个或多个诸如远程计算机194的远程计算机的逻辑连接在一个网络环境中进行操作。远程计算机194可以是个人计算机、手持设备、服务器、路由器、网络PC、对等设备或其他公共网络节点,通常包括很多或全部上述与计算机120相关的元素。在图4中描述的逻辑连接包括局域网(LAN)191和广域网(WAN)193,但是也可以包括其它的网络。这种联网环境在办公室、企业范围的计算机网络、内部网络和Internet中是普遍的。

当在LAN联网环境中使用时,计算机120经过网络接口或适配器190连接到LAN191上。当在WAN联网环境中使用时,计算机120通常包括调制解调器192或其他用于在诸如Internet的WAN 193上建立通信的装置。可以是内部或外部的调制解调器192可以经过用户输入接口180或其他的适当机制连接到系统总线141上。在一个网络环境中,相对于计算机120描述的程序模块或它的一部分可以被存储在远程存储器设备中。借助于不作为限制的举例,图4示出了作为驻留在远程计算机194中的远程应用程序195。很明显,所示网络连接是范例性的而且也可以使用在计算机之间建立通信链接的其它装置。

图5示出了能够在本发明中实施的用于基于Web的识别的体系结构200。通常,存储在网络服务器202中的信息能够经过移动设备30(这里也表示具有显示屏幕、话筒、摄象机、触敏面板等其它形式的计算设备,如基于这种输入形式所需要的那样)、或者经过其中信息被可听地请求的电话80、或者经过响应被按压的键由电话80产生的音调进行访问,并且其中来自网络服务器202的信息仅仅是可听地提供回到所述用户。

更加重要的是,体系结构200是统一的,是因为信息是经过设备30或经过电话80使用语音识别获得的,单个的识别服务器204可以支持其中的每一种操作模式。另外,体系结构200使用一个公知标记语言(例如,HTML、XHTML、cHTML、XML、WML等)的扩展进行工作。由此,存储在网络服务器202中的信息也能够使用在这些标记语言中获得的公知GUI方法进行访问。通过使用公知标记语言的扩展,在网络服务器202上的创作将变得容易,和当前存在的传统应用程序能够容易地进行修改以包括声音识别。

通常,设备30执行由网络服务器202提供的HTML页、脚本等。举例来说,当需要声音识别时,能够被数字化成音频信号或其中音频信号已经被设备30如上所述预处理过的语音特征的语音数据,被提供给具有语法指示或语言模块以在语音识别期间使用的识别服务器204。识别服务器204的实现可以有多种形式,只示出了其中的一种,但是它们通常包括识别器211。如果需要并且适当的话,识别的结果被返回提供给设备30,以便进行本地显示。在经过识别并且如果使用了任一图形用户界面对信息进行编译的基础上,设备30将所述信息传送给网络服务器202以便做进一步的处理,而且如果需要则进一步接收HTML页/脚本。

如图5所示,设备30、网络服务器202和识别服务器204经过网络205被共同连接,而且可单独寻址,这里,网络205是诸如Internet的广域网。因此,不需要使这些设备彼此位置物理相邻。特别是,所述网络服务器不需要包括识别服务器204。以这种方式,在网络服务器202处的创作可以被集中到想要的应用程序上而创作者不需要了解复杂的识别服务器204。此外,识别服务器可以被独立地设计和连接到网络205上,并借此可以在不要求网络服务器202处的进一步改变时请求就可得到更新和改善。如下面将要描述的,网络服务器202也能够包括一个创作机制,该创作机制能够动态地产生客户机端的标记和脚本。在另一个实施例中,网络服务器202、识别服务器204和客户机30可以根据实施机制的能力相互组合。例如,如果所述客户机包括一个例如个人计算机的通用计算机,那么,所述客户机可以包括识别服务器204。类似的,如果需要的话,网络服务器202和识别服务器204可以被包含在一个单机中。

对于客户机设备,一种用于对客户机/服务器系统中的输入数据进行处理的方法,包括:从一个服务器中接收具有被配置为从一个客户机设备的用户中获得输入数据的扩展的标记语言页;在所述客户机设备上执行所述标记语言页;将输入数据(指示了从所述用户处获得的语音、DTMF、手写、手势和图象)和相关语法发送给远离该客户机的一个服务器;在所述客户机处接收来自所述识别服务器的识别结果。可以提供一种计算机可读介质,该介质具有用于在一个客户机/服务器系统中的客户机上执行的标记语言,该标记语言具有用于指出与通过所述客户机设备输入的输入数据相关的一个语法的指令。

经过电话80对网络服务器202的访问包括将电话80连接到有线或无线电话网络208上,然后将电话80连接到第三方网关210上。网关210将电话80连接到电话声音浏览器212上。电话声音浏览器212包括用于提供电话接口的媒体服务器214和声音浏览器216。与设备30相似,电话声音浏览器212从web服务器202接收HTML页/脚本或类似信息。更重要的是,所述HTML页/脚本与提供给设备30的HTML脚本具有类似的格式。以这种方式,网络服务器202不需要单独地支持设备30和电话80,或者甚至单独地支持标准的GUI客户机。而且能够使用公用的标记语言。此外,与设备30类似,从声音浏览器216经过网络205或专线207、例如使用TCP/IP,向识别服务器204提供对由电话80传输的可听信号的声音识别。网络服务器202、识别服务器204和电话声音浏览器212能够在任何适当的计算环境、诸如图4所示的通用台式计算机中体现。

但是,应当注意,如果使用DTMF识别,这种形式的识别通常应当在媒体服务器214中执行,而不是在识别服务器204中进行。换言之,所述DTMF语法应当由所述媒体服务器使用。

如上所述,诸如HTML、XHTML、cHTML、XML、WML的标记语言或具有任何其它从SGML导出的标记的标记语言,可以包括用于在客户机/服务器体系结构中提供识别的控制和/或对象。以这种方式,创作者可以运用在这些标记语言中的、是在这种结构中使用的主要web开发平台的所有工具和专门知识。

通常,控制和/或对象可以包括一个或多个下述功能:用于识别器配置、识别器执行和/或后处理的的识别器控制和/或对象;用于合成器配置和提示播放的合成器控制和/或对象;用于规定输入语法资源的语法控制和/或对象;和/或用于处理识别结果的连接控制和/或对象。所述扩展被设计成轻型标记层,它将可听、可视和手写等接口的功能添加到现有的标记语言中。如此,所述扩展能够保持独立于:它们被包含在内的高级页,例如HTML;低级格式,使用该扩展来参考例如文本-语音和语法格式的语言资源;和在识别服务器204中使用的识别和语音合成平台的独特特征。

在描述具有适用于识别的控制和/或对象的标记语言之前,解释一下用HTML标记语言实现的简单GUI的例子是有用的。参看图6,一个简单的GUI接口包括将信用卡信息提交给所述网络服务器以便完成在线销售。在这个例子中,所述信用卡信息包括用于输入正在使用的信用卡的类型的字段250,所述信用卡例如是Visa、MasterCard、或者American Express。第二字段252允许输入信用卡号;而第三字段254允许输入失效日期。提供提交(Submit)按钮264来传输在字段250、252和254中输入的信息。

图7示出了用于从所述客户机获得前述信用卡信息的HTML代码。通常,如在这些形式的标记语言中普遍使用的那样,所述代码包括主体部分260和脚本部分262。主体部分260包括指出将被执行的动作类型、使用的表单、各种字段的信息250、252和254的多行代码,以及一个用于提交按钮264的代码(图6)。这个例子也示出了事件支持和嵌入式脚本宿主,其中,一旦启动了提交按钮264,就在脚本部分262中调用或执行函数“verify”。所述“verify”函数确定用于每个信用卡(Visa、MasterCard、或者American Express)的卡号长度是否具有适当的长度。

图8示出了用于产生与图6所示相同GUI的客户机标记,用于使用语音识别获得将被提供给网络服务器204的信用卡信息。虽然语音识别将在下面结合附图8-14予以讨论,但是,应当理解,所述技术也能够应用于手写识别、手势识别和图象识别。

通常,扩展(也被公称为“标签(tag)”)是XML元素的一个小集,具有相关的属性和DOM对象特征、事件和方法,这可以与源标记文本结合使用以便将识别接口、DTMF或调用控制应用于一个源页上。扩展的正式格式和语义与所述源文本的特征独立,所以,所述扩展实际上可以被等效地应用在HTML、XHTML、cHTML、XML、WML中或者与任何其他从SGML导出的标记一起使用。所述扩展遵循文档对象模型,其中提供了可以被分层的有新功能的对象或元素。每个元素都将在附录中详细讨论,但是通常所述元素可以包括属性、特征、方法、事件和/或其他“子(child)”元素。

关于这一点,还应当注意,根据正在其上执行浏览器的设备的能力,所述扩展可以用两种不同的“模式”加以解释。在第一种模式、即对象模式中,可以使用全部的能力。通过一个应用程序对扩展的编程操作是由任何在所述设备上的浏览器启动的机制执行的,例如在XHTML浏览器中的JScript解释程序或在WML浏览器中的WMLScript解释程序。为此,只需要定义一个小集合的所述扩展核心特征和方法,而且这些由存在于所述设备或客户机端的任何编程机制处理。所述对象模式提供事件发生和脚本编写,并能够提供更强的功能性,以便在语音的交互方面给对话创作者提供更好的客户机端控制。如这里所使用的,支持所有事件和脚本的浏览器被称之为“上层浏览器(uplevel browser)”。这种形式的浏览器将支持所述扩展的所有属性、特征、方法和事件。通常可以在具有较大处理能力的设备中找到所述上层浏览器。

所述扩展也可以在“说明模式”中得到支持。如在这里所使用的,以说明模式操作的浏览器被称之为“下层浏览器(downlevel browser)”,其并不支持所有的事件发生和脚本编写性能。而且,这种形式的浏览器将支持给定扩展的说明方面(即核心元素和属性),但不可能是所有的DOM(文档对象模型)对象特征、方法和事件。这种模式使用专门的说明语法,并可以进一步与诸如SMIL2.0(同步的多媒体集成语言)的说明性多媒体同步和协作机制(同步的标记语言)结合使用。下层浏览器通常会在具有有限处理能力的设备中找到。

关于这一点,应当讨论一种入口的特定模式。具体地说,结合至少一个显示器和在进一步实施例中的一个定点设备一起使用语音识别来指示与数据入口相关的字段,是特别有用的。特别是,在这种数据入口的模式下,所述用户通常是在什么时间选择一个字段和提供相应信息的控制之下。例如,在图6所示的例子中,用户应当首先决定在字段252中输入所述信用卡号,然后在字段250中输入所述信用卡的类型,接着是在字段254中输入截止日期。类似的,如果需要,所述用户可以返回到字段252并纠正错误的输入。当与如下所述的语音识别相结合时,可以提供一种很容易和自然的导航形式。如这里所使用的,这种同时使用了一个允许无需选择字段的屏幕显示器和语音识别的形式被称之为“多重模式(multi-modal)”。

回过来参看图8,这里示出了HTML标记语言代码的一个例子。与图7所示的代码相似,这个代码也包括主体部分270和脚本部分272。另外与图7所示的代码相似,图8所示的代码包括关于将执行的动作类型以及所述表单的位置的指示。由代码部分280、282和284分别控制或执行在字段250、252和254每一个中的信息输入。首先参考代码部分280,在例如使用设备30中的指示笔33选择字段250时,事件“onClick”就被启动,它调用或执行在脚本部分272中的“talk”函数。这个动作激活用于语音识别的语法,所述语音识别与通常在字段250中希望的数据类型相关。这种包括一项以上输入技术(例如声音和笔点击/滚柱)的交互类型被称之为“多重模式”。

应当说明,由于对很多应用程序来说,都假设所述创作者将使用所述源页中的应用说明图形机制对所述页中的各种组件的语音启动发出信号,所以,图8中所例举的语音识别扩展并不试图在所述客户机的浏览器上具有缺省的可视表示。然而,如果需要所述可视表示,则所述扩展也可以进行修改。

下面反过来参看所述语法,所述语法是一种诸如但不局限于上下文无关语法、N-语法或混合语法的一种句法语法(Syntactic grammar)。(当然,当使用相应形式的识别时,可以使用DTMF语法、手写语法、手势语法和图象语法。如这里所使用的那样,“语法”包括用于执行识别的信息,并且在进一步的实施例中,例如在一个规定字段中对应于所期望输入的信息)。包括所述标记语言第一扩展的的一个新控制290(这里被标识为“reco”)包括各种元素,示出了其中的两个,即语法元素“grammar”和“bind”元素。通常,与从网络服务器下载到客户机上的代码相似,所述语法可以在网络服务器202生成,并被下载到所述客户机上和/或提供给一个远程服务器用于语音处理。然后,所述语法可以被本地存储在一个高速缓存中。最后,所述语法被提供给识别服务器204以便在识别过程中使用。所述语法元素被用于使用一个属性指定联机的(inline)或被参考的(referenced)语法。

一旦从识别服务器204接收了与所识别的语音、手写、手势和图象等对应的识别结果,就提供reco控制290的文法以接收相应的结果,并使其与能够包括在显示器34上显示的,文本的对应字段关联。在所示的实施例中,一旦利用返回给所述客户机的结果完成了语音识别,就去激活所述reco对象并使所识别的文本与对应的字段关联。部分282和284的操作类似,其中,调用唯一的Reco对象和语法用于字段252和254中的每一个,并在接收所识别文本时与字段252和254中的每一个相关联。关于接收信用卡号字段252,函数“handle”以和上述结合图7所示类似的方式相对于所述卡类型检查所述卡号的长度。

通常,结合体系结构200以及客户机端标记语言的语音识别的使用是如下进行的:首先,指出与将给定的语音相关的字段。在所示的实施例中,使用了指示笔33,然而应当理解,本发明并不局限于所述指示笔33,其中,可以使用诸如按钮、鼠标指示器和旋转轮等任何形式的指示。如在可视标记语言使用中所周知的,可以提供诸如“onClick”的相应事件。应当理解,本发明并不局限于使用“onClick”事件去指示声音、手写和手势等命令的开始。任何一种可用的GUI事件、诸如“onSelect”,也都可以被用于相同的目的。在一个实施例中,对于其指出所述相应语音的开始和/或结束作用来讲,这种事件是非常有用的。还应当说明,引导所述语音的字段可以由所述用户以及在保持跟踪用户交互作用的浏览器上运行的程序指出。

关于这一点,应当说明,语音识别的不同方案需要来自识别服务器204的不同行为和/或输出。虽然,在所有情况下所述识别处理的开始是标准的-来自上层浏览器中显式start()调用或在下层浏览器中的说明性<reco>元素-但是用于停止语音识别的装置是不同的。

在上述的例子中,多重模式应用程序中的用户将通过例如压敏显示器上的敲击和保持来控制对所述设备的输入。然后所述浏览器使用例如“pen-up”的GUI事件控制识别应当停止的时间并返回相应的结果。但是,在诸如电话应用(后述)或在免提应用中的只有声音的方案中,所述用户不能在所述浏览器上直接进行控制,并且识别服务器204或客户机30必须负责决定停止识别和返回所述结果的时间(通常,当通过所述语法的路径已经被识别出时)。另外,其中需要在识别停止之前返回中间结果的口述和其他方案(也称为“开放话筒”)不仅要求显式停止功能,而且还需要在所述识别被停止之前将多个识别结果返回给客户机30和/或网络服务器202。

在一个实施例中,所述Reco元素可以包括一个“mode”属性,用于区分下述三种用于指示识别服务器204如何以及何时返回所述结果的识别模式。结果的返回意味着视情况提供“onReco”事件或激活所述“bind”元素。在一个实施例中,如果没有规定所述模式,则缺省识别模式为“automatic(自动)”。

图12示出了用于语音识别的“automatic”模式的操作(类似的模式、事件等可以用于其他形式的识别)。时间线281在283处指示识别服务器204何时将被开始识别,在285处指出识别服务器204检测语音的位置,以及在287处确定所述语音已经结束。

Reco元素的各种属性控制识别服务器204的行为。“initialTimeout”(启动超时)属性289是在识别的开始283和语音检测285之间的时间。如果这个时间周期被超过了,则将从识别服务器204提供一个“onSlience”事件291,从而发出一个信号通知那个识别已经结束了。如果识别服务器204发现所述发言是不可识别的,则将发出一个“onNoReco”事件293,它也将指出识别已经停止。

可以停止和取消识别的其他属性包括“babbleTimeout”(串音超时)属性295,该属性295是一个时间周期,在该时间周期中,识别服务器204必须在285处语音检测之后返回一个结果。如果被超过了,则根据是否发生了误差发布不同的事件。如果识别服务器204仍然在处理音频,例如在特长发言的情况T,则发布“onNoReco”属性293。但是,如果由于任何其它原因使“babbleTimeout”属性295被超出,则更大可能是产生了识别器误差,并发布“onTimeout”事件297。类似的,也可以提供“maxTimeout”(最大超时)属性299,它是在识别开始283和返回到客户机30的所述结果之间的一个时间周期。如果这个时间周期被超过了,则发出“onTimeout”事件297。

但是,如果一个大于“endSilence”(结束静默)属性301的时间周期被超过了,则意味着所述识别已经完成。识别服务器204将自动地停止识别并返回它的结果。应当说明,识别服务器204能够执行一个置信度测量以确定所述识别结果是否应被返回。如果所述置信度测量低于一个阈值,则发布“onNoReco”事件293,而如果所述可信度测量高于所述阈值,则发布“onNoReco”属性303和识别结果。图12借此示出了在“自动模式”中没有进行显式stop()调用。

图13示出了识别服务器204的“单模式”的操作。上述针对“自动模式”的属性和事件仍可用,并因此使用相同的标号表示。但是,在这种模式的操作中,stop()调用305在时间线281上被指出。stop()调用305与诸如由用户提供的“pen-up”的事件对应。在这种操作模式中,识别结果的返回是在显式stop()调用305的控制下执行的。如同所有的操作模式一样,如果在“initialTimeout”周期289内没有检测到语音,则发布“onSilence”事件291,但对于这种操作模式识别不被停止。类似的,在stop()调用305之前的由不可识别的发言产生的“onNoReco”事件293并不停止识别。但是,如果与“babbleTimeout”属性295或“maxTimeout”属性299相关的时间周期被超过了,则识别将停止。

图14示出了识别服务器204的“multiple rnode”(多重模式)操作。如上所述,这种操作模式被用于“开放话筒”或口述方案。通常,在这种操作模式下,以一定的间隔返回所述结果,直到接收到显式stop()调用305或与“babbleTimeout”属性295或“maxTimeout”属性299相关的时间周期被超过为止。但是应当注意,在任何一个不停止识别的“onSilience”事件291、“onReco”事件303或“onNoReco”事件293之后,用于“babbleTimeout”和“maxTimeout”的定时器将被复位。

通常,在这种操作模式下,对于每个被识别的短语,发布“onReco”事件303并返回所述结果,直到stop()调用305被接收为止。如果由于一个不可识别的发言而发出了“onSilence”事件291,则这些事件将被报告但识别将继续。

如上所述,用于所述字段的相关Reco对象被激活,包括向所述识别服务器204提供至少一个使用哪种语法的指示。这个信息可以伴随有记录在客户机30上、并被传送给识别服务器204的语音数据。如上所述,语音数据可以包括与由用户输入的所述语音相关的流式数据,或者可以包括指出在语音识别期间所使用的语音特征的预处理的语音数据。在进一步的实施例中,客户机端的处理还可以包括所述语音数据的正规化,从而使由识别服务器204接收的语音数据从客户机到客户机相对一致。由于所述识别服务器可以与客户机和通信信道的类型无关(stateless),所以这简化了识别服务器204的语音处理,借此,允许所述识别服务器更容易的可伸缩性。

一旦从识别服务器204接收了所述识别结果,所述识别结果就与对应的字段相关联,如果需要,可以执行客户机端的验证或检查。一旦完成所有字段与所述客户机当前提供的代码的关联后,信息被传送给网络服务器202以用于应用程序的处理。从前面的描述来看,很清楚,虽然网络服务器202已经向客户机30提供了适于识别的代码或页/脚本,但是,所述识别服务不是由网络服务器202执行的,而是由识别服务器204执行的。但是,本发明并不排除这样一种实现方法,其中,识别服务器204和网络服务器202在同一位置,即识别服务器204是客户机30的一部分。换言之,即使当识别服务器204和网络服务器202或客户机30相互结合,但是由于扩展在这些组件之间提供了一个简单和方便的接口,所以,这里所提供的扩展是非常有利的。

尽管在图8所示实施例中没有示出,但所述reco控制还可以包括一个远程音频对象(RAO),用于将适当的语音数据传送给识别服务器204。由于声音接口可能是不同的,所以将RAO制成插接型对象的益处在于:允许用于每个不同设备的不同的一个。另外,所述远程音频对象可以允许在相同时间处被激活的多个识别元素。

图9A和9B示出了这里作为具有页/脚本的HTML实施的只有声音的标记语言。如所清楚示出的,所述代码还可以包括一个主体部分300和一个脚本部分302。标记语言还有另一种扩展-包括属性相象bargein(attyibutes like bargein)的提示控制303。但是在图9A和9B的只有声音的实施例中语音识别的执行是不同的。利用所述的脚本功能“checkFilled”整个地控制所述处理,该脚本功能确定没有填满的字段并激活相应的提示和新对象。然而,使用与上述结合图8所述相同的上下文激活所述语法,其中,语音数据和关于使用语法的指示被提供给识别服务器204。类似的,从识别服务器204接收的输出与所述客户机(这里是电话声音浏览器212)的字段相关联。

通常对于只有声音的应用程序来讲是唯一的其他特征是当语音没有被识别出时对所述用户的一个指示。在诸如图8所示的多重模式的应用程序中,“onNoReco”简单地将一个零值放入到所显示的字段中以指示没有识别,由此也不需要进一步的动作。在所述只有声音的实施例中,“onNoReco”305调用或执行函数“mumble”,该函数将一个字短语传送给识别服务器204,接下来使用适当的文本-语音系统307将其转换成语音(图5)。识别服务器204把一个音频流返回给电话声音浏览器212,接下来传送给将被用户收听的电话80。类似的,在只有声音的应用中的其他波形提示在需要时也被识别服务器204转换成音频流。

应当说明,在这个例子中,在经过函数“welcome”播放欢迎提示之后,函数“checkFilled”向用户提示每个字段并激活适当的语法,包括重复已经输入的字段和确认所述信息是正确的,这包括激活“confirmation”语法。注意,在这个实施例中,每个reco控制都是从脚本部分302启动的,而不是从先前所述例子中的主体部分启动的。

该标记语言在不同类型客户机设备(例如诸如电话的、基于多重模式和无显示的声音输入的客户机设备)上可执行统一用于与所述每一个客户机设备交互的网络服务器的与语音相关的事件、GUI事件和电话事件中的至少一个。这特别有好处,因为这允许网络服务器应用程序中的重要部分可以被属类相关的写入或者是独立于客户设备。一个例子在图8和9A、9B中用”handle”函数示出。

虽然在图9中没有示出,但是,对于所述标记语言还存在两种以上用于支持电话功能性的扩展,DTMF(双音调制频率)控制和呼叫控制元素或对象。DTMF的工作情况类似于reco控制。它规定了一个从键盘字符串到文本输入的简单语法映像。例如,“1”意味着食品杂货店,“2”表示药店等。而另一方面,调用对象涉及电话功能、例如呼叫转移和第三方呼叫。下面将在附录中详细讨论属性、特征、方法和事件。

而图10A和10B示出了适用于仅有声音的操作模式的标记语言的另一个实施例。在这个实施例中,所述用户被允许对整个信息输入和讲话期间具有某些控制。换言之,虽然所述系统可以启动或指示所述用户开始讲话,但是该用户也可以提供比最初被要求更多的信息。这是“混合启动”的一个例子。通常,在这种对话交互的形式下,所述用户被允许与所述系统共享对话主动权。除在上面指出和下面将要详细讨论的、其中用户提供比提示所要求信息更多的信息的例子之外,当没有提示时,所述用户也可以切换任务。

在图10A和10B所示的例子中,标识作为“do_field”的语法包括与“g_card_type”、“g_card_num”和“g_expiry_date”语法相关的信息。在这个例子中,电话声音浏览器212一旦接收由“onReco”指示的经过识别的语音,就把将从电话80接收的语音数据和一个使用“do_field”语法的指示传送给识别服务器204,调用或执行函数“handle”,它包括将这些值与从所述语音数据识别出的任一或全部字段相关联。换言之,从识别服务器204获得的结果也包括用于每个字段的指示。根据在405中规定的连接规则对该信息进行语法分析并与相应的字段关联。如图5指出的,识别服务器204可以包括语法分析程序309。

从图7、8、9A、9B、10A和10B可以看出,使用了非常类似的web开发框架。在这些情况每一个中的数据表示也非常类似。另外,数据表示和流程控制的分开允许不同程序(系统启动和混合启动)之间、或不同形式(基于GUI的web、仅有声音的和多重模式)之间最大的可重复使用率。当电话包括显示器和与设备30类似的功能时,这也允许从仅有声音的操作经过电话到多重模式操作的自然扩展。附录A进一步提供了上面讨论的控制和对象进一步的细节。

如上面所指出的,上层浏览器可以使用脚本编写以便执行诸如在上面例子中包括的调用函数“handle”的各种需要去分配所述识别结果。在上面所讨论和在附录A第2.1.2节描述的实施例中,“bind”元素将对所述识别结果进行语法分析并分配所述值,其中,“bind”元素是“reco”的子元素(subelement)或子系元素(child element)。

虽然脚本编写是有用的,但例如由于安全关系,很多人并不认为它总是浏览器的最佳形式。在本发明的另一个实施例或方面中,所述“bind”元素是一种高级元素(与“reco”类似)并被提供有其他更丰富的特征,这实际上可以模拟脚本化而无需进行脚本化本身。

在不使用脚本或不使用下面将要讨论的本发明所述方面的情况下,下面将要讨论的某些诸如复杂对话效果的能力仅仅通过:将一个页发送回网络服务器202、执行在上面的应用程序逻辑从而产生一个新的页、将所述页传送回给客户机设备来完成。本发明的该方面允许一个程序员对该页中的对象调用方法而不会引起服务器往返行程(roundtrip)。

在上面讨论的实施例中,“bind”元素仅仅具有用于以web页形式向字段分配识别结果的属性“TargetElment”和“TargetAttribute”。在进一步的实施例中,“bind”元素还包括一个被添加以用于对象方法调用的“TargetMethod”。“TargetMethod”的使用和性能是用于模拟脚本编写的原理技术。例如,下述语法可以被用于调用对象“OBJ1”的“X”方法:

<bind TargetElement=“OBJl”TargetMethod=“X”...>。

注意,虽然这里所示的例子遵循HTML/XHTML事件语法,但是,本领域内普通技术人员应当发现将<bind>用途推广到其他事件发生机制中是很容易的,这些机制包括但不局限于:W3C文档对象模型层2或层3事件标准、ECMA公共语言信息基础设施(CLI)事件模型、Java编程语言事件模型、W3C同步多媒体集成语言(SMIL)和突发W3CXML事件标准协议。

图15A和15B示出了可在一个客户机、特别是在一个下层浏览器上执行的标记语言页。在这个例子中,所述用户经过音频提示要求一杯饮料。然后,所述系统确认点了什么样的饮料。在识别结果的基础上“bind”元素使用说明逻辑引导执行。当所述饮料被确认时,表单被发送回给网络服务器202,所有这一切都无需脚本编写。

通常,图15A和15B所示的标记示例包括一个数据部分350、一个语音部分352和用户接口部分354、356和358。部分354从一般查询中接收关于用户喜欢什么饮料的识别结果并将交互识别流程导向查询是否需要奶油和糖的再提示、或确认所述饮料被订购。特别是,当奶油或糖也已经被订购时,部分356接收一个识别结果。部分358接收用于确认所述饮料的识别结果。部分360是一个使用新消息对象“SMEX”的调用控制部分,这将在后面进一步讨论。

如上面所指出的,本发明这个方面的“bind”元素包括对象方法调用,当在361处执行“welcome”对象上的“start”方法时,它利用播放“welcome”提示启动图15A和15B所示的用户交互。

然后,在362处通过执行“asked”对象的“start”方法,询问用户“是希望得到可乐、咖啡还是橙汁?”。然后通过在363处调用识别“reco drink”对象上的“start”方法执行识别。

然后执行部分354中的标记,其中识别服务器204使用的语法由Xpath语句“./drink types”提供。注意,尽管这个例子使用了W3C Xpath语言,但是本领域内的普通技术人员可以发现它也可以被用于其他的标准语言,这些语言包括但局限于W3C XML查询语言(XQL)。如“bind”元素364所规定的,如果从识别服务器204接收的识别结果具有小于10的置信分,则在366处执行提示对象“reprompt”,后面跟着执行提示对象“ask”368,在这一点,在370处重新启动识别对象“reco drink”。如果所返回的识别结果是具有大于10的置信分的“coffee”,则字段“drink”被分配有在372处识别结果的值,且在374处通过提示对象“craem_sugar”向用户提示他/她是否喜欢奶油或糖。然后在376调用部分356中的识别对象“reco_cream_sugar”。否则,如果所述识别结果的置信分大于10但不是咖啡,则在378处再次分配字段饮料。在380处通过执行提示对象“confirm”提供所述识别结果的确认,后面跟随在382处在部分358中识别对象“reco_yesno”的调用。如果用户利用大于10的置信分回答“yes”,则在384处显示提示对象“thanks”,然后在386处发送表单。反之,如果用户回答“no”或识别结果的置信分低于10,则在390处执行提示对象“retry”,后面再次跟随有在392处正在执行的提示对象“ask”和在394处的“reco_drink”识别对象的调用。

从前面的例子可以看出,如在部分354、356或358中所指出的,“bind”元素允许方法的多重调用。如果需要,能够说明识别结果的多重分配。在所示的实施例中,当所述多重分配和方法调用被说明时,他们是按照文档顺序被执行的。

在另一个实施例中,还提供了用于传递方法参数的标准。换言之,某些方法需要一个参数列表。这是使用“arg”子元素实现的。例如,给出下述标记:

<bind TargetElement=“OBJ”TargetMethod=“F”><arg>X</arg><arg>Y</arg></bind>

等效于“OBJ.F(X,Y)”,或“OBJ”是一个具有参数“X”和“Y”的方法“F”的对象。

所述“bind”元素还能够包括一个“event”属性,用于说明所述连接元素被试图用于哪个事件。例如,标记:

  <bind event=“onNoReco”=TargetElement=“prompt1”TargetMethod=“start”/>

意味着当“onNoReco”事件被传送时,对象“pyompt1”的方法“start”将被调用。考虑使用“bind”元素作为例如结合图8所述的上述“Reco”元素的子元素,用于“bind”元素的缺省属性是“onReco”。

作为一个高级元素,所述“bind”元素可以包括在所述附录的部分2.4中规定的任一事件。另外,所述“bind”元素还可以包括具有能够被访问和用于指示程序流程的“status”属性的“onError”事件。在这个方面所述“bind”元素的其他事件具有“status”属性,这些都是能够被访问的。

除了检查识别结果的状态以外,也可以检查正在执行的当前文本或页本身。具体地说,“test”和“value”两个属性可以被扩展成包括一个被称为包含文档的根节点的“host”基元。例如,回过来参看图15A和15B,其中所包含的例子具有在部分354处的附加逻辑,用于询问当用户希望得到咖啡时是否需要奶油或糖。当利用标记“host()/get_drink/ddnk=‘coffee’”进行规定时,如果所述饮料字段仅仅是“coffee”,则用于添加奶油或糖的标记和随后部分356的调用将被返回。

应当说明,“bind”元素不仅可以被应用于来自语音服务器204的识别结果和在所述文档中接收或分配值,还可以被应用到消息对象(这里由“smex”表示),所述消息对象例如来自在所述客户机设备上运行的应用程序。在图15A和15B所示的例子中,当在所述客户机设备上运行的电话应用程序检测到一个调用时执行所述页。在部分360中,当接收到“/Call_connected”消息时,“bind”元素通过执行“reco_drink”对象来执行或播放“welcome”提示并开始识别。与从语音服务器204接收的识别结果相似,所接收的消息也非常大。某些消息被很好地定义,以便启动所希望的程序流程。其他的可以被接收和处理(例如,正如接收的所述识别服务器的识别结果那样被分析语法)。例如,这允许标记语言与从键盘输入的自然语言分析程序相似被使用。附录A中的reco元素包括与执行这个功能相关的特征。类似的,所述提示元素通过使用特征“innertext”可以被用来提供用于动态内容或音频波文件的文本消息并在附录A中给予解释。事件发布可以与用于识别结果的事件发布类似。例如,所述事件发布可以包括当所述消息源(例如运行于所述客户机设备上的应用程序)具有可用于所述浏览器的消息时得到传送的“onReceived”。

然后,“smex”或消息对象允许这里所讨论的标记语言标记被扩展到运行于所述客户机设备上的其它组件或应用程序。作为另外一个例子,所述消息对象可以被用来与用于在所述客户机上运行受到损害的听取的TTY组件进行通信。所述TTY组件将不使用语音识别提供用户已经键入的消息。这个消息然后被使用,就象已经从所述识别服务器中接收了一个识别结果一样,其中,所述消息能够被语法分析和分配给所述表单的字段,或使用上面讨论的“reco”、“grammar”或“bind”元素进行其他处理。在附录A中提供了消息或“smex”对象的进一步讨论。

所述“bind”元素还可以包括一个“for”属生,该属性允许它的作用被附加到所述页的其它对象上。例如,当对象“prompt 1”传送事件“onComplete”时,诸如:

<bind for=“prompt 1”event=“onComplet targetElement”=“prompt 2”=

targetMethod=“start”/>的标记将调用对象“prompt 2”的start方法。

回过来参看图5,网络服务器202能够包括一个服务器端的插接说明创作工具或模块320(例如,Microsoft Corporation的ASP或ASP+,或JSP等)。服务器端插接模块320可以动态地产生客户机端的标记,甚至是用于访问网络服务器202的客户机类型的特殊形式的标记。在最初建立客户机/服务器关系的基础上,所述客户机信息可以被提供给网络服务器202,或网络服务器202可以包括多个模块或例行程序以检测所述客户机的性能。利用这种方式,服务器端插接模块320可以为每个声音识别方案产生客户机端标记,即仅仅通过电话80的声音或用于设备30的多重模块。通过使用一致的客户机端的模块(能够在每个应用程序中使用的reco和prompt控制),用于多个不同客户机的创作更加容易。

除了动态产生客户机端的标记以外,与使用图8、9A和9B中的标记例子获得图6所示的信用卡信息类似,上层对话模块被实现为服务器端的控制并被存储在存储器324中,以便由开发者在应用程序创作中使用。通常,上层对话模块324将在由开发者规定的参数基础上在只有声音的和多重模式的方案中动态地产生客户机端的标记和脚本。所述上层对话模块能够包括多个参数,用于产生客户机端的标记,以适应开发者的需要。例如,信用卡信息模块可以包括一个用于指出客户机端标记脚本能够允许的信用卡的类型的参数。在服务器端插接模块320中使用的简单的ASP+页被示于图11。

虽然已经结合最佳实施例对本发明进行了描述,但是本领域普通技术人员将认识到在形式和细节上可以作出很多变化而不脱离本发明的精神和范围。

                      附录A

1引言

下面的标签(tag)是一组标记元素,它们允许文档使用语音作为输入或输出媒体。所述标签被设计成自包含的XML,它们能够被放入诸如HTML、XHTML、CHTML、SMIL、WML等任何一种从SGML导出的标记语言中。这里所使用的标签与可从Washington Redmond微软公司得到的已知方法SAPI5.0类似。所述标签、元素、事件、属性、特征、返回值等仅仅都是范例,并不作为限制。虽然这里解释了语音和DTMF识别,但是,也可以提供类似的标签用于其他形式的识别。

这里所讨论的主要元素是:

<prompt......>用于语音合成配置和提示播放

<reco......>用于识别器配置和识别执行和后处理

<grammar......>用于规定输入语法资源

<bind......>用于识别结果的处理

<dtmf......>用于DTMF的配置和控制

2Reco

Reco元素被用于规定可能的用户输入和用于处理输入结果的装置。其主要元素可以是<grammar>和<bind>,且它包含用于配置识别器特征的资源。

Reco元素是在上层浏览器中经过Start和Stop方法、或在SMIL启用的浏览器中使用SMIL命令被编程激活的。它们被认为在下层浏览器(即不支持脚本的浏览器)中通过它们在所述页上的出现起说明作用。为了允许并行激活多种语法,可以考虑同时使多个Reco元素活动。

Reco还可以采用一种特定的模式-‘automatic’,‘single’或‘multiple’-以区分它们允许的识别方案的种类和识别平台的行为。

2.1 Reco内容

Reco元素包含一个或多个语法和可选的一组(bind)连接元素,它检查识别的结果并将相关部分拷贝到所述包含页的值上。

在上层浏览器中,Reco支持按程序设计的各个语法规则的激活和去激活。还要说明,通过用于识别环境的缺省值激活一个语法中所有的顶层规则。

2.1.1<gramma(语法)>元素

所述语法元素被用于使用src属性规定联机或被参考的语法。通常至少规定一种语法(联机或被参考)。联机语法可以是基于文本的语法格式,被参考的语法可以是基于文本或二进制类型的。可以规定多个语法元素。如果规定了一个以上的语法元素,则所述语法内的规则被添加作为在相同语法中的额外规则。具有相同名称的任何规则将被重写。

属性(Attributes)

·src:如果规定了联机语法,则该项是可选的。包括所述语法的URI。注意,通过用于识别环境的缺省值激活一个语法中的所有顶层规则。

·lantgID:可选。用于指出语音引擎将使用哪种语言的字符串。所述字符串格式遵循xml:lang定义。例如,lang ID=“en-us”表示美国英语。这个属性只有在所述langID不在语法URI中规定时才有效。如果没有规定,则缺省值为美国英语。

如果在多个地方规定了所述langID,那么,langID遵循来自最低范围的先前顺序-远程语法文件(即,在该语法文件内规定的语言标识(id)),所述远程语法文件后面跟随有一个语法元素,而该语法元素后面跟随有reco元素。

  <grammar src=“EromCity.xml”/>  或  <grammar>  <rule toplevel=“active”>  <p>from</p>  <ruleref name=“cities”/>   </rule>  <rule name=“cities”>  <1>  <p>Cambridge</p>  <p>Seattle</p>  <p>London</p>  </1>  </rule>  </grammar>

如果规定了一种参考src的语法和一种联机语法,则所述联机规则被添加到所述被参考的规则中,并且任一具有相同名称的规则都将被重写。

2.1.2 <bind(连接)>元素

所述连接元素被用于把来自识别结果的值连接到所述页中。

由所述连接元素使用的识别结果可以是包含用于规定识别结果的语义标记语言(SML)的XML文档。它的内容包括语义值、所说的实际字和置信分。SML也可以包括可替换的识别选择(像在N个最佳识别结果中一样)。下面示出了“I’d like to travel from Seattle to Boston”这一发言的示范XML文本:

  <sml confidenc=“40”>  <travel text=“I’d like to travel fiom Seattle to Boston”>   <origin_city confidence=“15”>Seattle  </origin_city>   <dest_city confidence=“35”>Boston  </dest_city>  </travel>  </sml>

由于假设语法内的识别产生一个XML文档,所以,在语义标记语言即SML中,使用Xpath查询参考将从所述SML文档连接的值。并且由于在所述值被连接进入的页中的所述元素应被唯一地识别(它们可能将被形成控制),所以,这些目标元素被直接参考。

属性:

·targetElement:必须。将分配来自于SML的值内容的元素(如在W3CSMIL 2.0中)。

·targetAttribute:可选。将分配来自于SML值内容的目标元素的属性(如在SMIL2.0中的attributeName属性一样)。如果未规定,默认为“value”。

·test:可选。一个用于指出条件的XML Pattern字符串,在所述条件下将分配所述识别结果。缺省条件是真。

·value:必须。用于规定将被分配给所述目标元素的、来自于识别结果文档的值的XPATH字符串(如在所述W3C XML DOM说明中规定的)。

例子:

如此给出上述SML返回,随后的reco元素使用bind将origin_city和dest_city中的值传输到所述目标页元素txtBoxOrigin和txtBoxDest:

  <input name=“txtBoxOrigin”type=“text”/>  <input name=“txtBoxDest”type=“text”/>  <reco id=“travel”>  <grammar src=“./city.xml”/>  <bind targetElement=“txtBoxOrigin”  value=“orogin_city”/>   <bind TargetElement=“txtBoxDest”  value=“//dest_city”/>  </reco>

如在下面的例子中所描述的,这个连接是有条件的,其中,在作为一个预定条件加给所述连接操作的所述dest city结果的语义属性上执行一个测试:

<bind targetElement=“txtBoxDest”

value=“//dest_city”

test=“/sml_/“destcity[@confidence$gt$40]”

/>

所述连接元素是一个在下层浏览器或上层浏览器上处理识别结果的简单说明性装置。对于更复杂的处理来讲,由上层浏览器所支持的recoDOM对象实现了onReco事件处理程序以执行编程的脚本分析和所述识别返回的后处理。

2.2属性和特征

下述属性被所有浏览器所支持,所述特征被上层浏览器所支持。

2.2.1属性

下述Reco属性用来配置用于一个对话回合的语音识别器。

·initialTimeout:可选。在识别开始和语音检测之间微秒级的时间。这个值被传送给识别平台,如果被超过,则将从所述识别平台提供一个onSilence事件(见2.4.2)。如果未规定,则所述语音平台将使用缺省值。

·babbleTimeout:可选。微秒级的时间周期,在该周期中,在检测语音之后所述识别器必须返回一个结果。就在automatic(自动)和single(单)模式情况下的reco来说,这适于在语音检测和停止调用之间的所述周期。就在‘multiple(多重)’模式下的reco来说,这个超时应用于在语音检测和每次识别返回之间的所述周期上,即在每次结果返回或其他事件之后重新开始所述周期。如果被超过,则根据是否发生了误差产生不同的事件。如果所述识别器仍然在处理音频,即处于特别长发言情况下,则利用状态代码13(见2.4.4)产生onNoReco事件。但是,如果由于任何原因所述超时被超过,则将产生一个识别器误差,并产生onTimeout事件。如果未规定,则所述语音平台将默认一个初始植。

·maxTimeout:可选。在识别开始和返回到所述浏览器的结果之间的微秒级时间周期。如果被超过,则通过所述浏览器产生onTimeout事件-这为分布式环境中的网络和识别器故障提供了必要的条件。就在‘多重’模式下的reco来说,和babbleTimeout一样,在每次识别返回或其他事件之后重新开始所述周期。注意,maxTimeout属性应当大于或等于initialTimeout和babbleTimeout的总和。如果未规定,则该值将是浏览器默认值。

·endSilence:可选。就在自动模式下的reco来说,是在所述识别返回以后可能没有语音的一次发言结束后微秒级的静默周期。忽略除自动模式外的其他模式的reco。如果未规定,缺省值默认为平台内部值。

·reject:可选。识别拒绝阈值,低于该阈值,所述平台将产生‘no reco’事件。如果未规定,所述语音平台将使用缺省值。置信分范围为从0到100(整数)。拒绝值位于其间。

·server:可选。语音平台的URI(当标签解释程序和识别平台没有位于一起时使用)。举例值可以是server=protocol://yourspeechplatform。应用程序写入器也能够通过将一个查询字符串添加到URI字符串上以向语音平台提供特定设置,例如

    protocol://yourspeechplatform?bargeinEnergyThreshold=0.5

·langID:可选。字符串,用于指出语音引擎应使用哪一种语言。该字符串格式遵循所述xml:lang规定。例如,langID=‘en-us’表示美国英语。只有当langID在所述语法元素(见2.1.2)中没有规定时这个属性才有效。

·mode:可选。用于规定将被遵循的识别模式。如果未规定,默认为‘automatic’模式。

2.2.2特征

下述特征包含由所述识别处理返回的结果(这些由所述上层浏览器支持)。

·recoResult:只读。识别结果,如2.1.2所述,保持在包含语义标记语言(SML)的XML DOM节点对象中。在没有识别的情况下,所述特征返回空值。

·text:读/写。用于保持被识别的字的文本的字符串(即,在读模式下在recoResult的SML识别返回中的最高层元素的文本属性内容的简写。在写模式下,可以分配一个字符串,然后对该字符串进行语法分析,如同该字符串与识别结果相对应一样。所述写模式允许标记语言标签的扩展,并允许对所述客户机设备的其他组件和应用程序进行处理。可以从“smex”消息对象中获得所述字符串)。

·status:只读。从识别平台返回的状态代码。对于成功识别来说可能的值是0,或者错误值是-1到-4(如在Start方法(2.3.1部分)、Activate方法(2.3.4部分)上可能的异常中规定的那样),在识别器事件的接收(见2.4)中被设置为-11到-15。

2.3 Object method(对象方法):

使用在Reco的DOM对象中的下述方法可以控制Reco激活和语法激活。利用这些方法,上层浏览器能够开始和停止Reco对象,取消进行中的识别,激活和去激活个别的语法顶层规则(仅仅是上层浏览器)。

2.3.1 Start(开始)

所述Start方法开始识别处理,将所有的用于没有被明确去激活的识别环境的顶层规则作为有效语法使用,。

Syntax(语法):

    Object.Start()

Return value(返回值):

    无。

Exception(例外):

所述方法设置非零状态代码,当错误时激活一个onNoReco事件。可能的错误包括没有语法(reco状态=-1),未能加载语法,该错误可能是与不能编译语法、不存在URI(reco状态=-2)或语音平台误差(reco状态=3)类似的各种原因引起的。

2.3.2 stop(停止)

所述Stop方法是一个调用,用于结束识别处理。所述Reco对象停止记录音频,而且所述识别器将所接收音频的识别结果返回到记录被停止的点。释放由所述Reco使用的所有识别资源,而且它的语法被去激活。(注意,由于识别器本身在识别一个完全语句之后将停止,所以,在自动模式的典型

识别中不需要使用这种方法。)如果所述Reco还没有开始,那么,所述调用不起作用。

Syntax(语法)

    Object.Stop()

Return value(返回值):

   无。

Exception(例外):

   无。

2.3.3 Cancel(取消)

所述Cancel方法停止将所述音频反馈给所述识别器、去激活所述语法和释放所述识别器,并丢弃任何识别结果。所述浏览器将忽略用于被取消的识别的识别结果。如果所述识别器没有被开始,则所述调用无效。

Syntax(语法):

     Object.concel()

Return value(返回值):

     无。

Exception(例外):

     无。

2.3.4 Activate(激活)

所述Activate方法激活上下文无关语法(CFG)中的顶层规则。由于在‘Started(开始的)’识别处理期间它将无效,所以,在开始识别之前必须调用激活。注意,用于还没有被明显去激活的识别上下文的所有语法顶层规则已经被处理为激活。

Syntax(语法):

     Object.Activate(strName);

Parameters(参数):

StrName:必须的。将被去激活的规则名称。一个空字符串将去激活所有规则。

Return value(返回值):

      无。

Exception(例外):

      无。

2.3.5 Deactivate(去激活)

该方法去激活在语法中的顶层规则。如果该规则不存在,则该方法不起作用。

Syntax(语法):

      Object.Activate(strName);

Parameters(参数):

      strName:必需的。要被去激活的规则名称。一个空字符串去激活所有规则。

Return value(返回值):

      无

Exception(例外):

   无

2.4 Reco事件

所述Reco DOM对象支持下述事件,这些事件的处理程序可以被规定为所述Reco元素的属性。

2.4.1 onReco:

当所述识别器具有所述浏览器可用的一个识别结果时,这个事件获得激活。对于在自动模式中的Reco,这个事件自动停止识别处理并清除资源(见2.3.2)。OnReco通常被用于对所述识别结果的程序分析和将所述结果处理为所述页。

Syntax(语法):

Event object Info(事件对象信息):

Event Properties(事件特征):

虽然所述事件处理程序没有直接接收所述特征,但该处理程序能查询与数据相关的事件对象(见在下面例子中的事件对象的使用)

举例

下面的XHTML段落使用onReco调用一个脚本去分析识别结果并将所述值分配给适当的字段。

  <input name=“textBoxorigin”type=“text”/>  <input name=“txtBoxDest”type=“text”/>  <Reco onReco=“processCityRecognition()”/>  <grammar src=“/grammars/cuties.xml”/>  </reco>  <script><![CDATA[  >function processCityRecognition(){  smlResult=event.srcElenent.recoResult;  origNode=  smlResult.selectSingleNode(“//origin_city”);   if(origNode!=null),txtBixDEST.value=  origNode.text;   destNode=  smlResult.selectSinglNode(“//dest_city”);  if(destNode!=空),txtBoxDestvalue=destNode.text;   }  ]]></script>

2.4.2 onSilence:

onSilence用于在所述Reco上的initialTimeout属性(见2.2.1)中规定的持续时间周期之前对由所述识别平台检测的无语音事件进行处理。这个事件自动取消了与自动识别模式相关的识别处理。

Event object Info(事件对象信息):

Event Properties(事件特征):

虽然所述事件处理程序没有直接接收特征,但是,所述处理程序可以查询与数据相关的事件对象。

2.4.3 onTimeout

onTimeout处理两类通常反映了来自所述语音平台的误差的事件。

·它处理由所述标签解释程序发出的事件,所述标签解释程序发信号通知在所述识别被完成之前在maxtime属性(见2.2.1)中规定的周期到期了。这个事件通常反映在分布式结构中可能发生的问题。

·当识别已经开始、但处理已经停止,而且在由babbleTimeout规定的所述周期中没有识别时它还处理(ii)由所述语音识别平台发出的事件(见2.2.1)。

这个事件自动取消所述识别处理。

Syntax(语法):

Event object Info(事件对象信息):

Event Properties(事件特征):

虽然所述事件处理程序没有直接接收特征,但是,所述处理程序可以查询与数据相关的事件对象。

2.4.4 onNoReco:

onNoReco是一个当它不能返回有效识别结果时用于由所述语音识别平台发出的事件的处理程序。其中这可能发生的不同情况由状态代码区分。该事件自动停止识别处理。

Syntax(语法):

Event object Info(事件对象信息):

Event Properties(事件特征):

虽然所述事件处理程序没有直接接收特征,但是,所述处理程序可以查询与数据相关的事件对象。

3 Prompt(提示)

所述提示元素被用于规定系统输出。它的内容包括下述中的一个或多个:

·联机的或被参考的文本,它可以利用韵律学或其他语音输出信息进行标记;

·从所包含的文本中随机提取的可变值;

·链接到音频文件。

提示元素可以由下层浏览器(或被SMIL 命令激活的)或由在上层浏览器上的对象方法进行说明性的解释。

3.1 Prompt content(提示内容)

所述提示元素包含用于系统输出的资源,所述系统输出可以是文本、对音频文件的参考或两者。

简单的提示仅仅需要规定输出所需要的文本,例如,:

<promptid=“Welcome”>

Thank you for calling ACME weather report.

</prompt>

这个简单的文本还可以进一步包含下述类型之一的标记。

3.1.1语音合成标记(Speech Synthesis markup)

在提示元素中可以使用任何格式的语音合成标记语言。(这个格式在3.2.1中描述的‘tts’属性中规定)下述的例子示出了具有用于强调其中某些字的指令的文本:

<prompt id=“giveBalance”>

you have<emph>five dollars</emph>left in your accont</prompt>

3.1.2动态内容

可能是恰恰在输出所述提示之前需要在所述客户机上计算所述提示的实际内容。为了确认一个特定值,例如在一个变量中需要解除参考所述值。所述值元素可以被用于这个目的。

value元素

value:可选。在文档中检索一个元素的值。

属性:

·targetElement:可选。必须规定href或targetElement。该元素的id包含将要被检索的值。

·targetAttribute:可选。所述元素的属性,将从中检索所述值。

·href:可选。一个音频段的URI。如果两个都存在,那么,href将取代targetElement。

所述targetElement属性被用于参考位于包含文档中的一个元素。其id由targetElement规定的元素的内容被插入到将被合成的文本中。如果所希望的内容被保持在所述元素的一个属性中,则所述targetAttribute属性可以被用于规定在targetElement上所需的属性。对于在HTML格式控制中解除参考所述值时是有用的。例如,在下面的表述中,“txtBoxOrigin”和“txtBoxDest”的“value”属性在输出所示提示之前被插入到所述文本中:

    <prompt id=“Confirn”>

do you want to travel fiom

<value targetElement=“txtBoxOrigin”

targetAttribute=“value”/>

</prompt>

3.1.3 Audio files(音频文件)

所述值元素也可以被用于引用一个代替一个合成提示或者在该合成提示内的用于播放的预先记录的音频文件。下面的例子在所述提示结束处播放一个蜂鸣:

<prompt>

after the beep,please record your message.

<value href=“/way/beep.wav/”>

</prompt>

3.1.4 Referenced prompt(被参考的提示)

不是规定内容联机,而是所述src属生可以经过URI利用一个空元素去参考外部内容,如下:

<prompt id=“welcome”src=“/ACMEWeatherPrompts#Welcome”

/>

所述src属性的目标可以保持规定用于联机提示的任何一个或所有的上述内容。

3.2 Attributes和Properties(属性和特征)

所述提示元素保持下述属性(下层浏览器)和特征(下层和上层浏览器)。

3.2.1 Attributes(属性)

·tts:可选。用于文本-语音合成的标记语言类型。缺省值为“SAPI 5”。

·src:如果规定了联机提示,则可选。一个被参考提示的URI(见3.1.4)。

·bargein:可选。整数。从提示开始到提示所述重放可能被听众中断时的一个微秒级的时间周期。缺省值是无限大,即,不允许任何bargein(bargein)。Bargein=0允许直接的bargein。它被用于判断哪种bargein受到平台的支持。根据在所述reco开始时哪一种被允许,这样可以配置关键字或基于引擎的bargein次数。

·prefetch:可选。布尔标记,用于当加载所述页时指出所述提示是否应当被立即合成并被高速缓存在浏览器处。默认值为假

3.2.2 Properties(特征)

上层浏览器支持下述所述提示的DOM对象中的特征。

·bookmark:只读。字符串对象,用于记录所遇到的最后一个合成书签的文本。

·status:只读。从所述语音平台返回的状态代码。

·Innertext:只读。这个特征将提供所述提示的文本转录,该文本转录将被传送给所述合成器。例如,如果一个提示包括播放音频波文件,那么,这个特征提供那个提示(通常是作为所述音频波文件存储的)的文本版本,然后它将被显示,或者例如通过将所述提示的文本版本提供给运行于所述客户机设备上的一个组件或应用程序加以使用。该innertext特征还能够被用于提供包含动态内容的提示的文本版本。

3.3 Prompt methods(提示方法):

在所述提示的DOM对象中可以使用下述方法控制提示播放。利用这种方式,上层浏览器可以开始和停止提示对象。在进行中暂停和恢复所述提示,以及改变被合成语音的速度和音量。

3.3.1 Start(开始)

开始重放所述提示。除非给定一个参数,否则所述方法播放所述对象的内容。在一个给定时间,仅仅有一个单一的提示对象被认为是‘开始’,因此,如果连续调用Start,所有的重放都将被按顺序进行。

Syntax(语法):

   Objects.Start([strText]);

Parameters(参数):

o strText:将被传送给所述合成器的文本。如果存在,这个参数将取代所述对象的内容。

Return value(返回值):

无。

Exception(例外):

如果服务器已经释放了音频缓冲器,则将状态设置为-1,并激活onComplete事件。

3.3.2 Pause(暂停)

不用刷新所述音频缓存器的情况下暂停重放。如果重放被暂停或停止了,则这种方法不起作用。

Syntax(语法):

Object.Pause();

Retum value(返回值):

    无。

例外:

    无。

3.3.3 Resume(恢复):

不用刷新所述缓存器的情况下恢复重放。如果所述重放并没有被暂停,则这种方法不起作用。

Syntax(语法):

Object.Resume();

Retum value(返回值):

无。

    Exception(例外):

      当恢复失败时产生一个例外。

3.3.4 Stop(停止)

如果没有准备好,则停止重放,并刷新所述音频缓存器。如果重放已经被停止,则该方法简单地刷新所述音频缓存器。

Syntax(语法):

Object.Stop();

Return value(返回值):

        无。

Exception(例外):

    无。

3.3.5 Change(改变)

改变重放的速度和/或音量。所述改变可以在播放期间被调用。

Syntax(语法):

Object.Change(speed,volume);

Parameters(参数):

o Speed(速度):必须。用于改变的因数。Speed=2.0表示当前速率的两倍,Speed=0.5表示当前速率的一半,Speed=0表示恢复所述缺省值。

o volume(音量):必须。用于改变的因数。Volume=2.0表示当前音量的两倍,volume=0.5表示当前音量的一半,volume=0表示恢复所述缺省值。

Return value(返回值):

      无。

Exception(例外):

     无。

3.3.6提示控制的例子

下述的例子示出了使用上述方法的所述提示控制如何被创作以用于不支持关键字bargein机制的一个平台。

  <html>  <title>prompt control</title>  <head>  <script>   <!-   function checkKWBargein(){   news.change(1.0,0.5);//验证时关掉音量   if(keyword.text==””){∥结果低于阈值  news.change(1.0,2.0);//恢复音量  keyword.Start();//重新开始识别   }else{   news.Stop();∥检测到关键字!停止该提示  //作任何所需要的事情  }  }  //  </script>  <script for=“window”event=“onload”>   <!-   news.Start();keyword.Start();  //  </script>  </head>  body>  <promptid=“news”bargein=“0”>  Stocks turnd in another lackluster performance Wednesday as investors receivedlittle incentive to make any big moves ahead of next week’s Fedsral Reservemeeting.The tech-heavy Nasdaq Composition Index dropped 42.51 points to close at2156.26.The Dow Jones Industrial Average fell 17,05 points to 10866.46 after anearly-afternoon rally failed.  -<!-  </prmpt>  <reco id=“keyword”   reject=“70”  onReco=“checkKWBargein()”>  <grammer src=http://denali/news bargein grammer.xml/>  </reco>  </body>  </html>

3.4提示事件

所述提示DOM对象支持下述事件,它们的处理程序可以被规定为所述提示元素的属性。

3.4.1 onBookmark

当遇到一个合成书签时激活。所述事件不暂停重放。

Syntax(语法):

Event Object Info(事件对象信息):

    Bubbles    无    调用    遇到在再现字符串中的书签    缺省动作    返回书签字符串

Event Properties(事件特征):

虽然所述事件处理程序没有直接接收特征,但是,所述处理程序能够查询与数据相关的所述事件对象。

3.4.2 onBargein

当检测到一个用户的bargein事件时激活。(注意,对什么构成了例如能量检测或关键字识别的一个bargein事件的确定被传送到所述平台。)这个事件处理程序的说明不会自动地打开所述bargein。

Syntax(语法):

Event Object Info(事件对象信息):

Event Properties(事件特征):

虽然事件处理程序没有直接接收特征,但所述事件处理程序可以查询与数据相关的所述事件的对象。

3.4.3 onComplete:

当所述提示重放达到终点或遇到例外时(如上面所定义的)激活。

Syntax(语法):

Event Object Info(事件对象信息):

Event Properties(事件特征):

虽然所述事件处理程序没有直接接收特征,但是,所述处理程序可以查询与数据相关的事件对象。

3.4.4使用bookmarks(书签)和events(事件)

下面的例子示出了书签事件如何能够被用于确定用户响应的语义-对出发城市的校正或对目标城市的提供-按照何时在所述提示输出期间发生bargein。所述onBargein处理程序调用一个将全局‘mark’变量设置为在所述提示中遇到的最后一个书签的脚本,并且这个‘mark’的值被用在所述reco的后处理函数(“heard”)中以设置正确的值。

  <script><![CDADA[  var mark;  function interrupt(){   mark=event.srcElement.bookmark;  }  function ProcessCityConfirm(){  confirm stop();//flush the audio buffer(刷新音频缓存)  if(mark==“mark_origin_city”)  txtBoxOrigin.value=event.srcElement.text;  else  txtBoxDest value=   event srcElement>text;  }  ]]></script>  <body>  <input name=“txtBoxOrigin”value=“Seattle”  type=“text”/>  <input name=“txtBoxDest”type=“text”/>  .......  <prompt id=“confirm”onBargein=“interrupt()”  bargein=“0”>   From<bookmark mark=“mark_origin_city”/>  <value targetElement=“origin”  targetAttribute=“value”/>  please say<bookmark mark=“mark_dest-city”/>the  destination city you want to travel to.  </prompt>  <reco onReco=“ProcessCityConfirm()”>   <grammar src=“/grm/1033/cities.xml”/>  </reco>  .......  </body>

4 DTMF

创建一个DTMF识别对象。所述对象可以使用联机标记语言语法或通过脚本编写被实例化。当被激活时,DTMF能够使得提示对象激活一个bargein对象。应当注意,下面结合在第五部分中讨论的DTMF识别和调用控制所讨论的所述标签和事件通常适用于在声音浏览器216和媒体服务器214之间的交互作用。

4.1 Content(内容)

·dtmfgrammar:用于联机语法。

·bind:将DTMF转换结果分配给适当的字段。Attributes(属性):

·targetElement:必须。将向其分配部分识别结果的元素(与W3C SMIL2.0相同)。

·targetAttribute:将向其分配所述识别结果的所述目标元素的属性(与SMIL 2.0相同).缺省值是“value”。

·test:与所述分配相关的条件。缺省值是真。

例1:将多个键映像到文本上。

  <MDTF id=“city_choice”timeout=“2000”numDigits=“1”>  <dtmfgrammar>  <key value=“1”>Seattle</key>  <keyvalue=“2”>Boston</key>  </dtmfgrammar>  <bind targetElement=“city”targetAttribute=“value”>  />  </DTMF>

当“city_choice”被激活时,如果用户按压1,则“Seattle”将被分配给输入字段,如果用户按压2,则“Boston”将被分配给输入字段,其它情况则什么也不做。

例2:DTMF如何与多个字段一起使用。

  <input type=“text”name=“area_code”/>  <input type=“text”name=“phone_number”/> <DTMF id=“area_code”numDigits=“3”onReco=“extension.Actuvate()”><bind targetElement=“area_code”/></DTMF><DTMF id=“extension”numDigits=“7”>  <bind targetElement=“phone_number”/><DTMF>

这个例子表明了如何允许用户输入到多个字段。例3:当用户开始DTMF时如何允许语音和DTMF输入以及禁止所述语音。

<inputtype=“text”name=“credit_card_number”/><prompt onBookmark=“dtmf.Start();speech.Start()”bargein=“0”>  please say<bookmark name=“starting”/>  or enter your credit card number now</prompt><DTMF id=“dtmf”escape=“#”length=“16”interdigitTimeout=“2000”onkeypress=“speech.Stop()”><bind targetElement=“credit card number”/></DTMF><reco id=“speech”> <grammar src=“/grm/1033/digits.xml”/> <bind targetElement=“credit card number”/></reco>

4.2属性和特征:

4.2.1属性

·dtmfgrammar:必须。DTMF语法的URI。

4.2.2特征

·DTMFgrammar:读-写。

一个XML DOM节点对象,用于将DTMF表示到字符串转换矩阵(也被称之为DEMF语法)。缺省语法是

<dtmGrammar>  <keyvalue=“0”>0</key>  <keyvalue=“1”>1</key>   ...<key value=“9”>9</key><keyvalue=“*”>*</key><keyvalue=“#”>#</key></dtmfgrammar>

·flush

读/写,布尔标记,用于指出在激活之前是否自动刷新在基础电话接口卡上的DTMF缓存器。缺省值是假,用于启用超前键入。

·escape

读-写。该escape键用于结束所述DRMF读对话。Escape键是一个键。

·numDigits

读-写。用于结束所述DTMF读对话的击键数量。如果同时规定了所述escape和length(),那么,当满足其中任何一个条件时,所述DTMF对话结束。

·dtmfResult

只读字符串。用于存储用户已经输入的DTMF键。如果击键了,则结果中包括所述escape。

·text

只读字符串,用于存储空白间隔的符号串,其中根据DTMF语法转换每个符号。

·initialTimeout

读-写。用于接收第一次DTMF击键的微秒级的超时周期。如果未规定,则缺省值为所述电话平台的内部设置。

·interdigitTimeout

读-写。用于相邻DTMF击键的微秒级的超时周期。如果未规定,缺省值为所述电话平台的内部设置。

4.3 Object methods(对象方法):

4.3.1 Start

允许DTMF中断和开始一次DTMF读取对话。

Syntax(语法);

    Object.Start();

Return(返回值):

    无

Exception(例外):

    无

4.3.2 Stop

禁止DTMF。然而由所述用户输入的击键,仍保留在所述缓存器中。

Syntax(语法):

    Object.Stop();

Return(返回值):

    无

Exception(例外):

    无

4.3.3 Flush

刷新所述DTMF缓存器。在DTMF对话期间不可以调用所述Flush。

Syntax(语法):

    object.Flush();

Retum(返回值):

    无

Exception(例外):

    无

4.4事件

4.4.1 onkeypress

当按压DTMF键时激活。这取代遗传自所述HTMF控制的缺省事件。当用户击打所述escape键时,是onReco事件、而不是onKeypress事件被激活。

语法:

事件对象信息:

事件特征:

虽然所属事件处理程序没有直接接收特征,但是,所述处理程序可以查询与数据相关的事件对象。

4.4.2 onReco

当一次DTMF对话结束时激活。所述事件自动禁止当前DTMF对象。

语法:

事件对象信息:

事件特征:

虽然所述事件处理程序没有直接接收特征,但是,所述处理程序可以查询与数据相关的事件对象。

4.4.3 onTimeout

当在超时之前没有接收到短语完成事件时激活。该事件自动停止识别处理过程。

语法:

事件特征信息;

事件特征:

虽然所述事件处理程序没有直接接收到特征,但是,所述处理程序能查询与数据相关的时间对象。

5 CallControl object(呼叫控制)对象                                

表示电话声音浏览器的电话接口(呼叫、终端和连接)。该对象在GUI浏览器中与窗口对象一样。因此,所述电话对象的寿命与所述浏览器示例本身相同。用于所述电话的声音浏览器用具体例子将所述电话对象实例化,一个对应每个呼叫。用户不能实例化或处理所述对象。

关于这一点,只有和第一方呼叫控制相关的特性经过这个对象显露出来。

5.1特征

·address(地址)

只读。XML DOM节点对象。实施专用。这是呼叫者的地址。对于PSTN,可以是ANI和ALI的一个组合。对于VOIP,可以是所述呼叫者的IP地址。

·ringsBeforeAnswer

在对输入呼叫应答之前震铃的数量。缺省无限制,这意味着开发者必须使用下面的Answer()方法回答所述电话呼叫。当呼叫中心使用ACD查询所输入的电话呼叫时,这个数量可以被设置为0。

5.2 Methods(方法)

注意:这里所有的方法都是同步的。

5.2.1 transfer(转移)

转移所述呼叫。对于盲区转移,所述系统可以终止原始呼叫,并且一旦所述转移完成,则释放系统资源。

语法:

telephone.Transfer(strText);

参数:

o strText:必须。想要的接收器地址。

返回值:

例外:

当所述呼叫转移失败时例如当终端方正在忙、没有这个号码、传真或应答机制应答时产生一个例外。

5.2.2 Bridge

第三方转移。在所述呼叫被转移之后,所述浏览器可以释放分配给所述呼叫的资源。当该被转移的呼叫使用strUID返回时,它一直持续到所述应用程序恢复所述对话状态为止。基础电话平台可以将返回的呼叫传送给不同的浏览器。只有当接收者终止所述呼叫时才可以返回所述呼叫。

语法:

telephone.Bridge(strText,strUID,[imaxTime]);

参数:

o strText:必须。想要的接收器的地址。

o strUID:必须。专用于识别当前呼叫的对话ID。当所转移的呼叫被传送回来时,在地址属性中将出现所述srtUID。

o imaxTime:可选。被转移呼叫的秒级最大持续时间。如果未规定,缺省值为平台内部值。

返回值:

  无。

例外:

  无。

5.2.3 Answer(应答):

应答所述电话呼叫。

语法:

    telephone.Answer();

返回值:

   无。

例外:

   当不存在连接时产生一个例外。在这种情况下将不激活onAnswer事件。

5.2.4 Hangup(挂机)

结束电话呼叫。如果当前没有呼叫在进行,则不起作用。

语法:

   telephone.Hangup();

返回值:

  无。

例外:

    无。

5.2.5 Connect(连接):

开始第一方向外访问的电话喊叫。

语法:

telephone.Connect(strText,[iTimeout]);

参数:

o strText:必须。希望的接收器的地址。

o iTimeout:可选。在放弃尝试之前微秒级的时间。如果未规定,缺省值为平台内部值。

返回值:

    无。

例外:

当所述呼叫不能被完成、包括遇到忙信号或到达一个FAX或应答机制时产生一个例外(注意:硬件可能不支持这个特性)。

5.2.6 Record(记录):

将用户的音频记录到文件中。

语法:

   telephone.Record(uel,endSilence,[maxTimeout],

[initialTimeout]);

参数:

o url:必须。所述记录结果的url。

o endSilence:必须。微秒级的时间,用于在检测到静默之后停止所述记录。

o maxTimeout:可选。用于记录的秒级最大时间。缺省值为平台规定。

o initialTimeout:可选。在记录开始时允许的静默最大时间(微秒级)。

返回值:

无。

例外:

当所述记录不能被写入所述url时产生一个例外。

5.3事件处理程序

使用电话声音浏览器的APP开发者可以执行下述事件处理程序。

5.3.1 onIncoming()

当声音浏览器接收到一个输入电话呼叫时被调用。所有的开发者都能够使用这个处理程序去读取呼叫者的地址和在应答所述电话呼叫之前调用定制的特性。

5.3.2 onAnswer()

当所述声音浏览器应答所输入的电话呼叫时被调用。

5.3.3 onhangup()

当用户挂断电话时被调用。当所述程序调用Hungup或Transfer方法时,这个事件不能被自动激活。

5.4例子

这个例子示出了脚本编制,用于链接到所述呼叫控制事件以操纵所述电话对话。

  <HTML>  <HEAD>  <TITLE>Logonpage</TITLE>  </HEAD>  <SCRIPT>   var focus;   function RunSpeech(){   if(logon.user.value==“”){   focus=“user;p_uid.Start();g_login.Start();dtmf.Start();return;  }  if(logon.pass.value==“”){   focus=“pin”;  P_Pin.Start();g_lodin,Start();dtmf.Start();return;  }p_thank.Start(0;logon.submit();}function logon_reco(){ res=event.srcElement.recoResult; Pnode=res.selectSingleNode(“//uid”);If(Pnode!=null) Logon.user.value=Pnode.xml;Pnode=res.selectSingleNode(“∥password”);If(Pnode!=uull) Logon.pass.value=Pnode.xml;}function dtmf_reco(){  res=event.srcElement.dtmfResult;  if(focus==“user”)  logon.user.value=res;  else  logon.pin.value=res;}</SCRIPT><SCRIPT for=“callControl”event=“onIncoming”>  <!-   //read address,prepare customized stufff any  callControl.Answer();//</SCRIPT> <SCRIPT for=“callControl”event=“onOffhook”>   <!-p_main.Start();g_login,Start();dtmf.Start();   focuse=“user”;// <SCRIPT><SCRIPT for=“window”event=“onload”>  <!-   if(logon.user.value!=“”){  p_retry.Start();logon.user.value=“”checkFields();}//</SCRIPT><BODY><reco id=“g_login”>oReco=“login_reco();runSpeech()”timeout=“5000”onTimeout=“p_miss.Start();runSpeech()”><grammarsrc=http://kokaneei/etradedemo/speechonlv/login.xml/>   <reco><dtmfid=“dtmf”  escape=“#”  onkeypress=“g_login.Stop();”   onreco=“dtmf_reco();RunSpeech()”  interdigitTimeout=“5000”  onTimeout“dtmf.Flush();p_miss.Start();RunSpeech”/>  <prompt id=“p_main”>please say your user ID and pin   number</prompt>  <prompt id=“p_uid”>pleasejust say your user ID</prompt>  

6控制对话流程                                               

6.1使用HTML和脚本实现对话流程

这个例子示出了如何实现一个简单的对话流程,所述流程查找与输入框相关的值并提供用于所述输入的与上下文敏感的帮助。它使用在所述HTML输入机制(在一可视浏览器中作为“tooltip”(工具触点)机制使用的)上的标题属性帮助形成所述帮助提示的内容。

<html><title>Contex Sensitive help</title><head><script>var focus;function RunSpeech(){  if(trade.stock.value=””){  focus=“trade.stock”;  p_stock,Start();  retum;  }if(trade.op.value=“”){  foeus=“trade.op”;  p_op.Start();  retum;}//..repeat above for all fieldstrade.submit();}function handl(){ res=event.srcElement.recoResult; if(res.text=“help”){ text=“Pleasejust say”; text+=document.all[focus].title; p_help.Start(text);}else{//proceed with value assignments  }}</script></help> <body><prompt id=“p_help”onComplete=“checkFileds()”/><prompt id=“p_stock”onComplete=“g_stock.start()”>please saythe stock name</peompt><peompt id-“p_op”onComplete=“g_op”.Start()>Do you want to buy or sell</prompt><prompt id=“p_quantity”onComplete=“g_quantity.Start()”>howmany shares?</prompt><prompt ie=“p_peice”onComplete=“g_price.Start()”>What’s the price</prompt><reco id=“gz-stock”onReco=“handle();checkFields()”>   <grammar src=“g_stock.xml”/></reco><reco id=“g_op”onReco=“handle()”;checkFields()/>   <gramnar src=“./g_op.Xml”/></reco><reco id=“g-quantity”onReco=“handle();checkFields()”/>  <grammar src=“./g_quant.sml”/></reco><reco id=“g_price”onReco=“handle();checkFields()”/>  <geammar src=“./guant.xml”/></reco><form id=“trade”>  <inputname=“op”title=“stock name”/>  <select name=“op”title=“buy or sell”>   <option value=“buy”/>   <option value=“sell”/>   </select>   <input name=“quantity”title=“numeber of shares”/> <input name=“price”title=“price”/></form></body></html>

6.2使用SMIL下面的例子示出了使用SMIL机制激活提示和reco元素。

  <html xmlns:t=“urn:schemas-microsoft-com:time”   xmlrs:sp=“run:schemas-microsoft-com:speech”>  <head>  <style>  time{behacior:url(#default#time2);}  </style>  <head>  <body>  <input name=“txtBoxOtigin”type=“text”>  <mPut name=“txtBoxDest”type=“text”/>  <sp:prompt class=“time”t:begin=“0”>  Please say the origin and destination cities  </sp:prompt>  <t:par t:begin=“time.end”t:repeatCount=“indefinitely”<sp:reco class=“time”><grammar src=./fity.xml/><bind targetElement=“txtBoxOrigin”value=“∥origin_city”/>   <bind targetElemert=“txtBoxDest”test=“/sml/dest_city[@confidence $gt$ 40]”   value=“//dest_city”/>    </sp:reco>  </t:par>  </body>  </html>

SMEX(消息)元素/对象                                      

作为简单消息交换/扩展的简称,SMEX是一个与外部组件或客户机设备平台上的应用程序进行通信的对象。它可以被嵌入到XML或类似的基于标记的文档中作为具有标签名<smex>的元素。该消息对象的范例用途可以包括登录和电话控制。该对象表示当它允许一个新的功能性通过发消息被添加时基于标记的识别和提示的可扩展性。

在举例说明的基础上,所述对象被用于利用平台组件或应用程序经过它自己的配置参数或属性说明建立一个异步消息交换信道。它具有一个字符串特性,每当所述特性是分配操作的接收者(即1值)时,该特性的内容被传送给所述平台组件或应用程序。类似的,它还具有SML DOM节点类型的特性,用于保持从所述平台组件或应用程序中接收的所述消息。所述消息对象每当接收一个平台消息时都要传送一个事件。由于它的基础操作是异步的,所以,该对象还具有内置时钟,供应用程序的开发者操纵超时设置。

对于所述通信装置来讲,所述消息或smex对象是不可知的。但是,在一个实施例中,所述smex对象与原始XML或标记元素具有相同的寿命,即,当它的主机文档没有被加载时,所述smex对象将被破坏。而在很多情况下(例如呼叫控制),当它未被加载时,所述smex对象能够执行自动清除并释放通信资源,可以有很多使用情况,在这些情况下,期望遍布标记页的持久的通信链接。对于那些情况,所述结构将把放弃分配资源(例如关闭插座)的责任付诸于所述应用程序的开发者。

所述smex对象在消息格式(方案)方面是中性的。在某些实施例中,可能希望要求执行者利用对现存标准消息格式(例如在SIP或CCXML中使用的)的强烈偏爱支持少量的基本方案。实质上,所述结构允许所述平台和应用程序开发者采用XML或类似标记的标准化可扩展性的所有优点以便引入其他的特性而不损失平均时间的相互可操作性。

例1:使用smex作为登录对象

  <smexid=“logServer”>  <param name=“d:server”xnlns:d=“run:Microsoft.com/COM”>   <d:protocol>DCOM</d:protocol>   <d:clsid>2093093029302029320942098432098</d:clsid>   <d:iid>090385930490349853095309094803</d:iid>   </param> </smex> <listen...> ...//other directtices binding reco results to input fields   <bind targetElement=“logServer”targetAttribude=“sent” value=“*[@log$ge$ 3]”/> </listen>

这个例子说明了如何使用一个具有它的类id和接口id的com对象来实现一个登录机制。语音开发者把一个指示用于登录的兴趣级别的属性“log”加到相关的SML节点上。在上述实施例中,app开发者通过使用单个连接指示选择登录值大于或等于3的所有节点登录。该例子在上层和下层浏览器中都可使用。

这个例子还试图说明只要不出现smex对象对返回到所述识别文档的所述平台消息的传送响应的混淆,一个页就可以包含与相同平台组件通信的多个smex对象。上述例子说明一个组件可以实现多个接口,其中的每一个接口都具有它自己的smex或消息导管。相同的参数应用到TCP服务器上以听取多个端口。

例2:读取与输入呼叫相关的地址:

  <inputtype=“text”id=“remote”/>  <inputtype=“text”id=“transfer”/>  <input type=“text”id=“local”/>  <inputtype=“hidden”id=“session id”/>  ......  <smex id=“telephone”sent=“start_listening”>  <param name=“server”>http://tel-scr/whatever</param>  <bind targetElement=“session id”value=“//sid”/>  <bind targetElement=“remote”value=“//remote addr”/>  <bind targetElement=“transfer”  value=“//transfer addr”/>  <bind targetElement=“local”value=“//local addr”>  ......  </smex>

这个例子示出了所述连接指示是如何能够被用于处理所接收的消息的。这个例子假设用于输入呼叫的消息具有多个子元素:remote addr、transfer addr和local addr,它们的内容分别表示所输入呼叫的远程、转移和本地地址。

在这个例子中,以HTTP为基础的无连接协议被用于与所述电话服务器通信。这里所述电话服务器被设计成与一个以上的浏览器通信,因此,当app开始时,每个客户机都必须使用由所述服务器指定的专用id识别它本身。在这个例子中,它是通过由所述服务器传送“start_listening”消息实现的。在这个例子中,虽然其他技术(例如客户机端COOKIE)也可以被用于管理对话状态,但是,对话id被存储在可以被传送回给所述网络服务器并且被传送给所述应用程序的下一页的隐藏字段中。与用于Reco的情况相同,对于每个平台消息来讲并不是每个连接指示都被执行。上述例子并不意味着当存在一个输入电话呼叫时仅仅接收所述专用id。

7.1特征

由于只有所述读/写特征被作为与初始值规定相关的属性允许进行服务,所以,所述smex对象可以具有下述特征。

·Sent:读/写。与将被传送给所述平台组件的消息对应的一个字符串。每当所述传送被作为1值(lvalue)使用时,它的内容被发送。当所述特征被用做r值(rvalue)或当一个空对象被指定给这个特征时,它不起作用。

·received:只读,用于指出所接收消息的SML DOM节点数据。在下一个onRecieve事件被准备好传送之前所述消息将可以得到作为所述r值(rvalue)。

·timer:读/写,微秒级的、用于指出在触发一个超时事件之前过去时间的数量。当所述特征被分配给一个正值时,所述时钟开始启动。当正在进行向下计数时,所述值可以变化。在不触发所述超时事件的情况下,0或负值停止所述时钟。缺省值为0。意味着没有超时。

·status:只读,用于指出所述对象最新状态的一个整数。可能的值是0、-1和-2,他们分别意味着正常、超时期满和不能建立与所述平台的通信或已经中断。通过所接收的特征传送平台专用误差消息。对于连续传送所述误差消息的情况下,所述状态代码为0。

7.2 Event(事件):

所述对象具有下述特征:

·onRecieve:当得到所述平台消息时传送这个事件。如果具有通过bind元素传送的任何命令,那么,在所述事件被启动之前首先评估这些命令。在传送之前,所述received特征将被更新。

·onError:当所述超时期满或遇到一个通信链接误差时传送这个事件。当传送该事件时,如上所述将利用一个相应的误差码来更新所述status特征。

7.3 Child Elements(子元素)

当假设一个元素形成时,smex可以具有下述子元素:

·bind:除了所述指令工作于所接收的消息以外,与在reco中的情况相同。

·param:与在reco中情况相同,用于提供与所述smex对象相关的平台专用参数。可以使用“name”属性,并且param元素的内容是该参数的值。在一个实施例中,所述参数应当被理解为与名称空间和XML数据类型传送相关的标准XML属性。

7.4 Other Comments(其它命令):

一种用于扩充与登录功能相关的SMEX的理想方式是:

<smexid=“logSerwer”...>...</smex>

<script>function logMessage(logClass,message){

logSerwer.sent=logClass+“|”+message;

}</script>

实际上,这利用其性能可以被定制的(全局)功能扩展了所述对象。在上述的例子中,所述登录功能被编程以便在所述id和所述消息之间插入字段分割符:“|”。

对于那些不喜欢全局功能的人来讲,作为一种对象方法,他们可以使用ECMAScript的“prototype”属性。例如:

  <smex id=“logSerwer”onload=“addFunction()”>...</smex>  <script>  function my_logMessage(logClass,message){  logSerwer.sent=logClass+“l”+message;}function addFunction(){   logSerwer.prototype.logMessage=my_logMessage;  }</script>

可以以多种面向对象的方式应用所述函数:

   logSerwer.logMessage(RECO_LOG_ERROR,“My message”);

应当注意,为了在上述例子中进行扩展,虽然所有必须的结构都已经被很好地建立了标准结构,但是,还需要来自所述smex对象构成中的多项工作。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号