XML関連Javaテクノロジーの現在

【前編】 Java XML PackのAPI群

Xalan、Cocoon、Apache SOAP、JAXP、JAXB……このどれもがXMLに対応したJavaのツールやAPIの名前だ。XMLに対応したJavaのAPIや実装は、いまや数多くある。これらはそれぞれどんな特徴を持ち、どのような用途に適しているのか。使うときの注意点はなにか。本記事ではそうした情報をまとめて解説する。

原田洋子
フォーディーネットワークス(株)
2001/12/22

 Java関連のXML注目サイト

 近年、XML関連の仕様やツールがJavaで実装されるケースが増えてきた。ところが相変わらずJavaはJava 2 SDK(JDK)をはじめAPIのバージョンアップサイクルが短く、それらをベースにするXML関連APIを使う場合にも、その動向に無関心ではいられない。加えて、XML関連のAPIやツールも多くのバリエーションとバージョンが増えてきた。

 こうした中で、JavaのツールやAPIを利用してXMLを操作するプログラムを開発しようと思っても、何が適切なのかを判断することが難しくなってきており、しかも組み合わせによってはうまく動かない、動作させるためにアーカイブの名前を変えて先にクラスがロードされるようにしなければならない、などの問題も出てきた。特にCocoonやSOAPなどサーブレットを使った実装により、サーバサイドで動作させる場合にやっかいな問題となることが多い。

 そこで本記事では、JavaによるXML関連ツールにはどのようなものがあり、何に注意して利用していけばいいかを解説する。

オフィシャルサイトとXMLのメジャーサイト

 JavaによるXML関連API/ツールはさまざまな個人、団体が開発を行っているが、特に注目したいのは次の2サイトである。

  • Java Technology and XML
    サン・マイクロシステムズによるJavaのオフィシャルサイト内にある、XMLのページ。
  • Apache XML Project
    Apache Software Foundationによる、Apache XMLプロジェクトのページ。

左がサン・マイクロシステムズのJava Technology and XMLのページ。右がApache XMLプロジェクトのページ

 1つ目の「Java Technology and XML」は、サン・マイクロシステムズが提供するAPI/ツールの情報提供および配布サイトであり、Javaの世界ではオフィシャルサイトである。ここではXMLプロセッサ(JAXP)やSOAPの実装(JAXM)、データバインディング(JAXB)など、JCP(Java Community Process)で策定されたJSR(Java Specification Requests)に従った実装が配布されている。

 ただし、ファイナルバージョンがリリースされるまでのEarly Access版は通常、JDC(The Java Developer Connection)で配布される。JDC からダウンロードする際には無償であるがユーザー登録が必要である。

 2つ目の「Apache XML Project」は、Apache Software FoundationのXMLプロジェクトとして開発されたAPI/ツールの情報提供および配布サイトである。ここにはIBMが開発を進めてきたXMLプロセッサである「XML for Java」(XML4J)の後継である「Xerces」や、XSLTプロセッサの「Xalan」をはじめ、「Apache SOAP」、サン・マイクロシステムズがこのプロジェクトに提供したXMLプロセッサ「Crimson」があり、さらに「Batik」(SVG)、サーバサイド変換ツールの「Cocoon」などがある。これらはApache のライセンスに従って配布されるので、商用目的での使用も問題はない。

 また、サン・マイクロシステムズのサイトにあるツールはどれもJavaによる実装だけだが、 Apacheでは言語を限定していないため、CやPerlのAPIやXMLツールの実装も提供されている。

この2つを押さえておけば大丈夫

 XML分野ではApacheのXMLプロジェクトの方が主要な位置にあるが、JavaによるAPI/ツールに限ってみるとやはりサン・マイクロシステムズのサイトを見逃すわけにはいかない。今後、Java2 SDK(JDK)にサン・マイクロシステムズによるXMLプロセッサなどの実装が組み込まれる予定があることからも、Javaエンジニアにとっては動向に注目していきたいサイトである。

 JavaのXML関連APIやツールの動向は、この2つのWebサイトで主要なものの情報は押さえることができる。では、この2つのサイトで提供される主なAPI/ツールの詳細について見てみよう。

 Java Technology and XML -- http://java.sun.com/xml/

 現在、JavaのXML関連APIとしては、下記の5種類が紹介されており、その一部が実装されている。

  • JAXP(Java API for XML Processing)
    XML文書のパーサとXSLTのためのAPI

  • JAXM(Java API for XML Messaging)
    SOAPの機能を提供するメッセージ送受信用のAPI

  • JAXB(Java Architecture for XML Binding)
    XMLとJavaのオブジェクトマッピングを行う

  • JAXR(Java API for XML Registries)
    UDDIのようなXMLレジストリへアクセスするためのAPI

  • JAX-RPC(Java API for XML-Based RPC)
    SOAPをベースにしたWebサービスを構築するためのAPI

 これまで、XML関連のAPIの実装は個別にダウンロードして利用する形態であったが、2001年11月20日以降、「Java XML Pack」というネーミングで、ダウンロード可能なAPIすべての実装が1つのアーカイブにまとめられることになった。その最初のリリース、Fall 01 Bundleには、JAXP 1.1.3とJAXM 1.0のみが同梱されているが、将来的には上記の5APIすべてが同梱される予定となっている。

 これまで、複数のAPIをダウンロードするとそれぞれにXMLプロセッサが含まれていたため、開発者は複数のXMLプロセッサを重複して持つことになっていたが、1つのアーカイブにまとめられたことにより、そのような問題はなくなった。それぞれを見ていこう。

JAXP(Java API for XML Processing)

 JAXPは、図1に示すようにXML文書のパースと、XSLTによる変換を行うためのAPIである。XSLT変換APIは「TrAX(Transformation API for XML)」 という名前が付けられている。

図1 JAXPの機能。XML文書のパースと、XSLT変換の機能を備える

 JAXP 1.1.3はXML 1.0、XML Namespaces、SAX 2、DOM Level 2、XSLT 1.0 の実装であるが、XML文書のパース部分をCrimsonが、XSLT変換部分をXalanが担当するという2構成になっている。

 CrimsonはApache Software Foundationに提供されたXMLプロセッサ(もしくはXMLパーサ)である。org.w3c.dom や org.xml.sax, org.xml.sax.*パッケージといったXMLプロ セッサの基本部分と、JAXPの仕様で定義されている範囲(TrAX を除く)のみの実装を提供している。このため、小さなAPIとなっている。

 これまではcrimson.jar、jaxp.jar、xalan.jarの3アーカイブが提供されていたが、Java XML Pack 以来、crimson.jar, xalan.jar の2アーカイブに統合された。本来“JAXP”という名称はAPIを指すものであり実装とは違うものであるが、このサイトではCrimsonやXalanという名称を使わずに、実装もJAXPと呼んでいる。同様に“JAXP 1.1”についてもJSR-63の仕様を意味している場合と、実装のバージョンを意味する場合があるので注意が必要だ。

 J2EE(Java 2 Platform, Enterprise Edition) 1.3 を構成するAPI群の1つにJAXP 1.1 が採用されているが、これはJ2EEにJSR-63という仕様に従ったXMLプロセッサの実装を組み込むことを意味している。J2SE(Java 2 Platform, Standard Edition) 1.4も同様にJAXP 1.1が取り込まれているが、おそらくAPIのみで実装がないのでは不便という理由で、J2SE 1.4 beta 3にはCrimsonとXalanが含まれて配布されている。

 今後、Java2 SDK(JDK)にJAXPが含まれることを考慮すると、CrimsonはJAXP の仕様で決められているAPIのみのプログラミングでは使いやすいXMLプロセッサだといえるだろう。

JAXM(Java API for XML Messaging)

 JAXMはXMLメッセージの送受信を行うためのAPIであり、実装はSOAP(Simple Object Access Protocol) 1.1 の機能を提供している。JavaのAPIについてはJSR-67で仕様が決められている。これまでEarly Access 版のみが提供されていたが、最近JAXM 1.0がリリースされ、Java XML Packに同梱された。実装の正式版がリリースされて間もないこともあり、次回紹介するApache SOAPに比べてユーザー数が少ないのが現状である。

JAXB(Java Architecture for XML Binding)

 JAXBは図2に示すようにXMLとJava間でオブジェクトマッピングを行うデータバインディングAPIであり、仕様はJSR-31にある。XML文書のデータ構造をJavaのオブジェクトとしてマッピングすることで、JavaプログラムからXML文書へのアクセスが容易になり、プログラムの開発効率や見通しが非常に良くなる。

 現在、実装はEarly Access版のみで、対応しているスキーマ言語もDTDのみである。しかし将来的にはXML SchemaとRELAX NGをサポートする予定となっている。ただし、RELAX NGについてはすでにRELAXERがあり、JSR-31をサポートしてはいないながらもJAXBに比べるとRELAXERの方が完成度も高い。今後のRELAX NGによるデータバインディングとJAXBの関連についての動向が気になるところだ。

図2 JAXB の機能。XML文書のデータ構造を、Javaのオブジェクトにマッピングするため、Javaから自然な形でXML文書へアクセスできる

JAXR(Java API for XML Registries)

 JAXRは、さまざまなXMLレジストリに対してアクセスするためのAPIである。XMLレジストリとは、ビジネスパートナーを探すときなどにアクセスする企業の一覧サイトである。UDDIや、ebXMLレジストリ用などが現在開発中とされている。

JAX-RPC(Java API for XML-Based RPC)

 JAX-RPCは、SOAP 1.1を利用したRPCを実現することで、Webサービスの構築を容易に行えるようにするAPIだ。


 前述したように、ここで紹介したAPIのうち、現在実装されてJava XML Packに含まれているのは、JAXPとJAXMの2つである。サン・マイクロシステムズによると、Java XML Packは3カ月ごとにアップデートされていく予定なので、ほかのAPIもアップデートのタイミングで徐々にアーカイブに含まれていくことだろう。

 後編では、Apache XML Projectで提供されているツールを見ていこう。

  後編〜Apache XML Projectのツール群

Index
XML関連Javaテクノロジーの現在
  前編〜Java XML PackのAPI群
後編〜Apache XML Projectのツール群


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間