第三章??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節)。因為沒有任何句法支持這種形式,因此也不會產生任何錯誤。 |