(57)【要約】本発明は、ドキュメントを表すメモリ内に完全なオブジェクトツリーを構築することなく、ドキュメント変換を指定し且つストリーミングモードでドキュメントを変換する装置及び方法を含む。本発明の特定の特徴が、特許請求の範囲、詳細な説明、及び図面に記載されている。
2005535982.tif 000002
【特許請求の範囲】
【請求項１】
（１）複数の開始イベント要素、入力イベント要素、及び終了イベント要素を含むイベントをストリームに受信するステップと、
（２）前記要素を指定テンプレートとマッチング(matching)するとともに当該指定テンプレートを活性化することによって要素に関する開始イベント要素に応答するステップ、又は当該要素を親要素の内容として処理することによってマッチングをなくすステップと、
（３）マッチング指定テンプレートを使って現要素の終了イベント要素に応答するステップと、必要であれば、
（ａ）前記マッチング指定テンプレートの指令に応えて、前記現要素に一致する少なくとも幾つかのリテラルテキスト(literal text)又は入力イベントを出力するステップと、
（ｂ）前記現要素の内容に一致する入力イベントをクリアー(clear)にするステップと、
（ｃ）前記マッチング指定テンプレートを非活性にするステップと、
を含むドキュメント変換方法。
【請求項２】
前記ストリームのイベントが電子商取引ドキュメントに一致することを特徴とする請求項１に記載の方法。
【請求項３】
前記ストリームのイベントが、テキスト文字を符号化する文字データ、及び前記ドキュメントの論理構造に従って記憶ユニットの集合を特定するマークアップデータを含んだドキュメントに一致することを特徴とする請求項１に記載の方法。
【請求項４】
前記ストリームのイベントが、テキスト文字を符号化する文字データ、及び前記電子商取引ドキュメントの論理構造に従って記憶ユニットの集合を特定するマークアップデータを含んだ電子商取引ドキュメントに一致することを特徴とする請求項１に記載の方法。
【請求項５】
複数の前記指定テンプレートインスタンスが、テンプレートソース内に一緒に記憶されていることを特徴とする請求項１に記載の方法。
【請求項６】
複数の前記指定テンプレートインスタンスが、テンプレートソース内に一緒に記憶されていることを特徴とする請求項２に記載の方法。
【請求項７】
複数の前記指定テンプレートインスタンスがテンプレートソース内に一緒に記憶されていることを特徴とする請求項３に記載の方法。
【請求項８】
前記開始イベント要素に応えることが、前記指定テンプレートに一致する範囲で１以上の変数を活性化させることを更に含み、前記終了イベント要素に応えることが、前記変数を非活性化させることを更に含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記開始イベント要素に応えることが、前記指定テンプレートに一致する範囲で１以上の変数を活性化させることを更に含み、前記終了イベント要素に応えることが、前記変数を非活性化させることを更に含むことを特徴とする請求項３に記載の方法。
【請求項１０】
前記開始イベント要素に応えることが、前記指定テンプレートに一致する範囲で１以上の変数を活性化させることを更に含み、前記終了イベント要素に応えることが、前記変数を非活性化させることを更に含むことを特徴とする請求項７に記載の方法。
【請求項１１】
前記指定テンプレートに一致する終了イベント要素に応えることが、前記変数を演算するための論理指令を処理することを更に含むことを特徴とする請求項８に記載の方法。
【請求項１２】
前記論理指令は、部分文字列(substring)及び連結(concatenation)を選択的に含むことを特徴とする請求項１１に記載の方法。
【請求項１３】
前記論理指令は、if及びchooseのフロー制御演算子を選択的に含むことを特徴とする請求項１１に記載の方法。
【請求項１４】
前記論理指令は、if,chose,when,otherwise,及びfor-eachのフロー制御演算子を選択的に含むことを特徴とする請求項１１に記載の方法。
【請求項１５】
前記開始イベント要素に応えることが、前記マッチング指定テンプレートに関連した指令に対応することを含み、前記指定テンプレートの範囲内に前記要素及びサブ要素のツリー表現を生成することを特徴とする請求項１に記載の方法。
【請求項１６】
前記開始イベント要素に応えることが、前記マッチング指定テンプレートに関連した指令に対応することを含み、前記指定テンプレートの範囲内に前記要素及びサブ要素のツリー表現の生成を開始することを特徴とする請求項１３に記載の方法。
【請求項１７】
（１）複数の開始イベント要素、入力イベント要素、及び終了イベント要素を含むイベントをストリームに受信するステップと、
（２）前記要素を指定テンプレートにマッチング(matching)し且つ前記指定のテンプレート、及びもしあれば前記指定テンプレートに一致する範囲内の変数を活性化することによって要素に関する開始イベント要素に応答するステップと、
（３）ネスト(nested)された開始イベント要素を付加的な指定テンプレートとマッチングさせることによって前記ネストされた開始イベント要素に応答するステップと、及び前記付加的な指定テンプレートと、もしあれば前記付加的な指定テンプレートに一致する範囲内の変数とを活性化するステップと、又は前記親要素の内容として前記ネストされた開始イベント要素を処理することによってマッチングを無くすステップと、
（４）最も新しく活性化された指定テンプレート内の指令に従って入力イベントに応答するステップと、当該指令が１以上の前記変数への入力を割当てることを含んでおり、
（５）前記一致する指定テンプレートを処理することによって終了イベント要素に応答するステップと、必要であれば、
（ａ）前記指定テンプレート内の指令を処理するステップと、当該指令が前記変数を演算すること、及び少なくとも幾つかのリテラルテキスト(literal text)及び前記変数を出力することを選択的に含んでおり、
（ｂ）前記一致する指定テンプレートの範囲の変数をクリアーにするステップと、
（ｃ）前記一致する指定テンプレートを非活性にするステップと、
を含むコンピュータ実行のドキュメント変換方法。
【請求項１８】
前記ストリームのイベントが電子商取引ドキュメントに一致することを特徴とする請求項１７に記載の方法。
【請求項１９】
前記ストリームのイベントが、テキスト文字を符号化する文字データ、及び前記ドキュメントの論理構造に従って記憶ユニットの集合を特定するマークアップデータを含んだドキュメントに一致することを特徴とする請求項１７に記載の方法。
【請求項２０】
前記ストリームのイベントが、テキスト文字を符号化する文字データ、及び前記電子商取引ドキュメントの論理構造に従って記憶ユニットの集合を特定するマークアップデータを含んだ電子商取引ドキュメントに一致することを特徴とする請求項１７に記載の方法。
【請求項２１】
複数の前記指定テンプレートインスタンスが、テンプレートソース内に一緒に記憶されていることを特徴とする請求項１７に記載の方法。
【請求項２２】
複数の前記指定テンプレートインスタンスが、テンプレートソース内に一緒に記憶されていることを特徴とする請求項１８に記載の方法。
【請求項２３】
複数の前記指定テンプレートインスタンスが、テンプレートソース内に一緒に記憶されていることを特徴とする請求項１９に記載の方法。
【請求項２４】
前記指定テンプレートに一致する終了イベント要素に応えることが、前記変数を演算するための論理指令を処理することを更に含むことを特徴とする請求項１７に記載の方法。
【請求項２５】
前記論理指令は、部分文字列(substring)及び連結(concatenation)を選択的に含むことを特徴とする請求項２４に記載の方法。
【請求項２６】
前記論理指令は、if及びchooseのフロー制御演算子を選択的に含むことを特徴とする請求項２４に記載の方法。
【請求項２７】
前記論理指令は、if,chose,when,otherwise,及びfor-eachのフロー制御演算子を選択的に含むことを特徴とする請求項２４に記載の方法。
【請求項２８】
前記開始イベント要素に応えることが、前記マッチング指定テンプレートに関連した指令に対応することを含み、前記指定テンプレートの範囲内に前記要素及びサブ要素のツリー表現を生成することを特徴とする請求項１７に記載の方法。
【請求項２９】
前記開始イベント要素に応えることが、前記マッチング指定テンプレートに関連した指令に対応することを含み、前記指定テンプレートの範囲内に前記要素及びサブ要素のツリー表現の生成を開始することを特徴とする請求項２６に記載の方法。
【請求項３０】
（１）１以上のサブテンプレートを含むテンプレートをロードするステップと、
（２）入力ソースからイベントストリームを処理するステップと、繰り返しながら、
（ａ）サブテンプレートを前記入力ソースの開始イベントとマッチングするステップと、
（ｂ）前記開始イベントにマッチングされた終了イベントが受信されるまで、入力ストリームをバッファリングするステップと、
（ｃ）前記バッファリングされた入力ストリームを変換するために前記サブテンプレートの指令を処理するステップと、
（ｄ）前記処理の結果を出力するステップ、並びに前記バッファリング及び前記処理のために使用されるメモリを再使用するために処理且つリリース（解放）するステップとを行うこと、
を含むＸＭＬドキュメントでの変換を実行する間のメモリ利用方法。
【請求項３１】
前記サブテンプレートを前記開始イベントとマッチングすることが、前記サブテンプレートに一致する範囲の１以上の変数を活性化すること、及び再使用のためにリリースすることが前記変数を非活性化することを更に含むことを特徴とする請求項３０に記載の方法。
【請求項３２】
前記論理指令は、部分文字列(substring)及び連結(concatenation)を選択的に含むことを特徴とする請求項３０に記載の方法。
【請求項３３】
前記論理指令は、if及びchooseのフロー制御演算子を選択的に含むことを特徴とする請求項３０に記載の方法。
【請求項３４】
前記論理指令は、if,chose,when,otherwise,及びfor-eachのフロー制御演算子を選択的に含むことを特徴とする請求項３０に記載の方法。
【請求項３５】
前記論理指令は、ユーザカスタムの拡張を呼び出すことを選択的に含むことを特徴とする請求項３０に記載の方法。
【請求項３６】
前記ユーザカスタムの拡張は、Ｊａｖａ（登録商標）プログラミング言語で書かれていることを特徴とする請求項３５に記載の方法。
【請求項３７】
前記サブテンプレートを処理することに先立ち、前記入力ストリームを前処理するために少なくとも１つの付加的なハンドラーを呼び出すことを更に含むことを特徴とする請求項３０に記載の方法。
【請求項３８】
前記結果を出力することは、前記サブテンプレート処理の結果をさらに処理するために、少なくとも１つの付加的なハンドラーを呼び出すことを含むことを特徴とする請求項３０に記載の方法。
【請求項３９】
前記サブテンプレートを前記開始イベントとマッチングさせることは、前記サブテンプレートに関連する指令に応じて、前記サブテンプレート内の要素及びサブ要素のツリー表現を生成することを更に含むことを特徴とする請求項３０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（著作権情報）
本特許文献の開示の一部は、著作権の保護を受ける題材を含んでいる。著作権者は、本特許文献が米国特許商標庁の特許ファイル又は記録において公開されたときに、誰もが特許文献又は特許の開示を複写することに異議はないが、他の場合には、如何なる場合にも全ての著作権を留保する。
【０００２】
本発明は、構築されるべき全要素間の階層関係の表現を要求したり、変換を実現するための本階層オブジェクト表現のドキュメントを横断(traversal)することを必要とせずに、離散処理イベントのストリームとして扱われるドキュメントの固定且つ超低使用メモリ変換のためのシステム及び方法に関する。より具体的には、本発明は、ＸＭＬドキュメントを変換するシステム及びプロトコルに関する。
【背景技術】
【０００３】
企業間（Ｂ２Ｂ）及びアプリケーション間（Ａ２Ａ）の電子商取引は、電子データ交換（ＥＤＩ）のためのこれまでのプロトコルを切り替えつつある。企業がＢ２Ｂ及びＡ２Ａシステムを用いてその効率性を改善しようと努力するにつれて、多数の互換性のないプラットフォーム及び競合する規格が登場した。明らかになってきている１つのニーズは、ＸＭＬドキュメントを変換することであり、典型的にはあるシステムから別のシステムへドキュメントを目的・用途に沿うように変える（コンバート）することである。変換を行う別の理由は、基準が幾つかのバージョンを経てくる可能性があって、且つ基準の終わりが更に古いバージョン、他の新しいバージョンを使用するかもしれないからである。
【０００４】
組み込み（インライン）マークアップを形成するために適用されなければならない厳格なルールは、コンピュータプログラムがテキストドキュメントの内容（コンテンツ）を解釈し処理することを比較的単純にさせることにあるので、ＸＭＬはデータ型を広範囲に使用するようになってきた。例えば、何が購入され、誰が購入者であるかなどを記述するマークアップアノテーション（注釈）の読み出し方法が分かっているオーダエントリーのソフトウェアアプリケーションによって、ＸＭＬで書かれた購入注文を処理することができる。この結果、変換を行う第３の理由というのは、購入注文において情報をとってくること、並びに購入者と購入される項目と第１のドキュメントからコピーされた他の情報とを含む積み荷送り状などの応答ドキュメントを生成するために用いるということである。
【０００５】
変換はコンピュータ処理の主要なカテゴリーである。巨大市場では、トランザクションビジネスにとってのペーパレスシステムは、１日で何千ものＸＭＬドキュメントの変換を要求する。ＸＭＬドキュメントはしばしば相当に大きなサイズであって、変換で取り扱われなければならないデータ要素として何千もの個別データを有する。また、入力から出力までの変換を表現するルールは、非常に広範囲である。個々の変換を完了するのに必要な応答時間は度を超えて長いし、会社規模の変換サービスをサポートするためのコンピュータ資源に対する全体需要が受け入れ不可能な程度までに急速に大きくなっている。
【０００６】
ＸＭＬ変換を成し遂げる多くの異なるツールがあるが、実行性能の問題に向けられて効果的に設計されたツールが欠けている。今日一般的に用いられている殆どの技術のＸＳＬＴは、コンピュータ資源において典型的には極端にコスト高である内部データモデルを要求することによって実行性能問題を悪化させている。ＸＳＬＴ変換文をＪａｖａ（登録商標）などのより効果的なプログラミング言語にコンパイルすることによって、又はスキームをキャッシュ化することによって、これらの問題を軽減するための試みがいくつかなされてきている。しかし、これらのアプローチは非効率さを生じさせている基本プロセスを改善してはいない。
【０００７】
したがって、ＸＭＬドキュメント変換を効率的に特定し且つ実行する方法及び構造を創造した。
【０００８】
（発明の概要）
本発明は、構築されるべき全要素間の階層関係の表現を要求したり、変換を実現するために本階層オブジェクト表現のドキュメントを横断(traversal)することを必要せずに、離散処理イベントのストリームとして扱われるドキュメントの固定且つ超低使用メモリ変換のためのシステム及び方法に関する。本発明の特定の態様が特許請求の範囲、明細書、及び図面に記載されている。
（詳細な説明）
以下の詳細な説明は、図面を参照して行われる。好ましい実施形態は、特許請求の範囲によって定められる本発明を説明するために記載されるものであって、本発明の範囲を限定するものではない。当業者であれば、以下の説明に関して種々の等価な変形物を認識するであろう。
【０００９】
ＸＳＴは変換技術である。変換は、変化過程を記述するルールの一組の決定的集合を使って入力源を出力源にする変化(mutation)である。一実施例において、ＸＳＴはＸＭＬでマークアップされるソースデータ、又は同様に構成され且つタグ付けされたマークアップ言語上で作用する。ＸＭＬデータはＸＭＬの構文ルールに従う組み込み（インライン）マークアップによってアノテーション（注釈）が付けられる。ＸＳＴ変換の出力はテキストデータであり、テキストデータはＸＭＬドキュメントであり得る。
【００１０】
ＸＳＴ変換はテンプレートに含まれる一組のルールによって記述される。これらのルールは言語で表される。変換言語は汎用のプログラミング言語に類似するが、ルールに従った入力からルールに従った出力への変化を記述するのに必要な表現のみ与えられる。ルールに従った入力がＸＭＬ又は同様に構成され且つタグ付けされたドキュメントに制限されるとき、問題空間は一般変換と比較して相当に限定される。したがって、プログラマーが書く変換は簡単であり、テンプレートに記述される変換を計算するためのプロセッサの実行は、簡単なタスクである。テンプレートは、変換演算が生じるソースドキュメントの連続処理において重大な入力イベントを定義する。一実施例では、この入力イベントの定義及び関連する変換演算はサブテンプレートと呼ばれることができる。出力へのストリーミングが起きるのはサブテンプレートレベルである。多数の例が続く。
【００１１】
ＸＭＬ変換の限定された範囲によってでさえ、変換言語に対する多くの異なるアプローチを案出することは可能である。ＸＳＬＴが良い代表であるのだが、もっとも共通するタイプの言語というのは、ツリーのノードとしてＸＭＬ入力ドキュメントを処理するときのものである。ＸＭＬドキュメントにとっての変換言語は、一般的に直感的であると思われる変換を記述し、且つ変換プログラマーが殆どの変換処理をかなり簡単に表現することができるようにする広範囲な表し方を提供する。このタイプの言語に伴う問題というのは、全体のＸＭＬドキュメントをノードのツリーに実際に変換（コンバート）し、コンバートによって要求される演算をツリー型ノード作動として実行するよう基本的な実行を強制していることである。ツリーへのＸＭＬドキュメントのコンバートは演算としてコスト高であり、特に、ノード間で大きなバックトラッキング（後戻り探索）が要求される場合には、ツリー上のその後の演算も非常にコスト高になってしまう。典型的には、全ＸＭＬドキュメントがメモリ内のツリーにコンバートされると、本ツリーは、バイトストリームとして表したときに比べて数倍のドキュメントサイズとなる。ツリーを記憶するのに必要なメモリ量を削減するための様々な最適化が勿論可能であるが、それらを実行するには驚くほど困難である。そしてこれらの最適化はメモリ量の少ない最適メモリ使用にするほど実行性能が低下するというトレードオフが要求される。これら及び他の理由から分かるように、ツリー志向型の変換言語の基本的な実行というのは、ツリー表現領域又はツリーサイズの面からみて最適化されていない。
【００１２】
ＸＳＴ変換言語は、変換処理の基本的実行をより効率的にできるようにするために慎重に制限される。現存する幾多の変換研究の大部分は、完全なツリー型言語の表現を要求しないという観察がなされていた。ＸＳＴはその基本的で初期設定の処理にはより単純なパラダイムを使用し、且つＸＭＬドキュメントの特定の断片において要求される場合のみ複雑でコスト高な構造を使用する。また、ＸＳＴアプローチは、変換におけるあるクラスのために、難しいテンプレートを記述すること、そしてツリー型言語より良い実行性能ではないことを許容する。したがって、ＸＳＴは更に制限された慣用句を容易に表現することができる変換の巨大クラスのために、高実行性能を提供することができる。
【００１３】
ＸＭＬ入力ストリームを処理するために、組み込み（インライン）マークアップ及び当該インラインマークアップによって注釈付けられた内容（コンテンツ）を認識するためにストリームをスキャンする。マークアップ及び内容（コンテンツ）の認識は、いわゆる“イベント”を生成し、プロセスは時々“イベント−ストリーム構文解析”と呼ばれる。さらに、これらのイベントからの内容項目間の階層関係を取得するノードのツリーを形成するために、より複雑な処理が要求される。制約された状況においては、ＸＭＬドキュメントを通る１つのパスにおいてにおいてでさえ、ＸＳＴはノードのツリーを形成するイベントストリームを処理することができる。１パス、ツリーでない処理が相当に小さなバッファを使用し、メモリの使用を非常に小さくしたままにすることができる。ツリーを構築したり、又は変換を処理するためにツリー上に複数のパスを作ったりする時間が費やされないので、小さなバッファにもかかわらず処理時間は迅速である。
【００１４】
ＸＭＬドキュメント変換へのイベント−ストリーム構文解析の応用は、革新的である。ＸＳＴ言語は、大量の変換処理が、効果的なイベント−ストリーム構文解析方法を用いて実行されるようにするため、慎重に設計される。ＸＳＴの幾つかの態様は、イベント−ストリーム構文解析を大きなクラスの変換問題に拡張する。前イベントからの情報を前方参照するため、且つ内容の特定値を計算するために、イベント−ストリーム処理において、変換用の変数を使用することができる。出力ストリームの部分を分割し、複数の出力ターゲットに指向させることができる。Ｊａｖａ（登録商標）及び他の外部処理ルーチンをイベントから呼び出すことができる。幾つかの実施例では、ＸＳＴは、ツリーがドキュメントの断片又はサブセクションに構築されるようにすることによって、イベント−ストリーム処理への混合ツリー型ノード処理の可能性を見込んでいる。また、ＸＳＴは、主なＸＳＴ変換イベント処理器の前後で補助のイベント処理器を一緒に連結させるようにしている。
【００１５】
図１は、イベント処理の高レベルブロック図である。ここに表されているイベント処理は指定されたテンプレートで動作し、好ましくはＸＭＬで表されるが、もっと一般的には、テキスト文字を符号化する文字データ、及び任意のドキュメントの論理構造に従って記憶単位の集合を特定するマークアップデータを含むドキュメントを有する電子商取引文書に変換する。様々な組合わせで用いられることのできる多くのオプションが以下に図示され述べられている。
【００１６】
構文解析系は、電子商取引ソースに相当するイベントストリーム１０１を生成し、それはファイル又は任意のバイナリラージオブジェクト（ブラブ）、又はデータストリームである。コンピュータシステムにホストされたソフトウェアは、電子文書ソースに対応して、構文解析系によって生成されたイベント１０２を受信するために調整される。幾つかの実施例では、イベントが開始イベント１０３、入力イベント、及び終了イベント１０５を含む。他の実施例では、構文解析系がトークンを通過させ、このトークンからイベントを生成するためにシステムを適応させることができる。更に他の実施例では、文字ストリームを受信し、トークン又はイベントを生成するための構文解析を行うことができる。スタートイベント１０３に応えて、コンピュータ支援システムは、要素を指定のテンプレート１０４とマッチングする。開始イベントの部分としてパスした要素名と、テンプレートにおける対応する名称とをマッチングすることによって、これを達成することができる。
【００１７】
他の図で示されているように、複数のテンプレートインスタンスをメモリ内のツリーに記憶することができる。あるいはまた、テンプレートインスタンスを、例えば、ＸＭＬ（ＳＡＸ）用の単純ＡＰＩがアクセス可能な別のデータ構造に記憶することができる。幾つかの実施例では、複数のテンプレートインスタンスがテンプレートソース内に一緒に記憶される。マッチングを行わず開始イベントによって表される要素は、その親要素の内容（コンテンツ）として扱われる。ＸＳＴ変換は電子商取引ドキュメントのルート要素をマッチングするテンプレート要素を含むべきである。このような制約のために、マッチングテンプレートを欠く子要素がその親要素として扱うことができる。要素の内容は、開始イベントをトリガーするトークンと、終了イベントをトリガーするトークンとの間にあらわれるすべてのものを含んでいる。コンテンツはネスト構造になったサブ要素を含んでいてもよいし、含んでいなくてもよい。コンテンツは例えば、ＸＭＬ型要素の属性などの要素属性を含んでいてもよいし、含んでいなくてもよい。開始イベントによって表される要素と、指定されたテンプレート又はテンプレートソースからのサブテンプレートとの間でのマッチングをする場合、システムは指定されたテンプレートを活性化する。処理が終了イベント１０５に達するとき、システムは、要素を、対応の活性化された指定テンプレートとのマッチングすることを試みる。対応の開始イベントが指定された要素と一致しなかった場合にはこの試みは失敗する。対応の活性化された指定テンプレートによるマッチングの場合、処理を実行する（１０６）。その処理には、テンプレートからの文言（リテラル）テキスト及びストリームからの入力イベントの両方の出力を含むことができる。活性化された指定テンプレートにおける指令に応えて、システムは文言テキスト又は現要素に対応する入力イベントからの内容（コンテンツ）を出力する。現要素のコンテンツを処理しながら、システムは例えば入力バッファからの入力イベントを明確にすることができ、活性化された指定テンプレートを非活性にすることができる。
【００１８】
本実施例は、テンプレートを備えた可変変数を使用することによって拡張することができる。その変数はドキュメントの処理のために活性化されることが可能であったり、指定テンプレート（ネスト化された指定テンプレートを含む）の処理の範囲内で制限することもできる。開始イベントへの応答は１以上の変数を活性化することを含み、対応する終了イベントへの応答はその変数を非活性化することを含む。入力ストリーム値は、可変変数又は可変でない変数に割当てられる。サブストリング（副記号列）、連結又は他の演算を使用しながら、可変変数を変更することができる。終了イベント及び対応のテンプレートを処理することは、変数を演算することを含む。Ｊａｖａ（登録商標）方法などの外部の処理ルーチンによって変数を演算することができる。
【００１９】
本実施例は、テンプレートにおける制御オペレータのフローを用いて更に拡張することができる。制御オペレータのフローは、“もし〜ならば(if)”及び“選択する(choose)”と同じくらい簡単である。更に、“−の間、それぞれは（for-each）”、“〜のとき（when）”、及び“その他の場合（otherwise）”オペレータを含むことができる。“その他の（else）”及び“そのときは、その他の（then-else）”などの構文もまた使用される。制御オペレータのあるフローは、ツリー構造に変換される入力ドキュメントの断片又はサブセクション上で動作する。
【００２０】
図２は、イベント処理に関する代替の高レベルブロック図である。また、本イベント処理は、指定された指定テンプレートで動作する。イベントストリーム１０１は、ストリームから分かれた構文解析系によって、又はシステムの構成要素によって生成される。処理モジュールはイベントストリームを受信する（１０２）。前述したように、それは開始イベント１０３とマッチングさせる（１０４）。マッチング処理に応えて、システムは、要素に対応するコンテンツ、属性、又はラベル１以上の変数を設定する。テンプレートの構造しだいで、変数はローカル範囲かグローバル範囲を有する。変数がローカル範囲を有するとき、変数は対応する指定のテンプレートが活性化しているのと同じ長さだけ活性化する。システムは一般的に、前述した出力処理１０６によって終了イベント１０５を処理する。テンプレートからの文言（リテラル）テキスト及びストリームからの入力イベントを処理することに加えて、処理は、入力ストリーム部分を変数に割当てること、及び論理（ロジカル）、文字列（ストリング）、算術、又は変数上の他の演算を実行することを含む変数を演算することを包含している。変数の内容（コンテンツ）は演算されていたりされていなかったりするが、出力される。処理は前述したように制御命令のフロー、及び外部処理の呼び出しを更に含む。この外部処理は、後述するようにＪａｖａ（登録商標）クラス及び方法を含むことができる。
【００２１】
第１の実施例において、ＸＳＴテンプレート言語は以下の３つの処理コマンドをサポートする。＜xst:template＞はＸＳＴテンプレートの開始タグであり、１ファイルの１以上のテンプレートを記憶するために用いられる。＜xst:pi＞はＸＳＴ処理命令の開始タグである。＜xst:var＞はＸＳＴ変数の開始タグである。
【００２２】
代替の実施例において、処理コマンドがテンプレートの属性として扱われ、“templates”マークアップが“template”マークアップの複数のインスタンスへ親として提供される。
【００２３】
ＸＳＴテンプレートは、ストリングリテラル及びテンプレート変数を含むテキストファイルである。変数は、フォーム＜xst:var＞、＜xst:var＞の開始タグをもつ変数名＜/xst:var＞、及び＜/xst:var＞終了タグを有する。変数はテンプレートとその対応ソースＸＭＬドキュメントとの間の結合を提供する。
【００２４】
変換は、ＸＭＬドキュメントの構文解析を開始する。ＸＭＬドキュメントがルート要素を持つように、ＸＳＴ変換がルートテンプレートを持つ。要素名がルートの場合、テンプレートはroot.tplと名付けられ、ルート要素の名称と拡張子“.tpl”とを組合わせる。ここで、ルートは任意の要素名である。子テンプレートをＸＭＬドキュメントのその親要素を介して親テンプレートに添付することができる。
【００２５】
代替の実施例において、ＸＳＴ変換エンジンは、ストリーミング又はバッファモードの何れかで動くことができる。テンプレートのような変換の中間出力が、ストリングリテラル及びテンプレート変数を含む。ストリーミングモードでは、各テンプレートの変換された出力がストリームアウトして、テンプレートを非活性化又は非ロードする。バッファモードでは、変換の結果が出力され、中間記憶媒体が変換の終わりで又は親テンプレートの非活性化まで書き出される（フラッシュアウトされる）。出力の要素順序は各テンプレート内で、入力ドキュメントの順序と異なっていてもよい。
【００２６】
設計によって、ＸＳＴ変換はロードされたテンプレートを再使用する。一実施例において、ＸＭＬドキュメント用のロードされたテンプレートのリストがそのドキュメントのルートテンプレート名の下で保存される。早いアクセスのためにすべてのリストがメモリに保存される。メモリの使用を最適化するために、実際にはエンジンは、変換された結果をターゲットの出力ストリームに書き出す。
【００２７】
ＸＭＬドキュメントに対応するＸＳＴ変換は、ＸＭＬドキュメント要素に対応する１以上のテンプレートを含む。複数のテンプレートが１つのファイルに格納されることができる。変換中に活性化されたりロードされたりすべきマッチングテンプレートが存在する場合には、ＸＭＬドキュメントの要素名とテンプレートの要素名との単純な文字列比較が定まる。ネーム空間の名前によって、テンプレート名を適切にすることができる。
【００２８】
ＸＳＴ変換エンジンは、初期設定（デフォルト）のＸＭＬ構文解析系／読み出し器、又はユーザが選択したＸＭＬ構文解析系／読み出し器の何れか一つを使用して、ＸＭＬドキュメントを変換するための公開インタフェースを提供する。またそれはＸＭＬ構文解析（ＪＡＸＰ）インタフェース用のＪａｖａ（登録商標）ＡＰＩをサポートする。このエンジンはスタンドアローンサービス又は他のサービスの一部の何れかとして実行する。
【００２９】
ＸＳＴ変換エンジン３０２の第１の実施例は、図３に示すように、テンプレート変換器３０３、ソースドキュメントハンドラー３０５、及びテンプレートプロセッサ３０６モジュールを含む。テンプレート変換器３０３は、ＸＳＴを用いてＸＭＬドキュメントを変換するための公開インタフェースを提供する。ソースドキュメントハンドラー３０５は、コンテンツハンドラーとして登録され、ＸＭＬ構文解析系／読み出し器３０１からの様々なＳＡＸイベントを受信し、それらをテンプレートプロセッサ３０５へ渡す。テンプレートプロセッサ３０６は、ＸＭＬ構文解析系３０１からのＳＡＸイベントを処理する。それはまた、スキーマ付属のフレームワーク（ＳＡＦ）３０７で特定されたルールを用いて、ロードされたテンプレートをキャッシュ／再利用し、且つ要素の値を検索（ルックアップ）するメカニズムを提供する。
【００３０】
図４に示すように、テンプレート変換器４０２は、（１）初期設定のＸＭＬ構文解析系／読み出し器又はユーザが選択したＸＭＬ構文解析系／読み出し器の何れか１つを使用して、ＸＭＬドキュメントを変換するために、（２）ＳＡＸイベントを処理するための他のＸＭＬ変換器／アダプターとともに用いられうるコンテンツハンドラーを得るために、（３）出力ストリームを設定するために、（４）変換の出力ドキュメントを得るために、以下の公開インタフェース４０１,４０３を提供する。
【００３１】
図５に示すように、ドキュメントハンドラー５０２は、（１）出力ドキュメントを得るために、（２）出力ターゲットストリームを設定するために、（３）スタック上の最新に用いられたテンプレートのリストを得るために、（４）使用するスタックにテンプレートリストを置くために、公開インタフェース５０２を提供する。それはまた、そのテンプレートプロセッサへイベントを単純に渡すＳＡＸイベントハンドラー５０１のインタフェースを提供する。
【００３２】
ドキュメントハンドラー５０２によって提供されるインタフェースを設定／取得することに加えて、図６に示すように、テンプレートプロセッサ６０２はＳＡＦ３０７を用いて属性（プロパティ）を検索するためのgetProperty()メソッド６０３を提供する。ＳＡＸイベントハンドラー６０１の５個のインタフェースがＸＳＴ変換６０３のために提供されてきた。Handler startDocument()は、メソッドreset()を呼び出し、テンプレートプロセッサのインスタンス変数のいくつかの状態をリセットする。Handler endDocument()が予約される。ＳＡＸプロセッサによって生成され且つＳＡＸイベントハンドラーによって処理された、開始要素(startElement)イベント、キャラクター又は入力イベント、及び終了要素(endElement)イベントのための処理フローが図７−９のそれぞれに示される。
【００３３】
図７は、開始要素(startElement)モジュール内のフローを示している。本実施例において、開始要素(startElement)モジュールは、例えば文書型定義（ＤＴＤ）、ＸＭＬデータ削減（ＸＤＲ）、ＸＭＬのドキュメントコンテンツ記述（ＤＣＤ）、オブジェクト指向ＸＭＬ用のスキーマ（ＳＯＸ）、ドキュメント定義マークアップ言語（ＤＤＭＬ）、ＸＭＬスキーマ、ＸＭＬ用の標準言語記述（ＲＥＬＡＸ／Ｃｏｒｅ／ＮＧ）、ＸＭＬ用のツリー標準表現（ＴＲＥＸ）、又はスキーマトロン(Schematron)などの抽象データ型を表現することができるパラメータで呼び出される。
【００３４】
ステップ７０２で、スキーマ及びテンプレートをロードするかどうかを判断するために入力がテストされる。ステップ７０５はスキーマ及びテンプレートを取得することを含む。特定の抽象データ型のために、抽象ツリーが生成され、且つクエリーされることができる。ステップ７０６で論理的な枝は、ルートテンプレートが初期化されているかどうかに依存する。初期化されている場合、ステップ７０８で、オペランドであるテンプレートがその親テンプレートに添付される。初期化されない場合、オペランドであるテンプレートがルートテンプレートであり、ステップ７０７でフラグが設定される。ステップ７０９で、新規に活性化されたテンプレートがテンプレートスタック上にプッシュされる。ステップ７０９又は７０３からのステップ７１０で、要素の属性が処理される。ＸＭＬを用いて要素が符号化される場合、その属性はＸＭＬ属性である。属性処理の終了で、ルーチンが戻る。ステップ７０２に戻って、処理されるべき要素が指定のテンプレートに一致しない場合、次の決定分岐７０３は、もっとも最新に活性化されたテンプレートが対応要素のコンテンツをコピーするために設定されるかどうかを判断する。このポイントで、サブ要素がその親要素のコンテンツとして扱われる。コピーが設定される場合、処理が７０４へ進んでコピーをセットアップし、ステップ７１２において戻る前に、ステップ７１１で開始要素(startElement)メソッドが呼び出されるときに渡された属性をコピーする。テンプレートがコンテンツをコピーするために設定されない場合、最新要素に一致する入力ストリームが出力ストリームへコピーされない。７０３から７１２へ本手法が戻る。
【００３５】
図８は、入力ストリーム８０１を処理するモジュール内のフローを示している。本実施例において、最初の論理的な枝８０２がlookup()メソッドを使用し、スキーマ付属のフレームワークがこの入力ストリームを処理することを適用するかどうかを判断する。適用可能なスキーマ付属のフレームワークであり、且つアクセス可能の両方でなければならない（nullに等しくないこと）。スキーマ付属のフレームワークが適用可能で且つ使用可能である場合、それは適用される（８０３）。次の処理枝は最新要素と同じ名前を持つ変数が存在するかどうかを判断する。最新要素の変数が存在する場合、戻る（８０８）前に、変数設定(set variable)メソッドが呼び出されて（８０６）、入力ストリームの全部又は一部を変数に変換する。最新要素のための変数が存在しない場合、論理的な枝８０５は、コピー命令又は属性が呼び出されているかどうかを判断する。呼び出されている場合、copyメソッド８０７が呼び出される。呼び出されていない場合又はコピーの後、本方法が戻る（８０８）。大したことのないやり方で、一時的にバッファ化された入力イベントの処理が終了イベントまで延期される。
【００３６】
図９は、終了要素イベント９０１を処理するモジュール内のフローを示す。最初の論理的な枝９０２は、最新の活性テンプレートと終了する要素とをマッチングさせる。これはメソッドへパラメータとして渡された名前を、最新のテンプレート名の部分にマッチングすることによって行われる。フローチャートにおいて、図示されたアプローチは、任意に選択された拡張子を用いるのであるが、拡張子“.TPL”を要素名に連結しそれを最新のテンプレートと組合わせている。基礎であって入力イベントを処理する実施例では、マッチングの欠如がリターンメソッド９０６に続く。終了イベント要素まで一時的にバッファ化された入力イベントを延期する実施例では、たとえ終了イベントと整合するものがなくても、例えば、要素の一部のコンテンツをコピーすることなどの幾つかの処理が実行される。整合するものがあり、スタックにテンプレートを格納する実施例では、最新テンプレートが処理９０３のためにスタックをポップオフする。次の論理的な枝９０４は、コピー命令又は属性が効果的であるかどうかを判断する。効果的である場合、バッファは出力されて且つフラッシュ(flush)され得る（９０５）。次に、処理が９０４又は９０５に何れかを続け、リターンメソッド９０６を行う。
【００３７】
図１０は、スキーマ付属フレームワークを使ったＸＳＴの第１の実施例における処理フローのためのブロック図である。汎用フレームワークのスキーマ付属フレームワークは、ＸＳＴの本実施例に統合されて、変換されるべきＸＭＬドキュメントの構造又は属性についての付加的な情報をユーザが特定できるようにする。スキーマ付属は特定のスキーマに関連するアプリケーション特有のデータ又はドメイン特有のデータを付加的に含むＸＭＬドキュメントである。ＳＡＦ技術に関する付加的な情報がVorthmann,S.等の“スキーマ付属フレームワーク（The Schema Adjunct Framework）”にみられる。
www.Extensibility.com/resources/saf_dec2000.html
【００３８】
テンプレートプロセッサ１００１は、イベントストリームのある、一般には図８のlookup()メソッド８０３に対応するイベントを処理する。特定の要素のために、論理的な枝１００２はＳＡＦ検索が要求されているかどうかを判断する。要求されていない場合、本方法が戻る（１００８）。要求されている場合、次の論理的な枝１００３は、その要求されたＳＡＦがアクセス可能であるかどうかを判断する。アクセス可能でない場合、本方法が戻る（１００８）。一実施例において、スキーマ付属フレームワークがＪａｖａ（登録商標）アプリケーションを呼び出す。テンプレートプロセッサはクラス名及びメソッド名１００４を取得し、次にクラスインスタンス及びクラスメソッド１００５を取得する。クラスメソッドがnullでない場合（１００６）、クラスメソッドを呼び出す（１００７）。クラスメソッドを呼び出すことは、ＸＳＴの外部のサービス呼び出しを呼び出すことができる。クラスメソッドが呼び出され且つ戻った後、テンプレートプロセッサが戻る（１００８）。
【００３９】
以下の例は、ＸＭＬドキュメントの＜RefDate＞のコンテンツに現在の日時を提供するＳＡＦの使用を示している。この拡張のためにＪａｖａ（登録商標）クラスが使用される。
【００４０】
2005535982.tif 000003
【００４１】
上記例の場合、＜param-list＞要素のコンテンツはＸＳＴによるハッシュテーブルオブジェクトに記憶されるリーフ要素のリストを特定する。すなわち、RefDateはＸＭＬドキュメントソースの要素名に対応する。test.xst.templates.InfoRetrieverはスキーマ付属拡張を提供するためのＪａｖａ（登録商標）クラス名である。そして、getDateTimeは呼び出されるべき本クラスのメソッド名である。＜param-list＞はＳＡ拡張を可能にし、ＸＭＬドキュメントから、ＸＳＴによって処理されている要素にアクセスする。
【００４２】
＜RefDate＞要素のための更新情報を提供するのに用いられるＪａｖａ（登録商標）クラス用のサンプルコードを以下に示す。
2005535982.tif 000004
【００４３】
ＳＡＦ拡張を提供するメソッドは、上記サンプルコードに示されているように、４つの引数をもつことができる。localName及びvalueは、オリジナルなＸＭＬドキュメントにおける変換の下、要素の名前及び値に対応する。htはハッシュテーブルであって、ＳＡＦドキュメントの＜param-list＞要素のコンテンツによって特定されるリーフ要素のリストを記憶する。そして、eventはメソッドが呼び出されるときのＳＡＸイベント名である。本メソッドに渡される引数は、サンプルコードで用いられていないことに留意されたい。検索（ルックアップ）が使用可能な場合、上記メソッドはＸＳＴによって呼び出され、変換の下、＜RefDate＞要素に付加的な情報を提供するだろう。
【００４４】
以下の例は＜RefDate＞要素をもつサンプルソースドキュメントのChangeOrder.xmlを示している。
2005535982.tif 000005
【００４５】
ＳＡＦ拡張処理における殆どのロジックとともに、ChangeOrder要素を変換するためにサンプルテンプレートを使用する。
2005535982.tif 000006
【００４６】
ＳＡＦドキュメモリントを有するテンプレート及び上述したＪａｖａ（登録商標）クラスを使用して、且つ２００１年９月２１日にＸＳＴを実行させたとき、変換されたドキュメントは以下のような結果となる。
2005535982.tif 000007
【００４７】
本変換ドキュメントにおいて、＜RefDate＞要素は、Ｊａｖａ（登録商標）ＳＡ拡張によって提供される更新された日付／時間をもつ。
以下の例は、ＳＡＦの使い方を示し、ＸＭＬドキュメントの“address1”フィールドに付加的な情報を与える。Ｊａｖａ（登録商標）クラスが本拡張のために使用される。
2005535982.tif 000008
ここで、“address1”は、変換／修正されるべきオリジナルなＸＭＬドキュメントにおけるフィールド、“test.xst.templates.AddressRetriever”はＪａｖａ（登録商標）クラス名であり、“getAdditionalAddressInfo”は呼び出される本クラスのメソッド名であり、“replace”は戻り値の状態での動作モードである。使用されるＪａｖａ（登録商標）クラスのサンプルコードを以下に示す。
【００４８】
2005535982.tif 000009
【００４９】
メソッドの記号は３つの引数の“String localName”、“String value”、“Hashtableparams”を有する。ここで、“localName”及び“value”は、オリジナルなＸＭＬドキュメントの変換の下、フィールドの名前及び値に対応し、“Hashtableparams”はＸＭＬドキュメントにおけるスキーマ付属ドキュメント及びそれらの使用可能な値で特定される名前のリストを記憶する。検索（ルックアップ）が利用可能な場合、上記メソッドはＸＳＴによって呼び出され、付加的な情報を変換後のＸＭＬドキュメントに提供する。
【００５０】
ＸＳＴ変換エンジンは、Xercesのような初期設定のＸＭＬ構文解析系、又はユーザが選択した構文解析系を用いて、ＸＭＬドキュメントを変換するためのインタフェースを提供する。イベントストリームを生成するために、図１１及び図１２の２つの代替的な構文解析系を使用する。本環境で示される特定の構文解析系は、ＸＭＬ構文解析系である。構文解析系は、初期設定の商業上ＸＭＬ構文解析系１１０１及びXerces/Xalan構文解析系１２０１である。これらの構文解析系を呼び出すためのサンプル構文及び意味規則が示されている。何れかにおいて、構文解析の出力がＸＳＴ変換エンジン１１０２への入力である。ＸＳＴ変換エンジンは、テンプレート変換器１１０３、ソースドキュメントハンドラー１１０４、及びテンプレートプロセッサ１１０５を含む。テンプレートソース及びドキュメントソースのためのこれら構成要素間の詳細な相互作用を図１３及び図１４に示す。
【００５１】
第２の実施例では、高レベルな設計が付加的な特徴をサポートする。ＸＳＬＴスタイルシートのテンプレートと同じ構文をもつＸＳＴテンプレートが用いられる。変換のために用いられるすべてのテンプレートが、１つのテンプレートソースに存在するか、テンプレートソースの参照によって含まれる。付加的なテンプレートが公開インタフェース又はＡＰＩを介して加えられることができる。ＸＰａｔｈ表現又はツリー演算を使ったアクセス可能なツリー構造によって、ソースドキュメントの断片又はサブセクションを表すことができる。選択される場合には倫理的な演算で、その他の場合はＸＳＴテンプレートでサポートされる。文字列（ストリング）、部分文字列（サブストリング）、連結機能性のために、組み込まれた機能が提供される。ユーザ定義の拡張機能を処理するために、Ｊａｖａ（登録商標）拡張機能ハンドラーをインストールすることができる。そのハンドラーは、クラスパス及びメソッド名の両方を特定することによって、Ｊａｖａ（登録商標）方法を呼び出すことをサポートする。変換の間では、入力ストリームからの値をアクセスする変数が可変である。代替の実施例において、第１及び第２の実施例の特徴が混合され且つ整合される。
【００５２】
図１３、図１４に示されているように、第２の実施例の高レベルなアーキテクチャが第１の実施例と類似する。図１３は、ＸＳＴテンプレートソースを構文解析するための処理フローを示した図である。この図において、変換モジュール１３０３が、Commerce One’s CXPParser又はXerces構文解析系などのＸＭＬ構文解析系１３０４とともにＸＳＴを使用するのに都合のよい方法を提供する。さらにそれはコンテンツハンドラーの新たなインスタンス、及び使用されたテンプレートリストを得るためのインタフェースを提供する。ハンドラーモジュール１３０５は、テンプレート及びソースドキュメント１３０１の両方のためのコンテンツハンドラーを提供する。
【００５３】
これらのハンドラーは、任意のＸＭＬ構文解析系、好ましくはＷ３Ｃ標準に従う構文解析系とともに使用されることができる。ハンドラーは、更なる処理のためにＸＳＴプロセッサ１３０６にＳＡＸ構文解析イベントを送信する。プロセッサモジュール１３０６は、ＤＯＭツリー１４０７にＸＳＴテンプレート１３０１を処理するためのテンプレートプロセッサ、及びテンプレートリスト１４０８を用いてＸＭＬインスタンス１４０１を変換するためのソースドキュメントプロセッサを提供する。ＸＳＴテンプレート１４０１は、変換ルールを提供する有効なＸＭＬドキュメントである。テンプレートモジュールは、テンプレート内の各要素のためのクラスを含む。それはまた、テンプレートをストリームし且つ複製するメカニズムを提供する。図示していないが、Xpathモジュールは、Xpathエンジンによって実装されるXpath表現を使用し且つ実行するためのアダプタークラスを提供する。
【００５４】
第１の実施例にもどって、ドキュメントハンドラー１３０５への公開インタフェースが幾つかのメソッド呼び出しを提供する。getOutputDocumentメソッドは、public XSTtemplate getOutputDocument()として宣言されることができる。このメソッドは、変換で用いられる現在のルートテンプレートに戻る。getOutputStreamメソッドは、public java.io.OutputStream getOutputStream()として宣言されることができる。本メソッドは、この変換で用いられるターゲット出力ストリームに戻る。getContentHandlerメソッドは、public org.xml.sax.ContentHandler getContentHandler()として宣言されることができる。本メソッドは、このハンドラーのContentHandlerに戻る。getTemplatesメソッドは、public java.util.Hashtable getTemplates()として宣言されることができる。本メソッドは、現在のテンプレートリストを得る。putTemplatesメソッドは、public void putTemplates(java.util.Hashtable templList)として宣言されることができる。本メソッドは、現在の又は活性化されたテンプレートリストにテンプレートリストを置く。setOutputStreamメソッドは、public void setOutputStream(java.io.OutputStream os)として宣言されることができる。本メソッドは、この変換のための出力ストリームを設定する。SetSiblingContentHandlerメソッドは、public void setSiblingContentHandler(org.xml.sax.ContentHandler handler)として宣言されることができる。本メソッドは、兄弟(sibling)リストの終わりに兄弟ハンドラーを置く。
【００５５】
DocumentProcessorのための公開インタフェースは、Templateprocessorに拡張する。それはまた、いくつかのメソッドを含む。それは、characters,comment,endDocument,endElement,processingInstruction,pushElement,pushTemplate,startDocument,startElementを含むＳＡＸに準拠したテンプレートプロセッサメソッドから継承する。加えて、DocumentProcessorインタフェースのgetOutputStreamメソッドは、public java.io.OutputStream getOutputStream()として宣言されることができる。本メソッドは、このプロセッサによって使用される出力ストリームを得る。本オブジェクトは、ストリーミングモード変換のためにnullになり得ない。getDOMbyRootNameメソッドは、public org.w3c.dom.Node getDOMByRootName(java.lang.String name)として宣言されることができる。本メソッドは、所定の名称のためにDOMオブジェクトを検索するgetOutputTemplateメソッドは、public XSTtemplate getOutputTemplate()として宣言されることができる。本メソッドは、本変換のルートテンプレートである出力テンプレートを得る。getSchemaPathメソッドは、public java.lang.String getSchemaPath()として宣言されることができる。本メソッドは、スキーマ付属ドキュメントのためのスキーマパスを得る。getTemlatePathメソッドは、public java.lang.String getTemplatePath()として宣言されることができる。本メソッドは、テンプレートパスを得る。getTemplatesメソッドは、public java.util.Hashtable getTemplates()として宣言されることができる。本メソッドは、現在のテンプレートリストを得る。getXPathContextメソッドは、public org.apache.xpath.XPathContext getXPathContext()として宣言されることができる。本メソッドは、ソースドキュメントツリーのコンテキストノードを含むべきであるXpath実行コンテキストを得る。lookup（検索）メソッドは、public java.lang.String method,java.lang.String event,XSTtemplate templ)として宣言されることができる。本メソッドは、特定のメソッドを使って所定のノードのための値を検索する。そのパラメータリストにおいて、localNameは、第１の選択の名前であるコンテキストノードの名前である。valueはコンテキストノードの値であり、htはテンプレートで特定されたパラメータの値を記憶するために用いられるハッシュテーブルであり、methodは検索のために用いられるメソッド名であり、eventは本メソッドが呼ばれるときのＳＡＸイベントであり、templはコンテキストノードのテンプレートである。本メソッドは、所定のコンテキストノードのための値を戻す。putTemplatesメソッドは、public void putTemplates(java.util.Hashtable templList)として宣言されることができる。本メソッドは、現在のテンプレートリストにテンプレートリストを追加する。setOutputStreamメソッドは、public void setOutputStream(java.io.OutputStream os)として宣言されることができる。本メソッドは、ストリミングモード変換のために、本プロセッサのOutputStreamを設定する。setSchemaPathメソッドは、public void setSchemaPath(java.lang.String path)として宣言されることができる。本メソッドは、スキーマ付属ドキュメントのためのスキーマパスを設定する。setTemplatePathメソッドは、public void setTemplatePath(java.lang.String path)として宣言されることができる。本メソッドは、テンプレートパスを設定する。
【００５６】
テンプレートプロセッサ用の公開インタフェースは、幾つかのメソッドを含む。getTemplatesメソッドは、public java.util.Hashtable getTemplates()として宣言されることができる。本メソッドは、ス現在のテンプレートリストを得る。pushElementメソッドは、public void pushElemnt(java.lang.Object elem)として宣言されることができる。本メソッドは、エレメントスタックに要素をプッシュする。pushTemplateメソッドは、public void pushTemplate(java.lang.String name,java.lang.Object templ)として宣言されることができる。本メソッドは、nameがプッシュされるべきオブジェクト名であり、templがプッシュされるべきテンプレートのオブジェクトであるとき、テンプレートスタックにテンプレートをプッシュする。Charactersメソッドは、public void characters(char[] ch,int start, int length) throws org.xml.sax.SAXExceptionとして宣言されることができる。これは、文字（character）又は入力（input）用のＳＡＸイベントインタフェースである。そのパラメータリストにおいて、chは現在要素の値を含む文字配列であり、startは現在要素値のための文字配列における最初の文字インデックスであり、lengthは現在要素値のための文字数である。endDocumentメソッドは、public void endDocument() throws org.xml.sax.SAXExceptionとして宣言されることができる。これは、endDocument用のＳＡＸイベントハンドラーである。endElementメソッドは、public void endElement(java.lang.String namespace,java.lang.String localName,java.lang.String rawName) throws org.xml.sax.SAXExceptionとして宣言されることができる。これは、endElement用のＳＡＸイベントハンドラーである。そのパラメータリストにおいて、localNameは接頭部のない現在要素のノード名であり、rawNameは（接頭部のある）現在要素の限定された名前である。
【００５７】
startDocumentメソッドは、public void startDocument() throws org.xml.sax.SAXExceptionとして宣言されることができる。これは、startDocument用のＳＡＸイベントハンドラーである。startElementメソッドは、public void startElement(java.lang.String namespace,java.lang.String localName,java.lang.String rawName,org.xml.sax.Attributes atts) throws org.xml.sax.SAXException,javax.xml.transform.TransformerException,java.io.IOException.SAX event handler interface:startElementとして宣言されることができる。そのパラメータリストにおいて、namespaceは現在要素のネーム空間であり、localNameは接頭部のない現在要素の限定された名前のローカル部分であり、rawNameは（接頭部のある）現在要素の限定された名前であり、attributesは現在要素に関連する属性リストである。processingInstructionメソッドは、public void processingInstruction (java.lang.String target,java.lang.String data) throws org.xml.sax.SAXExceptionとして宣言されることができる。これは、processingInstruction用のＳＡＸイベントハンドラーインタフェースである。そのパラメータリストにおいて、targetは処理命令ターゲットであり、dataは処理命令データであるか、何も与えられなけばnullである。メソッドは、org.xml.sax.SAXExceptionをスロー(throw)するが、それは他の例外を包み込む可能性があるＳＡＸ例外であり得る。コメントがサポートされる。
【００５８】
公開インタフェースXSTElementは、ＸＳＴ変換言語の要素をサポートする。本インタフェースの詳細は、第１及び第２の実施例の間で変わる。第１の実施例は、幾つかのメソッドを含む。appendChildメソッドは、public void appendChild (XSTElement elem)として宣言されることができる。本メソッドは、この要素に子要素を付加する。appendAndPushChildメソッドは、public void appendAndPushChild (XSTElement elem)として宣言されることができる。本メソッドは、この要素に子要素を付加し、且つそのプロセッサのエレメントスタックにそれをプッシュする。appendContentメソッドは、public void appendContent (java.lang.String content)として宣言されることができる。本メソッドは、この要素のコンテンツにオブジェクトのコンテンツを付加する。attachChildメソッドは、public void attachChild (XSTElement elem)として宣言されることができる。本メソッドは、たとえそれが直接の子でなくても、この要素に子要素を付加する。cloneメソッドは、public java.lang.Object clone()として宣言されることができる。本メソッドは、この要素を複製し、コピーを戻す。cloneAllメソッドは、public XSTElement cloneAll()として宣言されることができる。本メソッドは、その子のすべてを含む要素を複製する。executeメソッドは、public java.lang.Object execute()として宣言されることができる。これは、要素変換に対するエントリー点である。それは、要素変換の結果を戻す。executeメソッドは、public void execute(java.io.OutputStream os) throws java.io.IOExceptionとして宣言されることができる。本メソッドは、この要素変換を実行し、且つOutputStreamにその結果を送信する。getAttibuteメソッドは、public java.lang.String getAttibute(java.lang.String qname)として宣言されることができる。本メソッドは、所定の名前のための属性のコンテンツを検索する。getChildメソッドは、public XSTElement getChild()として宣言されることができる。本メソッドは、この要素の第１の子を得る。
【００５９】
getContentメソッドは、public java.lang.Object getContent()として宣言されることができる。本メソッドは、このようそのコンテンツを得る。getElementNameメソッドは、public java.lang.String getElementName()として宣言されることができる。本メソッドは、この要素の名前属性を得る。getNameメソッドは、public java.lang.String getName()として宣言されることができる。本メソッドは、この要素の名前を得る。getNamespaceメソッドは、public java.lang.String getNamespace()として宣言されることができる。本メソッドは、この要素のネーム空間を得る。getParentメソッドは、public java.lang.Object getParent()として宣言されることができる。本メソッドは、この要素の親要素青を得る。getSiblingメソッドは、public XSTElement getSibling()として宣言されることができる。本メソッドは、この要素の兄弟要素を得る。setProcessorメソッドは、public voidsetProcessor(TemplateProcessor processor)として宣言されることができる。本メソッドは、この要素のテンプレートを処理するプロセッサを設定する。setParentメソッドは、public void setParent(java.lang.Object parent)として宣言されることができる。本メソッドは、この要素の親要素を設定する。setSiblingメソッドは、public void setSibling(XSTElement elem)として宣言されることができる。本メソッドは、この要素の兄弟要素を設定する。
【００６０】
XSTtemplateの公開インタフェースは、更にＸＳＴ処理言語の要素を処理する。この公開インタフェースは、幾つかのメソッドを含む。getParentTemplateメソッドは、public XSTtemplate getParentTemplate()として宣言されることができる。本メソッドは、この要素の親テンプレートを得る。getIDメソッドは、public int getID()として宣言されることができる。本メソッドは、このテンプレートのＩＤを得る。getDOMメソッドは、public org.w3c.dom.NodegetDOM()として宣言されることができる。本メソッドは、このテンプレートのＤＯＭオブジェクトを得る。getOccurrencesメソッドは、public int getOccurrences()として宣言されることができる。本メソッドは、このテンプレートの使用数を得る。getMaxOccurrencesメソッドは、public int getMaxOccurrences()として宣言されることができる。本メソッドは、このテンプレートの許可された使用最大数を得る。Variableメソッドは、public boolean is Variable(java.lang.String name)として宣言されることができる。本メソッドは、テンプレートが所定の名前のための変数をもつ場合にチェックする。それは、テンプレートが所定の名前のための変数をもつかどうかを示すフラグを戻す。setParentTemplateメソッドは、public void setParentTemplate(XSTtemplate templ)として宣言されることができる。本メソッドは、このテンプレートの親テンプレートを設定する。setVariableメソッドは、public boolean setVariable(java.lang.String name,java.lang.Object value)として宣言されることができる。本メソッドは、このテンプレートにおける変数のコンテンツを設定する。setVariableメソッドは、public boolean setVariable(java.lang.String name,java.lang.Object value,Boolean check)として宣言されることができる。本メソッドは、このテンプレートにおける変数のコンテンツを設定する。そのパラメータリストにおいて、nameは変数の名前であり、valueは設定される変数のコンテンツであり、checkは変数のコンテンツが最初にチェックされるべきであることを示すためのフラグである。writeメソッドは、public void write(java.io.OutputStream os) throws java.io.IO exceptionとして宣言されることができる。本メソッドは、出力ストリームにこのテンプレート変換のコンテンツを書く。
【００６１】
第１の実施例で用いられるテンプレートは、単純なルールでドキュメントを効果的に変換する。しかしながら、それは論理的な演算をサポートするためのスキーマ付属フレームワークに依存するとともにＪａｖａ（登録商標）拡張機能を呼び出し、実行性能を低下させ且つテンプレート生成の複雑さを増加させる。
【００６２】
第２の実施例は、テンプレートにおいてありふれたＸＳＬＴ構文を使用している。それはテンプレート言語に、論理的演算及びＪａｖａ（登録商標）拡張のサポートを構築する。この特徴はＸＳＴを使用可能にし、複雑な変換を実行する。第２の実施例のＸＳＬＴ型構文を用いたテンプレートを以下に示す。
2005535982.tif 000010
【００６３】
本例において、属性“name”はテンプレート名を特定するために用いられる。“Boing”及び“Node2”はともにローカル変数であり、それらの内容は変換されたドキュメントに自動的に送信されるだろう。テンプレートはグローバル及びローカル変数の両方をもつことができる。ローカル変数の内容を出力ドキュメントに自動的に送信することができる。
【００６４】
以下のテンプレートにおいて、“myVar”はグローバル変数である。以下のテンプレート内容でそれを参照することができる。要素“Node22”は、ローカル変数である。その値はグローバル変数“myVar”の内容である。
【００６５】
2005535982.tif 000011
【００６６】
変換で用いられるすべてのテンプレートのために、単一のテンプレートソースが用いられる。テンプレートソースは、要素＜xst:templates＞で開始すべきである。上記例のソース名は、“SimpleTransform”である。上記ソースでは２つのテンプレート、即ち、Root及びNode1がある。いったんロードされると、テンプレートソース内のすべてのテンプレートが、アクセスを迅速にするためにメモリに記憶されるだろう。インタフェースが、変換中の付加的なテンプレートでパスのために提供されるだろう。
【００６７】
テンプレート属性のＤＯＭのルートノードを特定することによって、ソースストリーミング中のソースドキュメントの断片又は部分のためにＤＯＭを生成することができる。次に、ＤＯＭをアクセスするためにXpath表現又はツリー演算を用いることができる。
2005535982.tif 000012
【００６８】
上記例において、属性“domsrc”は入力ドキュメントのＤＯＭソースのルートノードを定義する。この属性は、それをアクセスする他のテンプレートにとっての生成されたＤＯＭ名として使用されるだろう。属性“dom”は、本テンプレートで用いられるべきＤＯＭ名を特定する。ひとたび生成されると、ＤＯＭは変換で用いられるすべてのテンプレートにアクセス可能である。
【００６９】
以下は、前の例でのテンプレートによって生成されたＤＯＭを再使用する別のテンプレートである。
2005535982.tif 000013
【００７０】
論理的演算“if”及び“choose”が第２の実施例でサポートされる。
2005535982.tif 000014
本例において、テストがリーフノード“ContactName”上にある。テストがリーフノード上にない場合、有効なXPath表現が用いられなければならず、Xpath用のコンテキストノード／DOMが使用可能であるべきである。
2005535982.tif 000015
【００７１】
論理的演算＜choose＞が更にサポートされる。要素＜choose＞は子要素＜when＞及び＜otherwise＞を有している。
2005535982.tif 000016
【００７２】
要素＜choose＞は、複数のオプションをサポートするために複数の子要素＜otherwise＞を有している。
2005535982.tif 000017
最後の子要素＜otherwise＞だけが属性“test”を有していない。
【００７３】
以下の組み込まれた関数が第２の実施例でサポートされる。文字列関数は、
2005535982.tif 000018
である。
連結(concat)関数は、
2005535982.tif 000019
である。
【００７４】
文字列長(string-length)関数は、
2005535982.tif 000020
である。
部分文字列(sub-string)関数は、
2005535982.tif 000021
である。
【００７５】
上記テンプレートにおいて、変数$Address=“19191 Valco Parkway,Cupertino”が与えられれば、関数sub-string(..)からの戻り値は、変数“StreetAddress”の“19191Valco Parkway”である。また、足し算(+)、引き算(-)、掛け算(*)、割り算(div)などのＸＳＬＴによってサポートされた付加的な組み込み関数をサポートすることができる。
【００７６】
ネーム空間／接頭部“java”を備えたまさに組み込み関数のように、Ｊａｖａ（登録商標）表現関数を用いることができる。
2005535982.tif 000022
テンプレートで用いられるＪａｖａ（登録商標）拡張関数を呼ぶための引数の数は、当該Ｊａｖａ（登録商標）拡張関数の引数の数と一致するべきである。
【００７７】
ＸＳＬＴと相違するグローバル変数及びローカル変数の両方を変換中に修正することができる。以下は、変換中にグローバル変数を修正する例である。
2005535982.tif 000023
【００７８】
各ＸＳＴ要素のスキーマを図１５Ａで見つけることができる。図１５Ａにおいて、要素属性用の属性使用の（要求されるか又は随意選択の）値を定義することができる。
【００７９】
ＸＭＬ要素テンプレートはテンプレートソースドキュメントのルート要素である。それは、その子コメントを持つことができたり、変数に関する上記議論で示され且つ以下に示されるようなテンプレートを含むことができる。
2005535982.tif 000024
【００８０】
この例において、要素val-ofは、＜Node1＞の内容のために使用されるのに対して、要素var及びvar-ofが＜Node2＞の内容のために使用される。これらの使用については後述する。
テンプレートはテンプレートの範囲／有効期間内での変換ルールを提供する。またそれは、ターゲット／変換後のドキュメントのレイアウトを提供する。テンプレートは、ソースＸＭＬドキュメントで一致する要素用の開始要素(startElement)のＳＡＸイベントで活性化されたりロードされたりし、且つ同じ要素の終了要素(endElement)のＳＡＸイベントでアンロードされたりするだろう。ＸＳＴは、可能であれば、終了要素(endElement)のイベントで、テンプレートの変換後の内容を送信することを試みる。テンプレート要素の構文は、以下のとおりである。
2005535982.tif 000025
【００８１】
この構文で、一致するのはソースドキュメントのID/name要素であり、テンプレートが開始要素/終了要素のＳＡＸイベントでロード/アンロードされるために一致している。Namespaceは要素を一致させるためのネーム空間である。その初期値はnullである。Copyは初期動作がターゲットドキュメントへソースをコピーするかどうかを指定するためのフラグである。初期値は偽(false)である。Deferredは、テンプレートの内容の出力が、その親テンプレートの内容が出力されるまで延期されるかどうかを指定するためのフラグである。初期値は偽(false)である。Inclusiveは、copy=trueのときに、ターゲットドキュメントへルート要素名をコピーするかどうかを指定するためのフラグである。初期値は真(true)である。Aliasは、copy=true且つinclusive=falseのときに、ターゲットドキュメントへコピーされたルート要素名のための置換えである。初期値はnullである。Domsrcは、本テンプレートの範囲内でルート（要素）としてそれを使用しながら、ＤＯＭが生成されるはずのソースドキュメントの要素名である。ＤＯＭはグローバルオブジェクトとして常に生成され、すべてのテンプレートにアクセス可能である。初期値はnullである。Skipは、変換中にスキップされる要素のために、“｜”によって分離された名前のリストを含む。初期値はnullである。Paramは、変換中に後の使用として記憶される要素のために、“｜”によって分離された名前のリストである。初期値はnullである。Friendは、一致するソースドキュメントの要素名のエイリアス（仮想ファイル）である。初期値はnullである。
【００８２】
テンプレートの活性化又はローディング、及び非活性化又はアンローディングがＳＡＸイベントによってトリガーされるので、親テンプレートがその時間に子テンプレートの実行／出力を延期させるために用いられ、親テンプレートの実行／出力を出力する。これは、ソースドキュメントのストリーミング中、その子テンプレートを実行する前に、要求される情報が利用可能であることを保証している。
【００８３】
繰返しになるが、要素val-ofがターゲットドキュメントに選択された内容を送信するために使用される。
2005535982.tif 000026
有効なXPath表現を用いて要素val-ofを初期化することができる。
【００８４】
属性選択値として、以下の表現を用いることができる。Paramは、テンプレートに対してローカルなパラメータを参照する。例えば、＜xst:val-of select=“param(CountryCode)”/＞である。Variableは可変変数である。例えば、＜xst:val-of select=“$v”/＞である。組み込み関数は上述したあれらのＸＳＴ組み込み関数を含む。例えば、＜xst:val-of select=“string(‘my variable’)”/＞である。Java extensionは、Ｊａｖａ（登録商標）拡張関数である。それは、“.”で分離されたクラスパス名とメソッド名とを含んでいなければならない。例えば、＜xst:val-of select=“com.commerceone.xst.test.InfoRetriver:getDateTime($v0,2000)”/＞である。XPath/DOMは、ＤＯＭを持つ有効なXpath表現である。例えば、＜xst:val-of select=“//ListOfItemDetail/ItemDetail”dom=“ListOfItemDetail”/＞である。属性domは、select/XPath表現のためのＤＯＭソースを指定するために用いられる。
【００８５】
属性disable-output-escapingは、以下の文字、<,>,&のエスケープを使用できないようにするために用いられる。初期値は、それぞれ、&lt,&gt,&ampとしてそれらの文字をエスケープ（拡張）する。
【００８６】
要素varは、ＸＳＴの変数を定義／宣言するために用いられる。VariableはＸＳＴで可変である。変数はテンプレートに対してグローバル又はローカルの何れかでありうる。テンプレートの直接の子であるすべての変数はグローバル変数であり、すべてのテンプレートに対してアクセス可能である。
2005535982.tif 000027
【００８７】
有効なXPath表現を用いて要素varを初期化することができる。Select/XPath表現のためのソースとしてDOMを指定するために属性domを用いることができる。要素valのために、要素val-ofに関する同様の表現の集合を用いることができる。
【００８８】
以下のコード抜粋は上述した表現を示している。
2005535982.tif 000028
【００８９】
以下の幾つかの例において、次のＸＭＬソース入力が用いられる。
2005535982.tif 000029
【００９０】
上記のテンプレートを用いて変換されたこのＸＭＬソース入力は、以下の出力を生成する。
2005535982.tif 000030
【００９１】
以下は、ＤＯＭ属性を用いたサンプルテンプレートである。
2005535982.tif 000031
【００９２】
上記テンプレートルートで用いられたＤＯＭは、以下のテンプレートNode1で生成される。このテンプレート及び上記ソースドキュメントを用いた出力ドキュメントは、
2005535982.tif 000032
である。
【００９３】
要素bind-templateは、テンプレート属性の値がソースドキュメントの要素名と一致するときに、テンプレートを活性化したりまとめたりするために用いられる。これは、テンプレート属性のコピーが偽(false)であるときにのみ必要となる。コピーが真(true)のとき、テンプレートは子テンプレートがソースドキュメントの要素をマッチ(match)できるのと同じ範囲内に任意のテンプレートをまとめたり/ロードしたりすることができる。テンプレートをマッチング(matching)し且つ活性化する(activating)するための構文は、＜xst:bind-template name=“id”/＞である。
【００９４】
以下のテンプレート、
2005535982.tif 000033
は、上記ソース入力に適用され、以下の出力を生成する。
【００９５】
2005535982.tif 000034
【００９６】
要素attributeは、ユーザ定義の要素に属性を追加/付加するために用いられる。その構文は、以下のとおりである。
2005535982.tif 000035
【００９７】
要素val-of及びvarのように、選択表現は有効なXPath表現である。
【００９８】
以下のテンプレート、
2005535982.tif 000036
は、上記ソース入力に適用されるときに、以下の出力を生成する。
2005535982.tif 000037
【００９９】
選択されるときその他のとき、ＸＳＴの論理的演算を提供するために要素が用いられる。有効なXPath表現を“テスト表現”即ち、属性testの値のために用いることができる。それらの構文は、以下のとおりである。
2005535982.tif 000038
【０１００】
以下のテンプレート、
2005535982.tif 000039
は、上記ソース入力に適用され、以下の出力を生成する。
2005535982.tif 000040
【０１０１】
要素commentは、ターゲットドキュメントにコメントを追加するために用いられる。それは、任意のテンプレート要素の子でありうる。その構文は、以下のとおりである。
2005535982.tif 000041
【０１０２】
要素fall-backは、アクションがテンプレート要素の結合テンプレート、ロードテンプレート、及びリダイレクト(redirect)に失敗したとき、エラーイベント又はデバッグ情報を処理するアプリケーションの可能性を提供する。
【０１０３】
以下のテンプレートは、フォールバックの構文を示している。
2005535982.tif 000042
所定のテンプレートをロードできないとき、アプリケーションによって提供されるErrorHandler又はターゲットドキュメントの何れかにメッセージが送信されるだろう。
【０１０４】
要素for-eachが、ＤＯＭ内のノード集合、又は入力ドキュメントの断片又はサブセクションのために生成された他のツリー構造を通ってループするために用いられる。その構文は、以下のとおりである。
2005535982.tif 000043
【０１０５】
以下のテンプレートは、
2005535982.tif 000044
以下のソース入力に適用されるときに、
2005535982.tif 000045
以下の出力を生成する。
2005535982.tif 000046
【０１０６】
要素includeは、テンプレートソースに記憶された付加的なテンプレートを含むために用いられる。アプリケーションによって提供されるURIResolverは、包含されたソースのuriを解決するために用いられる。その構文は、＜xst:include href=“uri”/＞である。
【０１０７】
要素load-templateは、実行が出力される下、テンプレートの内容として、テンプレートを活性化したりメモリに動的にロードするために用いられる。ロードテンプレートは、ロードされたテンプレートに対してパラメータを渡すことができる。それらのパラメータは、ロードされたテンプレートで宣言される必要は無い。ロードされたテンプレートは、ローカル変数及びパラメータを含むロードテンプレートの実行内容をアクセスすることができる。その構文は以下のとおり。
2005535982.tif 000047
【０１０８】
以下のサンプル“templates”は、第２の実施例に従って一組の“template”要素を含む。
2005535982.tif 000048
【０１０９】
上記例において、テンプレート“loaded”は、テンプレート“root”によってロードされる。ロード後の均等なテンプレートを以下に示す。
2005535982.tif 000049
【０１１０】
要素messageは、カスタマイズされたメッセージのために用いられる。その構文は、＜xst:message＞content of the message</xst:message>である。
【０１１１】
要素redirectは、特定のターゲットに出力の一部をリダイレクトするために用いられる。その構文は以下のとおり。
2005535982.tif 000050
【０１１２】
以下は、リダイレクトを用いたサンプルテンプレートである。
2005535982.tif 000051
【０１１３】
属性eref値のために、有効なXPath表現を用いることができる。
2005535982.tif 000052
【０１１４】
エンティティ参照erefは、アプリケーションによって提供されるURIResolverによって解決されるべきであり、その戻り値は“redorect”用のオープンされた結果オブジェクトを管理/閉じることができるcom.commerceone.xst.swi.jaxp.ResultManagerのオブジェクトであるべきである。
【０１１５】
幾つかの実施例では、ストリーミング及び変換のバッファ化されたモードがサポートされる。ストリーミングモード変換において、ルートテンプレートがコピーモードにある。出力用データが使用可能になるとき、ＸＳＴストリームは変換後の内容の小さなバッファをストリームアウトする。子テンプレートをロードしたり活性化する前に、親テンプレートは、それ自身の変換内容をストリームアウトして、その子テンプレートのストリーミング用のパスを明らかにする。テンプレートをアンロードしたり非活性化する前に、テンプレートは、それ自身の変換内容をストリームアウトして、その兄弟のストリーミング用のパスを明らかにする。バッファモード変換において、ルートテンプレートは、コピーモードにない。ＸＳＴは変換内容をストリームアウトしない。それは、親がコピーモードにあればその親に対してアンロードする前に、テンプレートの変換内容を付加する。
【０１１６】
変換のために必要とされた情報がその時点で使用可能でないときは、延期されたモードテンプレートが使用される。全体の変換以下のバッファリングを提供する。延期モードは、テンプレート処理の間、ストリーミングの初期動作を一時停止する。延期モードテンプレートは、その内容をストリーミングアウトするかわりに、その親テンプレートを登録する。延期モードは、完全な変換が実際に延期されているので、バッファされた変換に何ら影響しない。テンプレートルールの一実施例は、テンプレートが延期されるべき唯一の登録された子テンプレートを持つことができるようにする。他の実施例は、延期されるべき登録された任意の数の子テンプレートをサポートすることができる。一実施例において、親テンプレートは、前に登録された子テンプレートの変換内容、あればそれ自身の内容を、新たな子テンプレートを登録する前にストリームアウトする。
【０１１７】
第１の実施例において、要求されたストリーミングをダミーテンプレートで実行することができる。テンプレートの変換内容のストリーミングが、開始要素(startElement)又は終了要素(endElement)の何れかのＳＡＸイベントで行われる。ダミーテンプレートを追加するまで、我々は、メモリ変換内容を削減するために、付加的なＳＡＸイベントを導入することができ、その変換内容は変換速度を増加させる結果となるであろう。
【０１１８】
本発明は、上述の好ましい実施形態及び例を参照して開示されるが、これらの例は、限定的な意味ではなく、例示的なものであることを意図していることが理解されるだろう。記載された実施形態には、コンピュータ支援処理がかかわっている。したがって、本発明は、コンピュータ支援処理のための方法、変換処理を行う論理を含むシステム、変換処理を行う論理を与えた媒体、変換処理を行う論理を与えたデータ・ストリーム、又は、コンピュータがアクセス可能な変換処理サービスで具体化することができる。当業者であれば、本発明の精神及び添付の特許請求の範囲内の改良及び組み合わせを容易に発想するであろうと考えられる。
【図面の簡単な説明】
【０１１９】
【図１】変換プロセスの高レベルブロック図である。
【図２】同様に高レベルブロック図であり、入力イベント及び終了イベントの分離処理を表ス図である。
【図３】ＸＳＴ変換エンジンの高レベルブロック図である。
【図４】図４は、図３に表れる付加的で詳細な要素を提供する。
【図５】図５は、図３に表れる付加的で詳細な要素を提供する。
【図６】図６は、図３に表れる付加的で詳細な要素を提供する。
【図７】一実施形態において、イベントストリームのイベントを処理するフローチャートである。
【図８】一実施形態において、イベントストリームのイベントを処理するフローチャートである。
【図９】一実施形態において、イベントストリームのイベントを処理するフローチャートである。
【図１０】一実施形態で用いられるスキーマの補助フレームワークに対する検索を処理するフローチャートである。
【図１１】異なるＳＡＸパーサー（構文解析系）を用いた、代替の実行を表す図である。
【図１２】異なるＳＡＸパーサー（構文解析系）を用いた、代替の実行を表す図である。
【図１３】テンプレート処理の高レベルブロック図である。
【図１４】テンプレート処理後の、ＸＭＬインスタンス処理の高レベルブロック図である。
【図１５Ａ−Ｃ】ＸＳＴの実施例に関するスキーマである。
【図１】
2005535982.tif 000053
【図２】
2005535982.tif 000054
【図３】
2005535982.tif 000055
【図４】
2005535982.tif 000056
【図５】
2005535982.tif 000057
【図６】
2005535982.tif 000058
【図７】
2005535982.tif 000059
【図８】
2005535982.tif 000060
【図９】
2005535982.tif 000061
【図１０】
2005535982.tif 000062
【図１１】
2005535982.tif 000063
【図１２】
2005535982.tif 000064
【図１３】
2005535982.tif 000065
【図１４】
2005535982.tif 000066
2005535982.tif 000067
2005535982.tif 000068
2005535982.tif 000069
【国際調査報告】
2005535982.tif 000070