mb_language("uni"); mb_internal_encoding("utf-8"); mb_http_input("auto"); mb_http_output("utf-8"); ?>
近年、様々なWebアプリケーションが開発されてきました。
最初はオンラインショッピングのようなシステムから始まったWebアプリケーションですが、その範囲は徐々に広がり、最近では、以前ならC/S(クライアントサーバ)システムが扱っていたような業務システムにまで及んでいます。
今後も、Web2.0やAjaxといったキーワードを核に、Webアプリケーションは成長を続けていくことでしょう。まさに、Webアプリケーションの全盛期といえます。
さて、現在多くのWebアプリケーションでは、データを格納するリポジトリとして、OracleやDB2、SQL Server、MySQLに代表されるリレーショナルデータベース(RDB)を利用しています。
WebアプリケーションのバックエンドとしてRDBが利用される理由は様々ですが、RDBを利用したほうが、技術者の今まで培ってきたノウハウを生かしやすいという点は大きな理由の1つでしょう。
ただし、RDBを利用したWebアプリケーションでは、データ項目の追加などの簡単に思える修正でさえスキーマ変更が発生してしまい、修正コストが膨らむことが多々あります。変化しつづける市場のニーズに合わせたWebアプリケーションを提供するには、スキーマ変更にかかるコストを下げることは必須の課題といえます。
スキーマ変更コストの高いRDBに対して、比較的容易にスキーマ変更に対応できる(つまり、低いコストで対応できる)のがXMLデータベース(XML DB)です。XML DBとはXML文書をそのままの形式(ツリー構造)で格納可能なデータベースのことです。(詳しくは"徹底比較! RDB vs XML DB" を参照してください。)
しかし、頻繁に起こるスキーマ変更に対応できるようにXML DBを利用してみたいが、実際のアプリケーションをどのように実装していけばよいか、取っ掛かりがつかめないと感じておられる方も多いのではないでしょうか。
本シリーズでは、Xprioriを利用した住所録Webアプリケーションの開発を通して、XML DBを使ったWebアプリケーション開発の実装方法を紹介していきたいと思います。基本的な環境が整った上での実装方法の紹介となりますので、Xprioriのインストール、基本的なデータ操作の方法などについては扱いません。マニュアル、チュートリアルなどを参考にしてください。
本シリーズではユーザが登録した住所を検索/閲覧することができるシンプルな住所録アプリケーションを開発します。登録する項目は
● 名称
● 郵便番号
● 住所
の3項目です。
ツリー構造、スキーマは以下のようになります。
▲ツリー構造
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="address_book"> <xsd:complexType> <xsd:sequence> <xsd:element ref="item" maxOccurs="unbounded"> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="item"> <xsd:complexType> <xsd:attribute name="id" type="xsd:string"/> <xsd:sequence> <xsd:element ref="name"/> <xsd:element ref="zip"/> <xsd:element ref="address"/> </xsd:sequence&glt; </xsd:complexType&glt> </xsd:element&glt; <xsd:element name="name" type="xsd:string"/> <xsd:element name="zip" type="xsd:string"/> <xsd:element name="address" type="xsd:string"/> </xsd:schema> |
なお、ここでは読者にデータ構造を理解していただくためXMLスキーマを明記しましたが、Xpriori側ではXMLスキーマの登録などは必要ありません。
要素名 |
説明 |
address_book | ルートノード |
item | 住所録に登録された人物/組織を表すノード、属性値としてユニークなIDを持つ |
name | 登録された人物/組織の名称を表すノード、名称が記述されたテキストノードを子ノードに持つ |
zip | 登録された人物/組織の郵便番号を表すノード、郵便番号が記述されたテキストノードを子ノードに持つ |
address | 登録された人物/組織の住所を表すノード、住所が記述されたテキストノードを子ノードに持つ |
<address_book> <item id="000001"> <name>根尾太郎</name> <zip>145-9999</zip> <address>東京都港区竜の門1-2-3</address> </item> <item id="000002" > <name>ネオ株式会社</name> <zip>145-8888</zip> <address>東京都港区鷲の門1-2-3</address> </item> </address_book> |
上記のようなデータを扱う住所録を作成します。
▲画面遷移図
アイテム検索 | アイテム一覧画面にて人物名または組織名、郵便番号、住所から文字列部分一致で検索 |
アイテム登録/編集/削除 | 人物または組織の登録/編集/削除 |
ユーザ登録/削除 | 住所録を閲覧できるユーザの管理(管理者のみ使用可能な機能) |
zip | 登録された人物/組織の郵便番号を表すノード、郵便番号が記述されたテキストノードを子ノードに持つ |
上記のアプリケーションの実装過程を今後の記事で説明していきます。実装環境としてJSPを使用します。サーバにはTomcat5を利用します。(執筆時の最新バージョンは5.5.16)
また、アプリケーションを作成した後に、クライアントからデータ項目を追加したいという要望が発生し、スキーマの変更が必要になるというシナリオを用意しており、そこでXML DBのもつスキーマ変更への柔軟性を紹介したいと思います。
このシリーズではアプリケーションで必要な認証やセキュリティについても考察します。
次回は、Eclipseを使った開発環境の設定方法と、Xprioriに接続するまでの流れを紹介します。
▲このページのTOPへ