ObjectSquare

[新・XMLとオブジェクト指向]


新・XMLとオブジェクト指向

連載第2回

XMLに対する検索

大場克哉

(oba@ogis-international.com)

1. はじめに

 みなさん、こんにちは。8月号から始まった「新・XMLとオブジェクト指向」、実は二人で交互に書いていこうとしています。毎回、前回の話題を踏まえた上で、異なった視点から話を展開していければと考えているのですが、うまくいきますかどうか?

 さて、先月は「XMLの貯め方」ということでした。XMLの構造上の特性をもとに、ファイルによる管理、リレーショナルデータベース(RDB)による管理、オブジェクト指向データベース(ODB)による管理を比較しまたした。XMLの構造をそのまま格納するのであればODBが向いており、その他XMLの使用目的に応じて、使い分けましょうということだったと思います。

 ところで、DBMSによるデータ管理の目的のひとつに、管理対象オブジェクトをいかに高速に検索するかということがあげられます。XMLは、データ構造がODB向きだということですが、では、XMLをODBに格納してしまえば、それだけで検索に関する問題も解決するのでしょうか?私の印象では、たしかにODBによるデータナビゲーションは高速ですから、DOM APIを通じてのXMLアクセスには非常に適しているように感じられます。しかし、XML以外のデータとの連携はどのように実現するのかとなると、疑問が出てくるのです。

 今月は、こういう観点からXMLに対する検索の特性と、それを実現するためにDB側で必要な機能およびアプリケーションレベルで実現可能なことは何か?ということを考えていきたいと思います。

 なお、原稿はXMLで記述しています。ブラウザにIE5.0+MSXML3をお使いの方は、こちらでもご覧いただけます。

注) MSXML3は次の方法でインストールできます。 まず、こちらのMicrosoftサイトの、コンテンツリストから"XML Parser Beta Release, July 2000"を選択して、msxmlwr.exeをダウンロードしてください。 次に、msxmlwr.exeを実行、終了したら%SystemRoot%\System32\xmlinst.exeを実行してください。

2. XMLに対する検索

 XMLに対する問い合わせ言語に関しては、XQLXML-QLなどが提案されています。そして先月(2000年8月15日)、W3CのXML Query Working Groupから、「XML Query Requirements」というワーキングドラフトが提出されました。XML Query Working Groupは、XMLドキュメントのデータモデル、データモデルに対する問い合わせ処理、それに基づいた問い合わせ言語を策定することを目標にしており、「XML Query Requirements」では、XMLデータモデルや、問い合わせ言語に要求される機能などが記述されています。

 この文書の第2章「Usage Scenarios」には、XMLに対する検索シナリオが9種類、ごく簡単にあげられています。詳細はご覧いただくとして、これをながめると、XMLに対する検索、問い合わせには従来のRDBやODBに対する検索とは異なる部分が存在することがわかります。そのうちのいくつかを簡単に紹介しておきます。

XMLが構造化文書を越えて、データ管理フォーマットとしても使われることから、文書指向とデータ指向のありとあらゆる検索がXMLに対して行われることになります。

 はたしてこれを実現できるような環境は存在するのでしょうか?世の中には、全文検索エンジンなど、文書指向の検索をかなりの程度まで実現してくれるものもあります。また、RDB、ODBは逆にデータ指向の検索について、それぞれ非常に豊富な機能を実現してきました。しかし、いま、XMLを活用していくにあたって求められているのは、これらの融合とも言えるものであり、単一の枠組みの中で全てを実現するのは難しいのかもしれません。

3. XMLとその他のデータオブジェクトとの関連

 XML文書間、あるいはその要素間の関連については、2000年7月3日にCandidate RecommendationになりましたXML Linking Language (XLink)があります。ここでは、XML文書の外部から、複数のXML文書やその他リソースへのリンクを定義することができます。

 この仕様のベースにある考え方は、実際のアプリケーションの構築にあたってとても重要なものだと思われます。おそらく実際のシステムでは、XML文書だけではなく、その他のデータソースで管理されるデータやオブジェクトも相手にしなければならないからです。たとえば、あるオブジェクトから、あるXML文書、または部分への関連を管理したくなるかもしれません。逆にXML文書から、外部のオブジェクトへの関連を定義したくなるかもしれません。さらに、これらの関連は必ずしも事前に定義できるわけではなくアプリケーションから動的に定義されることになるかもしれません。

 XLinkはXML文書間、あるいはXML文書と他のリソース(URI)間のリンクを定義するものですが、このようなアプリケーションの場合、XLinkが定義するような機能が、さらに広い範囲のリソースやデータに対して必要になります。そこでは、もちろん、「XML Query Requirements」にもあった、さまざまな問い合わせ機能も必要になるでしょう。

 ところが、これを実現しようとすると、また問題にあたります。多くのXML関連仕様が策定中、また関連ツールが進化中という現状では、どこまでの機能を必要とするのか、またどこまでの機能を既存の製品やツールでまかない、どの部分を自分で実装すべきなのでしょうか。また、XMLだけで解決できない部分とのつなぎをどのように実現していくべきなのでしょうか。

 まず、XMLとそれ以外のデータでのシステムにおける位置付けや重みについて考えてみることが必要でしょう。一言で言えば、XMLに重きがおかれるのであれば、XMLを中心に考えていけばよいし、逆ならば従来どおりの考え方でデータベースやその他のツールを選んでいけばよいということになります。しかし、たいていの場合はそれほど簡単ではありません。ある部分にはXMLは必要不可欠だし、その他の部分では従来のデータベースで管理されているオブジェクトが重要であるし、もちろんそのつなぎも・・・というのがほとんどだと思います。

 このような場合には、XMLで管理すべきデータと、それ以外のデータを明確にし、それぞれの管理方式と、つなぎのための統合方式を決定しなければなりません。具体的には、XMLを管理しているデータベースと、それ以外のオブジェクトを管理しているデータベースが異なる場合には、この2つの関連を管理するための仕組みを実現し、それぞれのデータベースが提供している検索方法を使用して、その関連のナビゲーションを実現することになります。また統合にあたっては、XMLとその他の既存データベースで管理されているデータ、また既存アプリケーションなどを抽象化してモデル化していくことが必要になります。ちなみに、このようなアプローチはEAIなどでも行われているようです。なお、これを実現する際には、管理場所が分散する分、その参照整合性を維持するコストがかかることを忘れてはいけません。

 もし、運良く、XMLもそれ以外のオブジェクトも、どちらも新規データベースを構築していくということであれば、できることなら一つの枠組みの中で管理していきたいものです。この場合は、データベースの提供しているXML対応ライブラリを使用しつつ、それと通常のオブジェクトとのつなぎ部分を実装するという形でしょうか。

 このとき、ODBの「関連」の機能を使うと、うまく実現できるかもしれません。まず、XMLは、先月の話どおりDOMのイメージでODBに格納します。


そして、通常のオブジェクトと、DOMノードとの間に、必要に応じて関連を定義するのです。ODBは、関連のトラバースについては、非常に高速に行えますので、このつなぎによる速度性能上のオーバーヘッドは最小に押さえられます。これによって、たとえば、アプリケーションで処理中のオブジェクトから、それに関連するXML文書に高速にアクセスしたり、その逆を行ったりということが可能になります。うまく実現すれば、XMLとその他のオブジェクトを巧みにあやつる面白いシステムになるのではないでしょうか。

 これをRDBで実現する場合はどうなるか?など、さらに考えてみると面白そうです。

4. では、次は?

 このようにXMLを使った実装を考えていくと、行き着く先は「では、どのデータをXMLで管理したらいいの?」ということになってきそうな気がします。私がXMLに出会ってからずっと抱えているテーマですし、それなりに指針らしきものもできてきたのではないかと思っているのですが、まあゆっくりと寄り道でもしながら連載を続けていければと思っています。

© 2000 OGIS-RI Co., Ltd.
Prev. Index Next
Prev. Index Next