今さら人に聞けない
「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はもともと組み込み機器用のプログラミング言語として作られた言語からインターネット用にと発展した。インターネットで、ダウンロードして使えるようにさまざまなことが考慮されている。
- より簡単に
インターネット上で最も多く使われているコンピュータはUNIXであるが、そのUNIXの根底にあるのはC言語である。Java言語の仕様はC(正確にはC++)をもとにしたものであるが、C言語が持っていた問題点を可能な限り解決している。
- インターネット対応
Javaはインターネット、とりわけWebブラウザで使われることを強く意識している。Javaアプレットのような稼働形態、サンドボックスといったセキュリティ機能、ベースのクラス・ライブラリにネットワーク機能があり、TCP/IPソケットやHTTPソケットを簡単に作成できるのもインターネット対応の重要な機能である。
- マルチプラットフォームへの対応
Javaで使われる文字変数(Stringやchar)はUnicodeで稼働する。Javaが稼働するコンピュータの標準コードが何であるかにかかわらずである。これは、インターネットに接続されている多くのプラットフォームのコンピュータ機器で扱いやすいように考えられた仕様だ。
- 無料
多くのJava実行環境(JRE)やJava開発キット(JDK)は、インターネットで無料ダウンロードできる。Javaを使ってプログラミングを始めたい人は、ダウンロードすることにより、無料でプログラミングを始められる。
|
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には次のような特徴があったために、民衆に受け入れられやすかったのだ。
- インターネットの斬新性
インターネットが普及し始めたとき、そのような便利なものはほかになかった。そのため、TCP/IPという柔軟なネットワークを使って、HTTPサーバという単純なサーバを稼働させることで、世界中の情報を取り出すことができる、というものに、皆が飛びついた。
- 部分的な習得が可能
HTMLの習得が簡単な理由は、サブセットから覚えていける部分にある。HTMLの全体の仕様は現在では膨大なものになっており、すべてを覚えている人はめったにいないだろう。しかし、全体を覚えなくても一部分だけでも十分役に立つ。これがHTMLを習得しやすい理由である。
- テキスト形式である
これは、SGMLスキーマであることによるのだが、タグづけによるテキスト形式であるので、テキストエディタさえあればだれでも入門することができる。
- ブラウザさえあれば試せる
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では、これらの課題を克服するために、以下のような特徴を持っている。
- 単純
XMLでは、SGMLの難解さを排除したといわれている。SGMLの80%の機能を実現しているにもかかわらず、その複雑さは20%程度といわれている。SGMLの仕様書よりもぐっと少ないコストで導入することが可能である。
- インターネット対応
インターネットに対応するための考慮が多くされている。XPath、XLink、XPointer、といったリンク機能についても当初から規約づくりが行われている。HTTPプロトコルによるドキュメントの交換を標準的に考えているのも特徴的だ。
- マルチプラットフォームへの対応
Unicodeを標準の記述コードとしており、XMLを扱うプログラムはUnicodeに対応することが規定されている。これは、インターネットに接続されている多くのプラットフォームのコンピュータ機器で扱いやすいように考えられた仕様だ。
- 無料
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つの特徴は、以下のようなものである。
- XML文書の構造をオブジェクトに展開し、メモリ上に維持する。これをDOM-APIにより操作する
- ソフトウェアをハンドラー(オブジェクト)として作成し、コールバック・メソッドにロジックを実装する。パーサに登録することにより、コールバック・メソッドが呼び出され、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 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|