14 メニュー

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>
 
List 14.1 対話の実行例
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>要素はいくつかの選択肢を提供する。

  1. いつchoiceが選択されるかを決定する音声認識文法と(または)DTMF文法を指定する。
  2. 内容は<enumerate>プロンプト文字列を作るために使われる。
  3. choiceが選択されたときに移動するURIを指定する。

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