XML Binary

バイナリーXML

[1] バイナリー (Binary) XML は、XMLバイナリー表現のことを指します。 テキストベースのマーク付け言語としての XML をそのまま用いるのではなく、 転送や構文解析の効率の良いバイナリー表現が好ましいと考えられる分野もあり、 様々なバイナリー表現が検討・提案されてきました。最終的には W3CEXI を標準化するに至り (そこに至るまで一体何年かかったのか)、 汎用的な XMLバイナリー表現の決定版と考えられていました。

[5] しかし、 XMLバイナリーで表現すること自体は一般的にはならず、 分野ごとに限定的に用いられたのみでした。バイナリー表現を取り入れていた分野では EXI に移行するメリットがあったのかどうかは怪しく、 EXI がどれだけ広く用いられたのかはよくわかりません。

[6] いずれにせよ、 XML 自体が廃れてしまったので、バイナリー表現形式も現在ではほとんど使われていません。

代替

[7] バイナリー形式のデータの交換には、 XML を使わない ThriftProtocol BuffersMessagePackCBOR などが用いられています。 これらのデータ形式の方がよりプログラミング言語データ構造に近かったり、 プログラミング言語ライブラリーが整備されていたりして、 使いやすそうです。

XBC

[4] EXI の仕様策定に先立って W3CXBC WG においてバイナリーXMLの要件と性質が整理されています。 XBC の項を参照してください。

バイナリー XML 仕様の一覧

[2] バイナリーXMLを実現する仕様はたくさんあります。これらの中には XML 本体だけでなく、 XML名前空間XML Schema の一部の機能も含まれていることがあります。逆に DTD など XML 本体の機能で含まれていないものもあります。

関連

[8] XOP のように XML 自体は変更せず添付ファイルのような形でバイナリーデータを扱うものもありました。

[9] より単純に Base64XMLバイナリーデータを埋め込むこともよくあります。

メモ

[3] Binary XML - Wikipedia, the free encyclopedia ( 版) https://en.wikipedia.org/wiki/Binary_XML

[10] 設定ファイルの仕様 | COCOA Open Source Project (, ) https://cocoa-mhlw.github.io/cocoa/docs/appendix/preference_specification/#v100---v121

実体ファイルはBinary XML形式

[11] バイナリーXMLがなぜ失敗したのかって、思い当たる理由がいっぱいありすぎて逆に説明が難しいですよね。

[12] まあ当時から一部だけで盛り上がってて大多数の人は名前すら知らないみたいな感じだったしねえ。

[13] もともと XMLテキストで扱いやすいからと流行ってたところがあって、 それをバイナリーにしたいと思ってた人がそんなにいなかったというのが1つ。

[14] 流行ってるからという理由でなんでも XML にぶっこもうとしてた人達がいて、 でもそうすると全部テキストだと効率悪いことに気づいて、 じゃあバイナリー化しよう、とかいうわけのわからない理由でバイナリーXMLが推進されてたのよね、 だから馬鹿馬鹿しいと思ってた人は食いつかなかった。

[15] XML は単体だとテキストデータの塊でしかないので、 バイナリーにしても構文解析の方法論が変わってくるくらいで、 正直あんまりメリットないんですよね。 だからバイナリーXMLの提案や実現はどれも XML 単体ではなくて XML Schemaデータ型などとセット売りになってる。 そうすると数値型とか諸々のデータ型一式が入ってきて、 効率的にバイナリーデータ転送できるようになるから。 ところがそうすると簡単に使えるからと思って XML を採用した人達は振り落とされてしまう。

[16] まあ流行ってるから何でも XML にぶっこもうとしてた人達は XML Schema 万歳、 強い型付き万歳、 複雑プロトコルスタック万歳でやってたわけだから、 そのプレゼンテーション層がバイナリー化されるくらい何でもないと思ってたのだろうけど

[17] まさかその複雑なプロトコルスタックのたくさんの技術がぜんぶ丸ごとなくなるとはさすがに思ってなかっただろうね。 あの XML の膨大な技術群とか、 全部で何個あるのか数え切れない WS-* とか、 作ってた人 & 使ってた人はいまどこで何してるんだろう。

[18] XML という前提がないと、バイナリーデータの効率的な転送手法っていくらでも転がってるし、 デジュール標準の世界にも ASN.1 とか昔からあるわけだし、 わざわざ XML という枷をはめたバイナリーXML系のアーキテクチャーを選択する理由が何もないんですよね。 XML Schemaデータ型がなくても ASN.1 データ型があれば十分だし。 ただ単にバイナリーデータをやり取りしたいだけのほとんどのプログラムにとっては、 好きなデータをそのまま転送すればそれで済むことだし。