(57)【要約】【課題】データ及びソフトウェアが統合された構造の中に組み込まれて、データ処理における基本的プログラミング知識の複雑性及び／又は必要性を低減又は回避するようにＸＭＬ文書の処理を改善する。【解決手段】本発明は、ＸＭＬ文書、書類型定義（ＤＴＤ）、又は構造ツリーとしての、それらの表現を、テキスト又はグラフィカル・フローチャートで装飾することによってＸＭＬ文書を直接実行する方法、システム、及び装置に関する。ＸＭＬ文書のデータ構造は、データを処理するコードのために再使用され、それと統合される。【選択図】図４
2004505379.tif 000002
【特許請求の範囲】
【請求項１】
ＸＭＬ文書を直接実行する方法であって、ＸＭＬ文書の各々の要素のためにローカルの振る舞い及び処理を定義し、実行可能命令を文書型定義（ＤＴＤ）、ＸＭＬ文書、又は構造ツリーとしてのその表現と統合し、要素の属性を動的に作成及び再定義することによって中間状態を記憶することを特徴とする方法。
【請求項２】
（ａ）各々のＸＭＬ要素定義及びそのインスタンスのために、簡単な実行可能アクションによって構成されるアクション、要素の構成部分の１つのために定義されるアクション又は他の要素のために定義されるアクションへの参照であるアクションを定義することによって実行可能命令を統合し、
（ｂ）そのルートのために定義されたアクションを実行することによってＸＭＬ文書を実行する
ステップを更に含む、請求項１に記載の方法。
【請求項３】
順次又は並行制御及び／又はデータフローを表すグラフィカル・フローチャートによって、少なくとも１つのＸＭＬ要素定義又はインスタンスのためにアクションの組成を定義することを特徴とする、請求項１又は２に記載の方法。
【請求項４】
少なくとも１つのＸＭＬ要素定義又はインスタンスのために、順次又は並行制御及び／又はデータフローを表すテキスト形式でアクションの組成を定義することを特徴とする、請求項１〜３のいずれか一項に記載の方法。
【請求項５】
ｎ次元データ立方体に関してシステム状態を表すこと、及び他のプログラミング及び／又はデータベースシステムのためにｎ次元データ立方体を読み出し及び書き込み可能にし、他のプログラミング及びデータベースシステムのデータ構造及び機能を記述されたシステムの中からアクセス可能にすることによって、システムへのインタフェースをオープンにすること、を特徴とする、請求項１〜４のいずれか一項に記載の方法。
【請求項６】
各々の要素のために処理を定義するモジュールであって、次のＤＴＤ、
【数１】
2004505379.tif 000017
に関して有効なモジュールを特徴とする、請求項１〜５のいずれか一項に記載の方法。
【請求項７】
クライアントからサーバへ送られたＸＭＬロボット仕様に従ってＸＭＬ文書の少なくとも一部分を実行することによって少なくとも１つのクライアントへサービスを提供するサーバ、又はＸＭＬロボット仕様及びＸＭＬ文書をクライアントへ送ることによって少なくとも１つのクライアントへサービスを提供するサーバであって、送られたＸＭＬロボット仕様に従って、送られた文書の少なくとも一部分をクライアント上で実行することによって前記サービスが提供されるようにするサーバを特徴とする、請求項１〜６のいずれか一項に記載の方法を使用するシステム。
【請求項８】
遠隔のコンピュータとの間でデータを送信及び受信する手段と、ＸＭＬ文書を記憶及びアクセスする手段と、ＸＭＬロボット仕様をＸＭＬ文書と統合する手段と、統合された文書を実行する手段と、を含む請求項１〜５のいずれか一項に記載の方法を使用する装置。
【請求項９】
先進的ビジュアル統合開発環境の中でＸＭＬロボット仕様を図形的に表示する手段と、前記ＸＭＬロボット仕様を表すＸＭＬ文書を生成する手段とを含む請求項１〜７のいずれか一項に記載の方法を使用する装置。
【請求項１０】
更に、ＸＭＬ文書又はＸＭＬロボット仕様を検査、検証、又はアニメ化する手段を含む、請求項８又は９に記載の装置。
【発明の詳細な説明】
【０００１】
（発明の分野及び背景）
本発明は、請求項１及び７から９によるＸＭＬ文書を直接実行する方法、システム、及び装置に関する。
【０００２】
（ＸＭＬの基礎）
ＸＭＬはＳＧＭＬフォーマットのサブセットとして定義されてきた。つまり、ＸＭＬは、いわゆるタグによって構造化された文書のフォーマットを定義することを可能にする。ＸＭＬは、文書の物理構造及び論理構造の双方を定義するが、本発明の関連では、論理構造に焦点が当てられる。しかし、提供された手段を、物理構造のために再使用する。物理構造から抽出して、ＸＭＬは、文書型定義（ＤＴＤ）及びＸＭＬ文書の双方を与えるために使用される。特定のＤＴＤ　Ｔは、Ｔに関して有効な文書及びＴに関して有効でない文書として、ＸＭＬ文書を分類するために使用される。簡単に言えば、Ｔに関して有効な文書はＤＴＤ　Ｔの文書である。ＤＴＤの論理様相は、要素及び属性を定義する。そのような型（ＤＴＤによって与えられる）の各々の文書は、定義された要素のインスタンスのみを含まなければならず、要素の属性及び組成はＤＴＤにマッチしなければならない。例として、従属要素Ｘ、Ｙ、及びＺ、並びに要素Ａの属性ｂ及びｃの組成を有して要素Ａを定義するＤＴＤ　Ｔは、ＸＭＬでは次のように書かれる。
【０００３】
【数２】
2004505379.tif 000003
【０００４】
ここで、＃ＰＣＤＡＴＡは属性ｂ及びｃに許容されるデータの種類を定義している。前記のＤＴＤ　Ｔの文書は、現在要素Ａのインスタンスを含む。要素Ａのインスタンスは、開始タグ＜Ａ．．．＞及び終了タグ＜／Ａ＞を含む。開始タグの中で、属性の値が与えられ、開始タグと終了タグとの間で、組成要素のインスタンスが与えられなければならない。従って、型Ｔの文書は、次のように見えるＡのインスタンスを含む。
【０００５】
【数３】
2004505379.tif 000004
【０００６】
ここで、Ｘ、Ｙ、及びＺインスタンスの正確な形状は、ＤＴＤ　Ｔの中の対応する要素定義によって与えられる。
【０００７】
ＸＭＬの力は、部分的には、要素組成の定義が再帰を許される事実から生じる。例示のため、幾つかの組成可能性を導入し、前記の例を完結するために使用する。既に使用されたシーケンス（Ｘ，Ｙ，Ｚ）は、前記の例で示されるように、Ｘ要素の次にＹ要素が続き、Ｙ要素の次にＺ要素が続くことを示す。他の重要な組成演算子は、Ｘ、Ｙ、又はＺ要素の間の選択を示す選択（Ｘ｜Ｙ｜Ｚ）である。他の演算子は、構成部分の繰り返しを示す＋及び＊演算子であろう。しかし、それらは例では使用されない。
【０００８】
Ｙ及びＺが組成（＜！ＥＬＥＭＥＮＴ　Ｙ＞，＜！ＥＬＥＭＥＮＴ　Ｚ＞）を有しないと仮定すると、ＤＴＤ　ＡはＸの定義で完了する。ここで、要素Ａへの選択組成及び再帰、即ち、＜！ＥＬＥＭＥＮＴ　Ｘ（Ｙ｜Ａ）＞が使用される。従って、ＸはＹ又はＡである。型Ａの可能な文書は、現在次の通りである。
【０００９】
【数４】
2004505379.tif 000005
【００１０】
更に任意に＜Ｙ＞＜／Ｙ＞を繰り返すことができる。簡単にするため、前記の繰り返しで、＋及び＊のような特別の組成演算子は使用されなかった。ショートカットとして、＜Ｙ＞＜／Ｙ＞を＜Ｙ／＞で置換することができる。
【００１１】
ＸＭＬは、長い標準過程の成果であり、広く使用及び受容されている。従来技術に従った既存のアプリケーションは、２つの異なった基本タイプ、即ち、データ交換及び文書公開に分類されてよい。データ交換アプリケーションでは、２つのプログラムの間で複雑なデータを交換するためのデータ・フォーマットを定義するために、ＸＭＬが使用される。更に、リレーショナル・データベースシステムに存在するデータの交換フォーマットとして、ＸＭＬが使用される。そのようなフォーマットの例は、ＸＭＬーｄａｔａ（マイクロソフト）、ＭＣＦ（ネットスケープ）、及びＲＤＦ（Ｗ３Ｃ）である。文書公開アプリケーションでは、ＸＭＬは、全ての種類の文書をマークアップするための理想的データ言語である。主なアイデアは、文書の論理内容をＸＭＬ文書として与えること、及び、レイアウト情報を、一般的にＤＴＤのために与えることである。そのような一般的レイアウト言語の例は、ＣＳＳ又はＸＳＬである。生成されたレイアウトの出力は、ＨＴＴＰ、ＳＰＤＬ、又はＰｏｓｔｓｃｒｉｐｔである。
【００１２】
（ＸＭＬ処理）
現存するソフトウェア及びアプリケーションは、データ及び文書を表すためにＸＭＬを使用している。次に、これらのデータ及び文書は、汎用プログラミング言語によって処理される。ＸＭＬ文書を処理する既存の提案は、アプリケーションがデータ交換の領域にあるか文書公開の領域にあるかを問わず、イベント駆動手法及びツリー操作手法に分けられる。イベント駆動アプローチにおいて、文書は厳密なシーケンスで処理される。データ・ストリームの中の各々の要素は、イベント・トリガと考えられる。イベント・トリガは、アプリケーションの側で特別のアクションを促進してよい。ＳＡＸアプリケーション・プログラマ・インタフェース（ＡＰＩ）は、現存するプログラミング言語の中でイベント駆動アプローチを実現するために使用される。ツリー・アプローチは、構造ツリーの形式をした全体の文書へアクセスすることができる。基本的に、ＸＭＬ文書の要素はツリーのノードであり、各々の要素の構成部分は、ノードのシブリングである。そのようなツリーにアクセスするため普通に使用されるＡＰＩは、ＤＯＭである。ＡＰＩを使用する不利点は、汎用プログラミングの全ての複雑性、特に広範及び複雑なソフトウェアを生じるシステム及びプラットフォーム依存性、信頼性、並びにセキュリティが作用することである。幾つかのＸＭＬツールは、データ交換又は文書公開アプリケーションのために特別なコードを生成することによって、この複雑性を隠そうと試みる。それらのツールは、伝統的プログラミング言語の中でプログラム・パターンを容易に生成することを助けるかも知れないが、処理されなければならない文書をナビゲートするため、明白なプログラミングを使用することから完全に抽象化しない。
【００１３】
（伝統的プログラミングに対するＸＭＬ）
重要な問題は、伝統的な構成方法及びオブジェクト指向プログラミング方法の概念に関する。双方の方法は、プログラムの構造を定義するＸＭＬ又はＢＮＦ規則における要素定義のように、データの構造が作成規則によって与えられないという意味で、非構造化データ・ソースを使用する。そのようなデータ・ソースは、伝統的プログラミングの場合、構造化されているが独立的なプログラムと連結して使用される。他方では、オブジェクト指向プログラミング方法は、構造化及びセグメント化されたコードをデータ・オブジェクトと組み合わせるが、オブジェクト空間（データ）は、前述した意味で構造化されない。もちろん、これらの方法と連結して構造化データ・モデルを使用することは可能だが、いずれの場合も、プログラム構造はデータ構造から独立しており、従って、前述したような複雑な処理が必要になる。実際に、ＸＭＬ文書を処理する現在の事情は、２つの独立した構造、即ち、１つはＸＭＬ文書構造、他の１つは、それを処理するプログラム構造を暗黙に必要とする。このアプローチは、特に２つの基本的不利点を有する。即ち、（ａ）もしプログラマがＤＴＤのインスタンスの完全な構造を、信頼性をもって処理しようとすれば、そのようなコードは、対応するＸＭＬ文書の多様性、及びそのようなタスクの複雑性に起因して、失敗するかも知れないこと、及び（ｂ）ＸＭＬ文書を処理するプログラムは、典型的にはＤＴＤの全ての文書を処理するように設計され、従って、プログラムの複雑性は、コードの固有汎用性によって増加することである。
【００１４】
（発明の目的）
本発明の目的は、データ及びソフトウェアが統合された構造の中に組み込まれて、データ処理における基本的プログラミング知識の複雑性及び／又は必要性を低減又は回避するようにＸＭＬ文書の処理を改善し、ＸＭＬ文書の既存の構造を再使用する方法、システム、及び装置を作り出すことである。
【００１５】
本発明の他の目的は、ＸＭＬ文書のために、そのように統合されたデータ及びソフトウェア構造を生成する新規で一般的な方法、システム、及び装置を提供することである。更に、本発明の目的は、標準的文書構造、即ち、ＸＭＬ文書を直接実行する新規な方法、システム、及び装置を提供することである。
【００１６】
（発明の概要）
これらの目的は、クレイム１及び７から９までに指定される発明によって解決される。
【００１７】
発明的アイデアは、実行可能なソフトウェア及びデータを、協調及び統合された構造の中で使用する新規な方法／システムに基づく。本発明は、アプリケーションとして考えられてよいが、前記のカテゴリー、即ち、データ交換アプリケーション又は文書公開アプリケーションのいずれにも入らない。そのような既存のアプリケーションとは対照的に、本発明は、ＸＭＬ文書を直接実行（又は処理）する方法及び装置を提供する。
【００１８】
本発明は、ＸＭＬ文書の既存の構造を再使用し、前記文書を処理しなければならないプログラムの新しい構造及び概念を回避する。従って、発明的アプローチは、各々の文書のために１つのプログラムを定義する（各々のＤＴＤのために１つのプログラムを定義することと対照的に）。従って、処理の複雑性は明白に低減される。
【００１９】
ＸＭＬ文書を直接実行するこのような能力は、各々のタグのために、又は各々のノードでローカルな振る舞い及び処理を定義する実行可能命令で、所与のＸＭＬ文書及び／又はその文書型定義（ＤＴＤ）を装飾することによって達成される。
【００２０】
これは、順次又は並行制御及びデータフローを指定するテキスト形式及び／又は図形チャートへプログラム命令を組み込むことによって達成される。具体的には、これは、ＸＭＬロボットの命令のインスタンス化が特定のＸＭＬ文書へ適用され、その結果、前記ＸＭＬ文書の完全な実行振る舞いを含む実行可能ＸＭＬ文書を生じるような様式で行なわれる。
【００２１】
本発明の好ましい実施形態は、ＸＭＬロボットのモジュールのために使用されるモジュール構造を指定する独特及び一般的ＤＴＤを使用する。特定のＸＭＬ文書は、そのようなＸＭＬロボットの中で与えられた手順及び仕様をＸＭＬ文書へ適用することによって処理されてよい。従って、ＸＭＬロボットのモジュールは、ＸＭＬ文書の実行が直接実行されるような様式で、前記ＸＭＬ文書の構造の中に組み込まれる。実行は、所与のＸＭＬ文書のアクセス方法及び変更方法を定義する少数の関数（プリミティブ）に依存する。更に、特別及び独特のフローチャートが、ＸＭＬ文書の前記実行処理を完全に定義する。これらの基本的な発明的定義は、ＸＭＬロボットの所与の例が、本発明に従った直接実行へ導かれるという意味で、完全なものである。
【００２２】
本発明の他の好ましい実施形態は、グラフィカル・フローチャート（ＧＦＣ）によって所与のＸＭＬ文書の要素の各々の種類のために完全な情報を提供する。このＧＦＣは、要素及び構成部分をそれぞれを通る制御フロー、及びどのようなアクションがその制御フローの間に実行されるかを定義する。データフローは、ＧＦＣの或る状態に達したときに実行されたアクションによって提供される。ＧＦＣの例は、フローチャート、有限状態機械、状態図、ＵＭＬ状態機械、全ての種類のペトリネット、ＵＭＬアクションダイアグラム、及び他の種類の計算モデルである。ＸＭＬ文書を構造ツリーとして表現することによって、この実施形態は、純粋な図形様式で定義及び説明されることができる。これは、ＸＭＬロボットのために先進的ビジュアル統合開発環境を可能にする。他方では、状態の上でアクションを実行しているシーケンシャルＧＦＣモデル（フローチャート、有限状態機械）のために、この図形的実施形態は、テキスト形式を使用する実施形態の中へ直接マップされることができる。更に、テキスト表現を使用する実施形態は、この実施形態の全てのバリエーションが、グラフィカル・フローチャートを使用する実施形態の中へマップされることができるように、同時アクション（即ち、多数のアクションの並行実行を可能にする）及び矢印上のアクション（即ち、有限状態機械の遷移の上のアクション）を可能にするモデルへ一般化されることができる。
【００２３】
双方の実施形態はモジュラ構造によって特徴づけられる。ここで、各々のモジュールは、特定のタグ、例えば＜Ａ．．．＞の全ての要素のために実行振る舞いを定義し、同時にそのような要素の構成部分のために実行振る舞いを付け加え、更に、他のタグ、例えば＜Ｂ．．．＞を有する要素の全てのインスタンスのために実行振る舞いを付け加える。モジュール内の全ての情報は、テキストであれ図形であれ、自己要素と呼ばれる要素の説明された種類（Ａ＜．．．＞）のインスタンスに関連している。双方の実施形態において、外部関数を呼び出して文書／ツリーの構造をナビゲートするため、プリミティブが提供される。ナビゲートは、或る種の要素（＜Ａ．．．＞）の全てのインスタンスをカバーし、文書／ツリーの追加的属性を定義する。その定義は、純粋に機能的なスタイルで与えられる。もし実行されるＸＭＬ文書のためにＤＴＤが存在すれば、このＤＴＤは、どのような要素の種類が存在するか、どのような構成部分が、それらの種類のために存在するかの情報を明示的に提供する。従って、そのようなＤＴＤは、ＸＭＬロボット仕様を書くための構造及びガイダンスを提供する。双方の実施形態は、明白なＤＴＤなしに働くが、ＤＴＤは、後に説明される第１の実施形態の定義及び仕様のために使用される。更に、注意すべきは、ＤＴＤを有しないＸＭＬ文書から簡単なＤＴＤを引き出せることである。
【００２４】
好ましい実施形態において、構造ツリーの文書要素／ノードの属性を動的に作成及び再定義することによって、中間結果が記憶される。他のイベント・ベース及び純粋機能／宣言モデルが、同様に可能である。しかし、動的処理情報は、好ましくは、現存する文書／ツリー構造によって与えられる。現存する処理モデルと対比して、文書、又はＸＭＬ文書の構造ツリーは、ＸＭＬ文書の実行振る舞いの定義であるＧＦＣ（又は対応するテキスト形式）の基礎として直接使用されることを理解することが重要である。従って、そのようなＸＭＬロボットは、ＸＭＬ技術を応用してＸＭＬ文書を処理する新規な基本的方法である。
【００２５】
本発明は、特定のプラットフォーム又は処理の具体的な実現形態、例えば、ＳＡＸ及びＤＯＭのような現存のＡＰＩに制限されないので、ここで与えられる仕様は、そのような具体的な形式から抽象化されなければならない。しかし、使用されるプリミティブは、実現可能に定義される。更に、本発明は、フローチャート又は他の構造的実現形態、例えば、中間形式／結果が生成されるかどうか、又はＸＭＬ文書がコンパイラ及びインタープリタ又はそれらの組み合わせによって実行されるかどうかなど、実現する特定のプログラミング言語に制限されない。
【００２６】
（好適実施形態の説明）
本発明の好ましい実施形態が、これから図面を参照して説明される。
【００２７】
本発明は、ＸＭＬ文書の直接実行を実現する。次の実施形態は、方法、システム、及び装置の図形的及びテキスト的実現を説明する。以下の例は、所与及び既知のＤＴＤのＸＭＬ文書に関連するが、本発明は、或る欠点、例えば、定義されない結果を考慮に入れて、既知のＤＴＤを有しないＸＭＬ文書の実行を可能にすることを理解しなければならない。いずれにせよ、ＤＴＤ（もし前もって知られていれば）又はＸＭＬ文書は、ＸＭＬロボット仕様を直接組み込まれる（ＤＴＤ又はＸＭＬ文書の「装飾」）。本発明は、前述したように、具体的な実現形態（プラットフォーム、プログラム言語、構造形式、例えば、記憶及び処理）から基本的に独立している。しかし、適用可能である場合、特定の実現形態を使用する好ましい実施形態が、これから説明される。
【００２８】
図１から図８を参照して、本発明の第１の図形的実施形態が説明される。
【００２９】
図１は、３つの構成部分を含む要素クエリーを有するサンプルＤＴＤを示す。２つの構成部分は型アクションであり、オプションの構成部分は型クエリーである。要素クエリーの属性リストは、単一の属性質問から構成される。属性質問は、必須の文字データ属性である。要素アクションは、要素セットポイント又はクエリーのいずれかを含む。要素セットポイントは、構成部分を含まず、単一の属性ポイントを有する。
【００３０】
図２は、図１のサンプルＤＴＤに関して有効な文書を表す。この文書は、図１で与えられたＤＴＤ「ｑｕｅｒｙ．ｄｔｄ」を参照する。この例は、これから更に説明されるサンプル文書として使用される。
【００３１】
図３は、属性構造ツリー（ＡＳＴ）に対する図２の文書の対応する可能なマッピングを示す。そのようなＡＳＴは、ＸＭＬ文書の構造の代替図形的表現である。番号１及び３のノードは、要素クエリーのインスタンスである。それらは、Ｓ１アクション及びＳ２アクションとしてアクセス可能な２つの必須のアクションシブリングを有し、オプションのクエリーシブリングは存在しない。もしクエリーシブリングが存在すれば、それはＳクエリーとしてアクセス可能である。ノード２、４、及び５は、シブリングを有しない要素セットポイントのインスタンスである。属性及びそれらの値は、ボックスの中にビジュアル化される。
【００３２】
図４は、ＤＴＤの実行仕様と、ＤＴＤのインスタンスの実行方法との関係を示す。仕様は、純粋なＤＴＤ定義、及び好ましくはグラフィカル・フローチャート（ＧＦＣ）並びにチャートの或る状態に達したときトリガされるアクションから構成される。左側のボックスは、純粋なＤＴＤ構成部分、グラフィカル・フローチャート（ＧＦＣ）の定義（ビジュアル記述）、及び遷移規則の中に構造化されるＤＴＤの実行仕様を表す。遷移規則は、制御がチャートを流れる間に起動される。代替として、ＤＴＤを有しないＸＭＬ文書の要素インスタンスのために、同じ仕様を与えることができる。
【００３３】
右側のボックスは、この構造が、どのようにＸＭＬ文書の直接実行を暗黙に意味するかを示す。ＤＴＤは、もし存在すれば、ＸＭＬ文書の有効性を検証するために使用される。属性構造ツリー（ＡＳＴ）が構成される。ＧＦＣは、ＡＳＴを装飾するために使用され、従って、解析されたＸＭＬ文書に対応するグローバル・フローチャートを生じる。文書は、ＧＦＣを実行することによって実行される。例えば、それは、ＧＦＣの或る状態に関連したアクションをトリガし、ＧＦＣ内で条件に従って制御フローを処理することによって実行される。
【００３４】
完全な実行仕様が、仕様モジュールの中へ構造化される。各々の仕様モジュールは、その要素の実行振る舞い、及び、その要素の構成部分並びに他の要素の種類のインスタンスの追加的実行振る舞いを記述する要素宣言に対応する。
【００３５】
図５は、図１に従ったクエリー要素の仕様モジュールが、どのように見えるかの例を与える。仕様モジュールの最上部分は、関連する要素及び属性の定義を含む。中間部分は、要素クエリーのインスタンスのために実行振る舞いを指定するＧＦＣフラグメントを与える。ＧＦＣフラグメントは、図形的表現の好ましい方法を使用して与えられる。最後に、遷移規則が図５の底部に示される。
【００３６】
図４及び図５を参照して、図１のサンプルＤＴＤの図形的表現を使用する好ましい方法を、これから詳細に説明する。示された例は、有限状態機械、状態図、古典的フローチャート、又はＵＭＬ状態機械に匹敵するシーケンシャル制御を有するＧＦＣを表す。手順は、分散されたＧＦＣのためにペトリネット、又はＵＭＬ活動チャートの変形と類似の様式で働く。この実施形態において、ＸＭＬ文書の実行振る舞いは、アクションと関連した状態を有するシーケンシャル・グラフィカル・フローチャートによって与えられる。代替の実施形態において、ＧＦＣの矢印は、アクションと関連づけられてよい。現在の例示的実施形態において、ＧＦＣの任意の状態では、対応するアクションが起動され、その後に、次の状態への状態遷移が続く。他の状態ベースの形式（例えば、ハレルの状態図）におけるように、現在のＧＦＣでは、制御のフローを決定するブール述語で制御矢印にラベルを付けることができる。それによって、ラベルは省略されてよい。ラベルなしの制御矢印は、デフォルトの振る舞いを有する。例えば、もしもそのソースから生じる他の矢印が真へ評価されるラベルを有しないならば、ラベルのない矢印がアクティブになる。
【００３７】
図４の左側で示されるように、ＤＴＤの振る舞いの仕様は、３つの部分、即ち、ＤＴＤ定義それ自身、ＧＦＣを指定するビジュアル表記、及びアクションの仕様から構成される。更に、実行前に追加の属性を計算する仕様が存在してよい。この仕様は、好ましくは、ＤＴＤ及び追加の派生属性の仕様によって定義される属性に依存して、機能依存性及びセキュリティ条件によって与えられる。ＤＴＤは、パーサを生成するために使用され、次に、解析されたＸＭＬ文書は、ＡＳＴの中へ標準様式でマップされる。仕様の第２の部分は、ＧＦＣにおける状態遷移に関して制御フローを記述する。ビジュアル記述は、ＤＴＤの各々の要素宣言に関連づけられ、ローカルＧＦＣを定義し、また、このＧＦＣが、ＡＳＴの帰納的装飾を介してグローバルＧＦＣへプラグインされることができる方法を指定する。この目的のために、ＡＳＴの各々のノードは、その図形的表現によって与えられたＧＦＣフラグメントのコピーで装飾される。ノードの子孫への参照は、グローバルＧＦＣの実行に関連して後で説明するように（図７及び図８を参照）、グローバルＧＦＣの帰納的構成を定義する。最後の部分は、文書の実行中に起動されるアクションを指定する遷移規則から構成される。ＧＦＣの任意の状態は、この状態に達したときに起動される遷移規則と関連づけられてよい。ＧＦＣ内の遷移は条件付きであって、条件はＡＳＴのノードの属性から組み立てられる。
【００３８】
図５のＧＦＣは、「質問する（ａｓｋ）」と呼ばれる状態を表す丸いノードを含む。もしもその状態に達すると、モジュールの最下部にある対応するアクションがトリガされる。従って、制御は、フローの矢印にラベルが付いた条件に依存して、Ｓ１アクションとラベルを付けられたボックス、又はＳ２アクションとラベルを付けられたボックスへ流れる。ボックスは、ラベルによって参照されるシブリングに対応するＧＦＣを表す。Ｉ及びＴの矢印は、制御フローの入口点及び出口点を表す。
【００３９】
第１の実施形態において、後で説明するように、Ｉ及びＴは、「初期」及び「終期」と呼ばれる正規状態のように処理される。ＩからＴへの矢印は、「初期」から「終期」への遷移として明白に与えられなければならない。更に、ボックスへの矢印は、ボックスの「初期」状態への矢印として明白に与えられなければならず、ボックスから出る矢印は、ボックスの「終期」状態から出る矢印として与えられなければならない。この対応は、以下の説明で、ＧＦＣをテキスト形式で示す図１から図８に関連して容易に理解されてよい。
【００４０】
図６は、図１のサンプルＤＴＤの仕様モジュールアクション及びセットポイントを示す。アクションは、セットポイントとクエリーとの間の選択であり、従って、それはこれらの要素定義のＧＦＣ定義を継承し、セットポイント要素モジュールは、１つの状態から構成される平凡なＧＦＣを導入する。その対応するアクションは、属性ポイントによって与えられた数だけポイント・カウンタの値を増加している。
【００４１】
前述したように、各々の仕様モジュール内のビジュアル表記は、仕様モジュールに対応するＡＳＴの各々のノードに関連したローカルＧＦＣに関する情報、及び入力文書に対応するグローバルＧＦＣの中へローカルＧＦＣを埋め込むために必要な情報を含む。
【００４２】
図７は、図形的表現の各々からの図形フラグメントが、例示の文書に対応するＡＳＴのノードとどのように関連するかを示し、それによって、グローバルＧＦＣが、図５及び図６に従ったＧＦＣをＡＳＴの対応するノードとマッチさせることによって、どのようにＡＳＴから得られるかを例示する。ＧＦＣフラグメントの２つのインスタンスがモジュールクエリーによって与えられ（図５を参照）、平凡なＧＦＣフラグメントの３つのインスタンスがモジュールセットポイントによって与えられる（図６を参照）ことが分かる。再び、この図は、図形的表現が到達するＡＳＴ内の各々のノードの装飾を示す。そのような図形の装飾は、好ましい様式で制御フローを達成してよい。しかし、本発明は、テキストのプログラム命令又は他の手段が、ここではグラフィカル・フローチャートで達成されるアクションの制御フロー及びトリガと取って代わる解決法を使用してよいことを理解すべきである。
【００４３】
図８は、これらのフラグメントの帰納的ネストから生じる階層ＧＦＣを示す。図７のＧＦＣフラグメントは、シブリングを参照するボックスを含む。ネストは、これらの参照を解決することによって行なわれる。
【００４４】
制御フローについて、ここで使用されるビジュアル表記の詳細な理解は、以下の仕様によって与えられる。仕様モジュールの中で使用される図形的表記の意味は、以下で説明される。
【００４５】
２種類のノード、即ち、楕円とボックスが存在する。楕円はＧＦＣの通常の状態を表す。それらは、更に、アクション名をラベルづけされている。アクション（遷移規則を使用して指定される）は、状態に達したとき起動される。ボックスは、ＧＦＣ自身である上位状態に対応する。更に、ボックスは、ＡＳＴのノードに対応する。ＧＦＣにおける上位状態と、ＡＳＴにおけるノードとの、この直接的１対１の対応は、ＡＳＴの構造と実行振る舞いの構造との識別の詳細な実施形態である。もちろん、ボックス、構成部分へのボックスの参照、及び構造の１対１の対応を説明されたように使用することは、ＧＦＣ、フロー条件、及びアクションの特定の形式から独立である。
【００４６】
ボックスは、要素定義の右側にある構成部分に対応するＧＦＣである。これらのＧＦＣの定義は、それぞれの要素に対応する仕様モジュールの中で与えられる。矢印は、生成されたＧＦＣの階層状態遷移図の中のエッジに対応する。矢印のソース及びターゲットは、ボックス又は楕円のいずれかである。これに加えて、２つの矢印が存在する。１つの矢印は、そのソースをＩ（初期）としてマークされ、そのターゲットをボックス又は楕円としてマークされる。他の矢印は、そのターゲットをＴ（終期）とマークされ、そのソースをボックス又は楕円としてマークされる。Ｉでマークされた矢印は、ローカルＧＦＣへの入口を示し、Ｔでマークされた矢印は、そこからの出口を示す。ＧＦＣの上位状態への遷移は、この上位状態を構成するＧＦＣの第１の状態（Ｉ矢印でマークされる）へ入ることである。各々の仕様モジュールにおけるビジュアル記述の中のボックスは、対応するＧＦＣへの参照である。図７に示された装飾サンプル文書について、これらの参照を解決すると、図８に示されるＧＦＣになる。この生成された階層ＧＦＣは、ＸＭＬ文書の実行振る舞いを与え、階層ＧＦＣの直接実行が可能であり、ＸＭＬ文書の直接実行が可能になる。ＸＭＬ文書を直接実行する能力は、好ましい実施形態の中に示されたＧＦＣの特別の種類に依存せず、直接実行されるＧＦＣの任意の形式が適合している。
【００４７】
ＧＦＣの例示形式では、状態図と同じように、Ｉ矢印で示される初期状態から階層状態へ入る。もし最終状態（出発するＴ矢印でマークされる）に達すると、階層の中で１レベル上の状態へ遷移する。
【００４８】
従って、図８の階層ＧＦＣの実行は、次のように働く。制御は、構造ツリーのルート、即ち、ノード１に入る。対応するＧＦＣの初期状態は、ノード１の中のａｓｋ（質問する）状態である。このノードの質問属性は、「パリはフランスの首都ですか？」である。ａｓｋアクションをトリガした後、返答属性は「イエス」か「ノー」に設定されなければならない。もし返答が「イエス」に等しければ、制御は、ａｓｋ状態を出て上方の制御矢印をたどり、上位状態２へ入る。上位状態２の初期及び終期状態は、設定（ｓｅｔ）アクションである。設定アクションを実行して上位状態２を離れた後、（オプションであり、実際には存在しない）Ｓクエリーシブリングに遷移する。これは何のアクションもトリガせず、上位状態１を離れる。もし上位状態１のａｓｋ状態における質問への返答が「ノー」であったならば、上位状態３が入られ、上位状態３の初期状態ａｓｋも遷移する。今度は、質問「確実ですか？」が質問される。もし返答が依然としてイエスであれば、ポイント・カウンタは０だけ増加され、そうでなければ１だけ増加される（上位状態４及び５）。
【００４９】
本発明の好ましい実施形態において、前記状態は、データ立方体によって処理される。アクションの遷移規則は、そのようなデータ立方体の内容を点別に再定義する。これは、命令的プログラミング・システムの単純モデルを仮定することによって、より良好に理解される。システムの状態は、多次元データベースによって与えられる。データベースは、ｎ次元の立方体から構成される。ｎ次元の立方体ｆの内容は、項ｆ（ｔ１；：：：；ｔｎ）によって読み出されることができる。ここで、ｔ１：：：ｔｎは、データベースの立方体の上に構築された項である。通常の変数は０次元立方体に対応するが、アレイ及びレコードは、１次元立方体でモデル化されることができる。
【００５０】
立方体の中に記憶される可能な値は、通常のデータ型、例えば、整数、実数、ブール値、又は特定のアプリケーション、例えば、構造ツリーのノード、又は動的生成オブジェクトに必要な値のレンジであってよい。構造ツリーのノードの属性は、１次元立方体によってモデル化され、ノードｎの属性ａの値は、項ａ（ｎ）によって検索されることができる。便宜上、属性文法及びオブジェクト指向プログラミングで使用されるドット表記、例えば、ａ（ｎ）に代わるｎ．ａが、同様に使用される。
【００５１】
例えば、基本的更新規則は、形式ｆ（ｔ１；：：：；ｔｎ）：＝ｖである。ここで、（ｔ１；：：：；ｔｎ）及びｖは、システム内の立方体の上に構築された項である。そのような規則の意味は、所与の座標位置における立方体ｆをｖへ更新することである。規則は、順次様式又は並列様式で構成されることができ、従って、対応する更新は全て一度で実行される。前記の基本的遷移規則とは別に、他の遷移規則が存在してよい。例えば、評価されたブール条件項に起動が依存する条件付き規則、或る種類の全ての要素に同じ規則を起動することを許す全体適用規則、或る種類の１つの要素を選択することを許す選択規則、及び最後に、新しい要素の導入に使用される拡張規則が存在してよい。遷移規則は、これらの規則から再帰的に作り上げられる。
【００５２】
引き続いて図８を参照しながら、遷移規則を実行するプロセスを、より詳細に説明する。図５及び図６の図形的表現で与えられたアクション規則を使用してサンプルプログラムの実行をたどることが可能である。初期状態は、アクションａｓｋのラベルを付けられた簡単な状態である。この状態への入口は、ＡＳＴのルートノードに付属した図形フラグメントの中のＩ矢印によってマークされる。ａｓｋアクションは、前述したクエリーモジュール（図３を参照）の中で指定され、属性質問で利用可能な質問「パリはフランスの首都ですか？」のプリントを生じる。次に、ユーザ入力が得られ（例えば、ｇｅｔ（ｓｔｄｉｎ））、属性返答が、提供された入力へ設定される。このアクション規則が実行された後、この状態からの出発矢印の上の条件が評価される。２つの矢印がａｓｋ状態から出る。１つは条件返答＝「イエス」のラベルを付けられ、他の１つは条件返答＝「ノー」のラベルを付けられる。返答の値に依存して、対応する矢印がたどられ、上位状態ノード２又は上位状態ノード３へ導かれる。返答が「ノー」であったと仮定すると、下方の矢印をたどり、上位状態３へ入るであろう。これは上位状態であるから、それは、この上位状態を構成するフローチャートの状態を通る遷移のシーケンスへ導かれる。この場合、この上位状態の内部の初期状態は、再び、楕円で示される単純状態である。この楕円は再びアクションａｓｋのラベルを付けられている。今度は、質問属性は「確実ですか？」へプリントされる。ユーザの返答に依存して、次にノード４又はノード５がたどられる。これらのノードは、上位状態であり、アクションｓｅｔのラベルを付けられた１つの状態を含む。このアクションは、ポイント属性で指定された数のポイントを０次元立方体へ加える。その結果、最初の質問へ「イエス」と返答したユーザは、１０ポイントを獲得し、「ノー」と返答して次に「イエス」と返答したユーザは０ポイントを獲得し、最初の質問に「ノー」と返答して第２の質問に「ノー」と返答したユーザは１ポイントを獲得する。生成されたＧＦＣの構造によって、最初の質問に「イエス」と返答したユーザは、第２の質問を決して質問されない。
【００５３】
更に要約すると、ＸＭＬ文書は、前述したそのＧＦＣを生成し、次にそのルート要素の初期状態（又は、並行実行の場合は複数の状態）からスタートすることによって実行される。初期状態は、文書のルートに対応する上位状態に入り、Ｉ矢印をたどることによって発見される。もしＩ矢印が正規の状態へ導かれるならば、この状態へ入り、そうでなければ、Ｉ矢印は再帰的にたどられる。もし初期状態に入ると、そのアクションがトリガされる。次に、出発制御矢印の上の条件が評価され、満足された条件を有する矢印（又は、並行の場合は幾つかの矢印）が選択される。もし矢印が正規状態へ導かれるならば、この状態が実行され、手順が繰り返される。もし矢印が上位状態へ導かれるならば、Ｉ矢印が繰り返してたどられ、次の状態が決定されて実行され、手順が繰り返される。もし矢印がＴ矢印であれば、上位状態から出て、満足する条件を有する上位状態の出発矢印の１つが選択される。この矢印は、前述したように再びたどられる。
【００５４】
従って、ＸＭＬ要素定義のアクションの組成は、図形及び／又はテキスト、順次又は並行制御及び／又はデータ・フローチャートによって表現される。特別のテキスト及び／又は図形手段が、ＸＭＬ要素定義の構成部分を参照するために提供される。これは、各々の要素定義の中の構成部分によって与えられる文書構造が、構成部分のアクションのトリガによって与えられる実行構造の中で直接再使用される構成部分のアクションの同期及び／又は非同期実行を可能にする。更に、アクション組成の順次又は並行実行の順序を定義する特別の図形及び／又はテキスト手段が、指定された順序の或る実行パスを防護する条件と一緒に提供されてよい。これらの特別の図形及び／又はテキスト手段は、アクションの組み合わせが定義されるノードを参照するため、及びその構成部分を参照するため、及びＸＭＬ属性定義によって与えられるその属性を参照するため、条件及びアクションの定義の中に含まれてよい。
【００５５】
これから、図９から図１８を参照して、本発明の第２のテキスト実施形態を説明する。
【００５６】
図９は、本発明によるＸＭＬ文書の実行振る舞いを表すＸＭＬロボットモジュールの独特な一般的ＤＴＤを示す。今後、図９以降を参照して、本発明のテキスト実現を使用する実施形態を詳細に説明する。図９以降を説明するため、必要なシンタックス及びプリミティブ関数が、最初に定義及び説明される。次の定義は、テキスト（テキスト・ベース）の実現に焦点を置いている。
【００５７】
実行されるＸＭＬ文書は、「ｄｏｃ．ｘｍｌ」と名前を付けられ、ＸＭＬロボットは、もし要素名がＸであれば、ファイル名「ｍｏｄｕｌｅＸ．ｘｍｌ」を与えられた文書によって定義される。更に、全てのそれらのファイルは、ｄｏｃ．ｘｍｌの実行を説明する図１０以降に示されるフローチャートによって自由に変更されてよいと仮定する。実行の状態は、言及された文書、及び１１のグローバル変数、ここでは、ｃｕｒ、ｍｏｄ、ｓｔａｔｅ、ｄｅｒｉｖｅｄ、ｓｕｂｃｕｒ、ｓｕｂｍｏｄ、ｃｕｒｓｔａｔｅ、ａｃｔｉｏｎ、ｔｒａｎｓ、ｓｒｃ、及びｔｒｇの値から構成される。実行は、属性を作成及び再定義し、モジュールの状態要素を文書「ｄｏｃ．ｘｍｌ」の中へ貼り付けることによって、前記所与の文書を変更する。更に、グローバル変数の値は、実行の間に再定義（更新）される。例えば、もし変数ｃｕｒが、実行の現在の状態で値ｖ１を有するならば、更新されたｃｕｒ：＝ｖ２の実行は、変数ｃｕｒが値ｖ２を有する新しい状態を生じる。現在の定義において、グローバル変数の値は、ＸＭＬ文書の内部の参照であるか、定数ｕｎｄｅｆである。
【００５８】
処理されるＸＭＬ文書は、前述した標準構造を使用する。この構造は、形式＜Ａ．．．＞．．．＜／Ａ＞の開始及び終了タグを有する要素を含む。要素への参照は、文書の中のポインタである。参照を実現するためには、（ａ）テキスト位置を使用するか（もし更なるテキストが文書の内部に貼り付けられるならば、それらの更新が強制される）、（ｂ）ＸＭＬリンク定義の中の既存の参照メカニズムを使用するか、（ｃ）ＸＭＬ構造ツリー、例えばＤＯＭ、又はＧＦＣを使用して実施形態の中で説明されたツリーのオブジェクト・モデルの中のオブジェクトへのポインタを使用する。
【００５９】
実行プロセスを、より良好に理解するため、前記要素の属性へ焦点が設定されてよい。例として、値「１３」を有する要素Ａの属性ａａは、＜Ａ　ａａ＝“１３”＞．．．＜／Ａ＞のように与えられる。属性の値を読み出すため、関数ｅｖａｌＡｔｔｒ（＿，＿）が提供される。この関数は、２つの引き数、即ち、要素への参照及び属性名を取り、属性の値を返す。ｄｏｃ．ｘｍｌが前記要素Ａを含み、ｒがその要素への参照であると仮定すれば、項ｅｖａｌＡｔｔｒ（ｒ，“ａａ”）は「１３」へ評価される。シンタックス「ｒ．ｅｖａｌＡｔｔｒ（“ａａ”）」はｅｖａｌＡｔｔｒ（ｒ，“ａａ”）に等しい。他のアクションの類似のシンタックスが、便宜的に図１０以降の説明で使用される。
【００６０】
以下のパラグラフで説明されるＸＭＬ文書の実行は、属性が動的に更新及び／又は作成されることを必要とする。従って、３つの引き数を取る手順ｓｅｔＡｔｔｒ（＿，＿，＿）が提供される。即ち、第１の引き数は要素への参照であり、第２の引き数は属性名への参照であり、第３の引き数は、更新（作成）される属性の新しい（初期）値である。例えば、アクションｒ．ｓｅｔＡｔｔｒ（“ａａ”，“１５”）は、文書ｄｏｃ．ｘｍｌを変形し、ｒによって参照される前記要素Ａが形式＜Ａ　ａａ＝“１５”＞．．．＜／Ａ＞になるようにする。アクションｒ．ｓｅｔＡｔｔｒ（“ｂｂ”，“７”）は、文書ｄｏｃ．ｘｍｌを変換して、ｒによって参照される要素が形式＜Ａ　ａａ＝“１３”　ｂｂ＝“７”＞．．．＜／Ａ＞を有するようにする。もし双方のアクションが、いずれかの順序でトリガされると、ｒによって参照される要素の結果の形式は、＜Ａ　ａａ＝“１５”　ｂｂ＝“７”＞．．．＜／Ａ＞になる。この実施形態において、参照された要素は、物理文書、例えば、ｄｏｃ．ｘｍｌの一部分であり、前記要素の変換は、ＸＭＬ文書の破壊的な非可逆変化を生じる。
【００６１】
更に、ＸＭＬの中に存在する標準値ｖ、例えば文字列及び数字に加えて、属性は、例えば、前記の例における参照ｒのように、文書内の（他の）要素への参照である値へ設定されてよい。前述したように、そのような参照は、アクションｒ１．ｓｅｔＡｔｔｒ（ａ，ｖ）によって項ｒ１．ｅｖａｌＡｔｔｒ（ａ）がｖへ評価される限り、他のアクションｒ１．ｓｅｔＡｔｔｒ（ａ，ｖ’）が、異なった値ｖ’を使用して同じ要素ｒ１、及び同じ属性ａへトリガされるまで、様々な方法で実現されてよい。
【００６２】
アクション「ＰａｓｔｅＩｎｓｉｄｅ」は、テキストをＸＭＬ文書の中へ貼り付けるために使用される。アクションは２つの引き数を有する。第１の引き数は要素への参照であり、第２の引き数は貼り付けられるテキストである。テキストは、参照される要素の開始タグの直後に貼り付けられる。再び、参照ｒを与えられると、アクションｒ．ｐａｓｔＩｎｓｉｄｅ（“ｔｅｘｔｓａｍｐｌｅ”）は、ｄｏｃ．ｘｍｌの内部の参照された要素Ａを、＜Ａ　ａａ＝“１３”＞ｔｅｘｔｓａｍｐｌｅ．．．＜／Ａ＞の中へ変換する。
【００６３】
アクション「Ｃｏｐｙ」は、参照から文字列を作成するために使用される。再び、ｄｏｃ．ｘｍｌ内の要素Ａを指す参照ｒの前記の例を与えると、項ｒ．ｃｏｐｙは、文字列「＜Ａ　ａａ＝１３＞．．．＜／Ａ＞」へ評価される。この文字列は、参照された要素と構文的に同じであるが物理的に異なる。もし要素がコピーされると、要素の属性は同じままであるが、コピーされた要素への参照は、コピーが取られた文書のみを指したままである。
【００６４】
前記のアクション「ＰａｓｔｅＩｎｓｉｄｅ」及び「Ｃｏｐｙ」は、１つの文書から他の文書へ部分をコピーするために使用される。
【００６５】
２つの文書が与えられ、
【数５】
2004505379.tif 000006
【数６】
2004505379.tif 000007
【００６６】
参照ｒ１はｄｏｃ１．ＸＭＬの要素Ｂを指し、ｒ２はｄｏｃ２．ＸＭＬの内部要素Ｃを指すとすれば、アクションｒ１．ｐａｓｔｅＩｎｓｉｄｅ（ｒ２．ｃｏｐｙ）は、変換された次のｄｏｃ１．ＸＭＬを生じる。
【００６７】
【数７】
2004505379.tif 000008
ここで、ｄｏｃ２．ＸＭＬは不変のままである。ｒ２によって参照される要素Ｃの属性は、コピーされるが、ｄｏｃ２．ＸＭＬへの参照は変更されない。
【００６８】
物理文書、例えば、ファイルｄｏｃ．ｘｍｌ（又は、ｍｏｄｕｌｅＸＹＺ．ｘｍｌファイルの１つ）を与えられたとすれば、項ｇｅｔＲｅｆ（“ｄｏｃ．ｘｍｌ”）は、文書のルート、例えば、最も外側の開始／終了タグのカップルへの参照へ評価される。更に、項ｒ．ｇｅｔＬａｂｅｌはｒによって参照される要素の名前を評価する。ｄｏｃ１．ＸＭＬ及びｄｏｃ２．ＸＭＬを有する前記の例では、ｒ１．ｇｅｔＬａｂｅｌは「Ｂ」と評価し、ｒ２．ｇｅｔＬａｂｅｌは「Ｃ」と評価する。
【００６９】
ＸＭＬ文書を通るナビゲーションは、関数ｇｅｔＦｉｒｓｔ（＿，＿）、ｇｅｔＮｅｘｔ（＿）、及びｐａｒｅｎｔ（＿）を使用して行なわれる。３つの全ての関数の最初の引き数は、ＸＭＬ文書の内部の要素への参照である。参照ｒが与えられると、ｒ．ｇｅｔＦｉｒｓｔ（“Ａ”）はｒの開始及び終了タグの内部で最初の要素Ａへの直接の参照を評価する。ネストされたインスタンスは考慮されない。ｄｏｃ１．ＸＭＬ及びｄｏｃ２．ＸＭＬを有する例において、参照ｒ１は項ｇｅｔＲｅｆ（“ｄｏｃ１．ＸＭＬ”）によって得られ、参照ｒ２は項ｇｅｔＲｅｆ（“ｄｏｃ２．ＸＭＬ”）によって得られる。
【００７０】
もし要求された名前を有する要素が存在しなければ、ｇｅｔＦｉｒｓｔは定数ｕｎｄｅｆと評価する。更に、ｇｅｔＲｅｆはネストされた要素を参照しない。前記の例を参照すると、ｇｅｔＲｅｆ（ｄｏｃ１．ＸＭＬ）．ｇｅｔＦｉｒｓｔ（“Ａ”）は内部のＡ要素への参照と評価せず、ｕｎｄｅｆと評価する。内部のＡ要素への参照を得るためには、ｇｅｔＲｅｆ（ｄｏｃ１．ＸＭＬ）．ｇｅｔＦｉｒｓｔ（“Ｂ”）．ｇｅｔＦｉｒｓｔ（“Ａ”）を使用しなければならない。
【００７１】
ｇｅｔＦｉｒｓｔの定義の結果として、任意の参照ｒ及びラベル“Ｉ”について、ｒ．ｇｅｔＦｉｒｓｔ（“Ｉ”）．ｇｅｔＬａｂｅｌ＝“Ｉ”であるか、ｒ．ｇｅｔＦｉｒｓｔ（“Ｉ”）＝ｕｎｄｅｆである。
【００７２】
関数ｇｅｔＮｅｘｔ（＿，＿）は、もし存在すれば、同じラベルを有する次の要素への参照を返す。そうでなければ、ｕｎｄｅｆを返す。次のＸＭＬフラグメントへの参照ｒが与えられると、
【００７３】
【数８】
2004505379.tif 000009
【００７４】
参照ｒ．ｇｅｔＦｉｒｓｔ（“Ｂ”）はｘ　＝“１”を有するＢ要素を参照し、参照ｒ．ｇｅｔＦｉｒｓｔ（“Ｂ”）．ｇｅｔＮｅｘｔはｘ＝“２”を有するＢ要素を参照し、参照ｒ．ｇｅｔＦｉｒｓｔ（“Ｂ”）．ｇｅｔＮｅｘｔ．ｇｅｔＮｅｘｔはｘ＝“４”を有するＢ要素を参照する。Ｘ＝“３”を有するＢ要素を参照するためには、ｒ．ｇｅｔＦｉｒｓｔ（“Ｂ”）．ｇｅｔＮｅｘｔ．ｇｅｔＦｉｒｓｔ（“Ｂ”）と書く必要がある。
【００７５】
関数ｐａｒｅｎｔは、要素への参照を、最小の閉止要素への参照へマップする。ｄｏｃ１．ＸＭ及びｄｏｃ２．ＸＭＬを有する例では、ｒ１．ｐａｒｅｎｔ＝ｇｅｔＲｅｆ（“ｄｏｃ１．ＸＭＬ”）であり、ｒ２．ｐａｒｅｎｔ．ｐａｒｅｎｔ＝ｇｅｔＲｅｆ（“ｄｏｃ２．ＸＭＬ”）である。
【００７６】
関数ＣｏｐｙＬｉｓｔ（＿，＿）は、最初の引き数として参照を取り、第２の引き数として要素名を取る。ｒ．ＣｏｐｙＬｉｓｔ（ａ）は、（ネストされていない）ｒの中の全ての要素Ａを直接連結することによって文字列を組み立てる。従って、前記のｇｅｔＮｅｘｔパラグラフの中の例が与えられると、ｒ．ＣｏｐｙＬｉｓｔは、文字列「＜Ｂ　ｘ＝“１”＞＜／Ｂ＞Ｂ　ｘ＝“２”＞＜Ｂ　ｘ＝“３”＞＜／Ｂ＞＜／Ｂ＞＜Ｂｘ＝“４”＞＜／Ｂ＞」を生じる。これは３つのＢ要素を含み、２番目のＢ要素は他のネストされたＢ要素を同時に含む。
【００７７】
最後に、関数ｔｒａｖｅｒｓｅが提供される。ルートへの参照からスタートして、ｔｒａｖｅｒｓｅは、或る順序で文書内の全ての要素を数える。
【００７８】
ここで図９では、モジュールのＤＴＤが定義される。このＤＴＤの要素は、これから順序を追って説明される。典型的には、モジュールは別々のモジュールファイルとして与えられる。もちろん、ＤＴＤは、独特のルート要素で完了しなければならない。しかし、全てのモジュールのリストを有する完全な言語が、１つのＤＴＤの中に含まれてよい。最も上方のモジュール要素は、これらのモジュールファイルのルートである。
【００７９】
モジュールの構成部分は、派生属性のリスト、オプションの式、状態のリスト、及びモジュール（サブモジュール）のリストである。名前属性は、モジュールを適用できる要素を示す。定義は、実行される文書の中に要素「Ｘ」が存在すること、ｍｏｄｕｌｅ要素であるルート要素を有する「ｍｏｄｕｌｅＸ．ｘｍｌ」と呼ばれるＸＭＬ文書が存在すること、前記ルート要素が値「Ｘ」を有するｎａｍｅ属性を有することである。
【００８０】
【数９】
2004505379.tif 000010
【００８１】
派生属性のリストは、他の属性定義からの関数依存によって与えられる属性定義を含む。オプションの式はセキュリティ条件を与え、セキュリティ条件は、そのような要素の各々のインスタンスによって充足されなければならない。状態は、そのような要素の各々のインスタンスの（ネストされない）状態である。最後に、モジュールのリストは要素の構成部分を参照する。構成部分の各々のために、サブモジュールが状態及び更なるサブモジュールを含んでよい。サブモジュールのために、番号属性が、どのインスタンスを参照するかを示す。もしそれが最初のインスタンスを参照すれば、番号は値「１」等を有する。以下同様である。もしそれが全てのインスタンスを参照すれば、番号は値ａｌｌを有してよい。
【００８２】
【数１０】
2004505379.tif 000011
【００８３】
派生属性の定義は２つの構成部分を有する。即ち、定義で利用可能な引き数、及び式として与えられる実際の定義である。名前属性は派生属性の名前を与える。派生属性は、引き数の値を設定し、定義している式を評価することによって評価される。
【００８４】
状態の構成部分は、状態に達したときにトリガされるアクションのリスト、及び状態から出発する遷移のリストである。状態の名前は、何らかの遷移のターゲットとしてそれを参照するために使用される。
【００８５】
【数１１】
2004505379.tif 000012
【００８６】
遷移の２つの構成部分は、遷移を防護する式、及び遷移のターゲットを表記するパスである。派生関数の全ての式、パス、アクション、及び定義は、それらの原点、即ち、モジュールのルート、実行されるＸＭＬ文書の中のそのインスタンスに依存する。
【００８７】
【数１２】
2004505379.tif 000013
【００８８】
パスは、オプションの構成部分、及び属性状態から構成される。状態は、パスが指し示す状態の名前を示す。典型的な状態は、初期状態の「初期」、及び最終状態の「終期」である。構成部分は、ネストされた構成部分を参照し、属性番号は、再び、選択されたインスタンスを示す。もし番号の値がａｌｌであれば、パスは、全てのインスタンスへのパスのファミリーに対応する。
【００８９】
【数１３】
2004505379.tif 000014
【００９０】
式は、様々な場所で使用され、次のように定義される。
【００９１】
【数１４】
2004505379.tif 000015
【００９２】
式として使用されるパスは、対応する要素を評価し、パスによって参照される状態を評価しない。ｓｅｌｆは、それが使用される定義を含むモジュールのインスタンスである要素を評価する。ｓｒｃは、アクションの中で使用された場合は、最後に実行された状態を含む要素を評価し、遷移の中で使用された場合は、遷移のソースを含む要素を評価する。ｔｒｇは、遷移のターゲットを含む要素を評価する。ｅｖａｌａｔｔｒ、ｇｅｔｆｉｒｓｔ、ｇｅｔｎｅｘｔ、及びｐａｒｅｎｔは、前述した対応するプリミティブ関数を評価する。ｒｏｏｔは、実行される文書のルートへ評価される。ａｐｐｌｙは、組み込まれた２項及び単項演算子、例えば、算術演算子（＋、−、＊、．．．）、ブール演算子（ａｎｄ、ｏｒ、ｎｏｔ、．．．）、及び文字列演算子（ａｐｐｅｎｄ、ｃｏｎｃａｔｅｎａｔｅ、．．．）のために使用される。ｅｘｔｅｒｎａｌは、任意のプログラミング言語で書かれた外部関数を呼び出すために使用される。最後に、ｃｏｎｓｔａｎｔは、定数、例えば、数字、即ち、ブール値、及び文字列を示すために使用される。
【００９３】
フローチャートにおいて、抽象関数ｅｖａｌｕａｔｅ（＿）は、式の要素を評価するために使用される。
【００９４】
アクションは、もし、ある状態に到達すればトリガされ、次の構造を有する。
【００９５】
【数１５】
2004505379.tif 000016
【００９６】
ｓｅｔＡｔｔｒアクションは、前述したｓｅｔＡｔｔｒプリミティブに対応する。ｉｆｔｈｅｎは、或る条件のもとでのみ或るアクションを実行するために使用され、ｆｏｒａｌｌは、文書内の或る要素の全てのインスタンスのためのアクションを実行するために使用される。Ｅｘｔｅｒｎａｌ構文は、再び、外部関数を呼び出すために使用される。
【００９７】
フローチャートにおいて、抽象手順ｅｘｅｃｕｔｅ（＿）は、アクション要素を実行するために使用される。
【００９８】
定義は、式及びアクション文法の具体的選択から独立して有効でなければならないから、図９に従ったＤＴＤは、要素＜！ｅｌｅｍｅｎｔ　ｓｒｃ　ＥＭＰＴＹ＞を有する行１９でスタートする残りの規則で完了する。
【００９９】
図１０から図１６を参照して、所与のＸＭＬ文書ｄｏｃ．ｘｍｌの実行が、より詳細に説明される。図１０から図１６は、実行プロセスを指定する６つの固定フローチャートＦ１、Ｆ２、Ｆ２、Ｆ３、Ｆ４、及びＦ７を示す。第１の実施形態に関連して説明されたＧＦＣとは対照的に、これらのフローチャートは、実行される文書やロボットモジュールに依存せず、任意の文書及び任意のロボットモジュールのために固定される。各々のフローチャートは、実行される所与のＸＭＬ文書ｄｏｃ．ｘｍｌの実行の論理ブロックを参照する。モジュールは、各々の要素名Ｘのために別々のファイルｍｏｄｕｌｅＸ．ｘｍｌとして提供される。各々のフローチャートＦｙの状態は、［Ｆｘ．Ｓｙ］として参照される。ここでｘはフローチャートの番号を表し、ｙは対応するフローチャートの中の状態番号を表す。
【０１００】
本発明によれば、ＸＭＬ文書（又は、他の実施形態では、ＤＴＤ）が最初に通過され、モジュールからの全ての状態及び遷移がＸＭＬ文書の中にコピーされる。続いて、ＸＭＬ文書がスタンドアローンで実行される。コピー・プロセスの間に、各々の状態の「原点」属性が現在通過された要素、例えば、コピー・アクションがトリガされた要素へ設定される。従って、原点属性の値はｄｏｃ．ｘｍｌの要素への参照である。
【０１０１】
図１０に示される実行の初期状態は、［Ｆ１．Ｓ１］である。グローバル変数ｃｕｒの値は、文書「ｄｏｃ．ｘｍｌ」のルートへの参照へ設定される。次に、制御は状態［Ｆ１．Ｓ２］へ渡される。これは、グローバル変数ｍｏｄの値を、ルートの実行振る舞いを記述する「ｍｏｄｕｌｅ」要素、例えば、ｃｕｒのラベルに対応する名前を有するモジュールへの参照となるように設定する。次に、制御は、フローチャートＦ２の状態［Ｆ２．Ｓ１］へ渡される。Ｆ２の目的は、全ての「状態」及び「派生」要素を、モジュールｍｏｄから要素ｃｕｒへコピーすることである。これは、全ての状態及び派生の属性「原点」をｃｕｒへ設定する。Ｆ２の最後の状態［Ｆ２．Ｓ９９］から、制御はＦ３の最初の状態［Ｆ３．Ｓ１］へ渡される。Ｆ３の目的は、モジュールｍｏｄのサブモジュールの「状態」及び「派生」要素を、要素ｃｕｒの対応する構成部分の中へコピーすることである。これは、依然として全ての「状態」及び「派生」要素の属性「原点」をｃｕｒへ設定する。Ｆ３の最後の状態［Ｆ３．Ｓ９９］から、制御は［Ｆ１．Ｓ３］へ渡される。これは、ｃｕｒをｃｕｒ．ｔｒａｖｅｒｓｅへ更新する。次に、決定［Ｆ１．Ｄ１］がｃｕｒ＝ｕｎｄｅｆの条件で分岐する。もし条件が真であると評価されると、通過は終了し、制御は［Ｆ５］へ渡される。そうでなければ、制御は［Ｆ１．Ｓ２］へ戻される。
【０１０２】
モジュールＦ５は、ネストされたモジュールの中にネストされたモジュールを処理し、セキュリティ条件をチェックする補助的手順を含んでよい。特別の実施形態のみで使用されるこれらの手順は、標準処理構造を使用して実現されてよい。［Ｆ５］から、制御は［Ｆ６］へ渡される。再び、モジュールＦ６は、特別の実施形態のみで使用され、異なった方針、例えば、実現される遷移条件などの優先順位に従って再配列される状態、遷移、及び派生属性を含む。［Ｆ６］から、制御はＦ７の最初の状態［Ｆ７．Ｓ１］へ渡される。
【０１０３】
注意したように、Ｆ２（図１１）の目的は、モジュールｍｏｄの「状態」及び「派生」要素を要素ｃｕｒへコピーし、それらの要素の「原点」属性をｃｕｒへ設定することである。最初に要素をコピーし、次に属性を設定するのではなく、属性はモジュールｍｏｄの中で正しい値へ設定され、その後に、「状態」及び「派生」要素がモジュールｍｏｄから要素ｃｕｒへコピーされる。グローバル変数ｓｔａｔｅは、ｍｏｄの中の「状態」要素をカバーするために使用され、グローバル変数ｄｅｒｉｖｅｄは、「派生」要素をカバーするために使用される。最初の状態［Ｆ２．Ｓ１］は変数ｓｔａｔｅをｍｏｄの中の最初の「状態」へ設定する。次に、制御は［Ｆ２．Ｄ１］へ渡され、そこから制御は、もしｓｔａｔｅ＝ｕｎｄｅｆであれば［Ｆ２．Ｓ３］へ渡され、そうでなければ［Ｆ２．Ｓ４］へ渡される。ｓｔａｔｅがｕｎｄｅｆでない場合に到達される［Ｆ２．Ｓ３］において、ｓｔａｔｅの属性「原点」がｃｕｒへ設定される。そこから、制御は［Ｆ２．Ｓ３］へ渡される。これは、ｓｔａｔｅをｓｔａｔｅ．ｇｅｔＮｅｘｔへ設定する。そこから、制御は再び決定［Ｆ２．Ｄ１］へ進む。全ての「状態」要素がコピーされた後に到達される［Ｆ２．Ｓ４］において、グローバル変数ｄｅｒｉｖｅｄは、最初の「派生」要素へ設定される。「状態」要素と同じように、全ての「派生」要素について繰り返すため、ｄｅｒｉｖｅｄ＝ｕｎｄｅｆで分岐する決定［Ｆ２．Ｄ２］、及びｄｅｒｉｖｅｄ：：＝ｄｅｒｉｖｅｄ．ｇｅｔＮｅｘｔをトリガする状態［Ｆ２．Ｓ６］が使用され、［Ｆ２．Ｓ５］で「原点」属性がｃｕｒへ設定される。
【０１０４】
もし繰り返しが終了すると、制御は［Ｆ２．Ｓ７］へ渡される。これは、派生の完全なリストをｃｕｒの中へ貼り付ける。次に、［Ｆ２．Ｓ９９］において、「状態」要素のリストがｍｏｄからコピーされ、ｃｕｒの中へ貼り付けられる。
【０１０５】
Ｆ３（図１２）において、ｍｏｄの全てのサブモジュールが、繰り返し変数ｓｕｂｍｏｄを使用して遷移する。もし繰り返しが終了すれば、例えば、もし決定［Ｆ３．Ｄ１］がｓｕｂｍｏｄをｕｎｄｅｆと評価すれば、制御はＦ３の最後の状態［Ｆ３．Ｓ９９］へ渡される。そうでなければ、制御は［Ｆ３．Ｓ２］へ渡される。そこでは、変数ｓｕｂｃｕｒは、サブモジュールｓｕｂｍｏｄのラベルとマッチするラベルを有する最初の構成部分へ設定される。もしサブモジュールｓｕｂｍｏｄの「番号」属性が「１」又は「ａｌｌ」であれば、ｓｕｂｃｕｒは最初のインスタンスへ正しく設定され、制御は決定［Ｆ３．Ｄ２］からＦ４の最初の状態［Ｆ４．Ｓ１］へ渡される。そうでなければ、［Ｆ３．Ｓ３］でｓｕｂｃｕｒが次のインスタンスへ設定され、制御は決定［Ｆ３．Ｄ３］へ渡される。決定［Ｆ３．Ｄ３］は、ｓｕｂｃｕｒがｕｎｄｅｆであるかどうかをチェックする。もしｕｎｄｅｆでなければ、第２のインスタンス又はそれらの全てがチェックされなければならない仮定が存在し、制御は、再び、状態［Ｆ４．Ｓ１］へ渡される。Ｆ４の目的は、正確にＦ２の目的と同じであるが、ｍｏｄ及びｃｕｒの代わりに、ｓｕｂｍｏｄ及びｓｕｂｃｕｒｔが使用され、属性「原点」がｃｕｒへ設定される。
【０１０６】
最後の状態［Ｆ４．Ｓ９９］から、制御は決定［Ｆ３．Ｄ４］へ渡される。もし分岐条件がｓｕｂｍｏｄの「番号」属性を「ａｌｌ」と評価すれば、制御は［Ｆ３．Ｓ３］へ渡される。これは正しいラベルを有する全てのインスタンスを通過する。もしもその通過が、決定［Ｆ３．Ｄ３］を真へトリガすることによって、又は決定［Ｆ３．Ｄ４］で番号が「ａｌｌ」でないことによって停止すると、全てのサブモジュールの遷移は状態［Ｆ３．Ｓ４］で継続する。そこでは、ｓｕｂｍｏｄが「モジュール」要素の次のインスタンスへ設定される。［Ｆ３．Ｓ４］から、制御は再び決定［Ｆ３．Ｄ１］へ渡される。これは、前述したように、サブモジュールの遷移を継続するか、制御をＦ３の最後の状態［Ｆ３．Ｓ９９］へ送る。
【０１０７】
前述したように、Ｆ４（図１３）は、正確にＦ２のように働く。変数ｓｔａｔｅ及びｄｅｒｉｖｅｄは、モジュールｓｕｂｍｏｄの「状態」要素及び「派生」要素について繰り返すように使用される。これは、それらの「原点」属性を要素ｃｕｒへ設定する。次に、全ての「状態」及び「派生」要素がコピーされ、要素ｓｕｂｃｕｒの中へ貼り付けられる。
【０１０８】
状態［Ｆ４．Ｓ９９］において、全ての「状態」要素及び「派生」要素は、文書ｄｏｃ．ｘｍｌの対応する要素の中へコピーされ、モジュールがもはや必要とされないように、「原点」属性が設定される。状態の属性のみを設定する必要があり、全ての「遷移」、「アクション」、及び「派生」要素は変更されないで残るので、代替方法は、「状態」要素及び「派生」要素の最も外側部分のみをコピーし、残りの部分についてはモジュールへの参照を使用することであろう。
【０１０９】
図１４に示されるフローチャートＦ７の最初の状態［Ｆ７．Ｓ１］は、実際の実行フェーズの始まりを示す。Ｆ７において、現在の状態ｃｕｒｓｔａｔｅにマッチする全ての状態のアクションがトリガされる。
【０１１０】
［Ｆ７．Ｓ１］は、ｃｕｒを文書ｄｏｃ．ｘｍｌのルートへ戻す。次に、制御は［Ｆ７．Ｓ２］へ進む。そこでは、グローバル変数ｃｕｒｓｔａｔｅが「初期」へ設定される。ｃｕｒｓｔａｔｅの目的は、現在の要素ｃｕｒの中で現在の状態を示すことである。［Ｆ７．Ｓ３］、［Ｆ７．Ｄ１］、及び［Ｆ７．Ｓ９］において、変数ｓｔａｔｅは現在の要素ｃｕｒの全ての「状態」要素について繰り返される。［Ｆ７．Ｓ３］は繰り返しを初期化し、［Ｆ７．Ｄ１］は終了規準であり、もしそれが終了すれば、制御を［Ｆ８．Ｓ１］へ送る。［Ｆ７．Ｓ９］は、ｓｔａｔｅを「状態」要素の次のインスタンスへ設定する実際の繰り返し手段である。繰り返しの内部では、決定［Ｆ７．Ｄ２］は、ｓｔａｔｅの「名前」属性が現在の状態ｃｕｒｓｔａｔｅとマッチするかどうかをチェックする。もしマッチすれば、［Ｆ７．Ｓ４］に次に遷移する。これは、変数ｃｕｒをｓｔａｔｅの属性「原点」の値へ設定する。この更新の目的は、正しい環境のアクションを評価することである。［Ｆ７．Ｓ５］、［Ｆ７．Ｄ３］、及び［Ｆ７．Ｓ７］において、変数ａｃｔｉｏｎが、ｓｔａｔｅの内部の全てのアクションについて繰り返され、それらの全てが［Ｆ７．Ｓ６］で実行される。その繰り返しが終了したとき、制御は［Ｆ７．Ｓ８］へ渡される。そこでは、ｃｕｒの値がその元の値へ再設定される。そこから、再び、状態についての繰り返しへ入り、終了した後に［Ｆ８．Ｓ１］へ導かれる。
【０１１１】
最後に、図１５で示されるＦ８において、遷移がトリガされる。これは、現在の要素ｃｕｒ及び現在の状態ｃｕｒｓｔａｔｅを更新する。遷移条件の評価は、それらの定義の原点、遷移のソース要素ｓｒｃ、及び遷移のターゲット要素ｔｒｇに依存する。条件を示す「式」要素において、それらの３つの要素は、＜ｓｅｌｆ　／＞、＜ｓｒｃ／＞、及び＜ｔｒｇ／＞としてアクセスされることができる。フローチャートＦ８において、２つのネストされた繰り返しが、「状態」要素及びそれらの「遷移」要素について起こる。最初の状態［Ｆ８．Ｓ１］は、ｓｒｃを現在の要素ｃｕｒへ設定する。次に、［Ｆ８．Ｓ２］、［Ｆ８．Ｄ１］、及び［Ｆ８．Ｓ９］は、現在の要素ｃｕｒの中の全ての状態について変数ｓｔａｔｅを繰り返す。もし繰り返しが終了すれば、制御は［Ｆ７．Ｓ３］へ戻される。これは、再び、同じアクションを実行する。そうでなければ、［Ｆ８．Ｄ２］は、ｓｔａｔｅの「名前」属性が現在の状態ｃｕｒｓｔａｔｅとマッチするかどうかをチェックする。もしマッチすれば、［Ｆ８．Ｓ４］に入り、ｃｕｒが属性「原点」の値へ設定される。次に、［Ｆ８．Ｓ５］、［Ｆ８．Ｄ３］、［Ｆ８．Ｓ８］が、ｓｔａｔｅの内部で全ての遷移について変数ｔｒａｎｓを繰り返すために使用される。繰り返しの内部で、［Ｆ８．Ｓ６］がｔｒｇをパスの評価結果へ設定する。次に、［Ｆ８．Ｄ４］は、ｔｒａｎｓの式が真へ評価されるかどうかをチェックする。この評価のために、ｃｕｒ、ｓｒｃ、及びｔｒｇの正しい設定が必要であることに注意すべきである。もし評価の結果が真であれば、ｃｕｒはｔｒｇへ設定され、ｃｕｒｓｔａｔｅはｔｒａｎｓのパス構成部分の「状態」属性へ設定される。次に、制御は、新しい現在の要素及び状態のアクションを実行するため［Ｆ７．Ｓ３］へ渡される。
【０１１２】
図１６、図１７、及び図１８において、図１以下によるクエリー言語のサンプルモジュールが示される。これらのモジュールは、図１１で与えられたＤＴＤに関して有効である。サンプルのＸＭＬ文書の実行は、図１２以降で説明されたプロセスを使用して実行されることができる。前記モジュールは、前述したグラフィカル・フローチャートに従って図形入力から自動的に生成されてよい。他方、それらの図形的表現は、ここで与えられたテキスト形式から生成されることができる。
【０１１３】
図１９ａから図１９ｄを参照して、前述したようなＸＭＬ文書の実行振る舞いを与えるＸＭＬロボット仕様の実現形態が、より詳細に説明される。ＸＭＬロボット仕様言語Ｍ、例えば、前述したようなビジュアル／テキスト・クエリー言語で書かれたＸＭＬロボット仕様ｍ０、及びｍ０の文書型定義ＤＴＤ０に関して有効なＸＭＬ文書ｄが与えられると、実行仕様は、ｄを実行するため抽象プロセスｍ０Ｅｘｅｃ（ｄ）が何を行なうかについて全ての情報を与える。抽象プロセスｍ０Ｅｘｅｃ（ｄ）を実現するために、既存のコンピュータで実行されることのできるプログラム、例えば、Ｃ又はＪａｖａのようなプログラミング言語で書かれたプログラムが必要である。前記プログラムを実現する基本的方法として、４つの方法がある。
【０１１４】
図１９ａから図１９ｄにおいて、プロセスはボックスとしてビジュアル化され、文書は通常の様式、即ち、屈曲した上方部分を有するボックスでビジュアル化され、実行可能な文書、例えば、プログラムは、文書及びプロセス、例えば、プログラムの実行との組み合わせとしてビジュアル化される。各々のプロセスは、文書形式の入力、及び文書形式の出力を有してよく、他のプロセスをスタートしてよい。実計算機で実行可能な具体的プロセスは、連続線を有するボックスとして示され、抽象的プロセス、例えば、プロセスｍ０Ｅｘｅｃ（ｄ）は、点線を有するボックスとして示される。前述したＸＭＬロボットを実現するには、コンパイラ及びインタープリタ技術の異なった組み合わせから可能である。技術のいずれの１つも、メタ形式Ｍ及び形式ＤＴＤ０のために使用されることができる。従って、典型的に、コンパイラの次にインタープリタ（図１９ａ）、コンパイラの次にコンパイラ（図１９ｂ）、インタープリタの次にインタープリタ（図１９ｃ）、及びインタープリタの次にコンパイラ（図１９ｄ）という、４つの組み合わせが存在する。
【０１１５】
図１９ａは、ＸＭＬ仕様ｍ０からインタープリタＩｎｔＤＴＤ０を生成することによる実現形態を示す。インタープリタＩｎｔＤＴＤ０は入力としてＸＭＬ文書ｄを取り、それがＤＴＤ０に関して有効かどうかをチェックする。続いて、それは、前述した抽象プロセスｍ０Ｅｘｅｃ（ｄ）とプロセスが等しくなるような様式で、そのような文書ｄを実行するプロセスを開始する。実現形態は実行可能な文書ＩＧによって与えられる。文書ＩＧの実行は、入力としてＸＭＬロボット実行仕様ｍ０を取り、出力として実行可能文書ＩｎｔＤＴＤ０、即ち、前記インタープリタを生成する。
【０１１６】
図１９ｂは、ＸＭＬ仕様ｍ０からコンパイラＣｏｍｐＤＴＤ０を生成する実行可能文書ＣＧによって与えられるコンパイラジェネレータを提供することによって、次の可能性をビジュアル化する。コンパイラＣｏｍｐＤＴＤ０は、入力として受け取られた文書ｄを、実行可能文書ｄ’へ変換する。実行可能文書ｄ’の実行は、抽象プロセスｍ０Ｅｘｅｃ（ｄ）と等しくなければならない。
【０１１７】
図１９ｃは、ｍ０の解釈プロセスをスタートする仕様言語ＭのインタープリタＩｎｔＭｔｏｌｎｔを示す。インタープリタＩｎｔＭｔｏｌｎｔは、入力としてＸＭＬロボット仕様ｍ０を取り、プロセスＩｎｔＤＴＤ０をスタートする。プロセスＩｎｔＤＴＤ０は、入力としてＸＭＬ文書ｄを取る。プロセスＩｎｔＤＴＤ０は、直ちに文書ｄを実行する後続のプロセスをスタートする。文書ｄのプロセスは、抽象プロセスｍ０Ｅｘｅｃ（ｄ）と等しくなければならない。
【０１１８】
最後の可能性として、図１９ｄは、仕様言語ＭのインタープリタＩｎｔＭｔｏＣｏｍｐを示す。インタープリタＩｎｔＭｔｏＣｏｍｐは、入力としてＸＭＬロボット仕様ｍ０を取るが、前述したインタープリタＩｎｔＭｔｏｌｎｔとは対照的に、コンパイラプロセスＣｏｍｐＤＴＤ０をスタートする。コンパイラプロセスＣｏｍｐＤＴＤ０は、入力としてＸＭＬ文書ｄを取り、出力として実行可能文書ｄ’を生成する。実行可能文書ｄ’の実行は、再び、抽象プロセスｍ０Ｅｘｅｃ（ｄ）の実行と等しくなければならない。
【０１１９】
前述した可能性の各々は、特定の利点及び欠点を有することが容易に分かるであろう。既知のように、インタープリタ技術を使用する利点は実行の即時利用性であり、より複雑なコンパイラ技術の利点は、より良好なパフォーマンス、及びＸＭＬロボット仕様ｍ０から独立して別々に再使用できるように生成される実行可能文書の利用可能性である。
【０１２０】
図２０において、ウェブベースＸＭＬロボットの好ましい実施形態が示される。典型的には強力なウェブサーバであるサーバ２１は、データベース２２、及び１つ又は複数の機能ライブラリ２３へ接続される。ネットワーク接続、特にインターネットによって、典型的には、遠隔システムの上で走るブラウザを用いた１つ又は複数のクライアント２５．１及び２５．２は、前記サーバ２１にアクセスしてよい。これらのクライアント２５．１及び２５．２の能力は、多かれ少なかれ制約され、典型的には、Ｊａｖａ仮想計算機のように制約された抽象機械を走らせる。
【０１２１】
サーバ２１は、前述したようなＸＭＬロボット仕様に従ってＸＭＬ文書を実行するサービスを提供する。ＸＭＬロボット仕様におけるアクションは、サーバ２１の上で実行されるアクション、例えば、サーバ・データベース２２へのアクセス、又はサーバの機能ライブラリ２３への呼び出しである。更に、ｅメール、ウェブページ、ＷＡＰ、ＳＭＳなどを介して結果を公開するために利用可能なアクション、及び可能性としての追加機器２７が存在する。これらは、アクセス権を管理し、根底にあるデータベース及びソフトウェアシステムのアーキテクチャを管理する。ＸＭＬロボット仕様は、サーバ２１の上でのみ実行されてよいが、それはクライアントへ提供されるサービスのドキュメンテーションとして使用されてよい。
【０１２２】
状況は、アプリケーションがサーバの上で走り、全ての種類のクライアントがアプリケーションにアクセスできるアプリケーション・サービスプロバイダ（ＡＳＰ）モデルに匹敵する。本発明は、全ての計算がサーバの上で行なわれるＡＳＰの利点を共有し、従って、クライアントはインターネット機器のような非常に小さな装置であることができる。更に、本発明は、有限のＸＭＬロボット仕様が、対応するＤＴＤとマッチする無限に多くの異なったＸＭＬ文書を実行できるという利点を有する。
【０１２３】
実行サービスプロバイダアプローチのアプリケーションは、既存のアプリケーションの入力／制御から新しいアプリケーションの仕様又はプログラミングまでをカバーする。入力／制御アプリケーションは、アプリケーションを制御するためＸＭＬ文書を使用する。ＸＭＬロボット仕様は、制御されるアプリケーションのために、文書をインタラクティブな入力／制御シーケンスへ簡単に変換するであろう。新しいアプリケーションの仕様／プログラミングの場合、ＸＭＬ文書はプログラムのシンタックスツリーに対応し、ＸＭＬロボット仕様は実行振る舞いを与える。例えば、プログラミング言語Ｃのためにシンタックスツリーを表すＤＴＤを有するＸＭＬロボット仕様が与えられると、シンタックスツリーの実行振る舞いを与えるＸＭＬロボットは、任意のＣプログラムをサーバへ送り、それらのプログラムをサーバで実行させることができるであろう。
【０１２４】
実行サービスプロバイダを有する前記実施形態と対照的に、他の好ましい実施形態がＬａｎｇＬｅｔｓ（小さなＸＭＬロボット仕様）及びモバイル言語を提供してよい。ここで、サーバ２１は、先ずＸＭＬロボット仕様を送り、次に仕様に従って実行されるＸＭＬ文書を送ることによって、クライアント２５．１及び２５．２へサービスを提供する。この実施形態は、ＸＭＬ文書を実行するため、ＸＭＬロボット仕様からインタープリタ／コンパイラを生成することのできるクライアント２５．１及び２５．２を必要とする。従って、ＸＭＬロボット仕様のアクションはクライアント２５．１及び２５．２の上で実行される。このアプローチは、広い意味では、Ｊａｖａコードをクライアントへ送り、続いてクライアントがこのコードを実行することに匹敵する。しかし、ＸＭＬロボット仕様によって与えられる実行振る舞いは、完全Ｊａｖａよりも、はるかに容易で表現が少ない。しかし、Ｊａｖａのような言語は、ＸＭＬロボット仕様のアクションをプログラムするために使用されてよい。従って、そのようなＸＭＬロボット仕様に従って実行される全てのＸＭＬ文書（無限に多い）の実行振る舞いは、ＸＭＬロボット仕様における有限数の固定された（しかし、パラメータ化された）Ｊａｖａアクションに限定される。
【０１２５】
本発明の重要な利点は、有限ＸＭＬロボット仕様のセキュリティ特性が検査されてよいことである。従って、これらの特性は、クライアント２５．１及び２５．２の上で実行されることを意図される無限数の異なったＸＭＬ文書のために、保証又はチェックされてよい。例えば、もし或る重要なセキュリティ・アクションがＸＭＬロボット仕様のアクションの中に含まれないならば、このアクションは、そのＸＭＬロボット仕様に従って実行されるＸＭＬ文書のために実行されないことが保証されてよい（定義に直接基づいて）。又は、もし他の重要なセキュリティ・アクションが、或る条件によって防護される状態によってのみトリガされるのであれば、この条件が充足される場合にのみ、このアクションがトリガされることを保証することができる。
【０１２６】
再び、ソース・コードがネットを介して送られるモバイル・コードを考えることが助けとなるかも知れない。しかし、それと対照的に、ここでは、モバイル言語／ＤＴＤの実行振る舞いを与えるＸＭＬロボット仕様が先ず送られ、次に、プログラム／ＸＭＬ文書が転送される。従って、モバイル言語は、所与のネットワークを介して提供される。モバイル言語がモバイル・コードよりも優れている利点は、繰り返しの計算がＸＭＬロボット仕様の中に一般的様式で埋め込まれており、計算の実際のインスタンスを記述するＸＭＬ文書の複雑性が少ないことである。
【０１２７】
発明的ＸＭＬロボットのそのような使用は、新しい言語の定義を可能にし、対応するコンパイラ及び／又はインタープリタを生成した後、前記言語で書かれたコードを実行することができる。更に、エディタ、デバッガ、及び解析ツールを作成することが可能である。説明されたデータとコードの協力作用によって、そのような文書の構造ツリーを明示的にパース及び分析する別個のプログラムを書くことなく、有効なＸＭＬ文書の実行又は他の処理を直接定義することができる。
【０１２８】
本発明は、ネットワーク環境、特にインターネットの中で使用されてよい装置２５．１及び２５．２、特にインターネット機器を提供する。この装置は、遠隔コンピュータとの間でデータを送受信する手段を含む。装置は、前記遠隔コンピュータから送られているデータ（ＸＭＬ文書）を記憶及びアクセスする手段を提供する。装置は、好ましくは、前記遠隔コンピュータから受け取られたデータを検査し、もし適用可能であれば、そのようなデータが有効及び／又は許容されるＸＭＬロボット仕様であるかどうかを検証できる手段を含む。更に、装置は、ＸＭＬロボット仕様をＸＭＬ文書と統合する手段を含む。従って、ＸＭＬ文書のインストラクションは、ＸＭＬ文書の命令を実行する装置、好ましくは処理ユニットによって実行される。例えば、ＸＭＬ文書を実行する処理ユニットが、この装置の送信／受信動作の機能を提供してよいように、この装置に含まれる手段は一体であってもよいことを当業者は容易に理解するであろう。更に、装置は、典型的には、もし所望すれば、ＸＭＬ文書又はＸＭＬロボット仕様の実行及び解析をアニメ化する手段を提供するユーザ・インタフェースを含む。しかし、それはネットワーク内でサービスステーションとしてのみ使用されてよい。
【０１２９】
更に、本発明は、先進的ビジュアル統合開発環境において、例えば、図３以降を参照して説明されたようにＸＭＬロボット仕様を図形で表示する手段を含む装置を提供する。これまでの説明に従って、この図形的表現は、前記ＸＭＬロボット仕様を表すＸＭＬ文書を生成するために使用される。
【０１３０】
更に、本発明は、ＸＭＬ文書の分散実行を提供することができる。従って、文書の構造が、同時に、文書を処理するアプリケーションの構造である事実に起因して、ＸＭＬ文書の計算を分散するため多数のＸＭＬロボットが使用される。従って、ＸＭＬ文書の一部分は、異なったサイトに置かれるＸＭＬロボットの異なったインスタンスの上で容易に実行されることができる。同様に、特別のアプリケーションは、文書の一部分がサーバの上で実行され、文書の一部分がクライアント側で実行されることを要求してよい。
【図面の簡単な説明】
【図１】「クエリー」という名前のＤＴＤの例を示す。
【図２】図１によるＤＴＤの例に関して有効なＸＭＬ文書を示す。
【図３】図１で与えられたＤＴＤ「クエリー」によって暗示される図２のＸＭＬ文書のツリー構造を示す。
【図４】図１によるＤＴＤの図形的仕様及び対応するインスタンス化を示す。
【図５】要素定義「クエリー」のために図４の左側の情報をカプセル化した仕様モジュールを示す。
【図６】要素「セットポイント」及び「アクション」のための仕様モジュールを示す。
【図７】各々の要素定義のローカルＧＦＣが、そのような要素の各々のインスタンスのために、構造ツリーの中で、どのようにインスタンス化されるかを示す。
【図８】ローカルＧＦＣのインスタンスが、どのようにグローバルな階層ＧＦＣへ接続されるかを示す。
【図９】モジュール構造を定義する独特のＤＴＤを示す。
【図１０】ＤＴＤ　ＸＭＬ−ｒｏｂｏｔ．ｄｔｄに関して有効なモジュールを使用して所与のＸＭＬ文書の実行を定義するフローチャートを示す。
【図１１】ＤＴＤ　ＸＭＬ−ｒｏｂｏｔ．ｄｔｄに関して有効なモジュールを使用して所与のＸＭＬ文書の実行を定義するフローチャートを示す。
【図１２】ＤＴＤ　ＸＭＬ−ｒｏｂｏｔ．ｄｔｄに関して有効なモジュールを使用して所与のＸＭＬ文書の実行を定義するフローチャートを示す。
【図１３】ＤＴＤ　ＸＭＬ−ｒｏｂｏｔ．ｄｔｄに関して有効なモジュールを使用して所与のＸＭＬ文書の実行を定義するフローチャートを示す。
【図１４】ＤＴＤ　ＸＭＬ−ｒｏｂｏｔ．ｄｔｄに関して有効なモジュールを使用して所与のＸＭＬ文書の実行を定義するフローチャートを示す。
【図１５】ＤＴＤ　ＸＭＬ−ｒｏｂｏｔ．ｄｔｄに関して有効なモジュールを使用して所与のＸＭＬ文書の実行を定義するフローチャートを示す。
【図１６】図１以降による例のモジュールのテキスト表現を示す。
【図１７】図１以降による例のモジュールのテキスト表現を示す。
【図１８】図１以降による例のモジュールのテキスト表現を示す。
【図１９ａ】特定のＸＭＬロボット仕様を実現する方法の例を示す。
【図１９ｂ】特定のＸＭＬロボット仕様を実現する方法の例を示す。
【図１９ｃ】特定のＸＭＬロボット仕様を実現する方法の例を示す。
【図１９ｄ】特定のＸＭＬロボット仕様を実現する方法の例を示す。
【図２０】好ましい実施形態のウェブベースＸＭＬロボット記述の実施形態の概観を示す。
【符号の説明】
２１　サーバ
２２　データベース
２３　ライブラリ
２５．１、２５．２　クライアント
２７　追加の機器
【図３】
2004505379.tif 000018
【図４】
2004505379.tif 000019
【図５】
2004505379.tif 000020
【図６】
2004505379.tif 000021
【図７】
2004505379.tif 000022
【図８】
2004505379.tif 000023
【図１０】
2004505379.tif 000024
【図１１】
2004505379.tif 000025
【図１２】
2004505379.tif 000026
【図１３】
2004505379.tif 000027
【図１４】
2004505379.tif 000028
【図１５】
2004505379.tif 000029
【図１９Ａ】
2004505379.tif 000030
【図１９Ｂ】
2004505379.tif 000031
【図１９Ｃ】
2004505379.tif 000032
【図１９Ｄ】
2004505379.tif 000033
【国際公開パンフレット】
2004505379.tif 000034
2004505379.tif 000035
2004505379.tif 000036
2004505379.tif 000037
2004505379.tif 000038
2004505379.tif 000039
2004505379.tif 000040
2004505379.tif 000041
2004505379.tif 000042
2004505379.tif 000043
2004505379.tif 000044
2004505379.tif 000045
2004505379.tif 000046
2004505379.tif 000047
2004505379.tif 000048
2004505379.tif 000049
2004505379.tif 000050
2004505379.tif 000051
2004505379.tif 000052
2004505379.tif 000053
2004505379.tif 000054
2004505379.tif 000055
2004505379.tif 000056
2004505379.tif 000057
2004505379.tif 000058
2004505379.tif 000059
2004505379.tif 000060
2004505379.tif 000061
2004505379.tif 000062
2004505379.tif 000063
2004505379.tif 000064
2004505379.tif 000065
2004505379.tif 000066
2004505379.tif 000067
2004505379.tif 000068
2004505379.tif 000069
2004505379.tif 000070
2004505379.tif 000071
2004505379.tif 000072
2004505379.tif 000073
2004505379.tif 000074
2004505379.tif 000075
2004505379.tif 000076
2004505379.tif 000077
2004505379.tif 000078
2004505379.tif 000079
2004505379.tif 000080
2004505379.tif 000081
2004505379.tif 000082
2004505379.tif 000083
2004505379.tif 000084
2004505379.tif 000085
2004505379.tif 000086
2004505379.tif 000087
2004505379.tif 000088
2004505379.tif 000089
2004505379.tif 000090
2004505379.tif 000091
2004505379.tif 000092
2004505379.tif 000093
2004505379.tif 000094
2004505379.tif 000095
2004505379.tif 000096
2004505379.tif 000097
2004505379.tif 000098
2004505379.tif 000099
【国際調査報告】
2004505379.tif 000100
2004505379.tif 000101