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のツール群 |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|