XMLC チュートリアル: イントロダクション

内容

  1. XMLCがしてくれる事
  2. XMLCの実行方法
  3. XMLCの使い方

XMLCがしてくれる事

XMLCは、Hypertext Markup Language(HTML) またはeXtensible Markup Language(XML)として書かれた文書を読み込み、 その文書を忠実に再現する事が出来るJavaクラスを生成するJavaベースコンパイラーです。
生成されたJavaクラスは、実行時に動的な内容を文書の枠組みに挿入する為に利用する事が出来ます。 従ってXMLCは、Javaにより動的なHTMLやXML文書を生成する優れた方法の一つと言えます。

Server Side Includes (SSI)やCommon Gateway Interface (CGI) スクリプト、Active Server Page(ASP), Java Server Pages(JSP)等の動的にHTMLコンテンツを生成する他の技術も存在します。 XMLCには、これらの他の技術に対して、以下に列挙する様ないくつかのアドバンテージがあります。

XMLCにより、(訳者追記:XMLまたはHTML)文書はJavaのクラスの中にコンパイルされます。 アプリケーションが実行される前にこのコンパイルは行われます。 この為、実行時に動的に全体の文書を作成する他のテクニックよりも、この方法の方がより速く動的な文書を生成する事が出来ます。

将来、XML文書の利用が増加している状況に直面する事になると思います。 XMLCは、そのXMLの利用が増加している状況に対するとても自然な準備です。 もし貴方のプロジェクトでXMLを使う事や、HTMLベースのインタフェースをXMLへ移行する事を望むならば、XMLCは手助けをしてくれるでしょう。

XMLCは、Javaクラスを生成します。Javaは、Webベースのアプリケーションを構築する為の共通の言語になっています。 現在CGIは、Webベースのアプリケーションを構築する上で最も一般的に使用されて来た方法ですが、Java ServletsはCGIスクリプトよりも遥かに効率的です。 これはJava Servletが、 より速くそしてより少ないシステム資源を使用する事に起因しています。 EnhydraがJava Servletに基づくので、 Enhydraと共にXMLCはうまく動作します。

XMLCは、World Wide Web Consortium(W3C)Document Object Model(DOM) 標準を採用しています。 標準の採用によりXMLCがすぐに時代遅れにならない事を保証します。

XMLCの最も優れた一つの利点は、Javaコード(プログラマが作成する制御論理)とHTMLテンプレート(デザイナーが作成するページ)を完全に切り離す能力です。 デザイナーがHTML4.0標準を支援するデザインツールを使ったHTMLの生成と編集をする事をXMLCは可能にします。

このチュートリアルは、Enhydra2.1B2で出荷されるXMLCのバージョンをカバーしています。 XMLCは、間もなく変更される事になると思いますが、 現在のバージョンはDocuverse (http://www.docuverse.com/) DOM実装を使用します。 DOM実装は、OpenXML(http://www.openxml.org)実装に変更され、サンプルコードのいくつかは僅かに変更される事になるでしょう。 特に、例として提示しているDOM階層には、現在'Basic'という単語が要素名に付加されていますが、これはDocuverse特有の実装です。 W3CとXMLコードの利用法と構造の変更はありません。

また、このチュートリアルは、殆どの例においてXMLCによって生成されたJavaソースコードを示します。 しかし生成されたソースコードを直接触って維持したり利用したりする必要はない事に注意しておいてください。 実際、一般的な利用法においてXMLCは、コンパイルされたJavaクラスファイルの生成だけを行い、このレベルの複雑さを隠します。 XMLCが行っている内部処理をみて理解をしたい場合には、例に記載してるJavaソースコードを読んでみてください。 不要なソースコードを見る事で不安な気持ちになる様であれば、それらのコードは無視しても構いません。

XMLCの実行方法

このチュートリアルにおける全ての例が、コマンドラインにBashシェルを使っていると仮定しています。 Bashは、様々なプラットホームで利用可能なので、この事が学習を難しくする事はありません。 実際、この記述が対象としているXMLCの出荷が行われた時、貴方はBashでEnhydraを使用することが出来る事を要求されると思います。 例で使用されるBashプロンプトはドル記号(‘$')です。(そのドル記号は「スーパーユーザ」を除いたユーザの為の最も短いデフォルトプロンプトです)。

XMLCは、バージョン2.1b2以降のEnhydraアプリケーションサーバのディストリビューションに含まれます。 EnhydraとXMLCは、http://www.enhydra.org/から入手する事が出来ます。

Enhydraをインストールする一般的な場所は/usr/local/enhydraです。 例では、環境変数$ENHYDRAによってこのディレクトリを参照します。 Enhydraを他の場所にインストールする場合は、$ENHYDRAにその位置を代入してください。 この記法を使用して、Bashシェルスクリプトから$ENHYDRA/output/bin/xmlcに位置するXMLCを実行させる事が出来ます。 このスクリプトが実行可能で無い場合は、(chmodコマンドによって)実行可能にするか、または、直接Bashから(‘bash $ENHYDRA/output/bin/xmlc'のようにして)実行する必要があります。

お好みであれば、以下の様に、Enhydraのベースディレクトリを環境変数に設定する事によって、例を実行させる事が出来ます:


$ export ENHYDRA=/usr/local/enhydra

次にする事は、Java CLASSPATH変数を設定する事です。 XMLCを実行させる為は、JavaのインタプリタがEnhydraのクラス(XMLC Javaクラスを含む)とSwingのクラスの場所を見つける事が出来る様にCLASSPATH変数を設定する必要があります。


$ export CLASSPATH /usr/local/java/lib/classes.zip:/usr/local/swing/swing.jar:$ENHYDRA/classes/enhydra:.

$ENHYDRA/output/bin/xmlcシェルスクリプトを見ると、それが単にJavaのインタプリタを開始し、XMLC Javaクラスを処理している事に気が付くと思います:


#
# Enhydra XML Compiler (xmlc).
#

JAVA=/usr/local/java/bin/java

exec ${JAVA} com.lutris.xml.xmlc.compiler.Compiler "$@"

XMLCは、それ自身がJavaで書かれています! これはXMLCがどう働くかを掴む最初の手がかりとなります。 このチュートリアルで、この後説明しますが、XMLCはW3Cによって標準化されたJava DOMのクラスをうまく利用しています。 XMLCそれ自身がJavaコードなので、別のJavaプログラムの一部としてXMLCを使用する事が出来ました。 このチュートリアルでは(まだ)この事を記述していませんが、この可能性はXMLCの強力な部分です。

$ENHYDRA/output/bin/xmlcシェルスクリプトをパラメタ無しで走らせると、XMLCの用法をメッセージとして報告します:


$ $ENHYDRA/output/bin/xmlc
wrong # args: xmlc [options] [optfile.xmlc ...] src.ext
$

貴方が、無効なオプション(例えば"-help")を指定して$ENHYDRA/output/bin/xmlcシェルスクリプトを実行させると、有効な役に立つオプションのリストを返します。 このチュートリアルでは、より一般的に使用される、いつくかのオプションをカバーしています。

XMLCの使い方

XMLCによってJavaのクラスを生成させる場合、$ENHYDRA/output/bin/xmlcシェルスクリプトに対して、コマンドラインにHTMLかXMLファイルの名前を与えるだけです:


$ $ENHYDRA/output/bin/xmlc hello.html

XMLCコマンドは、与えられたファイルと同じディレクトリに"hello.class"というJavaクラスファイルを生成します。 生成されたファイルはコンパイルされたJavaバイトコードである事に注意してください。従って、それをエディタ等で読む事は出来ません。 貴方が作成されたJavaソースコードを見たい時は、 " -keep"オプションを指定する事が出来ますので、xmlcのコマンドラインに指定してください:


$ $ENHYDRA/output/bin/xmlc -keep hello.html

このオプションは、" hello.class" バイトコードと " hello.java"という名前のファイルを両方生成します; 後者はJavaソースコードです。 生成したコードの詳細については、後の章でかなり多く議論します。

概して、XMLCによって生成されたJavaのクラスは、以下のタスクのどれかを実行する為に利用する事が出来ます:

この後のチュートリアルの章は、個々についてこれらがどう優れているのかを示していきます。 最初の例では具体的に、 id属性により識別されたり、 <SPAN>タグの中に存在するテキストをどのように置き換えるかを説明します。 2章では、<FORM>要素の扱いを説明します。 3章では、URLsの操作について議論します。 4章では、グループ化している要素の操作について説明し、最後の章では、それほど一般的でない出来事について対処方法を説明します。