連載 役に立つXMLツール集(4)
Relaxerでデータバインディングに挑戦しよう
XMLプログラミングでは、DOMやSAXといったAPIを使用すると単調なコードを繰り返し書くことになり生産性が上がらないものだ。本連載では開発者が“楽をする”ために役立つXML関連ツールを紹介していく。(編集局) |
www.netpotlet.com
原田洋子
2004/2/4
主な内容 Relaxerの概要 Relaxerの入手とセットアップ 開発手順 スキーマの作成 スキーマのコンパイル 読み込みアプリケーションの作成 読み込みアプリケーションの実行 文書操作アプリケーションの作成 文書操作アプリケーションの実行 まとめ&サンプル・ダウンロード |
前回のCastorはいかがだったでしょうか。数あるツールのほとんどが輸入モノという昨今ですが、今回取り上げるデータバインディングツールは日本発の技術、Relaxerです。
Relaxerは浅海智晴氏が開発したデータバインディングツールで、前回のCastor同様、オープンソース、無償で利用できるツールです。日本発のツールなので、日本語の資料や情報が充実していて、わざわざ英語のドキュメントを読む必要はありません。例えば、@ITにも「Relaxerで実現するJava開発の新プロセス」という、開発者である浅海氏の記事がありますが、このほか、メーリングリストや書籍、技術資料なども日本語で大丈夫です。
Relaxerはデータバインディングツールとしての機能であるXML/オブジェクト間のモデルマッピングを行うばかりではなく、オブジェクト指向の世界ではおなじみのデザインパターンのうち、いくつかのパターンを構成するクラスを自動生成する機能もあります。また、Castorにも同様の機能はありますが、RelaxerにもデータベースへアクセスするためのO/Rマッピング機能もあります。
このように、日本語でよい、機能が豊富といった理由から国内にはかなりの利用者がいるツールがRelaxerです。
Relaxerが対象にしているスキーマ言語はRELAX Core/RELAX NGが基本 注 ですが、DTDにも対応しています。また、定義のないXMLインスタンスからもオブジェクトへマッピングできるようになっています。オプションを指定すると、マッピング時にRELAX NGやクラス定義からDTDを自動生成してくれるので、DTDから移行したばかりでも想定どおりの文書定義になったかどうかをチェックできます。
※注 現在RELAXにはRELAX Core(リラックスコア)とRELAX NG(リラクシング)という2種類のスキーマ言語があります。RELAX Coreは1つ前の世代に当たるもので、基本機能を提供しています。その後、OASISで標準化が行われていたTREX(Tree Regular Expressions for XML)と統合され、新たにOASISで標準化が進められることになったのがRELAX NGです。RELAX NGは2003年にISO国際標準規格として正式に認められました。 いまでは、RELAX NGで文書定義を行うのが一般的です。なお、RELAX NG日本語チュートリアルがありますので参考にしてください。 |
RelaxerはCastor同様、独自APIが採用されているのみで、データバインディングのための標準APIであるJAXB仕様には直接対応していません。ただし、JAXBへのマッピング機能があるので、RelaxerからJAXB APIを使えます。
では、今回も実際に動かしてみましょう。JAXB、Castorとの違いを理解しやすくするため、前回と同じサンプルを使います。本記事のプログラムは
- J2SDK 1.4.1_06
- Relaxer 1.1b(20040203)
- Eclipse 2.1.2/2.1.x Translations
を使用し、Linux上で動作を確認しています。
Relaxerは次のURLからダウンロードできます。
2004年1月時点で最新のリリース版は1.0ですが、このバージョンにはやや不具合があったため、本記事は1.1b(20040203)を使って動作を確認しました。
Relaxerは単体で実行できるアーカイブのほか、Relaxer Eclipseプラグインもリリースされています。それぞれ、インストールは次のように行います。
Relaxer単体のインストール
http://www.relaxer.org/download/beta.zipを入手したら、アーカイブを適当なディレクトリで展開します。展開したディレクトリにsetupクラスがあるので、これを実行してインストールします。
# mkdir tmp |
コンソール1 単体のインストール例(黄字は入力個所、↓はリターンです。) |
Relaxer Eclipseプラグインのインストール
プラグインのインストール方法は更新マネージャを利用してインストールするか、org.relaxer.eclipse_0.1.0.jarをダウンロードして、pluginディレクトリに展開するかのどちらかでインストールします。
※ Eclipseの詳細には触れませんので、@ITのEclipse関連記事などを参照してください。また、第2回で紹介したJAXBの記事に掲載している操作画面も参考にしてください。 |
更新マネージャを利用する場合、Eclipseを起動し次のようにします。
1. ヘルプ → ソフトウェア更新 → 更新マネージャ(画面) →
フィーチャーの更新 → 右クリック → 新規 →
サイト・ブックマーク(画面) →
新規更新サイト・ブックマーク(画面)
名前:RelaxerPlugin
URL:http://www.relaxer.org/eclipse/site/
ブックマーク・タイプ:Eclipse更新サイト
→ 終了
2. フィーチャーの更新 → Relaxer Feature 0.1.0 選択(画面)
→ プレビュー の「すぐにインストール」をクリック
→ フィーチャー・インストール(画面) →
次へ
→ フィーチャー・ライセンス
→ 「使用条件の条項に同意します」をチェック(画面)
→ 次へ → インストール・ロケーション → 終了 → フィーチャーの検査
→ インストール → Eclipse再起動
アーカイブをダウンロードした場合は次のようにします。
# cd /usr/local/eclipse/plugin |
コンソール2 Eclipseプラグインのインストール例(黄字は入力個所です) |
以上でインストール作業は終わりです。インストールされたRelaxerのバージョンを確認したい場合は次のようにします。
ウィンドウ → 設定 → Relaxer 注 (画面)
※注 メモリ容量が少ないなど、非力なマシンで動かす場合、Eclipseが落ちやすいので、ここで表示されるウィンドウでFull build、Auto build、Increment buildの3つをfalseに指定するといいでしょう。falseを指定した場合、ビルドはパッケージごとに手動で行います。 |
Eclipseのセットアップ
インストールできたら、アプリケーション作成の準備やRelaxerによるソースコードの生成/コンパイルが自動的に実行されるようにする設定を行います。
1. Javaプロジェクト(gulf)の作成
ファイル → 新規 → プロジェクト → Java(左ペイン) →
Java プロジェクト(右ペイン) → 次へ → プロジェクト名(gulf) → 終了
2. フォルダ作成
ソースフォルダ
パッケージ・エクスプローラーでプロジェクト(gulf)選択 → 右クリック →
新規 → ソース・フォルダー → フォルダー名(src) → 終了
XML文書用フォルダ
パッケージ・エクスプローラーでプロジェクト(gulf)選択 → 右クリック →
新規 → フォルダー → フォルダー名(docs) → 終了
3. パッケージ作成
パッケージ・エクスプローラーでソース・フォルダー(src)選択 →
右クリック → 新規 → パッケージ →
パッケージ名(com.netpotlet.boat) → 終了
4. Relaxerの機能を有効にする
パッケージ・エクスプローラーでプロジェクト(gulf)選択 → 右クリック →
Relaxer → Relaxer Enable(画面)
あるいは、
パッケージ・エクスプローラーでプロジェクト(gulf)選択 → 右クリック →
プロパティー → Relaxer → Relaxer builderをtrueにする → 適用 → OK
5. Relaxer環境の設定
パッケージ・エクスプローラーでパッケージ(com.netpotlet.boat)選択 →
右クリック → 新規 → その他 → Relaxer(左ぺイン) → RELAX NG
→ 次へ
Relax NG SchemaウィンドウのFile nameをkeyboard.rngに修正(画面)
→ 終了(画面 注 )
環境を設定すると、デフォルトのスキーマ定義が作られます。
ソースコード生成/コンパイル作業をビルドといいますが、自動ビルドが有効にしてあれば、終了をクリックすると同時にビルドが実行されます。自動でビルドされない設定にしてある場合、終了をクリックしてもソースコードは生成されていませんので、次のように手動でビルドします。
パッケージ選択 → 右クリック → Relaxer → Build folder(画面)
※注 筆者のマシンは非力なので、自動でビルドされない設定にしてあります。 |
RelaxerはCastor同様、XMLインスタンスからもマッピングを始められます。Castorのように、Javaオブジェクトからはマッピングできませんが、代わりに、DTDを生成してくれたり、データベース上に作られているテーブルからマッピングを始められたりします。しかし、やはりRelaxerも構造を定義したスキーマから始めるのが基本ですし、プラグインもこの方法に対応したツールですので、図1に示す手順で開発を進めます。この図はこれまでのJAXB、Castorによる開発方法を説明した図1とまったく同じです。詳細は本連載第2回の説明を参照してください。
図1 データバインディングツールを利用した開発手順 |
最初に文書構造をスキーマ言語を使って定義します。冒頭で触れたようにJAXBのサンプルと同じものを使いますから、スキーマもJAXB、Castorの記事で使ったkeyboard.xsd相当のRELAX NGを作成します。ただし、Relaxerは
<key size="large"> |
<key> |
のような定義でも問題なく動作します。つまり、typeやsizeのように同じ名前を要素と属性のどちらにも使っていいのです。そこで、このサンプルではリスト1のkeyboard1.xml、リスト2のkeyboard2.xmlの形式のXML文書で試すことにしました。リスト1と2のスキーマ定義はリスト3のkeyboard.rngです。
XML文書はJAXBとCastorのサンプルと同様にdocsフォルダに置きます。Relaxerプラグインを利用する場合、スキーマファイルkeyboard.rngはcom.netpotlet.boatパッケージの中に置きます。これは、Relaxerプラグインがkeyboard.rngの変更をトリガにして、自動的に再ビルドを実行するように設計されているためです。Relaxerの環境設定を行ったときにデフォルトのスキーマ定義が作られるので、その定義内容をリスト3のように書き直します。Relaxerプラグインを使わずにAntでビルドする場合は、これまでどおりスキーマファイルをschemasフォルダに置けます。
なお、本記事ではRELAX NG文法については触れませんので、冒頭で紹介した日本語チュートリアルや最後に紹介する書籍を参考にしてください。
1 <?xml version="1.0" encoding="EUC-JP"?> |
リスト1 keyboard1.xml |
1 <?xml version="1.0" encoding="EUC-JP"?> |
リスト2 keyboard2.xml |
1 <?xml version="1.0" encoding="UTF-8" ?> |
リスト3 keyboard.rng |
スキーマのコンパイルはRelaxerプラグインではビルドに相当します。Relaxerプラグインを自動的に再ビルドが実行されるように設定している場合、スキーマファイルとコンパイルのためのさまざまなオプションを指定するプロパティの修正・保存がトリガになって再ビルドされます。自動的に再ビルドしない場合は、「Relaxerの環境設定」で触れたようにパッケージのコンテキストメニューでビルドします。
Relaxerプラグインによる再ビルドのトリガはデフォルトでは、スキーマファイルとプロパティの更新時に設定されていますが、スキーマファイルだけのような指定をプロパティで設定できるようになっています。変更したい場合はパッケージ・エクスプローラーからRelaxer.propertiesを開き、図2のプロパティエディタを表示させます。次に、エディタの下の方に並んでいるタブからRelaxerを選び、各プロパティでtrueやfalseを選びます。ここに表示されているプロパティには次の意味があります。
relaxer.eclipse ----------- パッケージの自動ビルド有効/無効
relaxer.eclipse.properties -- Relaxer.propertiesの変更をトリガにする
relaxer.eclipse.schema ---- スキーマファイルの変更をトリガにする
非力ではないマシンなら次のような設定にしておくと便利でしょう。
relaxer.eclipse:true
relaxer.eclipse.properties:true
relaxer.eclipse.schema:false
図2 Relaxer Eclipseプラグインのプロパティエディタ |
コマンドラインでコンパイルする、あるいはEclipse上でプラグインに頼らずコンパイルする場合、Relaxer単体をインストールしたときに作られるrelaxerコマンドやJARアーカイブを使います。例えば、図3のパッケージ・エクスプローラーに示すディレクトリ構成を想定すると、Antのビルドファイルはリスト4のようになります。このbuild.xmlはコンパイルのためのオプションを引数で指定しましたが、プロパティファイルで指定する方法もあります。指定できるパラメータはプラグインのプロパティエディタで指定可能なものと同じです。
図3 プラグインを使わないスキーマコンパイルのための構成(クリックで拡大します) |
1 <?xml version="1.0"?> |
リスト4 build.xml |
ビルドファイルを作成したら、次のように実行します。
実行 → 外部ツール → 外部ツール → Antビルド選択 → 新規 →
ロケーション/基本ディレクトリー設定 → 適用 → 実行
2回目以降のAnt実行は外部ツール実行ボタンをクリックするだけです。
どの方法でビルドを実行しても、表1に示すクラス、インターフェイスのソースコードが自動生成されます。ただし、Ant実行の場合、ソースコードが生成されるのみでコンパイルされていないので、次のようにしてコンパイルします。
パッケージ・エクスプローラーでプロジェクト(gulf)選択 →
右クリック → 最新表示
|
|||||||||||||||||||||
表1 リスト3のkeyboard.rngから生成されたクラス |
では、次ページでいよいよRelaxerを使ったアプリケーションを作成してみましょう。(次ページへ続く)
1/2 | 後編 アプリケーションの作成 |
Index | |
連載 役に立つXMLツール集(4) Relaxerでデータバインディングに挑戦しよう |
|
前編 開発環境の準備 |
|
後編 アプリケーションの作成 |
「連載 役に立つXMLツール集」 |
- 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」の詳細も紹介する
|
|