[XMLとオブジェクト指向]
最近、XMLが流行っています。毎月のようにどこかの雑誌で特集記事が組まれ、関連書籍も続々と出版されています。あの(?)マイクロソフトもXMLには非常に注目しているようで、InternetExplorer5ではXMLに(多かれ少なかれ)対応していますし、XMLに関連する情報も豊富に提供されているようです。我々、あたらし物好きのオブジェクト指向技術者としても、これは黙ってはいられません。というわけで突然ですが、しばらく連載で、XMLについて考えるところをまとめてみたいと思っています。異論、反論、ご意見、ご感想、どしどしお寄せいただければ幸いです。いただいた意見を反映させて、ひそかに長期連載を狙っています。(といいつつ、実際どうなるかはまだ未定です^^;)
XMLに関する一般的な話は、さまざまな記事、書籍、WWWサイト上の情報がありますから、ここで振りかえることはしないでおこうと思っています。
さて、なぜオブジェクトの広場でXMLなのかと疑問に思う方もいらっしゃるでしょう。しかし、ここで敢えて言いきってしまいましょう。XMLを考えるときにオブジェクト指向技術は不可欠であり、オブジェクト指向なしにXMLの普及はありえません。というのもXMLドキュメントの構造はまさにオブジェクトモデルそのものといえるからです。などというと、いろいろな方面から一気に反論をくらいそうですが、やはり私にはXMLドキュメントはオブジェクトデータに見えるのです。
例えば、こんなXMLドキュメントがあるとします。
<?xml version="1.0 ?> <booklist> <book> <author>(株)オージス総研</author> <title>かんたんUML</title> </book> <book> <author>アクマルチャウドリ</author> <title>事例で学ぶオブジェクトデータベース活用技法</title> </book> </booklist>
これはbookクラスのインスタンスが2個(冊)あるということを示しています。
class Book { public String author; public String title; public Book( String _author, String _title ) { author = _author; title = _title; } static void main( String[] args ) { Book b1 = new Book( "(株)オージス総研", "かんたんUML" ); Book b2 = new Book( "アクマルチャウドリ", "事例で学ぶオブジェクトデータベース活用技法" ); } }
Javaでかけばこんな具合でしょうか。 上に示したXMLドキュメントのDTDを定義するなら、次のようになるでしょう。
<!ELEMENT booklist (book)*> <!ELEMENT book (author, title)> <!ELEMENT author (#PCDATA)> <!ELEMENT title (#PCDATA)>
Javaで書いたクラス定義とDTDが非常によく似ていることがわかります。これは、非常に簡単な例ですが、XMLデータの本質的なツリー構造や、XLinkで規定されるリンクなどは、オブジェクトで素直に表現できそうです。
XMLとオブジェクト指向の関係は?
さて、非常に簡単な例で、XMLとオブジェクトモデルを比較してみました。ちょっと乱暴過ぎるように感じられたかもしれません。実は、書いている私も不安です。しかもその不安が最近どんどん増してきています。XMLドキュメントは一見オブジェクトモデルに見えるというのは上に書いたとおりですし、XMLドキュメントを処理するためのインタフェース(DOM)にもオブジェクト指向が採用されています。しかし、そもそも文書の構造化を目的としたSGMLに端を発するXMLが、オブジェクト指向技術に従属するはずがありません。少なくともオブジェクト指向のためのXMLではないし、XMLのためのオブジェクト指向でもありません。かといって、無関係とも思えない。この複雑な二人(?)の関係を解き明かすには、少し腰を落ち着けて考えてみないといけないようです。
XMLとオブジェクト指向の関わり方にはどのようなものがあるでしょうか?
ほかにもいろいろとあるような気がしていますが、まずこの三点について少し考えてみましょう。
XMLドキュメントをオブジェクト指向技術を使って処理することは、すでにごく一般的に行われています。W3C勧告のDOM(Document Object Model)はオブジェクト指向のインタフェースを提供していますし、実装の多くもIBM alphaWorksのXML4Javaに代表されるように、オブジェクト指向言語でなされています。したがって、現状XMLを処理するアプリケーションを構築するとしたら、それは自然とオブジェクト指向技術を利用したものになるでしょう。 ただし、XMLを処理するためのツール(パーサなど)がJavaで提供されているとはいえ、システム全体をどう構築していくかについての情報はほとんど公開されていないのが現状でしょう。実際にXMLシステムを構築していく際には、システム全体をどのように構築していくかという指針やフレームワークがほしいところですが、現状では試行錯誤から経験的にシステムを構築していかざるをえないのかもしれません。
二つ目のオブジェクトの表現形式としてXMLを利用するとは、上に挙げた本2冊の例のように、例えばXMLをデータベース的に使用するイメージです。あるいは、複数のシステム間でデータを交換するためのフォーマットとして利用するということもあるでしょう。XMLはECやEDIでの利用が注目されていますが、利用形態としてはこれに分類されるのでしょう。ここで、問題になるのはXMLのスキーマの問題でしょう。現状のXMLには型に関する情報が記述されませんから、例えばある要素または属性の値は整数値であるといったことは表現できません。これを解決するために、いわゆるXMLスキーマに関連する仕様がいくつかW3Cで作業ドラフトまたはテクニカルノートとして公開されていますが、仕様策定までには、まだまだ時間がかかりそうです。 また、もうひとつの問題は分散オブジェクトとの関係でしょう。XMLドキュメントを複数のシステム間を移動する分散オブジェクトと捉えることもできると思います。その場合、CORBAなど既存の分散オブジェクト技術とはどう絡んでくるのかを考えなければなりません。
三つ目は、文書設計にオブジェクト指向方法論を適用する、つまりDTD設計にOOADの手法を取り入れるというものです。オブジェクトの表現形式としてXMLを利用する場合、流通、交換するオブジェクトの定義を、あらかじめ何らかの手法に基づいて設計しておくことは重要でしょう。また、XMLアプリケーション開発にオブジェクト指向技術を適用するのであれば、そこにオブジェクト指向分析設計方法論を適用することは自然な考え方のようです。しかし、ここではどこまで適用できるのかが問題になりそうです。例えばUMLで記述したクラス図をもとにDTDを生成するようなアプリケーションが考えられますが、UMLで表現できる全ての情報をDTDに記述できるわけではありませんし、逆にDTDで定義可能な情報を、そのままUMLで記述できるわけでもありません。月並みですが、システムのどこにXMLを適用するのか、そこにはOOADが有効なのかを見極めなければ、うまくいきそうにありません。
以上、簡単にXMLとオブジェクト指向の関わりについて考えてみました。どの点においても、オブジェクト試行技術はXMLシステム構築に何らかの形で貢献できそうです。が、ではどの程度、どのように貢献できるのかについては、さらに詳しく見ていかなければならないのでしょう。
XMLセミナー開催予告
さて、突然ですが、オージス総研では8月26日(木)青山テピアホールでXMLセミナーを開催します。ここに書いた内容と直接関連するわけではありませんが、興味のある方はぜひご参加ください。詳細はオージス総研オブジェクト&ネットワークのページに掲載されています。
XML関連のセミナーは、最近かなり増えてきているのですが、オブジェクト指向という切り口でのセミナーは、これがはじめてではないでしょうか。また、実際の開発経験から、XMLシステム構築にあたってのポイントや注意点に関する招待講演も企画されています。
最後に 次回予告
今月は連載第0回ということで、なぜオブジェクトの広場でXMLを取り上げるのか、XMLとオブジェクト指向の関係についてまとめてみました。話が抽象的かつ一般的になりすぎてしまったような気がします。そこで、次回からは、実際にXMLベースのアプリケーションをどのように構築していけばいいのか、試行錯誤しながら考えていきたいと思います。その中から、さらにXMLとオブジェクト指向の関係が明らかになってくればよいと思っています。どうかお付き合いの程よろしくお願いします。
最後に、このページの内容をXML+XSLでも作成しました。IE5.0のユーザーのみとなりますが、興味のある方はこちらをご覧ください。
© 2000 OGIS-RI Co., Ltd. |
|