XMLにおける「ボヘミアンと貴族の階級闘争」
を読み解く


XML技術者のあいだで繰り広げられている議論の1つ、「ボヘミアン」と「貴族」の問題は、将来のXML仕様を左右しかねない大問題だ。いったい何が議論の的となっているのか、解説する。

(株)ピーデー
川俣 晶
2003/4/16

 

XML界に重く横たわる深刻な問題


 現在のXML界には、大きな亀裂が存在する。それは、「ボヘミアンと貴族の階級闘争」と呼ばれるものだ。まずは、経緯をざっと振り返ってみよう。

 日本でこの話題が取り上げられるようになったのは、、翔泳社主催の「Developers Summit2003」というイベントにおいて、日本アイ・ビー・エム東京基礎研究所の村田真氏が行った講演がきっかけだ。この講演を取り上げた@ITのニュース「XML 1.1を巡る『ボヘミアン』と『貴族』の階級闘争」によると、この講演で村田氏が指摘した争点は2つある。1つは、XMLから伝統的な歴史あるスキーマ言語であるDTDを取り除くことによって起こるサブセット仕様の混乱についての問題。もう1つは、XML文書をテキストではなく、バイナリ表現で扱うか否かについての問題である。

 これだけなら、新しい仕様をめぐって技術的な議論が存在するというよくある話で終わる。だがそのあとに、これらの問題の根底にはXMLに対する考えが異なる2つの派閥、いわゆる「ボヘミアン」と「貴族」の抗争があるのだと述べていることで、話は単純な技術論の領域では収まらなくなっている。

 これに関して村田氏本人が、日本XMLユーザーグループのメーリングリストで、「[xml-users 8155] Re: XML1.1を巡る『ボヘミアン』と『貴族』の階級闘争」というメッセージにより解説を加えている。その趣旨は、ボヘミアンと貴族という分類は村田氏の発案ではなく、Uche Ogbuji氏による記事「XML class warfare (英文)」(XMLにおける階級闘争)によるということ。そして、これに関する議論の経緯は「XML-DEV thread watch: the role of class and type in XML (英文)」からもたどれるとしていることだ(これらの内容については下記のコラム参照)。

 また、インフォテリア株式会社の吉松史彰氏が、このボヘミアンと貴族の議論に関して、@ITのInsider.NETフォーラムで「XMLがもたらす夢と現実」という記事を公開している。この記事では、ボヘミアン的な考え方が、「現在のシステム開発の方向性とは正反対」であるとしたうえで、それを「XMLの挑戦」と理解を示している。

■ コラム:「ボヘミアン」と「貴族」の名付け親

 「ボヘミアン」と「貴族」という名称が使われるきっかけとなったのは、2002年12月にADTmag.comに掲載されたUche Ogbuji氏執筆の記事「XML class warfare」(XML階級闘争)だ。この記事では、XMLにおける型情報の扱いなどに関するこれまでの議論の経緯や整理が行われている。その内容を要約すると、以下のようになる。

 W3CのXML SchemaによるXMLデータ型の標準化は、「貴族」の登場を確立するきっかけになった。貴族はXMLのデータにおいても、C++やJavaやSQLにおけるデータと同様に常にデータと型情報を関連付けるのを好む人たちである。一方で従来のようにXML内のデータと型情報との対応は最小限のものにとどめ、記述されたテキストのまま処理できることが重要と考える一派が「ボヘミアン」となった。私(Ogbuji氏)自身はボヘミアンである。

 両派は、XPathとXSLTの新バージョンの在り方についての議論を中心に、その対立の度合いを高めつつある。従来のXPathとXSLTは、型情報をほとんど利用することなく動作した。しかし、これらの新バージョンのドラフトでは、貴族の主張によってW3C XML Schemaによる型情報の利用が幅広く取り入れられようとしているからだ。この主導権争いで劣勢のボヘミアンは、別のスキーマ言語であるRELAX NGの下に集合しようとしている。

 RELAX NGはW3CのXML Schemaとは異なり、テキスト処理を中心に考えられたスキーマ言語で、型情報はオプションとしてサポートしている。私は、多くの人がプログラムよりデータを長持ちさせたいと考え、またデータに高いポータビリティを望むのならば、データの階級を下げる(つまり、よりボヘミアン的になる)ことが主流になるだろうと予想している。

 その後、XML開発者のメーリングリストであるXML-DEVにおいて、XMLにおける型情報の扱いについての議論が再発した。その経緯をまとめたのが「XML-DEV thread watch: the role of class and type in XML」だが、この記事もOgbuji氏自身がまとめ、 XML専門のニュースサイトである「<?xmlhack>」に掲載された。

 記事の内容はメーリングリストのいくつかの発言の引用が中心で、どれも専門的な発言ということもあって要約するのは難しいが、あえてまとめると次のようになる。

 Ogbuji氏はメーリングリストからの引用を用いて、記事「XML class warfare」に対して、「ボヘミアンの主張が完全なものではない」「XML Schemaで発生する問題は、すでにDTDでも発生している」といったいくつかの反論を紹介した。また、「ボヘミアンが心配するような問題は、新版のXSLTやXPathにおける具体例で考えてみて、発生しないのではないか?」という具体的な例を含んだ指摘に対して、「その例では、本質的な問題をとらえていない」という内容の返事をしている。

 また、別の参加者による「XML-DEVメーリングリストは全体的にボヘミアン的な人が多い場所であり、議論にバイアスがかかっているのではないか」という指摘を取り上げている。さらに「XMLの基本的な部分と、型情報が必須な部分がきれいに分離されていた方が、XPathやXQueryにとって非常によいものになるのではないか」という発言を発端に、新しいスレッドでの議論が発生していることを紹介した。

 議論はさらに「Infoset対Serialized XML」「binary XML formats」などに進んでいこうとしていることを紹介して、この記事は終わる。

(編集局)

 これらが、この問題のバックグラウンドだ。「ボヘミアン」と「貴族」の問題は人と人との対立であるため、実際には各人に独自の考え方があって、その対立をひとくくりにはできないだろう。今回の記事は、あくまで筆者による解釈で解説していくが、それが読者にとってこの問題を理解する糸口になれば幸いである。

 

なぜ両者は争っているのか

 さて、ここまでの説明でも、果たして何が争点となってボヘミアンと貴族に分かれているのか分からない人も多いと思う。どうして、型情報の使い方1つで、こんなにも争うことになるのだろうか。例えば、プログラム言語の世界では、厳密な型指定を必須とする言語(例えばC++やJava)と、型指定を必須としない言語(例えばPerl)が存在するが、それがプログラム言語の世界に深い亀裂をもたらしたという話は聞いたことがない。

 しかし、XML界には亀裂がある。それは間違いない。実際に、筆者もそのような亀裂を何度も実際に見ている。例えば、4年も前のことになるが、電気製品の取扱説明書のような技術文書を作成するプロを集めたセミナーの、パネルディスカッションに出たことがある。その際、筆者は「XMLは簡単だから、ともかく使ってみることが大切」と述べた。すると、別のパネリストが顔色を変えて、「そのような安易な使い方ではXMLのメリットは出ない」と釘をさすようにコメントした。

 大ざっぱに要約すれば、筆者は厳密な設計なしにXML文書を書いてもよいとしたのに対して、彼は、厳密な設計なしにXML文書を書いてはいけない、としたのである。いまから考えれば、これも1つのボヘミアンと貴族の対立の表れだったといえるだろう。

 どうして彼はそのような主張をしたのだろうか。それは、大量の文書を高品質に、効率よく処理するという状況を考えれば理解できる。思いつきで文書の中に新しい要素を考案して継ぎ足すような使い方をしていては、大量の文書を作る過程のどこでどんなトラブルが起きるか分からないし、効率も上がるわけがない。やはり、最初に厳密な設計を行い、そこから外れないように多数の文書を作成していく必要がある。そうしなければ、XMLのメリットを享受できないのである。

 一方で筆者はXMLを、これまであまり日の当たっていなかった「少量多品種」「不定型」なデータの処理に対して、効率アップを実現する救世主だと認識していた。こうしたデータは、新しい種類のデータが次々に出てくるだけでなく、途中で形式が変化することも多い。しかし処理するデータ量は一般にそれほど多くないため、高速化などを追求するメリットは薄い。事前に厳密なデータ設計をするよりも、取りあえず必要な処理ができればOKという場面も多くあるし、素早く安価にシステムを構築する方が重要とされる場合もある。

 こういう世界では、厳密な設計を行うことなくXML文書を作成するというやり方は「あり」だ。というより、対象の性質やコストの問題を考えると、そうでなければシステムが成立しない場合がある。大量のデータの処理効率を上げるために初期の設計からの逸脱を許さない、という方法論の対極にあるといえるだろう。

 このような「大量のデータを効率よく」「少量多品種を手早く」という2つの異なった考え方が衝突した場合、容易に妥協点が得られないのは、何となく想像ができるのではないだろうか?

 次に、もっと具体的にボヘミアンと貴族の違いを見てみよう。

 

ボヘミアンと貴族の主張を見てみる

 ボヘミアンと貴族がそれぞれどんな主張をしているのか、表にまとめてみた。



1
文字列が重要か、型情報が重要か
  ●ボヘミアン:文字列を最重要視
XML文書に書かれた文字列を最も重要であると考える。スキーマは構文上の制約でしかなく、文字列に意味を与えるものではない。同一のXML文書に対して、異なるスキーマを使っても、スキーマなしで使用しても問題ない。
  ●貴族:型情報を最重要視
XML文書の規範を定めたスキーマに記述された型情報を、最も重要であるとする。そのためまずスキーマを記述してXML文書の型情報を定義し、それに沿ってXML文書を作成する。



2
スキーマを必須とするか
  ●ボヘミアン:スキーマがなくとも処理可能
現在のXMLは、スキーマがなくても、テキスト中心の処理を行うことで、有益な用途に用いることができる。この状況を継続するべき。
  ●貴族:スキーマがなくてはデータに意味はない
型情報を持たないデータに意味はない。型情報を与えるために、スキーマは必須とするべき。そのようにXMLの仕様を変えていく。



3
スキーマの適用方法
  ●ボヘミアン:必要ならバインディング・ツールを使用
XMLのデータをプログラム言語のクラスやデータベース内のフィールドに関連付けるときなど、必要に応じてバインディング・ツールと呼ばれる関連付けツールを使う。バインディング・ツールはオプションであり、使ってもよいし、使わなくてもよい。
  ●貴族:XPath 2.0やXSLT 2.0なども型情報ありきで動作すべき
XMLデータは常に型情報ありきであるため、たとえXPathやXSLTなどの基本的な操作を行うツールでも、常にスキーマの情報を参照して動作すべきである。

 これを見ても、ピンとこない読者も多いだろう。例えば争点1の「文字列が重要か、型情報が重要か」によって、どんな違いが起こるのだろうか。ボヘミアンは決して型情報がない方がよいといっているわけではない。実際に、ボヘミアンが支持するスキーマ言語であるRELAX NGでは型情報を指定することができる。

 争点2の「スキーマを必須とするか」も、なかなか分かりにくいかもしれない。スキーマを必須にするといったい何のメリットがあるのだろうか。逆に必須にしないことに、どんなメリットがあるのだろうか。スキーマがあれば誤入力の危険を減らせるが、手軽さが減るというデメリットも出てくる。その状況で必須にすることと必須にしないことには、決定的な理由となるような差があるのだろうか?

 そのナゾを明らかにするには、PSVI(post-schema-validation infoset)という用語がキーになると考えられる。PSVIは、貴族が支持するスキーマ言語であるXML Schemaには存在するが、ボヘミアンが支持するREALX NGには存在しないものである。

 

スキーマを必須とすることで得るもの、失うもの

 PSVIとは、スキーマを用いた妥当性の検証が終了した段階での、情報セットのことを意味する。通常、XML文書はXMLパーサにより解釈され、その結果はアプリケーションに渡される。PSVIという用語は、この検証が終了した段階で、XML文書には含まれていないXMLパーサが付け加えた情報がある、ということを明確に示すために存在している。スキーマ言語によってPSVIが存在するかどうかは異なる。貴族のスキーマ言語は、読み込んだXML文書に含まれていない情報を付け加えることができるが、ボヘミアンのスキーマ言語はそうではないということである。

 ではいったいどんな状況で、検証後の情報セットに情報が付け加えられるのだろうか。最も分かりやすいのは属性のデフォルト値だろう。XML Schemaは属性のデフォルト値を指定できる。例えばcolor属性のデフォルト値は“black”であるとスキーマに記述しておくと、XML文書内にcolor属性が記述されていなくても、XMLパーサの解析した結果をアプリケーションが受け取ると、color属性にはblackという値が設定されている。

 では、これがどのような影響を及ぼすのだろうか。「XML文書中にいちいちデフォルト値を書かなくても、自動的に値が設定される機能は便利だからあった方がよい」と思った読者もいるだろう。だが、そう単純に結論は出せないのである。というのは、XML文書にはスキーマによる妥当性を検証しない「整形式のXML文書」が存在するからだ。

 例えば、あるシステムでXML文書の処理のレスポンスが悪いので改善したいという要望が出たとしよう。調べた結果、XML Schemaによる妥当性の検証に時間がかかるのが原因だと分かった。そこで、XML文書はすべて事前に妥当性を検証済みと考え、検証処理を外して整形式のXML文書として処理することに決めたとしよう。すると、スキーマでデフォルト値が設定されていたXML文書の処理では、改善前と後で処理結果が同じにならない可能性がある。

 一方、ボヘミアンが支持するスキーマ言語であるRELAX NGにはPSVIが存在しないので、スキーマ妥当性の検証を行っても行わなくても、処理結果に相違は生まれない。

 貴族は、妥当性を検証する場合としない場合で結果が食い違う問題に対して、どういう態度を取っているのだろうか。貴族はスキーマがなくてはデータに意味はない、という立場であるため、スキーマを使わない「整形式のXML文書」の処理は行わないと考えている。貴族はすべてのXML文書を「妥当なXML文書」とすべし、という立場だ。

 

XMLはどちらに進むのか

 ボヘミアンと貴族の間の亀裂が埋まらないとしても、うまく2つを切り分けて別の世界にすることはできないのだろうか? 例えばXMLを2つに分けて、Gentry-XMLと、Bohemian-XMLのようにして、両者に別の進化をたどらせることはできないのだろうか?

 筆者のまったくの推測でしかないが、それができない主な理由は、貴族側にボヘミアン側の抱える歴史と切実なニーズの存在が見えていないこと、にあると感じる。ボヘミアン的なニーズは何もいまになって急に生まれたものではない。「貴族」的な方法ではうまく扱えない領域は何十年も前から存在しており、それに取り組むためのさまざまな試みが行われてきた。XMLはその長い歴史の上に位置付けられるものといえる。決して、素人の新しい思いつきではない。

 しかし、貴族的な世界では、これに対する認識が極めて薄いように感じられる。筆者も、ボヘミアン的な考え方にのっとった歴史も実績もある技術を、「使い物にならない」と一蹴する貴族的な優秀なエンジニアにしばしば遭遇する。冒頭で紹介した吉松史彰氏の記事も、ボヘミアン的な考え方を「現在のシステム開発の方向性とは正反対」と記述している。

 では、ボヘミアンと貴族の間の亀裂が埋まらないとしたら、XMLの未来はどうなるのだろうか。どちらかが勝って終わるしかないとしたら、どちらが勝つのだろうか。

 ボヘミアン側が有利なのは、XMLが現在、「少量多品種」「不定型」なデータ処理に使われている点にある。スキーマを必須とすることで手軽さをXMLから奪う行為は、そのような利用者の望むことではないだろう。

 一方、貴族側が有利なのは、彼らの人材が豊富、資金も豊富であり、支持する有力企業も多いという点である。マスコミにアピールし、XMLの未来像を自ら演出することもできるし、W3Cのような標準化団体に深く入り込むことも容易である。また、データベース間の情報交換手段のような目的で、貴族的なXMLが望まれていることも事実である。

 以上のことを考えると、いまのところどちらが勝つともいいがたい状況である。

 だが、決して「どちらが勝っても同じ」ではないことには注意を払う必要がある。スキーマを必須とするか否かの相違は、実際にXMLを利用する技術者に直接はね返ってくる問題なのである。

関連記事
XML 1.1を巡る『ボヘミアン』と『貴族』の階級闘争 (@IT News)
XMLがもたらす夢と現実 (Insider.NET)
XMLフロンティア探訪 第1回 スキーマ戦争最前線 (XML & Web Services)
日本発のXML標準になるか RELAXが目指しているもの (XML & Web Services)
[xml-users 8155] Re: XML1.1を巡る『ボヘミアン』と『貴族』の階級闘争 (xml-usersメーリングリスト)
XML class warfare (英文) (ADTmag.com)
「XML-DEV thread watch: the role of class and type in XML (<?xmlhack>)



XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間