YAMLではまる

YAMLというデータ形式がある。構造化されたデータとテキストを相互に変換するための使われる。私は、このYAMLを気にいっているのだが、今回、かなり、おもいっきりはまってしまった。
構造化されたデータを扱う場合、XMLも使える。私がXMLではなくYAMLを使う理由は、いくつがあるが、理由の一つとして、YAMLは型を妥当に判別してくれる点がある。
例えば、以下のテキストを、YAMLのライブラリを使って構造化されたデータに変換すると、上の要素から順に、整数、浮動小数点、文字列、日付と扱ってくれて、該当する型のオブジェクトが生成される。

- 1
- 1.2
- あああ
- 2008-01-12

で、昨日書いたRails製の文法問題復習アプリは、問題文を登録する場合などの、外部とのやりとりをYAMLにしている。例えば、問題文登録画面で、以下のテキストを入力すると、TOEICのPART5にありがちな4択問題を登録できる。

question: I can't afford \1 a new car.
correct_choices:
- to buy
incorrect_choices:
- buy
- buying
- bought

ところで、true, yes, on, false, no, off はYAMLでは真偽値扱いになる。したがって、以下のテキストを登録すると、最後の選択肢の「on」が文字列ではなく真偽値扱いされるので、選択肢が正しく表示されなかった。

question: The department store sale has many good bargains but unfortunately the prices are valid \1 only one day and I cannot shop on that day.
correct_choices:
- for
incorrect_choices:
- with
- as
- on

YAMLは、引用符で括った表記を、全て文字列と扱う。したがって、最後の1行を以下のようにすれば「on」が文字列として扱われるので、選択肢として正しく表示される。

- "on"

私は、過去、何度か、真偽値になる表現を文字列として書く時の引用符忘れではまっているのに、どういうわけか、また、今回もはまってしまった。しかも、今回は、原因がさっぱり思いあたらず、YAMLと関係ないところを延々と調べたりした。
「2008-01-12」みたいのを文字列としてYMALで書く場合の引用符は、まず忘れないんだけど、「yes」「no」「on」「off」は、私にとっては鬼門のようだ。