XML文書をバイナリ化する新仕様「EXI」がW3Cで勧告候補に
XML文書を効率的にやりとりするために、テキストのXML文書をバイナリ化し、より効率的な処理を可能にするための仕様Efficient XML Interchange (EXI) Format 1.0が、昨年の12月8日に勧告候補になっています。W3Cでは、複数の実装による相互運用の検証を経て勧告となる予定です。
XMLの処理性能向上を図るEXI
W3Cが公開しているEfficient XML Interchange (EXI) Format 1.0のドラフトのAbstractでは、EXIを次のように説明しています。
EXI is a very compact representation for the Extensible Markup Language (XML) Information Set that is intended to simultaneously optimize performance and the utilization of computational resources.
EXIは非常にコンパクトなXMLの表現です。それは、処理性能の向上と処理リソースの効率化の両方を意図しています。
The EXI format uses a hybrid approach drawn from the information and formal language theories, plus practical techniques verified by measurements, for entropy encoding XML information.
EXIのフォーマットは、情報と形式言語の理論を組み合わせ、計測によって確認された実用的なテクニックを加えて、エンコードされたXML情報の伝達効率化を実現しています。
よく知られているように、XML文書は人間が読んで理解することもできるテキストデータであることが特徴の1つです。しかしテキストでの表現はXML文書を冗長なデータとしている一因であり、XML文書形式でのデータ交換の際には効率化のために圧縮した方がいいのではないかという議論はずっと以前からありました。
単にZIP圧縮しているだけではないEXI
EXIのドラフトは内容を理解するのが難しいのですが、幸いにも丸山宏氏のブログ「元外資系エグゼクティブの日々」のエントリ「XMLはバイナリ化するか」で、EXIが詳しく紹介されています。
丸山氏によると、EXIでは単にZIP圧縮するよりも高度な方法でXML文書を圧縮しているとのことです。
具体的には、スキーマによって文書の構造が決定している場合には、文書中の特定の部分はあとで補完できるためいちいち符号化しなかったり、また、XML文書中の文字列の並べ替えを行って、より効率的な圧縮ができるようにしていると説明されています。
さらに、EXIではXML処理の高速化も意図しています。
Efficient XML Interchange (EXI) Primerの2.1「EXI Streams」から引用します。
EXI represents the contents of an XML document as an EXI stream. As shown below, an EXI stream consists of an EXI header followed by an EXI body.
EXIは、XML文書のコンテンツをEXIストリームとして表現します。以下の図で示すように、EXIストリームは、EXIヘッダとそれに続くEXIボディで構成されます。
どうやらEXIでは、XML文書で採用されているタグで値を囲む形式を、EXIヘッダとEXIボディという組み合わせに変換し、それが連なったEXIストリームという構成になるようです。これによってXML文書(を変換したEXI)をパースするときに順に処理していけばよくなるため高速化されるのでしょう。
ちなみにEXIを処理する機構は「XMLパーサ」とは別に「EXIプロセッサ」と呼ばれるようです。
人が見ないXML文書はEXI化していくのでは
XML文書をバイナリ化に対してはさまざまな批判も同時にあり、丸山氏のエントリでもそのことに触れています。しかし、Publickeyの以前のエントリ「情報システム部門は「SOA」を改革の武器として使い始めた」や「「BPMN 2.0」OMGが採択。ベンダ間の共通フォーマットも」で紹介したように、企業のシステム基盤としてSOAは大きな役割を果たそうとしており、そのSOAではWebサービスが用いられ、その情報交換フォーマットとしては主にXML文書が使われています。
ここでやり取りされるXML文書のほとんどは、より小さく、より高速に処理できることの方が、人間が見ることのできるテキスト形式になっていることよりもずっと重要でしょう。
そしてそのような役割のXML文書は、SOAの普及によって飛躍的に増大することが予想されます。EXIはそうした用途で使われるフォーマットとして重宝されるのではないでしょうか。
追記(2010/1/12):コメントで情報をいただきましたが、以下のURLではW3C EXIワーキンググループチェア 上谷 卓己氏(米国富士通研究所) によるEXIの詳しい解説を見ることができます。日本語で参照できる最も詳細で信頼性の高い情報ではないかと思います。 http://netfish.halfmoon.jp/pub/EXI/2009-05-12.html