技術者のためのXML再入門(3):XMLのリンクとジャンプ、APIHTMLの最大の特徴は、インターネットの中を自在にサーフィンできる「ハイパーリンク」機能だといってもいいだろう。この特徴は、XMLにもしっかりと埋め込まれている。HTMLのハイパーリンクよりもさらに強力な表現が可能だ。今回はそのXMLのリンク機能のほかに、APIや電子署名など、引き続きXMLを「動かす」ために必要な機能についての解説を続ける。});前回に続き、XMLを実際に「動かす」ための関連技術を解説する。今回は、XMLデータを相互に結び付ける技術や、アプリケーションからXMLを操作する技術などを紹介する。XMLデータ同士のリンク関係を記述する技術HTMLでは、アンカー要素(A要素)を使って、Webページの特定の文字列や画像をクリックすると別の場所へ飛んで行く「ハイパーリンク」を記述する(リスト1)。XMLでも、このリンク機能を表現できるが、HTMLよりはるかに強力な機能を記述できる。Language)だ。リンクを張る対象を総称してリソース(Resource)と呼ぶ。XLinkは、これらリソ−ス間に張られたリンク関係を記述するための言語だ。link)の2つに大別できる。単純リンクとは、1つのリソースからもう1つのリソースへ一方通行で張られたリンクだ(図1)。これは、HTMLで普通に使っているハイパーリンクと似ている。XLinkによる単純リンクは、一方通行XLinkは、複数のリソースに向かって張られるリンクも記述できる。HTMLのハイパーリンクのように一方通行だけではなく、双方向に張られたリンクも記述できる。このリンクのことをXLinkでは拡張リンクと呼んでいる(図2)。XLinkの拡張リンクでは、双方向や複数のソースへのリンクも記述可能XLinkは、リンクに付加的な属性を付けて、リソースやリンクに意味付けができる。人が読んで理解できるように、リンクに名前や説明などのタイトルを付けられる。アプリケーションが理解できるように、リンクやリソースの種類、あるいはリンク元リソースからリンク先リソースを見たときのリンク先の役割(図3)などを記述できる。リンク先に飛ぶとき、新しいウィンドウが開かれるのか、それとも元のウィンドウに新しい内容が表示されるのか、などのリンクの振る舞いも指定できる。リンク元リソースから見るとリンク先リソースには役割があるさらに、HTMLの場合、アンカー要素を埋め込んでリンク元を指定したが、XLinkはリンク関係を別のXMLファイルに記述しておける。従って、リンクが張られるリソースに手を加えることなく、リンクを張ることができる(図4)。リソースとは別のファイルにリンク関係を記述できるここまでの説明で、XLinkは、HTMLのアンカー要素よりはるかに表現力に富むリンク記述言語だとご理解いただけたと思う。XLinkは、2001年6月にW3Cの勧告になっている。XPointerXLinkがリンクの関係を表現する言語であるのに対し、XPointerは、リンクを張る対象を詳細に特定するための言語だ。XPointerを使えば、リンク先として、XMLデータのファイル全体を指定したり、識別子(id属性など)が付いた要素を指定したりできるだけでなく、同じ要素が順番に並んでいるときのm番目(mは自然数)という指定や、要素内容であるテキストデータのn番目の文字(nは自然数)という指定まで行える(図5)。XPointerを使えば、詳細な指定ができるなお、XPointerは、本稿執筆段階(2001年10月)でドラフト段階なので、仕様の変更に注意する必要がある。BaseXLinkは、リンクを張るリソースをURIで指定できるが、毎回、“http://www.atmarkit/fxml/rensai/rexml01/rexml01.html”のように長々と指定するのは煩雑だ。基準となるURIを1つ指定しておき(例えば“http://www.atmarkit/fxml/rensai/rexml01/”)、それ以外は基準となるURIから見た相対的な指定(例えば“rexml01.html”)にすれば、簡潔に表記できる。Baseという規格で定められている。URI)と呼んでいる。基底URIと相対URIの例を以下に示す。new”という文字列から“new.xml”というXMLデータのファイルに単純リンクが張られていることを記述している。ここで“new.xml”という指定は、相対URIでの指定だ。基底URIは、doc要素のxml:base属性で指定されている。この場合は、“http://example.org/today/”だ。従って、この単純リンクのリンク先のURIを厳密に指定すると、“http://example.org/today/new.xml”になるはずだ。Baseは、2001年6月にW3Cの勧告となっている。Interface)も、XMLを「動かす」うえで必須の技術だ。APIが標準化されていれば、同じ開発手法をさまざまな環境で使えるので、開発効率を向上できる。XMLのためのAPIとして標準化されているDOMとSAXを以下に説明する。Model)とは、W3Cが制定したXMLのためのAPI規格だ。DOMの規格は、次の2つに大別できる。XMLのオブジェクトモデルオブジェクトモデルを使ってXMLデータにアクセスするためのインターフェイスXMLプロセッサは、DOMの機能も実装しているのが普通だ(それ以外に、XMLデータの正しさをチェックする、などいくつかの機能を備えているのが一般的)。XMLプロセッサは、たいていファイルとして存在しているXMLデータを一気に読み込み、それをDOM規格が定めたオブジェクトモデルに従うオブジェクトにしてメモリ上に展開する。Tree)と呼ばれる。アプリケーションは、DOM規格が定めたインターフェイスを使って、メモリ上のDOMツリーにアクセスする(図6)。DOMを使ってXMLデータを操作するDOMでプログラムを書くと、どのプログラミング言語でも同じインターフェイスを使用できる。アクセスされるDOMツリーの各オブジェクトは、どんなOS上でも、どんなプログラミング言語を用いても同じ構造だ。従って、APIとしてDOMを採用すれば、特定のプログラミング言語にも特定のプラットフォームにも依存しないアプリケーション開発ができる。SAXDOMは、XMLデータ全体をメモリ上に展開してからツリーを操作するやり方だ。従って、XMLのデータ構造を大きく変更する処理なら、DOMの使用は有効だ。大きなデータを読み込む場合、メモリ上に展開する際のオーバーヘッドやメモリの消費量が大きな足かせになる。そこで、XMLの比較的簡単な処理のために、もっとシステムにかかる負担の少ないAPIが開発された。DOMがW3Cで定められたAPIなのに対し、SAXはXML開発者たちがメーリングリストで議論を重ねて開発したAPIだ。SAXは、一言でいうとイベント駆動型のAPIだ。SAXを実装したXMLプロセッサは、XMLデータを解析しながら、「要素の始まり」や「要素の終わり」などのイベントが発生するたびにアプリケーションに通知する。アプリケーションは、受け取ったイベントに応じて必要な処理を行う(図7)。SAXを使ってXMLデータを操作する現在、SAXの最新バージョンは2.0だ。バージョン1.0とバージョン2.0とではSAXの仕様が大きく異なるので、バージョン2.0のSAXを特にSAX2と呼ぶ。そのほかのXML関連技術XML関連技術は、ここまでで述べたもの以外にも数多くあるが、主に電子商取引に不可欠な技術について、いくつか説明しておこう。電子署名インターネット上で電子商取引を行う場合、送られてきた商取引データが確かに取引先が作成したものかどうか、途中で改ざんされていないかどうか、を確認することが必要だ。そのため、紙ベースの書類の署名・押印に相当する電子署名を、やりとりするXMLデータに付与する。Signatureと呼ぶ。「電子的に署名する」とは具体的にいうと、送信者しか知らないカギと定められたアルゴリズムによって、送信する電子文書のバイナリデータから値を計算し、その計算値を電子署名として電子文書に付与するということだ。Signatureという規格は、XMLデータに添付される電子署名の値や電子署名を計算するのに使ったアルゴリズムなどの情報を記述するフォーマットを定めている。電子署名がXMLデータのビット列を基に計算されるということは、すなわち論理的な内容がまったく同一であっても、表現にささいな違いが生じるだけでXMLデータのビット列が変わり、電子署名のための計算結果が異なってくるということだ。次の2つの顧客データを比較していただきたい。顧客データその2両者は、意味のうえではまったく同一だが、customer要素の属性の出現順や要素内容のないe-mail要素の表現の仕方が異なっている。すると当然、これに付与されるべき電子署名の値も異なる。送信された顧客データは、いくつかのアプリケーションによる処理を経て送付先に届けられることになるだろうが、もしXMLデータの解析・再生成を繰り返している過程で上のような表現上の差異が1つでも生じてしまうと、付与された電子署名の値はまったく使えなくなってしまう。論理的に同一のXMLデータなら必ず同じ結果になるような書き方のルールを定めておき、必ずそのルールに従って正規化してから電子署名を生成するようにすれば、また受信したXMLデータは同じルールで正規化してから電子署名の妥当性を評価すれば、この問題を解決できる。XMLという規格でこのルールを標準化している。XMLは勧告の段階まで規格化が進んでいる。Encryptionは、まだドラフト段階だ。XMLのための照会言語インターネットおよびXMLの普及によって、Web上に存在する膨大、かつさまざまなデータが、XMLというインターフェイスでアクセスできるようになってきた(図8)。そこで、Webを巨大なデータベースに見立て、あたかもデータベースを照会するかのようにXMLデータを取り出し、しかも望みのツリー構造に組み立てられる照会言語が求められている。Language)だ。Florescu)が提案したQuiltだ。Quiltは、これまでの照会言語の長所をパッチワークのように組み合わせることによって、マニュアルのような文書データや電子商取引データ、さらにデータベース上のデータなど、多様なXMLデータを扱うために設計された。XQueryは、この設計思想を受け継いでいる。W3Cが定めたXML照会言語の要求仕様によると、XMLの照会言語には(1)人が容易に読み書きできる、(2)XML形式である、の2つが求められて、それぞれの要求を満たす複数の文法があってもよいことになっている。Language)に似た可読性の高い言語だ。(2)の要求仕様に基づく言語はXQueryXと呼ばれ、XQueryをXML形式に書き直したものだ。本稿執筆段階でXQueryは、まだドラフト段階の規格だが、今後、広く使われる可能性がある。プロトタイプレベルの実装なら、ソフトウェアAG社やマイクロソフト社などが公開している。Demo」では、サンプルXMLデータの照会をGUI環境で行える。XQueryの仕様を学習するのに便利だ。今回のまとめ:XMLを動かす技術2回にわたってXMLを「動かす」ための主な関連技術を説明した。それぞれの技術がどういうものか、イメージを持っていただけただろうか。今回でXMLの全体像の説明は終了し、次回からXMLの文法の解説に入る。XMLの実際の書き方を学ぶことにしよう。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。