XML をバイナリ表現する手法

W3C TR で、↓のワーキングドラフトが改訂されている (9 日付)。

XML Binary Characterization Use Cases
http://www.w3.org/TR/2004/WD-xbc-use-cases-20041109/

XML をテキスト形式じゃなくバイナリ形式で表現した場合、どんな場面で使えるか、というのをまとめた文書。テキスト形式なので扱いやすい、というのが XML の特徴のひとつだが、コンピュータでの高速 or 大量処理が必要な場面では、そこがネックになることもある。
で、解決策の案として、「処理しやすいバイナリ形式に変換できないか」ってのが出てくるわけだ。

IBM developerWorks - XML転送のパフォーマンスを改善する
http://www-6.ibm.com/jp/developerworks/xml/040903/j_x-trans1.html

この記事で紹介されているのは、XML 汎用のフォーマットを使う手法と、XML アプリケーション (ここでの「アプリケーション」は、XML 仕様書でいうところの意味ね) ごとにフォーマットを作る手法。

前者の例 - XBIS
http://xbis.sourceforge.net/
後者の例 - Fast Web Services
http://java.sun.com/developer/technicalArticles/WebServices/fastWS/

XBIS では、XML Infoset をそのまま変換できるようなバイナリフォーマットを用意することで、任意の XML 文書をバイナリ化できるように、というのを目指している。
Fast Web Services の方は、以下の手順で SOAP 専用のバイナリフォーマットを作ったもの。

  1. SOAPスキーマを、ASN.1 で表現する。
  2. SOAP のデータを、ASN.1 の符号化方法の一つである PER で表現する。

当然、同じ手法で他のスキーマもバイナリ化できるだろう。なお、それとは別に、XML Infoset をまるごと ASN.1 で記述した Fast Infoset ってのもあるみたいだ。これは特定のスキーマじゃなくて XML 汎用なので、XBIS の対抗馬ということになるのかな。
ちなみに、XML のバイナリ表現っていうと、古いものではこんなのもある。

WAP Binary XML
http://www.openmobilealliance.org/tech/affiliates/wap/wap-192-wbxml-20010725-a.pdf

WAP は携帯電話向けのネットワーク規格で、日本でいうと au が採用している。 WAP 2.0 ではコンテンツの言語として XHTML Basic (をちょっと修正したもの) が使われていて、それをキャリアのサーバと端末の間で高速に転送するために、「XHTML Basic をバイナリ化して転送」という仕組みが盛り込まれていたのだった。これは完全に XHTML Basic 専用の規格なので、"http://" のようによく使われる文字列に対して専用のコードを与えていたりした。