<grammar>要素は以下のような音声入力文法を提供するために使われる。
<grammar>要素はこれら2つの要求仕様を満たすさまざまな文法フォーマットに適応できるように設計されている。現在VoiceXMLは文法フォーマットを指定せず、特定の文法フォーマットのサポートを要求しない(訳注:VoiceXMLの次期版ではXMLに基づく文法フォーマットが導入される予定。また、セマンティック情報の表現と処理のための標準規格が検討されている。)。これはVoiceXML用のオーディオファイルフォーマットや、一般的なHTML用のメディアフォーマットと同様である。
<grammar>要素はインライン(inline)文法か外部(external)文法を指定するために使われる。インライン文法は<grammar>要素の内容により指定される:
<grammar type="mime-type"> インライン音声入力文法 </grammar>
この場合、CDATAセクション内の内容は閉じている必要がある。inline文法用のtypeパラメータは<grammar>タグの内容を処理するために必要なMIMEタイプを指定する。
外部文法は次の形式により指定される:
<grammar src="URI" type="mime-type"/>
MIMEタイプは、URIプロトコル経由(HTTPの場合)での獲得時にファイル名の拡張子からこの情報が推論されるので、省略可能である。もしタイプが指定できないまたは推論できない場合、デフォルトタイプはプラットフォーム依存である。もしtype属性が指定されている場合、他の情報はオーバライドされる。
VoiceXMLとともにJava TM Speech API Grammar Format(JSGF)を使用する場合付録Dを参照せよ(注:JavaはSun Microsystems Inc.の登録商標。)。
<grammar>の属性:
src | external時の、文法の場所を指定するURI。 |
scope | "document"の場合、処理中のドキュメント(および適切なアプリケーションのリーフ(葉)ドキュメント)の全ての対話中でアクティブになる。"dialog"の場合、処理中のフォームの中でアクティブになる。省略された場合、文法の有効範囲は親要素により決定される。 |
type | 文法のMIMEタイプ。省略された場合、処理系が動的にタイプを決定しようと試みる。 |
caching | 12.1.参照 |
fetchhint | 12.1.参照 デフォルトはgrammarfetchhintプロパティ。 |
fetchtimeout | 12.1.参照 |
<dtmf>要素は以下のようなDTMF文法を指定するために使われる。
(訳注:VoiceXML 2.0では<dtmf>要素を廃止し<grammar mode="dtmf">と表記される。)
<dtmf>要素はこれら2つの要求仕様を満たすさまざまな文法フォーマットに適応できるように設計されている。
VoiceXMLは<grammar>と同じく特定の文法フォーマットのサポートを要求しない。広く普及するVoiceXML処理系が共通のフォーマットをサポートするように、標準化作業およびマーケティングが行われることを期待している。
<dtmf>要素は外部文法を以下のように記述するか、
<dtmf src="URI" type="mime-type"/>
またはインライン文法を参照することができる。
<dtmf type="mime-type"/> <!-- インライン DTMF 文法 --> </dtmf>
<dtmf>の属性は<grammar>の属性と同じである:
src | external時の、文法の場所を指定するURI。 |
scope | "document"の場合、処理中のドキュメント(および適切なアプリケーションのリーフ(葉)ドキュメント)の全ての対話中でアクティブになる。"dialog"の場合、処理中のフォームの中でアクティブになる。省略された場合、文法の有効範囲は親要素により決定される。 |
type | 文法のMIMEタイプ。省略された場合、処理系が動的にタイプを決定しようと試みる。 |
caching | 12.1.参照 |
fetchhint | 12.1.参照 デフォルトはgrammarfetchhintプロパティ。 |
fetchtimeout | 12.1.参照 |
field文法は常にそれらのfieldの有効範囲とされ、処理系がそのfieldを訪れるまでアクティブではない。field内に含まれる文法は有効範囲を指定できない。
link文法はlinkを含む要素を有効範囲とする。もしアプリケーションルートドキュメント内でこれが定義されている場合、linkはロードされている他のアプリケーションドキュメント内でもアクティブである。
form文法はデフォルトで対話を有効範囲としており、ユーザがそのformにいるときのみアクティブである。もし有効範囲としてdocumentが与えられるなら、それらはユーザがそのドキュメント内にいるときは常にアクティブである。もし有効範囲がdocumentで、そのドキュメントがアプリケーションルートドキュメントである場合、そのアプリケーション内の他のドキュメントを処理しているときにも常にアクティブである。form内の文法は、form要素の属性として有効範囲が指定されるか、あるいは<grammar>要素上の属性として有効範囲が指定されることにより、ドキュメントを有効範囲とする。もし両方が指定された場合、文法は<grammar>要素により指定された有効範囲を用いる。
menu文法もまた、デフォルトで対話を有効範囲としており、ユーザがそのmenuにいるときのみアクティブである。しかしdocumentを有効範囲として与えられると、ドキュメントを通してアクティブである。さらにそのドキュメントがアプリケーションルートドキュメントである場合は、そのアプリケーションに属するすべてのドキュメント内でアクティブである。menuのchoice要素内に含まれる文法には有効範囲を指定できない。
formはしばしば、ドキュメントを通じてアクティブな文法をいくつか持ち、form内でのみアクティブな文法をいくつか持つ必要がある。1つの理由は文法のオーバラップの問題を最小化するためである。この目的で、有効範囲が<form>要素の有効範囲と異なる場合、個々の<grammar>と<dtmf>要素は独自の有効範囲を持つことができる:
<form scope="document"> <grammar> ... </grammar> <grammar scope="dialog"> ... </grammar> </form>
処理系があるフィールドの入力を待っているとき、以下の文法がアクティブとなる。
もしフォーム項目がモーダル(modal属性がtrue)ならば、そのフォーム項目以外の全ての文法は入力待ちの間、無効にされる。現在処理中のもの以外のフォームまたはメニューの文法に入力がマッチした場合は、制御は別のフォームまたはメニューに移る。入力によって処理中のフォームを去る場合には、処理中のフォームにおけるすべてのデータは失われる。