<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">Binary</rt></rubyb> XML</dfn> は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>表現のことを指します。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">テキスト</anchor>ベースの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク付け言語</anchor>としての <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> をそのまま用いるのではなく、
転送や構文解析の効率の良い<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>表現が好ましいと考えられる分野もあり、
様々な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>表現が検討・提案されてきました。最終的には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">W3C</anchor>
が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EXI</anchor> を標準化するに至り (そこに至るまで一体何年かかったのか)、
汎用的な <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>表現の決定版と考えられていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> しかし、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>で表現すること自体は一般的にはならず、
分野ごとに限定的に用いられたのみでした。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>表現を取り入れていた分野では
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EXI</anchor> に移行するメリットがあったのかどうかは怪しく、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EXI</anchor>
がどれだけ広く用いられたのかはよくわかりません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> いずれにせよ、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> 自体が廃れてしまったので、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>表現形式も現在ではほとんど使われていません。</p><section><h1>代替</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>形式の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ</anchor>の交換には、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> を使わない
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Thrift</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Protocol Buffers</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MessagePack</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CBOR</anchor> などが用いられています。
これらのデータ形式の方がより<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プログラミング言語</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ構造</anchor>に近かったり、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プログラミング言語</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ライブラリー</anchor>が整備されていたりして、
使いやすそうです。</p></section><section><h1>XBC</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EXI</anchor> の仕様策定に先立って <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">W3C</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XBC WG</anchor> において<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリーXML</anchor>の要件と性質が整理されています。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XBC</anchor> の項を参照してください。</p></section><section><h1>バイナリー XML 仕様の一覧</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリーXML</anchor>を実現する仕様はたくさんあります。これらの中には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> 本体だけでなく、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML名前空間</anchor>や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML Schema</anchor> の一部の機能も含まれていることがあります。逆に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DTD</anchor>
など <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> 本体の機能で含まれていないものもあります。</p><figure class="short list"><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EXI</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">BiM</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Fast Infoset</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Efficient XML</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EBML</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WBXML</anchor></li></ul></figure></section><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XOP</anchor> のように <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> 自体は変更せず<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">添付ファイル</anchor>のような形で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>データを扱うものもありました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> より単純に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base64</anchor> で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリーデータ</anchor>を埋め込むこともよくあります。</p></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <cite xml:lang="en">Binary XML - Wikipedia, the free encyclopedia</cite> (<time>2013-09-17 20:26:59 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://en.wikipedia.org/wiki/Binary_XML">https://en.wikipedia.org/wiki/Binary_XML</anchor-external></p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <cite xml:lang="en">設定ファイルの仕様 | COCOA Open Source Project</cite>
(<time>2021-11-25T07:16:26.000Z</time>, <time>2021-11-30T09:43:35.165Z</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://cocoa-mhlw.github.io/cocoa/docs/appendix/preference_specification/#v100---v121">https://cocoa-mhlw.github.io/cocoa/docs/appendix/preference_specification/#v100---v121</anchor-external></figcaption><blockquote><p>実体ファイルはBinary XML形式</p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 
バイナリーXMLがなぜ失敗したのかって、思い当たる理由がいっぱいありすぎて逆に説明が難しいですよね。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> 
まあ当時から一部だけで盛り上がってて大多数の人は名前すら知らないみたいな感じだったしねえ。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 
もともと
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> 
は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">テキスト</anchor>で扱いやすいからと流行ってたところがあって、
それを<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>にしたいと思ってた人がそんなにいなかったというのが1つ。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
流行ってるからという理由でなんでも <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> にぶっこもうとしてた人達がいて、
でもそうすると全部<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">テキスト</anchor>だと効率悪いことに気づいて、
じゃあ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>化しよう、とかいうわけのわからない理由でバイナリーXMLが推進されてたのよね、
だから馬鹿馬鹿しいと思ってた人は食いつかなかった。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> は単体だと<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">テキスト</anchor>データの塊でしかないので、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリー</anchor>にしても<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">構文解析</anchor>の方法論が変わってくるくらいで、
正直あんまりメリットないんですよね。
だから<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリーXML</anchor>の提案や実現はどれも
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor>
単体ではなくて <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML Schemaデータ型</anchor>などとセット売りになってる。
そうすると<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">数値型</anchor>とか諸々の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ型</anchor>一式が入ってきて、
効率的にバイナリーデータ転送できるようになるから。
ところがそうすると簡単に使えるからと思って <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor>
を採用した人達は振り落とされてしまう。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> 
まあ流行ってるから何でも <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> にぶっこもうとしてた人達は
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML Schema</anchor> 万歳、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">強い型付き</anchor>万歳、
複雑プロトコルスタック万歳でやってたわけだから、
その<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プレゼンテーション層</anchor>がバイナリー化されるくらい何でもないと思ってたのだろうけど</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> 
まさかその複雑なプロトコルスタックのたくさんの技術がぜんぶ丸ごとなくなるとはさすがに思ってなかっただろうね。
あの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> の膨大な技術群とか、
全部で何個あるのか数え切れない <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WS-*</anchor> とか、
作ってた人 &amp; 使ってた人はいまどこで何してるんだろう。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> という前提がないと、バイナリーデータの効率的な転送手法っていくらでも転がってるし、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">デジュール標準</anchor>の世界にも <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASN.1</anchor> とか昔からあるわけだし、
わざわざ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> という枷をはめた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイナリーXML</anchor>系のアーキテクチャーを選択する理由が何もないんですよね。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML Schemaデータ型</anchor>がなくても <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASN.1</anchor> データ型があれば十分だし。
ただ単にバイナリーデータをやり取りしたいだけのほとんどの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プログラム</anchor>にとっては、
好きなデータをそのまま転送すればそれで済むことだし。</p></section></body></html>