menuとは1つの無名フィールドを含むフォームのための簡易表現であり、ユーザに選択肢をプロンプトし、その選択に基づいて遷移を行うことができる。正規のフォームと同様にmenuは「ユーザが他の対話を実行するときにもアクティブである」というような文法の有効範囲を持つこともできる。
ユーザに三者択一させるmenuの例を示す。:
<menu>
<prompt>
ホームページへようこそ。
次のコンテンツから1つを選択してください: <enumerate/>
</prompt>
<choice next="http://www.sports.example/vxml/start.vxml">
スポーツ
</choice>
<choice next="http://www.weather.example/intro.vxml">
天気
</choice>
<choice next="http://www.stargazer.example/voice/astronews.vxml">
天文学ニュース
</choice>
<noinput>
次のコンテンツから1つを選択してください: <enumerate/>
</noinput>
</menu>
C:ホームページへようこそ。次のコンテンツから1つを選択してください。 スポーツ;天気;天文学ニュース。 H:占星学 C:理解できませんでした。(プラットフォームに依存する初期設定メッセージ) C:ホームページへようこそ。次のコンテンツから1つを選択してください。 スポーツ;天気;天文学ニュース。 H:スポーツ C:(http://www.sports.example/vxml/start.vxmlに進む)
menu要素
menuの属性:
| id | menuの識別子。<goto>か<submit>のターゲット。 |
| scope | menuの文法の有効範囲。もしそれがdialog(デフォルト)なら、ユーザがmenuに遷移したときだけmenuの文法がアクティブになる。もしscopeがdocumentなら、その文法は全てのドキュメント上で有効である。(もしくは、もしmenuがアプリケーションルートドキュメント内にあるなら、アプリケーション内にドキュメントが読みこまれる。) |
| dtmf | trueにセットするとき、明示的なDTMF要素を持たないchoiceには"1","2"などの暗黙DTMF要素が与えられる。 |
choice要素
<choice>要素はいくつかの選択肢を提供する。
choice属性:
| dtmf | 選択用DTMFシーケンス。 |
| next | 次の対話またはドキュメントのURI。 |
| event | nextの指定の代わりに、投げ掛けられるイベントを指定する。 |
| expr | nextの指定の代わりに、評価するためのexpressionを指定する。 |
| caching | 12.1.参照 |
| fetchaudio | 12.1.参照 |
| fetchhint | 12.1.参照 これはdocumentfetchhintプロパティをデフォルトとする。 |
| fetchitimeout | 12.1.参照 |
メニュー内のDTMF
menuは、純粋に音声またはDTMFのみを用いることもできるが、<menu>内に<property>要素を含めることにより両者を組み合わせることもできる。以下にchoiceのdtmf属性を用いて、DTMFのみでそれぞれのchoiceを与える明示的なシーケンスの例を示す。
<menu>
<property name="inputmodes" value="dtmf"/>
<prompt>
スポーツは1、天気は2、天文学は3を押してください。
</prompt>
<choice dtmf="1" next="http://www.sports.example/vxml/start.vxml"/>
<choice dtmf="2" next="http://www.weather.example/intro.vxml"/>
<choice dtmf="3" next="http://www.stargazer.example/voice/astronews.vxml"/>
</menu>
他の方法として、<menu>のdtmf属性をtrueにセットすることにより、最初の9個のchoiceに連続なDTMF数値を割り当てることができる。
<menu dtmf="true">
<property name="inputmodes" value="dtmf"/>
<prompt>
スポーツは1、天気は2、天文学は3を押してください。
</prompt>
<choice next="http://www.sports.example/vxml/start.vxml"/>
<choice next="http://www.weather.example/intro.vxml"/>
<choice next="http://www.stargazer.example/voice/astronews.vxml"/>
</menu>
enumerate(列挙型)要素
<enumerate>(列挙型)要素は自動生成される選択肢の説明である。それはmenu内に出現する命令におけるそれぞれの選択に適するテンプレートを指定する。もしこの要素が何も内容を持たないとき、全ての使用されるchoiceを列挙するデフォルトテンプレートが処理コンテキストに使用される。もし内容を持つ場合、その内容はテンプレートを指定する。この指定は以下の2つの特別な変数を参照することができる。:
"_prompt"はchoiceのプロンプト、"_dtmf"はchoiceの割り当てられたDTMFシーケンスである。例えば、menuは次のように書き直すことができる。
<menu dtmf="true">
<prompt>
ホームページへようこそ。
<enumerate>
<value expr="_prompt"/> は <value expr="_dtmf"/> を、
</enumerate>
押してください。
</prompt>
<choice next="http://www.sports.example/vxml/start.vxml">
スポーツ
</choice>
<choice next="http://www.weather.example/intro.html">
天気
</choice>
<choice next="http://www.stargazer.example/voice/astronews.vxml">
天文学ニュース
</choice>
</menu>
動作:C:ホームページへようこそ。スポーツは1を、天気は2を、天文学ニュースは3を、押してください。
<enumerate>要素は<option>要素のセットを含む<field>要素用のプロンプトと同様に使用される。(14.1.3.参照)
文法の生成
選択フレーズは認識すべき単語やフレーズのセットを指定する。ユーザは選択フレーズの単語列の部分集合からなるフレーズを言ってもよい。選択フレーズは<choice>要素内で直接または間接的に含まれる要素のPCDATAから構成される。例えば、プロンプト"Stargazer astrophysics news"に応じて、ユーザは"Stargazer","astrophysics","Stargazer news","astrophysics news"などと言ってよい。等価なJSGFルールは"[Stargazer] [astrophysics] [news]"となる。
以下に<choice>の下位要素を含んだPCDATAの使用の例をあげる。
<choice next="http://www.stargazer.example/voice/astronews.vxml">
<prompt>
<audio src="http://www.stargazer.example/space.wav">
Stargazer
<emp>astrophysics</emp>
news
</audio>
</prompt>
</choice>
このchoiceはオーディオファイルにより出力されるか、もしファイルが再生できないときは"Stargazer Astrophysics News"と出力される。choice用の文法は、<choice>の下位要素のPCDATAから集められた"[Stargazer][astrophysics][news]"と同値である。処理モデル
menuは全ての仕事を1つのfieldで行うようなformのようにふるまう。menuプロンプト、menuイベントハンドラ、menu文法はそれぞれ、fieldプロンプト、fieldイベントハンドラ、menu文法に対応する。
処理に入ることで、menuの文法は生成、実行され、プロンプトが再生される。ユーザがchoiceにマッチした入力をするとき、制御の遷移は<choice>属性"next","expr","event"の値に従う(ただ1つの属性が指定できる)。