第三章 User Input(Grammars)
|
|
|
第一节 Speech Grammars
|
|
|
<grammar>元素用于提供一个语音语法: |
|
·该语法指定了一系列要匹配的短语,用户可能说出这些短语用于执行一个操作或提供一些信息。 |
|
·对于一个要匹配的短语,该语法返回一个相应的语义解释。返回的可以是一个简单的值(例如一个字符串),一组成对的属性――值(例如年、月、日),或一个嵌套的对象(对于复杂的请求)。 |
|
<grammar>元素适用于满足上述要求的任意的语法格式。VoiceXML平台必须至少支持一种通用的格式,即W3C SRGS的XML格式。VoiceXML平台应该支持W3C SRGS的ABNF格式。VoiceXML平台可以选择支持SRGS以外的语法格式。例如,平台可能借助<grammar>元素对PCDATA的支持来嵌入一个专有的语法,或使用src或type属性引用一个外部的语法。 |
|
VoiceXML平台必须是一个合格的XML格式的语法处理器,如W3C SRGS中定义的。虽然这样使得平台要处理文档中定义的一个或多个“xml:lang”属性,但是并不要求平台必须是多语言的。当遇到一种不支持的语言时,平台要抛出error.unsupported.language事件,该事件在它的"_message"变量中指定了这种不支持的语言。 |
|
SRGS的XML格式的元素 |
|
下面是在W3C SRGS的XML格式中定义的元素,它们在VoiceXML2.0中是可用的。本文档没有重复定义这些元素,请参考W3C SRGS中的定义和例子。 |
元素 |
作用 |
章节链接 |
<grammar> |
XML格式语法的根元素。 |
4.
|
<meta> |
等价于HTTP元内容的头部声明。 |
4.11.1
|
<metadata> |
XML元数据内容的头部声明。 |
4.11.2
|
<lexicon> |
发音词典的头部声明。 |
4.10
|
<rule> |
定义一条语法展开规则。 |
3.
|
<token> |
定义一个可作为输入的词或其他实体。 |
2.1
|
<ruleref> |
引用一条本地或外部定义的规则。 |
2.2
|
<item> |
定义一个可选的、重复的或可能的展开项。 |
2.3
|
<one-of> |
定义一组可供选择的规则展开项。 |
2.4
|
<example> |
包含在一个规则定义中的元素,该元素提供了一个匹配该规则的输入的例子。 |
3.3
|
<tag> |
定义一个任意的字符串,该字符串可作为该展开规则的语义解释。 |
2.6
|
|
表27:SRGS(XML 格式)的元素 |
|
一、Inline Grammars |
|
<grammar>元素可用于指定一个联机语法或外部语法。联机语法由<grammar>元素的内容指定,它定义了一个完整的语法: |
|
<grammar type="media-type" mode="voice">
inline speech grammar
</grammar>
|
|
在这种情况下,有必要把内容封装在XML的CDATA段中。对于联机语法,<grammar>元素的type属性指定了一个媒体类型,该媒体类型控制着<grammar>元素内容的解释。 |
|
下面是一个联机语法的例子,是W3C SRGS的XML格式的: |
|
<grammar mode="voice" xml:lang="en-US" version="1.0" root="command">
<!-- Command is an action on an object -->
<!-- e.g. "open a window" -->
<rule id="command" scope="public">
<ruleref uri="#action"/> <ruleref uri="#object"/>
</rule>
<rule id="action">
<one-of>
<item> open </item>
<item> close </item>
<item> delete </item>
<item> move </item>
</one-of>
</rule>
<rule id="object">
<item repeat="0-1">
<one-of> <item> the </item> <item> a </item> </one-of>
<one-of>
<item> window </item>
<item> file </item>
<item> menu </item>
</one-of>
</rule>
</grammar>
|
|
下面这个语法和上面的效果是一样的,不过它是W3C SRGS的ABNF格式的。因为VoiceXML平台不是必须支持这种格式的,所以这种格式的语法可移植性比较差。 |
|
<grammar mode="voice" type="application/srgs">
#ABNF 1.0;
language en-US;
mode voice;
root $command;
public $command = $action $object;
$action = open | close | delete | move;
$object = [the | a] (window | file | menu);
</grammar>
|
|
二、External Grammars |
|
外部语法是由form的<grammar>元素指定的。 |
|
<grammar src="URI" type="media-type"/>
|
|
在这种情况下,属性type是可选的,因为如果没有指定该属性,解释器环境会试图动态的确定它的类型(例如,使用服务器特定的媒体类型,文件扩展名或内容自检)。 |
|
如果指定了src属性,且有一个联机语法作为该<grammar>元素的内容,则抛出error.badfetch事件。 |
|
下面的例子引用了一个W3C SRGS的XML格式的外部语法。 |
|
<grammar type="application/srgs+xml" src="http://www.grammar.example.com/date.grxml"/>
|
|
下面的例子引用了一个W3C SRGS的ABNF格式的外部语法。和上面的例子的效果是一样的。 |
|
<grammar type="application/srgs" src="http://www.grammar.example.com/date.gram"/>
|
|
三、Grammar Weight |
|
<grammar>元素的weight属性指定了该语法的权重。 |
|
<grammar weight="0.6" src="form.grxml" type="application/srgs+xml"/>
|
|
<grammar>元素,包括<link>、<field>和<form>元素中的,都有这个属性,语法可以是联机语法、外部语法或内置语法。 |
|
属性weight遵循W3C SRGS中关于weight的定义。属性weight的值是一个简单的没有指数的正的浮点数。合法的格式有“n”,“n.”,“.n” 和“n.n”,其中n是一位或多位数字的序列。 |
|
在语音识别的搜索范围内,weight是影响语法被选中的可能性的一个因素。Weight属性的值为1.0时相当于没有指定weight属性。Weight属性值大于1.0时,该语法被选中的可能性就比较大。反之,weight属性值小于1.0时,可能性就比较小。如果没有指定该属性,则所有激活的语法的可能性一样。 |
|
<link event="help">
<grammar weight="0.5" mode="voice" version="1.0" root="help">
<rule id="help" scope="public">
<item repeat="0-1">Please</item> help
</rule>
</grammar>
</link>
<form>
<grammar src="form.grxml" type="application/srgs+xml"/>
<field name="expireDate">
<grammar weight="1.2" src="http://www.example.org/grammar/date"/>
</field>
</form>
|
|
在上面的例子中,weight的语义等同于下面的XML语法: |
|
<grammar root="r1" type="application/srgs+xml">
<rule id="r1">
<one-of>
<item weight="0.5"> <ruleref uri="#help"/> </item>
<item weight="1.0"> <ruleref uri="form.grxml"/> </item>
<item weight="1.2"> <ruleref uri="http://www.example.org/grammar/date"/> </item>
</one-of>
</rule>
<rule id="help">
<item repeat="0-1">Please</item> help
</rule>
</grammar>
|
|
隐式的语法,如<option>元素中的,不支持weight。如果需要用weight属性,请使用<grammar>元素代替隐式语法控制weight。 |
|
语法的weight属性值只影响语法的处理,不会直接影响到语法结果的后期处理,包括当用户的输入匹配了多个激活的语法时的语法优先权(见3.1.4节)。 |
|
Weight属性对DTMF语法没有影响(见3.1.2节)。在<grammar>元素中,如果属性mode为dtmf时,则该<grammar>元素指定的weight属性被忽略。 |
|
<!-- weight will be ignored -->
<grammar mode="dtmf" weight="0.3" src="http://www.example.org/dtmf/number"/>
|
|
恰当的weight值是很难确定的。猜测的weight值对于提高识别的性能没有任何帮助。有效的weight值是通过对自然语言和特定平台上的原始数据长期研究得到的。此外,语法的weight是依赖于平台的。注意,不同的ASR引擎对于相同的weight值可能有不同的理解。因此,在一个特定平台上工作得好好的weight值在其他的平台上可能会得到不同的结果。 |
|
四、Grammar Element |
|
<grammar>元素从W3C SRGS继承的属性: |
version |
它定义了语法的版本号。 |
xml:lang |
该语法的语言标识符(例如,“fr-CA”表示 加拿大法语)。如果缺省,将从文档中继承。 |
mode |
其值为voice或dtmf。说明该语法是匹配语音的或是匹配 DTMF 的输入。 |
root |
定义该语法的根规则。 |
tag-format |
定义该语法中所有的<tag>元素的内容格式。 |
xml:base |
定义一个基本URI,用于解析该语法中的相对URI。该属性的优先权高于<vxml>元素中的相应属性。如果缺省,则从文档中继承。 |
|
表28:<grammar>元素从SRGS中继承的属性 |
|
上述属性的用法和解释由以下几个方面决定: |
|
1、SRGS的XML格式的联机语法:由SRGS决定。SRGS规定属性version是必须的,且它的值为"1.0";属性root是必须的,且它的值确定了要激活哪一条规则;其他的属性是可选的。 |
|
2、SRGS的ABNF格式的联机语法:平台必须忽略上述任何指定的属性。 |
|
3、SRGS的XML和ABNF格式的外部语法:平台必须忽略上述任何指定的属性。 |
|
4、所有其他的语法类型:任何指定的属性的用法和解释是依赖于平台的。 |
|
<grammar>元素中VoiceXML2.0增加的属性: |
src |
指定一个URI。如果引用一个外部语法,该属性指定了该语法的位置和该语法中的一个规则名(可选的)。该URI被作为一个规则引用来解释,详见SRGS的2.2节。但是,并不是所有的规则引用的形式都被VoiceXML允许。规则引用的能力将在后面详细描述。 |
scope |
值为“document”或“dialog”。如果为“document”,则该语法在当前文档(和相关的应用叶文档)所有的dialog中都是激活的。如果值为“dialog”,则该语法只在该form中激活。如果缺省,则该语法的作用域由它的父元素决定。关于语法作用域和优先权的描述见3.1.3节。 |
type |
该语法的媒体类型。该属性值的优先权高于其他可能存在的媒体类型(例如HTTP或RTSP交换中的“Content-type”,或文件扩展名)。如果该属性缺省,解释器环境将试图动态的确定它的媒体类型(例如,使用服务器特定的媒体类型、文件扩展名或内容自检)。如果语法的内容包含在该元素中,且没有指定该属性,就假定该媒体类型为一个XML语法。 如果该语法源没有包含选定媒体类型的正确的内容,当使用该语法时,抛出一个错误W3C的XML格式语法暂定的媒体类型为“application/srgs+xml”,ABNF格式语法暂定的媒体类型为“application/srgs”。 |
weight |
指定该语法的weight。见3.1.1.3节。 |
fetchhint |
见6.1节。默认为grammarfetchhint property。 |
fetchtimeout |
见6.1节。默认为fetchtimeout property。 |
maxage |
见6.1节。默认为grammarmaxage property。 |
maxstale |
见6.1节。默认为grammarmaxstale property。 |
|
表29:<grammar>元素中VoiceXML2.0增加的属性 |
|
必须指定属性src或一个联机语法(不是指定两个),否则会抛出一个error.badfetch事件。 |
|
VoiceXML 2.0也扩展可<grammar>元素,允许在PCDATA中嵌入各种格式的语法,包括W3C SRGS的XML格式。 |
|
当引用一个外部语法时,src属性值为一个URI,它指定了该语法的位置。URI可以带一个段,指定规则名。SRGS的2.2节定义了规则引用的几种形式。下面是VoiceXML中<grammar>元素允许的形式。 |
|
· 在外部语法中引用一个规则:src属性的值是一个绝对或相对的URI,该URI带有一个段,它执行一个外部语法的相应规则。这种形式的规则引用遵循SRGS 2.2节中的定义。如果该URI不能被获取,或该规则名不存在,或该规则名在指定的语法中不是一个public(可激活的)规则,则抛出error.badfetch。 |
|
· 引用外部语法的根规则:src属性的值是一个绝对或相对的URI,它引用了一个外部语法,但是没有指定一个规则名。这种形式隐式的引用了该语法的根规则,正如SRGS 2.2节中的定义。如果该URI不能被获取,或如果该语法不能被它得root引用(见SRGS的4.7节),则抛出一个error.badfetch事件。 |
|
· 引用本地语法:只包含段的URI是不被允许的(见SRGS2.2.1中的定义)。如果src属性的值为一个段, 抛出一个error.semantic事件。 |
|
· 引用特殊的规则:虽然联机语法可以引用SRGF的特殊规则(NULL,VOID,GARBAGE),但是VoiceXML并不支持<grammar>元素引用特殊的规则(见SRGS的2.2.3节)。因为没有任何句法支持这种形式,因此也不会产生任何错误。 |