性格决定命运 气度左右格局 拼搏方能取胜 谦虚才会进步
IVR-2 [Voice XML规范详细描述2]
上一篇 / 下一篇 2008-03-25 09:25:27 / 个人分类:做着
ITPUB个人空间_ X5cU"y.h
| ITPUB个人空间&WLc1z2\+n|.C 第三节 Form. Items | | ||||||||||||
| form. item就是一个<form>中的元素,该元素在form解释期间可以被访问。这些元素包括<field>、<block>、<initial>、<subdialog>、<object>、<record>和<transfer>元素。 | |||||||||||||
| 所有的form. item都有下面的特点: | |||||||||||||
| ·它们都有一个变量,由name属性指定。该变量可以通过expr属性获得初始值。 | |||||||||||||
| ·它们都有一个警戒条件,由cond指定。如果一个form. item没有被填充,且它的警戒条件没有指定或值为true,则该form. item可以被访问。 | |||||||||||||
| Form. item可再细分为input item和control item,前者定义了该form的input item变量,后者用于帮助控制该form的input item的收集。Input item(<field>、<subdialog>、<object>、<record>和<transfer>)一般来说包含下面几个元素: | |||||||||||||
| ·<filled>元素,它包含了一些在相应的input item被填充后要执行的操作。 | |||||||||||||
| ·<property>元素,用于指定作用于该input item(<initial>元素也可以包含<property>元素)的property。 | |||||||||||||
| ·<prompt>元素,用于指定相应的元素被访问时要播放的提示语。 | |||||||||||||
| ·<grammar>元素,用于指定该input item(<subdialog>不能包含<grammar>元素)允许输入的语音或DTMF按键。 | |||||||||||||
| ·<catch>元素及它的一些简写形式,用于指定作用于该input item(<initial>元素不能包含<catch>元素)的事件处理。 | |||||||||||||
| 每个input item都有相应的一组影子变量。影子变量用于返回一个input item执行后的结果。而不是返回要存储于name属性的值。例如,在<field>的语法识别结果中有这次识别的confidence level(它是一个影子变量),获得这个值对我们可能有很大的帮助。影子变量的引用可以使用如下这种形式:name$.shadowvar,name就是该input item的name属性的值,shadowvar就是指定的影子变量名。影子变量是可写的,它的值可以被应用更改。例如,<field>返回的影子变量,confidence。下面的例子展示了怎样访问这个影子变量。 | |||||||||||||
<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form. id="get_state"> <field name="state"> <prompt>Please say the name of a state. </prompt> <grammar src="http://mygrammars.example.com/states.gram" type="application/srgs"/> <filled> <if cond="state$.confidence < 0.4"> <throw event="nomatch"/> </if> </filled> </field> </form> </vxml> | |||||||||||||
| 在这个例子中,识别结果的confidence要经过检查,confidence值太低的结果不会被接受。 | |||||||||||||
| 一、FIELD | |||||||||||||
| <field>是一个form. item,用于收集用户输入,它的属性有: | |||||||||||||
| |||||||||||||
| 表9:<field>元素的属性 | |||||||||||||
| 下表是<field>元素的影子变量(shadow variables),该<field>的form. item 变量名为name。影子变量utterance、 inputmode 和 interpretation的值必须和application.lastresult$ (详见5.1.5节)中相应变量的值一样。 | |||||||||||||
| |||||||||||||
| 表10:<field>元素的影子变量 | |||||||||||||
| <一>、使用显式语法的<field> | |||||||||||||
| 显示语法可以通过绝对的或相对的URI指定: | |||||||||||||
<field name="flavor"> <prompt>What is your favorite ice cream?</prompt> <grammar src="../grammars/ice_cream.grxml" type="application/srgs+xml"/> </field> | |||||||||||||
| 也可以指定一个联机(inline)语法,下面的例子使用了W3C ABNF格式的语法。 | |||||||||||||
<field name="flavor"> <prompt>What is your favorite flavor?</prompt> <help>Say one of vanilla, chocolate, or strawberry.</help> <grammar mode="voice" type="application/srgs"> #ABNF 1.0; $options = vanilla | chocolate | strawberry </grammar> </field> | |||||||||||||
| 如果同时指定<grammar>元素的src属性和联机语法,平台会抛出error.badfetch事件。 | |||||||||||||
| <二>、使用依赖于平台的内置的显式语法 | |||||||||||||
| 平台对内置资源的支持是可选的,如语音语法、DTMF语法和音频文件。这些资源使用平台特有的URI访问,例如http://localhost:5000/grammar/boolean,或者使用平台特有的方案(scheme),例如通常使用的“builtin”方案,“builtin:grammar/boolean”。如果平台支持访问内置资源,它应该支持访问基本的内置语法(见附录P)。例如: | |||||||||||||
<grammar src="builtin:grammar/boolean"/> <grammar src="builtin:dtmf/boolean"/> | |||||||||||||
| 上面的例子中,第一个<grammar>引用了内置的boolean语音语法,第二个<grammar>引用了内置的boolean的DTMF语法。 | |||||||||||||
| 下面的<field>: | |||||||||||||
<field type="sample"> <prompt>Prompt for builtin grammar</prompt> </field> | |||||||||||||
| 和下面这个使用平台特有的内置语法的<field>,效果是一样的。 | |||||||||||||
<field> <grammar src="builtin:grammar/sample"/> <grammar src="builtin:dtmf/sample"/> <prompt>Prompt for builtin grammar</prompt> </field> | |||||||||||||
| sample是基本的内置<field>的type之一(如,boolean、date等)。 | |||||||||||||
| 另外,依赖于平台的内置语法的URI可用来访问特定解释器环境支持的语法,我们建议平台特有的内置语法以“x-”开头命名,因为在将来的正式版本中不会使用该命名空间。如下: | |||||||||||||
<grammar src="builtin:grammar/x-sample"/> <grammar src="builtin:dtmf/x-sample"/> | |||||||||||||
| <三>、使用<option>列表的<field> | |||||||||||||
| 当要为<field>指定一组简单的可选项时,用<option>列表比用一个语法方便。<option>列表由包含于<field>元素中的一组<option>元素组成,每个<option>元素包含了用来产生语音语法的PCDATA,<option>的语法产生规则和2.2.5节中的<choice>一样。<option>有一个属性用于为每个<option>指定一个DTMF序列,还有一个属性用于控制要赋给该<field>元素的form. item变量的值。当一个<option>元素被选定时,它的属性value的值决定了该<field>的影子变量和application.lastresult$的语义解释值。 | |||||||||||||
| 下面的例子中的<field>元素给用户提供了三个选项,把被选定的application.lastresult$元素的value属性值赋给变量maincource: | |||||||||||||
<field name="maincourse"> <prompt> Please select an entree. Today, we are featuring <enumerate/> </prompt> <option dtmf="1" value="fish"> swordfish </option> <option dtmf="2" value="beef"> roast beef </option> <option dtmf="3" value="chicken"> frog legs </option> <filled> <submit next="/cgi-bin/maincourse.cgi" method="post" namelist="maincourse"/> </filled> </field> | |||||||||||||
| 该例子可能的流程: | |||||||||||||
C: Please select an entree. Today, we're featuring swordfish; roast beef; frog legs. H: frog legs. C: (assigns "chicken" to "maincourse", then submits "maincourse=chicken" to /maincourse.cgi) | |||||||||||||
| 下面的例子展示了在一个form的<catch>元素中的<enumerate>元素的正确用法和错误用法,该form有几个<field>元素包含有<option>元素。 | |||||||||||||
<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form> <block> We need a few more details to complete your order. </block> <field name="color"> <prompt>Which color?</prompt> <option>red</option> <option>blue</option> <option>green</option> </field> <field name="size"> <prompt>Which size?</prompt> <option>small</option> <option>medium</option> <option>large</option> </field> <field name="quantity"> <grammar type="application/srgs+xml" src="/grammars/number.grxml"/> <prompt>How many?</prompt> </field> <block> Thank you. Your order is being processed. <submit next="details.cgi" namelist="color size quantity"/> </block> <catch event="help nomatch"> Your options are <enumerate/>. </catch> </form> </vxml> | |||||||||||||
| 该例子可能的流程: | |||||||||||||
C: We need a few more details to complete your order. Which color? H: help. (throws "help" event caught by form-level <catch>) C: Your options are red, blue, green. H: red. C: Which size? H: H: 7 (throws "nomatch" event caught by form-level <catch>) C: Your options are small, medium, large. H: small. | |||||||||||||
| 在上面的步骤,form级别的<catch>元素中的<enumerate>元素可以列举一些内容:“color”和“size”<field>中的<option>元素。然而,下一个<field>就不一样了: | |||||||||||||
C: How many? H: a lot. (throws "nomatch" event caught by form-level <catch>) | |||||||||||||
| Form级别的<catch>元素中使用<enumerate>,导致平台抛出error.semantic事件。因为“quantity”<field>中没有包含任何可以列举的<option>元素。 | |||||||||||||
| 有一种办法可以解决,就是在“quantity”<field>元素中加一个field级别的<catch>元素,如下: | |||||||||||||
<catch event="help nomatch"> Please say the number of items to be ordered. </catch | |||||||||||||
| 这样,“nomatch”事件被<field>中的<catch>捕获,下面是一个可能的流程: | |||||||||||||
C: Please say the number of items to be ordered. H: 50. C: Thank you. Your order is being processed. | |||||||||||||
| <enumerate>元素在2.2.4节中也有详细描述。 | |||||||||||||
| <option>元素的属性有: | |||||||||||||
| |||||||||||||
| 表11:<option>元素的属性 | |||||||||||||
| 使用<option>元素不排除同时使用<grammar>元素,结果将是这两个"语法"中的任一个的匹配。而在同一个<field>中同时出现两个<grammar>元素则意味着选项的逻辑或,即两个语法中只能匹配一个。 | |||||||||||||
导入论坛 引用链接 收藏 分享给好友 推荐到圈子 管理 举报
TAG: