はじめに
XMLが注目されるようになって久しく、今や書店でもXML関連書籍が沢山並ぶようになりました。以前のXML+XSLTの解説だけでなく、最近は特にサーバサイドXMLの書籍が多くを占めるようになってきています。ソフトウェアでも「XML対応」を謳うものが沢山出てきていますね。実務上もいろいろ関わってくる機会が増えてきている方が増えてきているのではないかと思います。
XML自体は応用範囲が広いので、はじめのきっかけが掴みにくく感じている方も実はいらっしゃるのでは無いでしょうか? また、サーバサイドのプログラミングを手早く試してみたいのに、環境準備やインストールに手間がかかって、肝心なプログラミング自体に取り組んでみるまでに時間がかかって面倒な方もいらっしゃるのではないかと思います。
手早く準備できるオープンソースのXMLアプリケーションサーバ環境を利用し、ブラウザですぐ確認できるウェブページのような身近な例を使って、サーバサイドXMLプログラミングをご紹介したいと思います。XMLプログラミング言語Extend it!(Xi)とオープンソースソフトウェア「Baykit XML Server(BXS)」です。
プログラミング言語Xiと実行環境BXS
xiはXMLオープンソースソフトウェアの普及を目指す横浜ベイキット
(http://www.baykit.org)
が仕様策定/実装を行った、XML文書を処理することに特化している言語です。Xi言語自体がXML文法に沿って設計されており、XML文書を読み込んでHTMLを出力したり、別のタグのXML文書に作り変えたり、ブラウザからの入力をXML文書に書き込んだり、XML文書の処理とJavaオブジェクトやDBを関連付けて行わせることが出来ます。
このXiの実際の処理系に関して、横浜ベイキットでは、Baykit Extend it!(BXi)とBaykit XML Server(BXS)の2つを準備しています。BXSはXi処理系を含むXMLアプリケーションサーバになっており、インストール直後の時点から、XiはもちろんWebサーバやServlet環境、サーバサイドXML+XSLT変換機能、簡易データベースまで含んでいます(BXSは元々「簡単に、短期間で、移植性の高いXMLベースシステム構築環境を提供する」ことを目指しています。BXSが提供するそれ以外の機能については補足説明を参照してください)。
この文書では「Xiによるサーバサイドプログラミング自体に触れてみるのが目的」ですから、Xi実行環境を手早く構築できるBXSを紹介してゆきます。
Xiの特徴(2つ)
xiの特徴は以下の2つです:
- (1)xi自体がXML形式で記述されています
- (2)機能の拡張ができます
上記(1)ですが、プログラムの一例(クライアントのブラウザに対してhtmlを送信する例:今は具体的な処理内容がわからなくて結構です)をしめすと、以下のようになります:
図1.Xiプログラムの例
全てタグで囲んだXMLの形式になっていることが判っていただけるものと思います。
また、Perl/PHP/JavaServlet等の他言語でよく見られる「print」が全く入っておりません。この(printを使わない、という)形式にしていると、プログラム記述時点で正しいXML文書になっている必要がありますから、プログラム実行結果として出力されるXML文書も、正しいXML文書になってくれます。
また、printを使わないということは、プログラム自体をXMLという1つの統一した文法に基づいて記述することになります(例えばブラウザに表示させる内容をXiで記述すると、そのプログラム中にはhtmlタグととXiのタグの2種類が現れますが、これらは両方とも元々の文法はXMLになっています)ので、書きやすい/読みやすい→間違いが少なく効率的なプログラミングができる、という利点があります。
(例えばJSP、html中に文法の異なるJavaを記述する形式ですと、気をつけないと見にくいグチャグチャなプログラムになりそうではありませんか? そういった経験がある人、いませんか?)
次に(2)です。Xiの機能拡張の形式には2つあって、1つはNinjaObjectを追加する形式です。例えば図1で「$Web.parameters.userName」といったオブジェクトを使っていますが、これがNinjaObjectの1つ(Web関係の機能を、$Webというオブジェクトを用いて利用している)です。Xiでは、この機能拡張オブジェクトの種類を増やしていくやり方で、機能を拡張してゆきます。
(NinjaオブジェクトにはCalendar Ninja/Security Ninjaなどがあります。またJava Ninja/Perl Ninja/Com Ninjaといった、外部のプログラミング環境にアクセスするためのものもあります)
もう1つは新しいタグを定義する方法で機能を追加する形式です。以下の図2を見てみてください。
図2.Xiプログラムの例(タグ内にSQLを直接書く拡張方法)
図2は、Xiからデータベースにアクセスする例なのですが、<sql:execute>〜</sql:execute>というタグの間に、データベース言語のSQL文がそのまま記述されています。SQL自体はXMLとは異なる文法に基づくものですが、このSQLの機能を「<sql:execute>という新しいタグを拡張定義する」ことによって、Xiの中に取り込んでしまっています。この「新しいタグを定義する」方法は、まさにXMLのやり方ですね。
|