Rubyを使ったエンタープライズ・インテグレーション
XML
実用的であるべきというテーマに沿って、RubyはXMLを合理的にサポートしていますが、JavaやC#に比べると穴があることをSchmidt 氏は説明しています。通常のアプローチとして、彼はXMLドキュメントを文字列から生成する方法とREXMLやBuilderのようなRubyモジュール について記述しています。
生の文字列によってXMLを構成する方法は、タグの開始と終了の欠落をはじめとして簡単に間違いを犯しやすいと言った問題を抱えています。さらに文 字列とRubyコードが混在したプログラムではプログラムが読み難くなり、保守が非常に難しくなりがちです。これに対してREXMLやBuilderは、 より扱いやすい方法でXMLを生成することができます。
Enterprise Integration with Rubyでは、REXMLによるツリー構造としてのアプローチ(Document Object Model [DOM]と同様)と、ストリームとしての逐次のアプローチ(Simple API for XML [SAX]と同様)の両方によるXMLの構文解析の方法を説明しています。
REXMLはXMLを解析するアプリケーションを書く手間を軽減しますが、完全になくすことはできません。これはSchmidt氏が説明するXML の扱い関するRubyの穴のひとつです。一方でXML処理のコードを書くことの単調さをなくしてくれるXmlSimpleモジュールについても記述してい ます。このモジュールはXMLドキュメントをハッシュテーブルや配列のようなデータ構造に変換するもので、Rubyハッシュテーブルのキーとしてエレメン トや属性の名前を使うことによりXMLエレメントや属性の値を簡単に得ることができます。
もしRubyのXMLサポートが他の言語に比べて革新的ではないと思われる場合、いくつかのXML処理の代替方法を示しています。階層化されたデー タを表現することは、XMLが唯一の方法だと考える開発者の人たちがいますが、そんなことはありません。おそらく他のどんな表現方法よりも、多くのデータ がコンマで区切られた値(character separated valueであるCSV)で表現されているのです。
もうひとつの形としては、ダイナミック言語の利用者にはよく知られたYAMLがあります。YAMLはその名前のとおりマークアップ言語ではありませ ん(YAML Ain't Markup Language)。RubyはYAMLをシンプルかつコンパクトにし、構造体の表現の形式を扱えるモジュールを提供しています。また Enterprise Integration with Rubyでは、その他のフォーマットについても言及しています。ただしXMLの軽量な代替として定義されているJavaScript Object Notation(JSON;www.json.org)については何も書かれていません。
このような広く知られた簡単に記述できるデータ交換フォーマットは、任意のプログラミング言語に利用できるだけでなく、Rubyの1行のコードを解釈するような単純な表現と同様であるとも言えます。