ObectSquare

[JavaOne 2001 Japan 特集]


スキーマコンパイラ JAXB vs. Relaxer


 このレポートでは XML のスキーマコンパイラに関する話題を取り上げたいと思います。

■ 11/28(水) TS-2456

The Java API for XML Binding (JAXB):
XML Data Binding for the Java Platform

 JAXB とは、簡単に言うと XML のスキーマ定義から Java のソースファイルを自動生成するための仕様です。簡単な例をあげると、XML データファイル

<order>
  <product>コンピュータ</product>
  <price>200000</price>
  <quantity>5</quantity>
</order>

のスキーマ定義は例えば次のようになります。

<xsd:element name="order">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="product"  type="xsd:string"/>
      <xsd:element name="price"    type="xsd:integer"/>
      <xsd:element name="quantity" type="xsd:integer"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

これから、以下のような Java のソースファイルを自動生成することができます。

public class Order {
    private String product;
    private int price;
    private int quantity;
    // ...
}

 Sun ではよく次の図を使って説明をしています。Java オブジェクトを XML ファイルに変換する操作を marshal、その逆を unmarshal と呼びます。

The Binding Framework Cycle

 現在、XML データを処理する場合 DOM や SAX などの API を利用することが多いと思いますが、スキーマコンパイラを使用することで、操作性やパフォーマンスの向上を図ることができます。なお、後で紹介する Relaxer もこのスキーマコンパイラの一種で、JAXB がスキーマ言語として XML Schema を当面のターゲットとしているのに対して、Relaxer はその名のとおりスキーマ言語に RELAX を採用しています。

 さて、私は今年2月に行われた Sun TechDays において JAXB の話を聴き、ちょうどプロジェクトで XML を使っていたこともあり興味をもっていました。その後1年弱たってどのような進捗状況かと、このセッションをのぞいてみたわけです。

 セッションの内容ですが、JAXB の概要と仕様の説明など中心でした。進捗状況としては Reference Implementation が近々出ると発言されていましたが、Sun のホームページで確認すると Early Access は既に公開されているようです。また、XML Schema の仕様はかなり膨大ですが、JAXB も完全に対応しているわけではなく、complexType の継承など未対応な部分がいくつかあるとのことです。

≪関連 URL≫


■ 11/29(木) BOF-40

Relaxer による Java/XML 統合技術-スキーマコンパイラの未来を探る

 BOF とは「諺の Birds Of a Feather (flock together) ─ 類は友を呼ぶ ─ から転じたことばで、ある事柄に関心を持つ人々が自発的に集まる集会のこと」(IAJ Java 部会 WG/BOF ページ より) だそうです。

 この BOF のスピーカーは「じゃばじゃば」で有名な浅海智晴さん、Relaxer の作者の方です。今月号の「OO エンジニアの輪」にもご登場願っているので、そちらもぜひご覧ください。私自身は、技術評論社の「XML PRESS Vol.1」で RELAX と Relaxer を知り、その際少しばかり Relaxer もさわったことがありました。

 さて、先ほども書きましたが、Relaxer はスキーマ言語として RELAX を採用しています。浅海さんによると、JAXB & XML Schema と比較して、シンプルであること、「生垣オートマトン」という数学理論による裏づけがあることがメリットとのことです。実装のほうも JAXB よりかなり先行していて、通常の Java クラスを生成するだけでなく、CDL (Component Definition Language) というものを使って、各種コンポーネント (JDBC、RMI、RMI/IIOP、EJB、SOAP など) も自動生成できるそうです。

 また、「スキーマコンパイラを、単なる Data Binding ではなく、プロセス統合まで視野に入れたより大きな概念でとらえている」という発言が印象に残りました。RELAX/Relaxer 中心に開発プロセスまで作ってしまおうという構想らしいです。この辺りの話は最近刊行された次の著書に詳しく書かれているようです。

浅海 智晴「Relaxer - Java/XML による Web システム開発」(ピアソン)

≪関連 URL≫


■ まとめ

 今後、XML が普及するのにしたがって、「スキーマコンパイラ」というのは要注目な技術になるとおもいます。普段オブジェクト指向で開発を行っているため、個人的には RELAX より XML Schema の方が親近感を覚えるのですが、こと自動化のような話になると、シンプルかつ数学的裏づけのある RELAX の方に優位性があることも事実です。今後、JAXB がどの程度 XML Schema に対応できるかわかりませんが、もし完全に対応したとしても、今度は逆に JAXB が膨大で理解しがたいものにならないか多少の危惧も覚えます。

 さて、昨今パラメータファイルやシステム間のインタフェースを XML 化することが多くなってきましたが、Relaxer の技術はかなり魅力的なものに感じられました。インタフェースをスキーマ言語で定義し、操作のための Java クラスが自動生成できれば、だいぶ手間を省くことができます。ただ、浅海さんも指摘されていましたが、生垣オートマトン理論とオブジェクト指向には多少のギャップがあります。「スキーマ定義 → Java 言語」の対応は Relaxer ではほぼ解決されたようですが、分析作業をオブジェクト指向で行った場合、「分析モデル → スキーマ定義」の変換を行う必要があります。浅海さんも UML には注目されているようですが、この辺りの方法論も確立していく必要性を感じました。

≪関連 URL≫

(株)オージス総研
伊藤 喜一

© 2001 OGIS-RI Co., Ltd.
Index
Index