![](/fxml/rensai2/xmltool01/bar.gif)
連載 役に立つXMLツール集(7)
RelaxerでオブジェクトをRDBにマッピング Page 2
www.netpotlet.com
原田洋子
2004/5/14
本記事でも、前回のCastor JDO同様、最終的に図2に示すHTMLを出力するアプリケーションを作成します。表中の情報はすべてデータベースから取得したものです。
図2 アプリケーションの実行結果 |
開発手順
Relaxer JDBCはRelaxer実行時にjdbcオプションを指定するのみなので、Relaxerと同じ手順でアプリケーションを作ります。第4回で基本的な開発手順でサンプルアプリケーションを作りましたが、今回もスキーマを定義することから始めます。実行までの手順は図3のようになります。
図3 Relaxerによる開発手順 |
スキーマ定義
まず、スキーマを定義しますが前回のリスト2のgoods.rngをほぼそのまま使います。ただし、データベースのテーブルは図4に示すように、ドキュメントのツリー構造のルートに当たるgoodsListではなく、goods以下から作りたいところです。goods以下をテーブルにマッピングした方が、データベースシステム付属のコマンドやSQLを使って参照しやすくなるためです。このため、リスト1の12行目に示すようにgoods要素もツリーのルートにできるようにスキーマに書き換えました。
図4 ドキュメントのツリー構造 |
【リスト1 goods.rng(別ウィンドウで表示します)】
スキーマコンパイル
スキーマ定義ができたので、コンパイルしてクラス定義とテーブル作成のためのDDLを生成します。今回のサンプルではAntのRelaxerタスクを使うので、ビルドファイルbuild.xmlはリスト2に示すようになります。RelaxerタスクはRelaxerアーカイブに入っているので、特にタスクのためのアーカイブを取得する必要はありません。Relaxerタスクを利用するにはリスト2の21〜24行目で行っているように、まず、taskdef要素で定義しておきます。このとき実行に必要なアーカイブへのパスをセットします。リスト2では12〜19行目で定義しているパスを参照しています。定義したRelaxerタスクを使っているのが26〜28行目です。
RelaxerタスクはRelaxer実行時のオプションをRelaxer.propertiesファイルから読み込みます。Relaxer.propertiesファイルはスキーマと同じフォルダに置き、27行目にあるようにRelaxerタスクのsrcdir属性でフォルダを指定します。このサンプルアプリケーションではRelaxer.propertiesをリスト3のようにしました。3行目で指定しているdirオプションは生成される*.javaファイルの出力先ですが、dirはEclipseを起動したディレクトリ(フォルダ)からの相対パスにします。Eclipseは起動したディレクトリにworkspaceという名前のディレクトリを作り、その下にプロジェクトのディレクトリを作ります。このサンプルはelfプロジェクトのsrcフォルダ以下に出力させたいので、workspace/elf/srcを指定しました。5行目で指定しているのがRelaxer JDBCのためのオプションです。このオプションを指定すると、データベースを操作するためのクラス定義であるxxxTable.java、xxxTableView.javaが生成されると同時にデータベースのテーブル定義DDLも生成されます。6行目ではスキーマの要素に対応するクラスの名前に付けるプレフィックスです。xxxListという名前はRelaxerが自動生成するクラスでも使われるクラス名なので、名前がかち合って上書きしないように指定したものです。
Antはこれまでも何度か実行してきたように、
パッケージ・エクスプローラー → build.xml選択 → 右ボタン →
Antの実行
で開くウィンドウで実行ボタンをクリックします。2回目以降はツールバーの外部ツール実行ボタンをクリックするだけで同じターゲットを実行できます。なお、フォルダやファイルの配置は図5のようになっています。
図5 スキーマファイルとRelaxer.propertiesの配置 |
Antを実行すると、
ElfDetailCategoryCategory.java | ElfDetailPricePrice.java |
ElfGoods.java | ElfGoodsList.java |
GoodsList.java | GoodsListList.java |
GoodsListTable.java | GoodsListTableView.java |
GoodsTable.java | GoodsTableView.java |
IGoodsListTableView.java | IGoodsTableView.java |
RDomBuilder.java | RJDBCList.java |
RStack.java | Relaxer.manifest |
UJAXP.java | URelaxer.java |
USQL.java | goods.ddl |
goodsList.ddl |
が生成されるので、次のようにしてEclipseの表示を更新すると同時に*.javaをコンパイルします。
パッケージ・エクスプローラー → elfプロジェクト選択 →
右ボタン → 最新表示
【リスト2 Antのビルドファイルbuild.xml(別ウィンドウで表示します)】
【リスト3 Relaxer.properties(別ウィンドウで表示します)】
テーブル作成
スキーマがコンパイルされるとDDLも生成されるので、これを使ってデータベースのテーブルを作成します。図4に示したようにテーブルはgoods以下の要素、属性を対応させたものにしたいのでRelaxerが生成したリスト4のgoods.ddlを使います。なお、データベース名はelfにしました。
【リスト4 goods.ddl(別ウィンドウで表示します)】
次ページでは、サンプルアプリケーションの実装を行います。(次ページに続く)
![]() |
2/3 | Page
3![]() |
Index | |
連載 役に立つXMLツール集(7) RelaxerでオブジェクトをRDBにマッピング |
|
O/RマッピングツールとしてのRelaxer Relaxer JDBCとは 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」の詳細も紹介する
![]() |
|
|
|
![]() |