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つの属性が指定できる)。