今さら人に聞けない
「JavaとXMLのあたりまえの関係」

JavaとXMLはなぜ仲良し?


米持幸寿
日本アイ・ビー・エム
2001/1/11

 JavaとXML、それぞれが目指した世界

 XMLを扱うサーバ製品や処理ツールに、なにかとJavaが取り上げられる。なぜだろうか?

 XML文書を扱うには最低でもパーサが必要である。パーサが存在すれば、とりあえずXMLを読み取って操作することが可能になる。多くの言語にパーサが提供されているが、実はそれだけでは足りない。XMLには多くのスキーマやXMLをベースにした、たくさんのテクノロジが登場している。これらを利用するにはXMLパーサだけでは駄目だ。それらを扱うためのAPIやライブラリが必要である。そして、現在それらの多くはJavaに提供されている。

 ただ単純に流行だけでは説明できないこれらの関係を、21世紀初めの話題として取り上げることにしよう。前半ではJavaがXMLの処理によく使われる理由を解説し、後半ではJavaでXMLを処理する実装方法をご紹介する。

  Javaが目指した世界

 


 Java登場の歴史についてはすでに周知の事実であると思うのでここでは解説などしないが、Javaが目指した世界をもう一度振り返ってみよう。

 Javaはもともと組み込み機器用のプログラミング言語として作られた言語からインターネット用にと発展した。インターネットで、ダウンロードして使えるようにさまざまなことが考慮されている。

  1. より簡単に
    インターネット上で最も多く使われているコンピュータはUNIXであるが、そのUNIXの根底にあるのはC言語である。Java言語の仕様はC(正確にはC++)をもとにしたものであるが、C言語が持っていた問題点を可能な限り解決している。

  2. インターネット対応
    Javaはインターネット、とりわけWebブラウザで使われることを強く意識している。Javaアプレットのような稼働形態、サンドボックスといったセキュリティ機能、ベースのクラス・ライブラリにネットワーク機能があり、TCP/IPソケットやHTTPソケットを簡単に作成できるのもインターネット対応の重要な機能である。

  3. マルチプラットフォームへの対応
    Javaで使われる文字変数(Stringやchar)はUnicodeで稼働する。Javaが稼働するコンピュータの標準コードが何であるかにかかわらずである。これは、インターネットに接続されている多くのプラットフォームのコンピュータ機器で扱いやすいように考えられた仕様だ。

  4. 無料
    多くのJava実行環境(JRE)やJava開発キット(JDK)は、インターネットで無料ダウンロードできる。Javaを使ってプログラミングを始めたい人は、ダウンロードすることにより、無料でプログラミングを始められる。

  XMLが目指した世界




 XMLは、Javaとは直接的な関係を持たずに誕生した。その生まれた背景をひもときながら、その関連性を考えてみよう。

HTMLはなぜ普及したか?

 周知のとおり、HTMLはインターネットの文書記述の標準である。通常、このようなオープンな世界ではいくつかの標準が生まれ、それらがしのぎを削る中で本当の標準となるものが出てくる。例えば、画像フォーマットを1つとっても、GIF、JPG、TIFF、PNG……といった具合にたくさん存在する。

 現在ではWML、C-HTMLといった携帯端末に表示するための別のハイパー文書記述言語が登場し始めているが、コンピュータ用ブラウザに使われる標準はHTMLと決まっている。そして、ISPによってインターネットに参加しているようなコンシューマ(個人消費者)でもHTMLを自分で記述してインターネットにページを公開するまでに成長した。なぜ、ここまで単一のデータ記述言語が普及するに至ったのであろうか。

 HTMLは、Webが登場した当初、現在のW3Cディレクターであるティム・バーナス・リー氏によって提唱された文書記述方式であり、SGML(Standard Generalized Markup Language)のスキーマ(文法)の1つとして定義されている。

 Webというものは、HTTPというプロトコルで稼働するサーバとそれにアクセスするクライアント(ブラウザ)、そして、その中を流れるデータ(HTML)という組み合わせでその考え方が提唱されている。それが単純に受け入れられた。企業の思惑や、利害は基本的に関係なかった。そして、HTMLには次のような特徴があったために、民衆に受け入れられやすかったのだ。

  1. インターネットの斬新性
    インターネットが普及し始めたとき、そのような便利なものはほかになかった。そのため、TCP/IPという柔軟なネットワークを使って、HTTPサーバという単純なサーバを稼働させることで、世界中の情報を取り出すことができる、というものに、皆が飛びついた。

  2. 部分的な習得が可能
    HTMLの習得が簡単な理由は、サブセットから覚えていける部分にある。HTMLの全体の仕様は現在では膨大なものになっており、すべてを覚えている人はめったにいないだろう。しかし、全体を覚えなくても一部分だけでも十分役に立つ。これがHTMLを習得しやすい理由である。

  3. テキスト形式である
    これは、SGMLスキーマであることによるのだが、タグづけによるテキスト形式であるので、テキストエディタさえあればだれでも入門することができる。

  4. ブラウザさえあれば試せる
    HTML文書は、ローカルファイルも、サーバのファイルも同じコーディングで作成することができる。このため、わざわざHTTPサーバを稼働させなくても作成可能である。このため、入門者が習得するのが楽である。

 このような理由によって、HTMLを知っている人の人口はインターネット上に爆発的に拡大した。そして、インターネットが商用に利用可能になった1995年以降、たくさんの企業がHTMLを使ってインターネットに情報を発信するようになった。

HTMLのジレンマ

 インターネットは世界中から情報を入手するために非常に便利であるということで、急速に受け入れられた。インターネットにありとあらゆる情報が載っているようになったため、ありとあらゆる企業がインターネットに情報を発信するようになった。それまではオフライン・メディア(例えば磁気テープ)で新製品情報などを配布していた企業は「インターネットに公開することにしたので、そちらから取得してください」というふうにしたところもあったことだろう。

 しかし、ここには大きな落とし穴がある。コンシューマがインターネットを使う場合、自分が欲しい情報を取り出すだけでよい。このため、検索サイトなどでキーワード検索し、適当に幾つか見ているうちに必要な情報が手に入るだろう。こうしてインターネットは情報のルツボとなった。しかし、企業が情報を入手する場合にはどうだろうか。

 企業は通常ITシステムでこういった情報を扱う。例えば、部品メーカーの部品の情報はデータベースに収めることになるだろう。取引先が複数あれば、すべてのメーカーの部品情報がすべて自社のシステムに保存されている必要がある。1つの部品メーカーが1万種類の部品を持っており、取引先が20社あれば実に20万種類のデータベース・エントリーが必要である。
 もし、部品メーカーが「インターネットに公開されていますから」ということでデータを渡してくれないようになったらどうなるだろうか。取引会社は仕方なくたくさんのアルバイトを雇ってインターネットから読み取った情報を自社のデータベースに書き込むことが必要である。筆者は実際にそのような企業に出合ったことがある。なぜなら、HTMLは機械的に読み取って処理するのには向いていないからである。

 HTMLは、表現方法を記述するように作られている。例えば、部品表のようなものをHTMLでインターネットに記載した場合、ある部品の情報は「そのHTMLに出てくる表の最初の行で、2つ目の列に現れる」というように取り出すしかない。表のレイアウトが違ったり、表を使っていないHTML文書ではそれごとに取り出し方が違ってしまうし、この関係が崩れるような修正(例えば、ヘッダーとして表を追加)した場合などは、この取り出し方はできなくなってしまう。ましてや「3行目の5byte目からデータが取り出せる」などというのはすぐに通用しなくなるのは明らかだ。


XMLによる情報の再利用

 インターネットに配置されている情報がHTMLであるために機械的に理解しにくい(ソフトウェアで処理しにくい)ことに目を付けた人はたくさんいたと思うが、これを解決するために具体的に活動したのがSGMLオープン・コンソーシアム(現在のOASIS)で、その結果登場したのがXMLである。XMLは、インターネットに存在する情報を「単なる出版物」から、「再利用可能なデータ」に変身させる。先ほどの例を取り上げれば、HTMLで公開されている部品表をXMLに変更し、情報を示すタグをつけることにより、機械的に処理できるようになる。インターネットに公開されている情報を使って、自社データベースの更新をすることも可能である。こうすることにより、インターネットを巨大なデータベースのように使うことができるということを目指しているのだ。

XMLの特徴

 XMLがSGMLを簡素化したものであることは多くの人が知っているだろう。もともとのアイディアがSGMLグループから出てきていることからも当然ではある。しかし、これは必然でもあった。

 HTMLの課題を解決するために、意味情報(メタ情報)を文書に付加しようというのがXMLの思想であるが、実はSGMLにはもともとそのような機能があった。しかし、SGMLは非常に複雑難解であり、普及したとはいいがたい。その上、インターネットなど存在しないころに作られたので、インターネットで使いやすいようには作られていない。
XMLでは、これらの課題を克服するために、以下のような特徴を持っている。

  1. 単純
    XMLでは、SGMLの難解さを排除したといわれている。SGMLの80%の機能を実現しているにもかかわらず、その複雑さは20%程度といわれている。SGMLの仕様書よりもぐっと少ないコストで導入することが可能である。

  2. インターネット対応
    インターネットに対応するための考慮が多くされている。XPath、XLink、XPointer、といったリンク機能についても当初から規約づくりが行われている。HTTPプロトコルによるドキュメントの交換を標準的に考えているのも特徴的だ。

  3. マルチプラットフォームへの対応
    Unicodeを標準の記述コードとしており、XMLを扱うプログラムはUnicodeに対応することが規定されている。これは、インターネットに接続されている多くのプラットフォームのコンピュータ機器で扱いやすいように考えられた仕様だ。

  4. 無料
    XML自体はW3Cが公開している仕様であるから仕様がタダで手に入るのは当たり前だが、多くのXML対応プログラムなどもインターネットから無料で入手が可能である。

XMLの操作

 XMLは、文書記述方式策定のルールであるので、それを扱うプログラミング言語に制限はない。アセンブラだろうが、COBOLだろうが、PL/Iだろうが、C/C++言語だろうが、Javaであろうが、好きなプログラミング言語を使えばよい。実際、多くの言語でXMLを扱えるようにツール・プログラムが提供されている。ではなぜJavaが多く取り上げられるのだろうか。

 XMLを操作するためのAPIとしてよく知られているのは、DOM(Document Object Model)とSAX(Simple API for XML)である。この2つの特徴は、以下のようなものである。

  1. XML文書の構造をオブジェクトに展開し、メモリ上に維持する。これをDOM-APIにより操作する

  2. ソフトウェアをハンドラー(オブジェクト)として作成し、コールバック・メソッドにロジックを実装する。パーサに登録することにより、コールバック・メソッドが呼び出され、XML文書の処理が行われる

 どちらもオブジェクト指向的なプログラミング・モデルである。よって、XMLを扱うプログラミング言語にはオブジェクト指向言語が向いていることが分かる。

 さて、ここで前の節で取り上げたJava言語とXMLの特徴を思い出してほしい。「簡単」で「インターネットを意識」しており、「マルチプラットフォーム対応」の「無料」で手に入るのがXMLの特徴であった。これにマッチするオブジェクト指向言語はJavaである。このような理由からJavaは現存するプログラミング言語の中で最もXML文書を扱うのに適した言語であるといわれるのである。

JavaによるXML文書の処理


Index
JavaとXMLはなぜ仲良し?
JavaとXML、それぞれが目指した世界
 Javaが目指した世界
 XMLが目指した世界
 HTMLはなぜ普及したか?
 HTMLのジレンマ
 XMLによる情報の再利用
 XMLの特徴
 XMLの操作
  JavaによるXML文書の処理
 XMLパーサ
 DOM-API
 SAX-API  




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

注目のテーマ

Java Agile 記事ランキング

本日 月間