日本アイ・ビー・エム2001/1/11JavaとXML、それぞれが目指した世界XMLを扱うサーバ製品や処理ツールに、なにかとJavaが取り上げられる。?XML文書を扱うには最低でもパーサが必要である。パーサが存在すれば、とりあえずXMLを読み取って操作することが可能になる。多くの言語にパーサが提供されているが、実はそれだけでは足りない。XMLには多くのスキーマやXMLをベースにした、たくさんのテクノロジが登場している。これらを利用するにはXMLパーサだけでは駄目だ。それらを扱うためのAPIやライブラリが必要である。現在それらの多くはJavaに提供されている。単純に流行だけでは説明できないこれらの関係を、21世紀初めの話題として取り上げることにしよう。前半ではJavaがXMLの処理によく使われる理由を解説し、後半ではJavaでXMLを処理する実装方法をご紹介する。Javaが目指した世界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が目指した世界XMLは、Javaとは直接的な関係を持たずに誕生した。その生まれた背景をひもときながら、その関連性を考えてみよう。HTMLはなぜ普及したか?周知のとおり、HTMLはインターネットの文書記述の標準である。通常、このようなオープンな世界ではいくつかの標準が生まれ、それらがしのぎを削る中で本当の標準となるものが出てくる。画像フォーマットを1つとっても、GIF、JPG、TIFF、PNG......といった具合にたくさん存在する。現在ではWML、C-HTMLといった携帯端末に表示するための別のハイパー文書記述言語が登場し始めているが、コンピュータ用ブラウザに使われる標準はHTMLと決まっている。ISPによってインターネットに参加しているようなコンシューマ(個人消費者)でもHTMLを自分で記述してインターネットにページを公開するまでに成長した。ここまで単一のデータ記述言語が普及するに至ったのであろうか。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対応プログラムなどもインターネットから無料で入手が可能である。ルールであるので、それを扱うプログラミング言語に制限はない。アセンブラだろうが、COBOLだろうが、PL/Iだろうが、C/C++言語だろうが、Javaであろうが、好きなプログラミング言語を使えばよい。実際、多くの言語でXMLを扱えるようにツール・プログラムが提供されている。Javaが多く取り上げられるのだろうか。この2つの特徴は、以下のようなものである。XML文書の構造をオブジェクトに展開し、メモリ上に維持する。これをDOM-APIにより操作するソフトウェアをハンドラー(オブジェクト)として作成し、コールバック・メソッドにロジックを実装する。パーサに登録することにより、コールバック・メソッドが呼び出され、XML文書の処理が行われるどちらもオブジェクト指向的なプログラミング・モデルである。よって、XMLを扱うプログラミング言語にはオブジェクト指向言語が向いていることが分かる。ここで前の節で取り上げたJava言語とXMLの特徴を思い出してほしい。「簡単」で「インターネットを意識」しており、「マルチプラットフォーム対応」の「無料」で手に入るのがXMLの特徴であった。これにマッチするオブジェクト指向言語はJavaである。このような理由からJavaは現存するプログラミング言語の中で最もXML文書を扱うのに適した言語であるといわれるのである。(2017/5/9)ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。(2017/4/6)ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。(2017/4/3)初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。