XMLC で生成したオブジェクトの利用法

生成された XMLC オブジェクトは XMLC によってされた要素へのアクセスメソッドと同様に DOM API を用いても操作できる。 動的なデータは DOM オブジェクトのツリーの中にセットされ、そして最終的にそのツリーから HTML ページが生成されます。

生成されたドキュメントクラス

xmlc コマンドは ドキュメントを 以下のような特徴をもつ Java のクラスにコンパイルします。

要素へのアクセスメソッド

標準的な DOM のドキュメントへのアクセスメソッドに加え、生成されたクラスには 識別子属性を含む各要素へのメソッドも含まれている。

HTML ドキュメントの場合、この識別子属性は ほとんど全ての要素で有効な id 属性である。 XML ドキュメントは DTD において、ID 型で指定された全ての属性となる。

得られたメソッドは getElementId名という形式で命名されている。 id の最初の文字は Java の習慣に合致させるために大文字に変換されている。返される値の型は その要素を表す DOM のクラスとなる。 以下のような要素には:

   <INPUT ID="nameInput">
以下のようなメソッド:
   HTMLInputElement getElementNameInput();
が生成される。

文法上の Java の識別子として利用できない文字を含む(HTML/XML の)要素の id については アクセスメソッドは生成されない。

Name と Class 定数

それぞれの要素の name や class 属性の値を示す文字定数が生成させる。 要素を特定する DOM のルーチンが呼ばれた時に文字定数を利用することは 有効な要素を特定することをより確かにする。

ある要素:

   <INPUT NAME="myName"> CLASS="class1 class2">
にたいして 文字定数
   public static final String NAME_myName;
   public static final String CLASS_class1;
   public static final String CLASS_class2;
が定義される。

HTML の標準仕様では NAME 属性は文字の大文字・小文字を区別しないのであるが、 HTTP サーバーは name 属性値の大文字・小文字を区別する。文字の大小だけが違う要素名をサポートするため name 属性値の文字の大小は( Java のクラスの)フィールド名を生成する時には修正されない。 Class 属性値の大文字・小文字は区別される、よってそれらの大小の区分は修正されない。 文法上の Java の識別子として利用できない文字を含む要素の name 属性、class 属性値の場合、 文字定数のフィールドは生成されない。

こうした定数は DOM にアクセスする際に用いられる。 例えば以下のとおりである。:

    NodeList elements = htmlObj.getElementsByName(htmlObj.NAME_myName);

埋め込まれたパースされない HTML

多くのアプリケーションにおいて、HTML を含むテキストデータをデータベースやユーザーの入力等の 外部から入力することは可能である。 これによりこうした HTML ドキュメントの部分をパースして DOM の階層構造の中へ埋め込むのは 実際にできないかもしれない。XMLC の HTML フォーマッタは まだパースされない HTML のために標準的ではない拡張機構を提供する。 CDATASection ノードの中のデータは何も変換せずに、toDocument() メソッドで生成された HTML ドキュメントに挿入される。

警告: DOM の仕様では パースされていない HTML を含むことを許していない。しかし、これは DOM 仕様の目標の一つではない。 DOM は ファイルシンタックスに依存しないように意図されたドキュメントオブジェクトの表現形式である。 CDATASection の利用は標準的ではなく注意深く利用しなければならない。 XMLC で生成したオブジェクトと一緒に利用したいかもしれない他の DOM ベースのツールでは こうした機能を多分サポートしていないかもしれない。一般的に 要素の DOM による階層構造として、ドキュメントを作成するのはより安全で拡張性のあるアプローチである。 このような機能は XML ドキュメントの場合はサポートされない。