矢沢 久雄

 前回の講座では,XML文書の構造と,XML文書を記述するときの書式を説明しました。今回は,XML文書をアプリケーションからアクセスする方法を説明します。XML文書は,単なるデータ・ファイルです。HTMLのように,そのままでWebブラウザに表示して意味のあるものではありません。データ・ファイルの内容を解析して処理しなければなりません。そのために使われるのが「XMLパーサー」と「DOM」です。

●XMLパーサーの役割

 XML文書は,テキスト・ファイルなのですから,皆さんがお得意のプログラミング言語でアプリケーションを作成し,自由に読み書きすることができます。例えば,Visual Basicを使うなら,OpenステートメントでXML文書を開き,Line Inputステートメントで1行ずつデータを読み出し,その内容を解析すればよいわけです。しかし,これはかなり面倒な作業になるはずです。

図1●妥当でないXML文書をInternet Explorer 5.xに読み込むとエラーが表示される
 Internet Explorer(IE)5.xなどのWebブラウザには,XML文書の内容を自動的に解析してくれるXMLパーサーという機能が装備されています。パーサー(parser)とは,「解析するプログラム」という意味です。XML文書をIE5.xに読み込むと,その内容が表示されますが,これはXML文書の内容が妥当であると解析されたからです。リスト1(MyFile5.xml)のような,妥当でないXML文書(整形式XML文書でないもの,またはDTDの定義とXMLインスタンスに矛盾があるもの)の場合は,エラーが表示されます(図1[拡大表示])。

 IE5.xに装備されているXMLパーサーのバージョンは,MSXML2.5です。XMLパーサーは,Webブラウザとは独立したプログラムとなっているので,後から新しいバージョンのXMLパーサーに交換することもできます。最新のXMLパーサーは,MSXML3.0であり,マイクロソフトのWebページや雑誌に添付されたCD-ROMなどから無償で入手できます。もちろん,マイクロソフト以外のメーカーもXMLパーサーを開発しています(サンマイクロシステムズのJAXPやIBMのXercesなど)。

●DOMの役割

 XMLパーサーの役割は,XML文書の妥当性を検証してくれることだけではありません。他のアプリケーションにXML文書の解析結果を渡すこともできます。そのために取り決められているAPI(Application Programming Interface:アプリケーションとのインタフェース)が,DOM(Document Object Model)です。XMLパーサーは,DOMを装備しています。DOMによって,プログラマは簡単な手順でXML文書にアクセスできるようになります。OpenステートメントやLine Inputステートメントなどを使う必要はありません。

図2●アプリケーションはDOMによってXML文書に簡単にアクセスできる
 DOMのバージョンはLevelと呼ばれ,最新版はDOM Level 2となっています。DOMは,XML文書を読み込み,その要素や属性をツリー構造(これをDOMツリーと呼ぶ)でメモリー上に格納します。個々の要素や属性は,ツリーのノード(節)となります。アプリケーションは,これらのノードを参照することで,XML文書の任意の要素や属性にアクセスできます。アプリケーションでDOMツリーを更新し,その結果をXML文書に書き戻すことができます(図2[拡大表示])。

 DOMは,W3Cが正式に公開している唯一のAPIです。DOM以外にも,多くのXMLパーサーがサポートしているAPIとしてSAX(Simple API for XML)があります。SAXは,XML文書を読み込みながら逐次処理を行い,その結果をアプリケーションに渡すので,少ないメモリー容量の環境であっても大きなXML文書を処理できます。ただし,SAXはW3Cによって開発されたものではなく,XMLの研究者のメーリング・リストから生まれたAPIです。そこでこの講座では,DOMだけを取り上げることにします。

●Visual BasicでDOMを使う

 マイクロソフトのXMLパーサーが提供するDOMは,ActiveX DLL(COMに準拠したソフトウエア・コンポーネント)となっています。したがって,オブジェクトのインスタンスを生成して,そのプロパティやメソッドを利用できるプログラミング言語であれば,DOMを使うことができます。ここでは,Visual Basicで作成されたアプリケーションからDOMを使う方法を説明しましょう。第1回で解説したように,XMLはインターネット専用というわけではありませんから,スタンドアロンのアプリケーションからDOMを使っても,まったく問題ありません。

 あらかじめリスト2(MyFile6.xml)に示したXML文書を作成し,MyFile6.xmlというファイル名で任意のディレクトリ(ここでは,C:\ITPro)に保存しておいてください。MyFile6.xmlは整形式XML文書なので,DTDは省略しています。

図3●「Microsoft XML, v3.0」に参照設定する
 Visual Basicを起動したら「プロジェクト」メニューから「参照設定」を選択し,表示される「参照設定」ダイアログボックスのリストの中から「Microsoft XML,v3.0」にチェックマークを付け[OK]ボタンをクリックします。「Microsoft XML,v3.0」は,MSXML3.0を表しています。「Microsoft XML,v3.0」の実体は,msxml3.dllというファイル名のActiveX DLLです(図3[拡大表示])。

 フォーム(Form1)の下の方に,テキストボックス(Text1)とコマンドボタン(Commnad1)を1つずつ貼り付けます。プロパティウインドウで,フォームのCaptionプロパティに「DOMのサンプルアプリケーション」と設定し,コマンドボタンのCaptionプロパティに「読み込み」と設定します。フォームのAutoRedrawプロパティは,Trueに設定してください。

 コマンドボタンをダブルクリックし,表示されるコード・エディタにリスト3に示したコードを記述します。これは,テキストボックスで指定されたXML文書を読み出し,ルートのノード名,子ノード名,及び子ノードのコンテントをフォームに表示するものです。

図4●アプリケーションの実行結果
 プログラムを実行したなら,テキストボックスに「C:\ITPro\MyFile.xml」と入力(C:\ITPro\の部分は,XML文書を保存したドライブ名とディレクトリ名にする)してから,[読み込み]ボタンをクリックしてください。XML文書の内容がフォームに表示されます(図4[拡大表示])。

●VB ScriptでDOMを使う

 Visual Basicには,HTMLファイルの中に直接プログラムを記述するVB Script(Visual Basic Scripting Edition)というエディションがあります。VB ScriptからDOMを使えば,XML文書の情報をWebページに挿入することができます。ここでは,簡単なサンプルを示しましょう。JavaScriptを使っても,同様のことができます。

 Windowsのメモ帳などのテキスト・エディタを使って,リスト4(MyFile7.htm)に示したHTMLファイルを作成し,MyFile7.htmというファイル名で保存してください。これは,先ほど作成したVisual Basicアプリケーションと同じ機能をVB Scriptで記述したものです。CreateObject関数でインスタンスを作成していることに注意してください。

図5●HTMLファイルの表示結果
 IEを起動してMyFile7.htmを読み込んだら,テキストボックスに「C:\ITPro\MyFile6.xml」と入力(C:\ITPro\の部分は,XML文書を保存したドライブ名とディレクトリ名にする)してから[読み込み]ボタンをクリックしてください。XML文書の内容がWebブラウザに表示されます(図5[拡大表示])。

 現実問題として,テキスト・エディタを使ってコツコツとXML文書を作成する必要がないのと同様に,エンドユーザーが,XMLパーサーやDOMを直接使ってプログラミングする必要などないでしょう。様々なアプリケーションや開発ツールが,たとえ内部的にXML文書を使っていたとしても,それをエンドユーザーに見せないように処理してくれるはずだからです。そういった意味で,XMLは,裏方の存在だと言えます。

 しかし,例えば企業システムにおいては,サーバー・アプリケーション同士がXMLを使ってデータをやりとりすることもあるでしょう。その際にはXMLパーサーとDOMという“裏方”を知っておくことが重要です。

 次回は,XML文書に書式情報(スタイルシート)を付加して,レイアウトされた文書としてWebブラウザに表示する方法を説明します。お楽しみに!