12 コンセプト

VoiceXMLドキュメント(またはアプリケーションと呼ばれるドキュメントの集合)は対話の有限状態機械を形成する。ユーザはある時点では、1つの対話(dialog)の状態にいることになる。いずれの対話においても次に遷移すべき対話を決定する。遷移は次に使用するドキュメントや対話を定義したURIを使い指定される。もしURIがドキュメントを参照しない場合、現在のドキュメントが参照される。対話を指定しない場合は、ドキュメントの最初の対話が参照される。対話が次の対話を指定していないとき、または明示的に対話を抜ける要素を持つとき、実行が終了する。

12.1 対話と副対話

対話にはformmenuの2種類がある。formはフィールド項目変数の集合に与える値を集めるためのやりとりを定義する。それぞれのfieldは、そのfieldにおいて可能な入力を定義する文法を持つことができる。もしformレベルの文法が与えられている場合、それは1つの発話でいくつかのfieldを埋めるために使われる。menuはユーザに選択肢を提示し、その選択に従って別の対話に遷移する。

副対話の単位であるsubdialogは新しいやりとりを呼び出し、元のformに戻るという機能を提供するという点で、関数呼び出しのようなものである。その時点でのデータ、文法、状態の情報は保存され、呼び出したドキュメントに帰ってきたときに利用可能となる。subdialogは例えば次のようなことに使われる。データベース検索の際に必要とされる一連の確認対話の生成、1つのアプリケーション内のドキュメント間で共有されるコンポーネント集合の作成、多くのアプリケーションで共有される再利用可能な対話のライブラリの作成などである。

12.2 セッション

セッションは、ユーザがVoiceXML処理コンテキストと相互作用を始めたときに始まり、ドキュメントをロードして処理しながら継続し、ユーザ・ドキュメント・処理コンテキストのいずれかの要求によって終了する。

12.3 アプリケーション

同一のアプリケーションルートドキュメントを共有するドキュメントの集合をアプリケーションと呼ぶ。ユーザがアプリケーション内のドキュメントと相互作用する時には、必ずアプリケーションルートドキュメントもロードされる。同じアプリケーション内のドキュメントをユーザが遷移している間は、アプリケーションルートドキュメントは常にロードされたままであり、アプリケーション外のドキュメントに移ったときに無効になる。ロードされている間は、アプリケーションルートドキュメントの変数はどのドキュメントからもアプリケーション変数として参照可能で、文法はアプリケーションの実行中、常に有効である。

図2は共通のアプリケーションルートドキュメント(root)を共有しているアプリケーション内のドキュメント(D)の遷移を示したものである。

Figure  12.1 1つのアプリケーション内のドキュメント間の遷移
Figure 12.1 1つのアプリケーション内のドキュメント間の遷移

12.4 文法

各対話には1つまたは複数の音声認識用文法・DTMF文法が付属している。システム主導のアプリケーションでは、特定の対話の文法は、ユーザがその対話にいるときにのみ有効である。ユーザとコンピュータのいずれかが次に何をするかを決定することができる混合主導型アプリケーションでは、いくつかの対話は、ユーザが同一ドキュメント内の別の対話にいるとき、もしくは同一アプリケーション内の別のロードされたドキュメント内にいるときに、それらの文法をアクティブにする(すなわち、入力を受け付ける)ためのフラグが立てられる。もし、ユーザが他のアクティブな対話の文法に従った発話を行うと、まるでその対話でユーザの発話が行われたかのように制御がその対話に移る。混合主導権は柔軟性を加え、音声アプリケーションの有用性を高める。

12.5 イベント

VoiceXMLは「標準的な」ユーザ入力を取り扱うためのフォームを埋めるメカニズムを持っている。それに加え、フォームメカニズムによりカバーされないイベントの取り扱いのための機能も持つ。

イベントはユーザが一定時間発話しない、明瞭に応答しない、ヘルプを求めるなどの様々な状況でプラットフォームによって生成される。処理系もまた、VoiceXMLドキュメント内にセマンティックエラーを発見するとイベントを生成する。イベントは、catch要素かその簡略記法によってキャッチされる。イベントを起こすことができる各々の要素は、catch要素で具体的に記述することができる。catch要素は「まるでコピーしたかのように」外側の要素から継承される。このようにして、共通のイベントハンドリング操作は任意のレベルで指定でき、それ以下のすべてのレベルに適用される。

12.6 リンク

リンクは混合主導型対話を実現する手段の1つである。あるリンクのスコープ内にユーザがいるとき、常にアクティブであるような文法を指定する。その文法にマッチする発話が行われた場合に、リンクで指定したURIへ制御を移す。<link>は、指定のURIに移動するイベントを生成するために使うことができる。