2010年8月 西本卓也(東京大学)
更新日 2010-08-04
リスト1(入力済みのファイル ticket.vxml を用意しています。1行目の encoding はエディタ環境および設定によっては UTF-8 などに変更してください)
<?xml version="1.0" encoding="euc-jp" ?>
<vxml version="2.0" xml:lang="ja">
<form id="form1">
<block>
<native>to @AM-MCL set AutoEmotionSpeak = 1</native>
<native>to @AM-MCL set AutoMove = 1</native>
<native>to @AM-MCL set AutoGaze = 1</native>
<native>to @FS-MCL set Background = woman01 bg1</native>
<native>to @AM-MCL set Mask = woman01 HAPPY 100 0 0 0</native>
</block>
<field name="source">
<prompt>
こちらは特急券販売システムです。出発駅をどうぞ。
</prompt>
<grammar root="#station1">
<rule id="station1">
<one-of>
<item> <token sym="まいくてすと"> マイクテスト </token> </item>
<item> <token sym="とうきょう" slot="source"> 東京 </token> </item>
<item> <token sym="しながわ" slot="source"> 品川 </token> </item>
<item> <token sym="なごや" slot="source"> 名古屋 </token> </item>
<item> <token sym="きょうと" slot="source"> 京都 </token> </item>
<item> <token sym="しんおおさか" slot="source"> 新大阪 </token> </item>
</one-of>
</rule>
</grammar>
</field>
<field name="dest">
<prompt>
到着駅をどうぞ。
</prompt>
<grammar root="#station1">
<rule id="station1">
<one-of>
<item> <token sym="まいくてすと"> マイクテスト </token> </item>
<item> <token sym="とうきょう" slot="dest"> 東京 </token> </item>
<item> <token sym="しながわ" slot="dest"> 品川 </token> </item>
<item> <token sym="なごや" slot="dest"> 名古屋 </token> </item>
<item> <token sym="きょうと" slot="dest"> 京都 </token> </item>
<item> <token sym="しんおおさか" slot="dest"> 新大阪 </token> </item>
</one-of>
</rule>
</grammar>
</field>
<field name="num">
<prompt>
枚数をどうぞ
</prompt>
<grammar root="#maisuu">
<rule id="maisuu">
<ruleref uri="#digit"/>
<ruleref uri="#mai"/>
</rule>
<rule id="digit">
<one-of>
<item> <token sym="いち" slot="num"> 1 </token> </item>
<item> <token sym="に" slot="num"> 2 </token> </item>
<item> <token sym="さん" slot="num"> 3 </token> </item>
</one-of>
</rule>
<rule id="mai">
<item> <token sym="まい"> 枚 </token> </item>
</rule>
</grammar>
</field>
<field name="confirm">
<prompt>
<value expr="source"/>駅から
<value expr="dest"/>駅まで
<value expr="num"/>枚ですね。
よろしいですか
</prompt>
<grammar root="#yes_no">
<rule id="yes_no">
<one-of>
<item> <token sym="はい" slot="confirm" value="y"> はい </token> </item>
<item> <token sym="いいえ" slot="confirm" value="n"> いいえ </token> </item>
</one-of>
</rule>
</grammar>
<filled>
<if cond="confirm == 'y'">
御購入ありがとうございました。
<goto next="#form1"/>
<else/>
もうしわけありません。最初からやりなおして下さい。
<clear/>
</if>
</filled>
</field>
</form>
</vxml>
$ wavesurfer
$ cp (コピー元ディレクトリ)/form.vxml . $ galatea-runner form.vxml
$ cp (コピー元ディレクトリ)/ticket.vxml . $ galatea-runner ticket.vxml
$ cp ticket.vxml ticket2.vxml $ cp ticket.vxml ticket3.vxml
$ emacs
あるいは
$ gedit
修正したファイルの実行
$ galatea-runner ticket2.vxml
<if cond="a == 'x'"> <!-- 変数 a の内容が文字列 'x' と一致する --> <if cond="a != b"> <!-- 変数 a と変数 b の内容が一致しない --> <if cond="a > b"> <!-- 変数 a > b である --> <if cond="a < b"> <!-- 変数 a < b である -->
<!-- 演習2:field "num" の後に追加 -->
<field name="type">
<prompt>席種をどうぞ</prompt>
<grammar version="1.0" root="#seat">
<rule id="seat">
<one-of>
<item> <token sym="ぐりーんしゃ" slot="type"> グリーン車 </token> </item>
<item> <token sym="していせき" slot="type"> 指定席 </token> </item>
<item> <token sym="じゆうせき" slot="type"> 自由席 </token> </item>
</one-of>
</rule>
</grammar>
</field>
<field name="confirm">
<prompt>
<value expr="source"/>駅から
<value expr="dest"/>駅まで
<value expr="type"/>を <!-- 演習2:この行を追加 -->
<value expr="num"/>枚ですね。
よろしいですか
</prompt>
<filled>
<!-- 演習3:filledに追加(ここから) -->
<if cond="source == dest">
不適切な入力です。
<clear namelist="source dest"/>
</if>
<!-- 追加(ここまで) -->
<if cond="confirm == 'y'">
御購入ありがとうございました。
<else/>
もうしわけありません。最初からやりなおして下さい。
<clear/>
</if>
</filled>