LixM 共通 アプリケーション開発者向けガイド


1.1)LixMとは?

LixMとはXMLを表現するためのモデルとそれを格納しておくためのコンテナです。
LixMではXML文章の構成要素を詳細にモデル化します。そのモデル化されたXMLに対してLixMで定義されたオペ レーションを用いて一貫性のある非常に自由度の高いアクセスを提供します。

1.2)概念

LixMにはモデル・モデライザ・リスト・カーソルという概念が存在します。

モデル
モデルはXML構成要素が持つメタな情報を保持します。
モデライザ
モデライザはXML文書の入力に対してモデル化を行います。
リスト
モデライズの完了したモデルが格納されるコンテナです。
カーソル
コンテナであるリストの位置情報を保持し、アクセスオペレーションを提供します。

文章は入力され、モデライズの過程を経てリストに格納され、カーソルを用いてアクセスされ、最終的に別の形式で出力されます。

文章の入力

LixMでは入力ソースは特定されません。あらゆる形でモデライザへ渡されます。また、入力ソースを得る方法もLixMでは定義されていません。 ファイルから直接ストリームとして得たり、既存のXML APIのファクトリから間接的に得たりも出来ます。

モデライズ

モデライザではまず、入力ソースを受け取りモデライズを開始します。モデライズの詳細は隠蔽されAPIユーザーはモデライズを開始し、一般的にモデ ライズが完了した時点で構築されたリストを取得するだけでいいのです。

リスト

モデライズされた全てのモデルを収め、モデルに対するアクセッサを備えています。また、位置情報操作のためのオペレーションをもつカーソルが関連付 けられています。

カーソル

リスト内にモデルM0〜Mmaxが格納されている場合、Mc+x(cは現在位置、xは相対的な任意の位置)の位置であるモデルのインデックスを取得 したり、ルート要素(文書要素)などの特定のモデルがどの位置にあるかのインデックスを取得できます。これらより得たインデックスをリストのアクセッサに 渡す事でモデルを取得する事が出来ます。

2.1)フェーズ

LixMには3つのフェーズがあります。

です。

プリプロセスフェーズ

プリプロセスフェーズはモデルリストを利用可能にするための前処理、具体的には文字参照の解決やバリデーションなどを行うフェーズです。

アプリケー ション開発者にとってこのフェーズは特に重要ではないため詳細は省きますがLixMでは全ての文字実体参照はモデライズされた時点には文字実体として解決 されなければいけません。(この仕様はオプションです)また、モデライズされた時点で、Well-formed XML DocumentsかValid XML Documentsでなければいけません(この仕様は必須です)。

そのための処理が行われるのがこのフェーズです。

モデライズフェーズ

モデルリストを実際に利用可能にするためのフェーズです。

このフェーズへの移行はXMLModelizer#modelizeという名前の各メソッドによって行われます。このフェーズが無事終了すれば XMLModelizer#getList()によって取得されるモデルリストを利用可能になります。modelizeメソッドは LIXMPhaseExceptionをスローする可能性があります。

LIXMPhaseExceptionがスローされる原因はフェーズ実行中に問題が生じた場合です。LIXMPhaseExceptionは一般情報と呼ばれるより広義な問題点java.lang.Exception サブクラス)とフェーズ情報および、例外メッセージを持っています。この例外をキャッチしてフェーズ実行を中断するか再開するかはアプリ ケーションプログラマが決めてください。しかし、この例外が投げられた場合XML文章の扱いにとって致命的であることがほとんどです。よって、アプリケー ションの処理事態を中断する可能性が高いでしょう。一般情報としてよく挙げられるのはFile I/Oの問題やXML文章がNon-well-formedである事でしょう。

その他のフェーズ

このフェーズは主にアプリケーション由来の処理になります。

その他のフェーズがどのタイミングで実行されるか仕様には定義されていません。どのタイミングでも何度でも実行されます。このフェーズを利 用する事でアプリケーション固有の処理をLixMの他のフェーズと結合できます。

このフェーズは実行されなくても構いません。

2.2)モデルリストを利用する

モデライズされたXML文章はモデルという一つのオブジェクトとしてリストへ格納されます。このモデルは字面出現順に格納されています。
XMLModelizer#getList()によって取得されたモデルリストへアクセスする方法は直接的にアクセスする方法と間接的にアクセスす る方法があります。

直接的にアクセスする

XMLModelListのget(int)、getRootEndTag()、getRootStartTag()によってモデルリストの任 意の 位置、ルート要素の開始タグ・終了タグ、へと直接アクセスできます。これは位置情報を直接指定するアクセス方法です

間接的にアクセスする

間接的にアクセスするにはXMLModelList#getCursor()を利用しカーソルというものを取得します。
この場合、位置情報はカーソルによって管理され幾つかの便利 なア クセス方法が提供されます

この方法を用いた場合、list.get(cursor.xxx)という定型文でモデルを取得します。カーソルに よって 提供されるアクセス方法は現在の位置にアクセスする、特定の位置にアクセスする、記憶された位置にアクセスするなどといったものがあります。詳しくは Javadocを参照してください。

2.3)モデルの情報を取得する

XMLModelList#get(int)はAbstractModelという抽象的なモデルを返します。getXMLType()や matchTypes(int)を利用し特定のサブクラスへキャストが必要になります。サブクラスでどのような情報を取得できるかはJavadocを参照 してください。

3.1)チュートリアル

tutorial1
リスト、モデライザ、モデルリストの初期化とモデルの取得〜
tutorial2
モデルリストの走査、モデルの取得〜
tutorial3
カーソルを使った高レベルなリストの走査〜

Copyright © 2005-2008 tasogare. All rights reserved.