(57)【要約】【課題】文書（たとえばＸＭＬ文書）とソフトウェア・オブジェクト（たとえばＪａｖａ（Ｒ）オブジェクト）の間のマッピングの共通フレームワークを提供する方法およびシステムを提供すること。【解決手段】このフレームワークでは、マッピングに関してプロパティがどのように得られるかをマスクするハンドラが使用される。これによって、マッピングの両方の方向で共通の外見を有するマッピング・コードがもたらされる。ＸＭＬ文書の要素とＪａｖａ（Ｒ）オブジェクトのプロパティの間のマッピングが、マッパに含まれる。マッパによって、パーサ（１０４）（ＤＯＭまたはＳＡＸなど）を使用して、ＸＭＬ文書（１０８）からオブジェクト（１１０）にマッピングされる。他の方向でのマッピング（Ｊａｖａ（Ｒ）からＸＭＬ）は、ＸＭＬ文書（１１８）の要素が、結果のＸＭＬ文書（１１８）の有効性を保証する特定の順序で構築されることを必要とする。本発明は、たとえば、ＪＳＰを使用するＸＭＬテンプレート文書を構築する。ＪＳＰベースのテンプレートを使用することによって、要素値および属性値を得るコールバックと共に、文書のタグをＪＳＰで記述することが可能になる。さらに、内容を、バッファに向けるか、サーブレットの応答ストリームに直接に向けることができる。【選択図】図２
2004530225.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア・オブジェクトを表すデータ構造を、文書の構造化言語要素に変換するコンピュータ実施される方法であって、
（ａ）構造化言語要素テンプレート文書を生成することと、
（ｂ）前記ソフトウェア・オブジェクトから、前記文書の前記構造化言語要素に関連するプロパティを読み取ることと、
（ｃ）前記プロパティを使用して、前記プロパティと前記構造化言語要素との間の前記関連に基づいて、前記構造化言語要素によって定義される構成を得ることと、
（ｄ）前記構造化言語要素テンプレート文書に前記構成を移植することと
を含むコンピュータ実施される方法。
【請求項２】
ステップ（ｃ）が、前記文書の構造および内容を定義する前記構成を表すプロパティを得るための前記ソフトウェア・オブジェクトへの直接コール・バックを含む、請求項１に記載のコンピュータ実施される方法。
【請求項３】
ステップ（ｃ）が、前記文書の構造および内容を表すオブジェクト・モデルを作成することを含む、請求項１に記載のコンピュータ実施される方法。
【請求項４】
前記構造化言語要素が、拡張可能マークアップ言語（ＸＭＬ）構成を表す、請求項１に記載のコンピュータ実施される方法。
【請求項５】
ステップ（ｃ）が、反復される構造化言語要素を処理するために前記テンプレート文書内でループを構成することを含む、請求項１に記載のコンピュータ実施される方法。
【請求項６】
文書の構造化言語要素を、ソフトウェア・オブジェクトを表すデータ構造に変換する、コンピュータ実施される方法であって、
（ａ）前記文書の前記構造化言語要素のそれぞれを読み取ることと、
（ｂ）前記ソフトウェア・オブジェクトの前記データ構造によって定義される使用可能なプロパティの組から選択される、前記文書の構造化言語要素に関連するプロパティを決定することと、
（ｃ）前記ソフトウェア・オブジェクトを表す前記データ構造の前記プロパティに、前記文書からの構造化言語要素値を移植することと
を含む、コンピュータ実施される方法。
【請求項７】
ステップ（ａ）が、前記文書の構造および内容を表すイベントを生成することを含む、請求項６に記載のコンピュータ実施される方法。
【請求項８】
ステップ（ａ）が、前記文書の構造および内容を表すイベントを用いてハンドラをコール・バックすることを含む、請求項６に記載のコンピュータ実施される方法。
【請求項９】
ステップ（ａ）が、前記文書の構造および内容を表すオブジェクト・モデルを作成することを含む、請求項６に記載のコンピュータ実施される方法。
【請求項１０】
前記構造化言語要素が、拡張可能マークアップ言語（ＸＭＬ）構成を表し、ステップ（ａ）が、さらに、文書型定義（ＤＴＤ）およびＸＭＬスキーマ標準規格を実施することを含む、請求項６に記載のコンピュータ実施される方法。
【請求項１１】
さらに、再帰ＸＭＬ構成についてスタックを維持することを含む、請求項１０に記載のコンピュータ実施される方法。
【請求項１２】
プロパティを含むソフトウェア・オブジェクト（１１６）を、構造化言語要素によって定義される文書（１１８）に変換するシステムであって、
（ａ）文書テンプレート（１１２）と、
（ｂ）前記文書テンプレート（１１２）によって行われるコール・バックに基づいて、前記文書（１１８）の前記構造化言語要素の表現を提供するハンドラ・インターフェース（１１４−１）と、
（ｃ）前記ハンドラ・インターフェース（１１４−１）と通信し、前記ソフトウェア・オブジェクト（１１６）のプロパティを前記文書（１１８）よって認識される構造化言語要素に変換するマッピング・モジュール（１１４−２、１１４−３）と、
（ｄ）前記マッピング・モジュール（１１４−２、１１４−３）と通信し、ステップ（ｃ）で生成される前記構造化言語要素を前記文書（１１８）に書き込む出力ターゲット・クラス（１１４−４）と
を含むシステム。
【請求項１３】
前記マッピング・モジュールが、マッピング・インターフェース（１１４−２）およびマッピング・クラス（１１４−３）を含み、前記マッピング・インターフェース（１１４−２）が、前記構造化言語要素への前記プロパティの前記変換を実行し、および前記文書（１１８）の出力ターゲット・ストリームをセットし、前記マッピング・クラス（１１４−３）が、前記マッピング・インターフェース（１１４−２）によって使用されるメソッドを提供する、請求項１２に記載のシステム。
【請求項１４】
前記出力ターゲット・ストリームが、バッファとして定義される、請求項１３に記載のシステム。
【請求項１５】
前記出力ターゲット・ストリームが、サーブレットの応答ストリームとして定義される、請求項１３に記載のシステム。
【請求項１６】
前記構造化言語要素が、拡張可能マークアップ言語（ＸＭＬ）構成を表す、請求項１２に記載のシステム。
【請求項１７】
前記文書テンプレートが、Ｊａｖａ（Ｒ）Ｓｅｒｖｅｒ  Ｐａｇｅｓ（ＪＳＰ）を使用して作成される、請求項１６に記載のシステム。
【請求項１８】
構造化言語要素を含む文書（１０８）をソフトウェア・オブジェクト（１１０）に変換するシステムであって、
（ａ）前記文書（１０８）の特徴を表すイベントを取得するパーサ（１０４）と、
（ｂ）前記文書（１０８）を読み取る入力ソース・クラス（１０６−１）と、
（ｃ）前記入力ソース・クラス（１０６−１）と通信し、前記パーサ（１０４）によって得られる前記イベントをバッファするコンテント・ハンドラ・クラス（１０６−２）と、
（ｄ）前記コンテント・ハンドラ・クラス（１０６−２）と通信し、前記パーサ（１０４）によって得られる前記イベントを前記ソフトウェア・オブジェクト（１１０）のプロパティに変換するマッピング・モジュール（１０６−３、１０６−４）と
を含むシステム。
【請求項１９】
前記マッピング・モジュールが、マッピング・インターフェース（１０６−４）とマッピング・クラス（１０６−３）とを含み、前記マッピング・インターフェース（１０６−４）が、前記プロパティへの前記イベントの前記変換を実行し、および前記ソフトウェア・オブジェクト（１１０）の出力ターゲット・ストリームをセットし、前記マッピング・クラス（１０６−３）が、前記マッピング・インターフェース（１０６−４）によって使用されるメソッドを提供する、請求項１８に記載のシステム。
【請求項２０】
前記構造化言語要素が、拡張可能マークアップ言語（ＸＭＬ）構成を表す、請求項１９に記載のシステム。
【請求項２１】
プロパティを有するソフトウェア・オブジェクトを、構造化言語要素によって表される文書に変換する方法であって、
（ａ）呼び出されるマッピング・インターフェースのインスタンスに前記ソフトウェア・オブジェクトを供給することと、
（ｂ）呼び出されるコンテナのインスタンスを使用してテンプレートをコンパイルし、実行することと、
（ｃ）前記コンパイルされたテンプレートを使用して、指定された出力ストリームに前記文書を書き込むことと
を含む方法。
【請求項２２】
さらに、処理の状態を維持するために前記マッピング・インターフェースをコール・バックすることを含む、請求項２１に記載の方法。
【請求項２３】
さらに、前記文書の選択された部分を生成しなければならないかどうかを決定するために、前記コンパイルされたテンプレートを介してｉｓＯｐｔｉｏｎａｌＥｌｅｍｅｎｔＰｒｅｓｅｎｔメソッドを呼び出すことを含む、請求項２１に記載の方法。
【請求項２４】
さらに、前記文書の選択された部分を生成しなければならないかどうかを決定するために、前記コンパイルされたテンプレートを介してｉｓＯｐｔｉｏｎａｌＡｔｔｒｉｂｕｔｅＰｒｅｓｅｎｔメソッドを呼び出すことを含む、請求項２１に記載の方法。
【請求項２５】
さらに、前記文書内で複合型を生成する時に、スタックを使用して処理の状態を維持することを含み、前記複合型が、配列、再帰、および別の複合型内に含まれる複合型からなる群から選択される、請求項２１に記載の方法。
【請求項２６】
前記スタックの前記状態が、前記複合型が開始され、終了する時を示すために前記コンパイルされたテンプレートから前記マッピング・インターフェースへコール・バックすることによって維持される、請求項２５に記載の方法。
【請求項２７】
さらに、前記テンプレートが前記文書の選択された部分で何回ループするかを決定するためにｇｅｔＥｌｅｍｅｎｔＲｅｐｅｔｉｔｉｏｎｓメソッドを呼び出すことを含む、請求項２１に記載の方法。
【請求項２８】
前記構造化言語要素が、拡張可能マークアップ言語（ＸＭＬ）構成を表し、前記テンプレートが、Ｊａｖａ（Ｒ）Ｓｅｒｖｅｒ  Ｐａｇｅｓ（ＪＳＰ）を使用して作成される、請求項２１に記載の方法。
【請求項２９】
構造化言語要素を含む文書をソフトウェア・オブジェクトに変換する方法であって、
（ａ）呼び出されるマッピング・インターフェースのインスタンスに前記文書を供給することと、
（ｂ）前記マッピング・インターフェースをコンテント・ハンドラとして登録することと、
（ｃ）呼び出されるパーサのインスタンスを使用して前記文書を構文解析することと、
（ｄ）前記ソフトウェア・オブジェクトに、前記マッピング・インターフェースに対して行われるコール・バックを介して前記文書から解析される前記構造化言語要素に関連するプロパティを移植することと
を含む方法。
【請求項３０】
ステップ（ｄ）が、ｓｔａｒｔＤｏｃｕｍｅｎｔ、ｓｔａｒｔＥｌｅｍｅｎｔ、ｃｈａｒａｃｔｅｒｓ、ｅｎｄＥｌｅｍｅｎｔ、およびｅｎｄＤｏｃｕｍｅｎｔからなる群から選択されるメソッドを呼び出すためのコール・バックを含む、請求項２９に記載の方法。
【請求項３１】
前記マッピング・インターフェースによって実行されるｓｔａｒｔＤｏｃｕｍｅｎｔメソッドおよびｓｔａｒｔＥｌｅｍｅｎｔメソッドが、前記ソフトウェア・オブジェクトを作成する、請求項３０に記載の方法。
【請求項３２】
前記マッピング・インターフェースによって実行されるｅｎｄＥｌｅｍｅｎｔメソッドが、前記ソフトウェア・オブジェクトに前記プロパティをセットする、請求項２９に記載の方法。
【請求項３３】
前記構造化言語要素が、拡張可能マークアップ言語（ＸＭＬ）構成を表す、請求項２９に記載の方法。
【請求項３４】
ソフトウェア・オブジェクトを表すデータ構造を、文書の構造化言語要素に変換するコンピュータ・プログラム製品であって、
（ａ）構造化言語要素テンプレート文書を生成するコンピュータ可読プログラム・コード・デバイスと、
（ｂ）前記ソフトウェア・オブジェクトから、前記文書の前記構造化言語要素に関連するプロパティを読み取るコンピュータ可読プログラム・コード・デバイスと、
（ｃ）前記プロパティを使用して、前記プロパティと前記構造化言語要素との間の前記関連に基づいて、前記構造化言語要素によって定義される構成を得るコンピュータ可読プログラム・コード・デバイスと、
（ｄ）前記構造化言語要素テンプレート文書に前記構成を移植するコンピュータ可読プログラム・コード・デバイスと
を含むコンピュータ・プログラム製品。
【請求項３５】
ステップ（ｃ）が、前記文書の構造および内容を定義する前記構成を表すイベントを得るための前記ソフトウェア・オブジェクトへの直接コール・バックを含む、請求項３４に記載のコンピュータ・プログラム製品。
【請求項３６】
ステップ（ｃ）が、前記文書の構造および内容を表すオブジェクト・モデルを作成することを含む、請求項３４に記載のコンピュータ・プログラム製品。
【請求項３７】
前記構造化言語要素が、拡張可能マークアップ言語（ＸＭＬ）構成を表す、請求項３４に記載のコンピュータ・プログラム製品。
【請求項３８】
ステップ（ｃ）が、反復される構造化言語要素を処理するために前記テンプレート文書内でループを構成することを含む、請求項３４に記載のコンピュータ・プログラム製品。
【請求項３９】
文書の構造化言語要素を、ソフトウェア・オブジェクトを表すデータ構造に変換するコンピュータ・プログラム製品であって、
（ａ）前記文書の前記構造化言語要素のそれぞれを読み取るコンピュータ可読プログラム・コード・デバイスと、
（ｂ）前記ソフトウェア・オブジェクトの前記データ構造によって定義される使用可能なプロパティの組から選択される、前記文書の構造化言語要素に関連するプロパティを決定するコンピュータ可読プログラム・コード・デバイスと、
（ｃ）前記ソフトウェア・オブジェクトを表す前記データ構造の前記プロパティに、前記文書からの構造化言語要素値を移植するコンピュータ可読プログラム・コード・デバイスと
を含むコンピュータ・プログラム製品。
【請求項４０】
ステップ（ａ）が、前記文書の構造および内容を表すイベントを生成することを含む、請求項３９に記載のコンピュータ・プログラム製品。
【請求項４１】
ステップ（ａ）が、前記文書の構造および内容を表すイベントを用いてハンドラをコール・バックすることを含む、請求項３９に記載のコンピュータ・プログラム製品。
【請求項４２】
ステップ（ａ）が、前記文書の構造および内容を表すオブジェクト・モデルを作成することを含む、請求項３９に記載のコンピュータ・プログラム製品。
【請求項４３】
前記構造化言語要素が、拡張可能マークアップ言語（ＸＭＬ）構成を表し、ステップ（ａ）が、さらに、文書型定義（ＤＴＤ）およびＸＭＬスキーマ標準規格を実施することを含む、請求項３９に記載のコンピュータ・プログラム製品。
【請求項４４】
さらに、再帰ＸＭＬ構成についてスタックを維持することを含む、請求項４３に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア・オブジェクトと構造化言語要素文書の間の変換またはマッピングの分野に関し、具体的には、Ｊａｖａ（Ｒ）オブジェクトなどのさまざまなソフトウェア・オブジェクトと拡張可能マークアップ言語（ＸＭＬ）文書の間のマッピングに関する。
【背景技術】
【０００２】
拡張可能マークアップ言語（ＸＭＬ）は、特にウェブ文書用に設計された、標準汎用マークアップ言語（ＳＧＭＬ）の縮小版である。ＸＭＬは、設計者が、自分自身のカスタマイズされたタグを作成することを可能とし、ＨＴＭＬを用いては使用不能な機能性を提供する。たとえば、ＸＭＬでは、それぞれが１つの宛先だけを参照できるＨＴＭＬリンクではなく、複数の文書をさすリンクがサポートされる。
【０００３】
ＸＭＬは、自己記述的なデータ（本明細書の説明では構造化言語要素とも称する）の形なので、リッチ・データ・モデルをエンコードするのに使用される。したがって、ＸＭＬは、異なるシステムの間のデータ交換媒体として有用である。データを、多数の種類のシステムすなわち、レガシーＣＯＢＯＬプログラム、データベース、Ｃ＋＋プログラムおよび類似物から、ＸＭＬとして抽出するか、パブリッシュすることができる。一般に遭遇するビジネス問題には、ＸＭＬ文書から他のデータ・フォーマットへおよびその逆で情報をどのようにマッピングするかを解決することが含まれる。たとえば、情報を企業間でＸＭＬ文書で交換した後に、その情報を、データベース要求またはトランザクション要求を行う時に使用できるＪａｖａ（Ｒ）オブジェクトにマッピングすることが必要になる場合がある。
【０００４】
２０００年９月２６日にメルツァ（Meltzer）他に発行された米国特許第６１２５３９１号で、ＸＭＬ／Ｊａｖａ（Ｒ）変換ツールの例が開示されている。ＸＭＬからＪａｖａ（Ｒ）への変換のために、メルツァ他では、ＸＭＬ文書を構文解析し、イベントを発生させる。具体的に言うと、パーサが、ＸＭＬ文書をウォークスルーし、照会することができるツリー表現をメモリ内に作り、別のパーサが、ＸＭＬ文書をウォークし、文書に関する情報を伴うイベント（たとえば、文書開始イベント、要素の名前、要素の内容を伴う要素開始イベント、要素終了イベント、文書終了イベントなど）を発生させる。
【０００５】
Ｊａｖａ（Ｒ）からＸＭＬへの変換について、メルツァ他では、各要素のアクセッサ（accessor）を含むコードを生成する。要素のアクセッサには、文字ごとにループするループが含まれる。ループには、文字が何であるかに基づいて処置を実行するｓｗｉｔｃｈステートメントが含まれる。処置は、ＸＭＬ文書の要素断片を含むＳｔｒｉｎｇＢｕｆｆｅｒを構築することである。メルツァ他の解決策は、Ｊａｖａ（Ｒ）からＸＭＬに変換するコードと共に動作するインフラストラクチャのサポートを提供しない。メルツァ他のコードのすべてが、生成されるコードであり、ユーザが編集する助けにはならない。
【特許文献１】
米国特許第６１２５３９１号
【発明の開示】
【発明が解決しようとする課題】
【０００６】
その結果、標準的なツールを使用して効率的に実施できる、ソフトウェア・オブジェクトと構造化言語要素ベースの文書（たとえばＸＭＬ）の間でのマッピングをサポートするマッピング・フレームワークの必要がある。
【課題を解決するための手段】
【０００７】
上で要約した従来技術の欠点は、文書（たとえばＸＭＬ文書）とソフトウェア・オブジェクト（たとえばＪａｖａ（Ｒ）オブジェクト）の間のマッピングの共通フレームワークを提供する、本発明の例示的な方法およびシステムによって克服される。このフレームワークでは、マッピングのためにプロパティを得る方法をマスクするハンドラが使用される。これによって、両方向のマッピングについて共通の外見を有するマッピング・コードがもたらされる。ＸＭＬ文書の要素とＪａｖａ（Ｒ）オブジェクトのプロパティの間のマッピングが、マッパー（mapper）に含まれる。マッパーによって、パーサ(Document Object Model（ＤＯＭ）またはSimpleApplication Programming Interface（ＡＰＩ）for XML（ＳＡＸ）など）の使用を介したＸＭＬ文書からソフトウェア・オブジェクトへのマッピングが行われる。
【０００８】
他の方向（Ｊａｖａ（Ｒ）からＸＭＬ）へのマッピングは、結果のＸＭＬ文書の有効性を保証するために、ＸＭＬ文書の要素が特定の順序で構築されることを必要とする。この有効性を保証するために、本発明の例示的実施形態では、たとえばＪａｖａ（Ｒ）Ｓｅｒｖｅｒ  Ｐａｇｅｓ（商標）（ＪＳＰ）を使用してＸＭＬテンプレート文書を構築する。ＪＳＰベースのテンプレートを使用することによって、要素値および属性値を得るコールバックと共に文書のタグをＪＳＰに書き込めるようになる。ＪＳＰは、効率的なテンプレート作成を可能にするエディタ・サポートと共に、明確に文書化されている。さらに、内容を、バッファに向けるか、直接にサーブレット（servlet）の応答ストリームに向けることができる。本発明の１態様によれば、ソフトウェア・オブジェクトを表すデータ構造を、文書の構造化言語要素に変換するコンピュータ実施される方法であって、（ａ）構造化言語要素テンプレート文書を生成することと、（ｂ）前記ソフトウェア・オブジェクトから、前記文書の前記構造化言語要素に関連するプロパティを読み取ることと、（ｃ）前記プロパティを使用して、前記プロパティと前記構造化言語要素との間の前記関連に基づいて、前記構造化言語要素によって定義される構成を得ることと、（ｄ）前記構造化言語要素テンプレート文書に前記構成を移植することとを含むコンピュータ実施される方法が提供される。
【０００９】
本発明のもう１つの態様によれば、文書の構造化言語要素を、ソフトウェア・オブジェクトを表すデータ構造に変換する、コンピュータ実施される方法であって、（ａ）前記文書の前記構造化言語要素のそれぞれを読み取ることと、（ｂ）前記ソフトウェア・オブジェクトの前記データ構造によって定義される使用可能なプロパティの組から選択される、前記文書の構造化言語要素に関連するプロパティを決定することと、（ｃ）前記ソフトウェア・オブジェクトを表す前記データ構造の前記プロパティに、前記文書からの構造化言語要素値を移植することとを含む、コンピュータ実施される方法が提供される。
【００１０】
本発明のもう１つの態様によれば、プロパティを含むソフトウェア・オブジェクトを、構造化言語要素によって定義される文書に変換するシステムであって、（ａ）文書テンプレートと、（ｂ）前記文書テンプレートによって行われるコール・バックに基づいて、前記文書の前記構造化言語要素の表現を提供するハンドラ・インターフェースと、（ｃ）前記ハンドラ・インターフェースと通信して、前記ソフトウェア・オブジェクトのプロパティを前記文書によって認識される構造化言語要素に変換するマッピング・モジュールと、（ｄ）前記マッピング・モジュールと通信して、ステップ（ｃ）で生成される前記構造化言語要素を前記文書に書き込む出力ターゲット・クラスとを含むシステムが提供される。
【００１１】
本発明のもう１つの態様によれば、構造化言語要素を含む文書をソフトウェア・オブジェクトに変換するシステムであって、（ａ）前記文書の特徴を表すイベントを得るパーサと、（ｂ）前記文書を読み取る入力ソース・クラスと、（ｃ）前記入力ソース・クラスと通信して、前記パーサによって得られる前記イベントについてバッファを実施するコンテント・ハンドラ・クラスと、（ｄ）前記コンテント・ハンドラ・クラスと通信して、前記パーサによって得られる前記イベントを前記ソフトウェア・オブジェクトのプロパティに変換するマッピング・モジュールとを含むシステムが提供される。
【００１２】
本発明のもう１つの態様によれば、プロパティを有するソフトウェア・オブジェクトを、構造化言語要素によって表される文書に変換する方法であって、（ａ）呼び出されるマッピング・インターフェースのインスタンスに前記ソフトウェア・オブジェクトを供給することと、（ｂ）呼び出されるコンテナのインスタンスを使用してテンプレートをコンパイルし、実行することと、（ｃ）前記コンパイルされたテンプレートを使用して、指定された出力ストリームに前記文書を書き込むこととを含む方法が提供される。
【００１３】
本発明のもう１つの態様によれば、構造化言語要素を含む文書をソフトウェア・オブジェクトに変換する方法であって、（ａ）呼び出されるマッピング・インターフェースのインスタンスに前記文書を供給することと、（ｂ）前記マッピング・インターフェースをコンテント・ハンドラとして登録することと、（ｃ）呼び出されるパーサのインスタンスを使用して前記文書を構文解析することと、（ｄ）前記ソフトウェア・オブジェクトに、前記マッピング・インターフェースに対して行われるコール・バックを介して前記文書から解析される前記構造化言語要素に関連するプロパティを移植することとを含む方法が提供される。
【００１４】
本発明のもう１つの態様によれば、ソフトウェア・オブジェクトを表すデータ構造を、文書の構造化言語要素に変換するコンピュータ・プログラム製品であって、（ａ）構造化言語要素テンプレート文書を生成するコンピュータ可読プログラム・コード・デバイスと、（ｂ）前記ソフトウェア・オブジェクトから、前記文書の前記構造化言語要素に関連するプロパティを読み取るコンピュータ可読プログラム・コード・デバイスと、前記プロパティが、（ｃ）前記プロパティを使用して、前記プロパティと前記構造化言語要素との間の前記関連に基づいて、前記構造化言語要素によって定義される構成を得るコンピュータ可読プログラム・コード・デバイスと、（ｄ）前記構造化言語要素テンプレート文書に前記構成を移植するコンピュータ可読プログラム・コード・デバイスとを含むコンピュータ・プログラム製品が提供される。
【００１５】
本発明のもう１つの態様によれば、文書の構造化言語要素を、ソフトウェア・オブジェクトを表すデータ構造に変換するコンピュータ・プログラム製品であって、（ａ）前記文書の前記構造化言語要素のそれぞれを読み取るコンピュータ可読プログラム・コード・デバイスと、（ｂ）前記ソフトウェア・オブジェクトの前記データ構造によって定義される使用可能なプロパティの組から選択される、前記文書の構造化言語要素に関連するプロパティを決定するコンピュータ可読プログラム・コード・デバイスと、（ｃ）前記ソフトウェア・オブジェクトを表す前記データ構造の前記プロパティに、前記文書からの構造化言語要素値を移植するコンピュータ可読プログラム・コード・デバイスとを含むコンピュータ・プログラム製品が提供される。
【００１６】
本発明の他の態様および特徴は、添付図面と共に本発明の特定の実施形態の以下の説明を再検討する時に、当業者に明白になる。
【００１７】
本発明のさらなる特徴および長所を、添付図面と組み合わせて詳細な説明で説明する。
【発明を実施するための最良の形態】
【００１８】
図１および関連する説明は、本発明を実施することができる適切なコンピューティング環境の例を表す。本発明を、パーソナル・コンピュータで動作するコンピュータ・プログラムのコンピュータ実行可能命令という全般的な文脈で説明するが、本発明は、他のプログラム・モジュールと組み合わせて実施することもできる。
【００１９】
一般に、プログラム・モジュールには、特定のタスクを実行するか特定の抽象データ型を実施するルーチン、プログラム、コンポーネント、データ構造、および類似物が含まれる。さらに、本発明は、ハンドヘルド・デバイス、マルチプロセッサ・システム、マイクロプロセッサベースの民生用電子機器、プログラム可能な民生用電子機器、ミニコンピュータ、メインフレーム・コンピュータ、および類似物を含む、他のコンピュータ・システム構成を使用して実施することもできる。本発明は、通信ネットワークを介してリンクされたリモート処理装置によってタスクが実行される分散コンピューティング環境でも実施することができる。分散コンピューティング環境では、プログラム・モジュールを、ローカルおよびリモートの両方のメモリ・ストレージ・デバイスに配置することができる。
【００２０】
図１に関して、例示的なシステム１０に、普通のパーソナル・コンピュータ２０が含まれ、パーソナル・コンピュータ２０に、処理ユニット２２、システム・メモリ２４、およびシステム・メモリ２４を含むさまざまなシステム構成要素を処理ユニット２２に結合するシステム・バス２６が含まれる。システム・バス２６には、メモリ・バスまたはメモリ・コントローラ、周辺バス、およびさまざまな従来のバス・アーキテクチャ（たとえば、ＰＣＩ、ＶＥＳＡ、ＩＳＡ、ＥＩＳＡなど）のいずれかを使用するローカル・バスを含む複数のタイプのバス構造が含まれる。
【００２１】
システム・メモリ２４に、読取専用メモリ（ＲＯＭ）２８およびランダム・アクセス・メモリ（ＲＡＭ）３０が含まれる。スタートアップ時などにコンピュータ２０内の要素の間での情報転送を助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ）３２が、ＲＯＭ２８に格納される。コンピュータ２０には、ハード・ディスク・ドライブ３４、磁気ディスク・ドライブ３６（取外し可能ディスク３８から読み取り、これに書き込む）、光ディスク・ドライブ４０（ＣＤ−ＲＯＭディスク４２を読み取るか、他の光媒体から読み取り、これに書き込む）も含まれる。ドライブ３４、３６、および４０は、それぞれ、インターフェース４４、４６、および４８によってシステム・バス２６に接続される。
【００２２】
ドライブ３４、３６、および４０とそれに関連するコンピュータ可読媒体（３８、４２）によって、コンピュータ２０のデータ、データ構造、およびコンピュータ実行可能命令の不揮発性ストレージが提供される。図１の記憶媒体は、単に例であり、コンピュータによって可読の他のタイプの媒体（たとえば、磁気カセット、フラッシュ・メモリ・カード、ディジタル・ビデオ・ディスクなど）を含めることが、当業者に既知である。
【００２３】
オペレーティング・システム５０、１つまたは複数のアプリケーション・プログラム５２、他のプログラム・モジュール５４、およびプログラム・データ５６を含む複数のプログラム・モジュールを、ドライブ３４、３６、および４０ならびにＲＡＭ３０に保管することができる。ユーザは、キーボード５８および入力装置６０（たとえば、マウス、マイクロホン、ジョイスティック、ゲーム・パッド、衛星放送受信用パラボラ・アンテナ、スキャナなど）を介してコンピュータ２０にコマンドおよび情報を入力することができる。これらの装置（５８および６０）は、システム・バス２６に結合されたポート・インターフェース６２（たとえば、シリアル・ポート、パラレル・ポート、ゲーム・ポート、universal serial bus（ＵＳＢ）など）を介して処理ユニット２２に接続される。モニタ６４または他のタイプのディスプレイ装置も、インターフェース６６（たとえばビデオ・アダプタ）を介してバス２６に接続される。
【００２４】
コンピュータ２０は、リモート・コンピュータ６８などの１つまたは複数のリモート・コンピュータへの論理接続を使用して、ネットワーク化された環境で動作することができる。リモート・コンピュータ６８は、サーバ、ルータ、ピア・デバイス、または他の一般的なネットワーク・ノードとすることができ、リモート・コンピュータ６８には、通常は、コンピュータ２０に関して説明した要素の多数またはすべてが含まれるが、図を簡単にするために、メモリ・ストレージ・デバイス７０だけを図示した。図１に示された論理接続には、ローカル・エリア・ネットワーク（ＬＡＮ）７２および広域ネットワーク（ＷＡＮ）７４が含まれる。そのようなネットワーキング環境は、オフィス、会社全体のコンピュータ・ネットワーク、イントラネット、およびインターネットで一般的に使用されている。
【００２５】
ＬＡＮネットワーキング環境で使用される時に、コンピュータ２０は、ネットワーク・インターフェースまたはネットワーク・アダプタ７６を介してＬＡＮ７２に接続される。ＷＡＮネットワーキング環境で使用される時に、コンピュータ２０に、通常は、インターネットなどのＷＡＮ７４を介する通信を確立する、モデム７８または他の手段が含まれる。モデム７８は、内蔵または外付けとすることができるが、ポート・インターフェース６２を介してバス２６に接続される。ネットワーク化された環境では、コンピュータ２０に関して示されたプログラム・モジュールまたはその一部を、リモート・メモリ・ストレージ・デバイス７０に格納することができる。
【００２６】
本発明の方法の議論は、ＸＭＬからＪａｖａ（Ｒ）オブジェクトへおよびＪａｖａ（Ｒ）オブジェクトからＸＭＬへの変換／マッピングに関して基づく。他のデータ・フォーマットもサポートされる。たとえば、多数のレガシ・ビジネス・アプリケーションが、ＣＯＢＯＬ、Ｃ、およびＰＬ１で記述されている。これらのアプリケーションは、ＣＩＣＳ（商標）（汎用オンライン・トランザクション処理ソフトウェア）またはＩＭＳ（商標）（情報管理システム）などのエンタープライズ情報システム（ＥＩＳ）に常駐するプログラムからなる。ＣＯＢＯＬプログラムでは、入出力にＣＯＢＯＬ構造体が使用される。ＸＭＬからＣＯＢＯＬへおよびＣＯＢＯＬからＸＭＬへのマッピングの必要がある。本発明を使用して、これらのマッピングを行うことができ、ここで、ＸＭＬ−オブジェクトＸマッピング・ハンドラ（下で説明する）によって、ＸＭＬ文書からＣＯＢＯＬ構造体に移植され、オブジェクトＸ−ＸＭＬマッピング・ハンドラ（下で説明する）は、ＣＯＢＯＬ構造体からデータを抽出し、ＸＭＬ文書に移植するテンプレートによって使用される。
【００２７】
背景として、本発明のマッピング方法では、下記の高水準プロセスを使用する：（ａ）レクサによって、文字を、特定のシステムによって認識可能な単語またはトークンにグループ化し（トークン化と称する）、（ｂ）正しい言語構成を認識するために、パーサによって、トークンのグループを分析し、（ｃ）コード・ジェネレータによって、正しい言語構成の組をとり、実行可能コードを生成する。（ａ）から（ｃ）によって定義される機能を、混合することができる。
【００２８】
たとえば、ＸＭＬからＪａｖａ（Ｒ）オブジェクトへのマッピングについて、開始タグ、属性、終了タグ、および「ＣＤＡＴＡ」セクションなどの正しいＸＭＬトークンを認識するために、ＸＭＬ文書の各文字が分析される。次に、トークンが正しいＸＭＬ構成を形成することについて、トークンを検証しなければならない。最も基本的なレベルでは、タグ付けのすべてが、マッチする開始タグおよび終了タグを有し、属性が、開始タグ内で正しく構成されていることが検証される。文書型定義（ＤＴＤ）またはＸＭＬスキーマが使用可能な場合には、構文解析中に見つかったＸＭＬ構成が、ＤＴＤまたはＸＭＬスキーマに関して正しく、明確に形成されたＸＭＬであることを保証することができる。最後に、ＸＭＬ文書に含まれるデータが、有用なこと（たとえばＪａｖａ（Ｒ）オブジェクトへのマッピング）を達成するのに使用される。
【００２９】
上で識別された作業の一部を、少なくとも部分的に、すぐに入手可能なＸＭＬパーサによって実行することができる。ＸＭＬパーサによって、字句分析および構文解析の作業が処理される。構文解析標準規格の２つの例が、ＳＡＸおよびＤＯＭ  ＡＰＩである（ＳＡＸはSimple Application Programming Interface (API) for XML、ＤＯＭはDocumentObject Model）。
【００３０】
ＳＡＸは、イベントベースである。ＳＡＸを実装するＸＭＬパーサは、構文解析されるＸＭＬ文書で見つかる異なる特徴に対応するイベントを生成する。ＤＯＭ  ＡＰＩは、オブジェクトモデルベースＡＰＩである。ＤＯＭを実装するＸＭＬパーサは、ＸＭＬ文書の内容を表す汎用オブジェクト・モデルをメモリ内に作成する。ＸＭＬパーサが、構文解析を完了すると、メモリに、ＸＭＬ文書の構造および内容の両方に関する情報を提供するＤＯＭオブジェクトのツリーが含まれる。
【００３１】
図２に、本発明の実施形態によるフレームワーク１００の概略図を示す。フレームワーク１００は、図１のシステム１０で実施できるサーブレットなどの統合コンポーネント１０２でインスタンス化されるものとして図示されている。統合コンポーネント１０２には、たとえばＤＯＭまたはＳＡＸを使用して実装され、ＸＭＬ−オブジェクト・マッピング・モジュール１０６と相互作用するパーサ１０４が含まれる。説明をわかりやすくするために、本発明の実施形態を説明する際に、ＳＡＸをパーサ１０４の例として述べる。
【００３２】
ＸＭＬ−オブジェクト・マッピング・モジュール１０６によって、入力ＸＭＬ文書１０８が受け取られ、出力Ｊａｖａ（Ｒ）オブジェクト１１０が生成される。統合コンポーネント１０２には、さらに、オブジェクト−ＸＭＬマッピング・モジュール１１４と通信するＸＭＬ文書テンプレート・モジュール１１２（たとえば、Ｊａｖａ（Ｒ）Ｓｅｒｖｅｒ  Ｐａｇｅｓ（商標）すなわちＪＳＰ技術に基づく）が含まれる。オブジェクト−ＸＭＬマッピング・モジュール１１４によって、入力Ｊａｖａ（Ｒ）オブジェクト１１６が受け取られ、出力ＸＭＬ文書１１８が生成される。
【００３３】
ＸＭＬ−ソフトウェア・オブジェクト・マッピング
図２に関して、ＸＭＬ−オブジェクト・マッピング・モジュール１０６に、下記のコンポーネントが含まれる。
（ａ）入力ＸＭＬ文書１０８を実施する入力ソース・クラス１０６−１（ＸＭＬ２ｘＩｎｐｕｔＳｏｕｒｃｅ）。
（ｂ）パーサ１０４によって生成されるＳＡＸイベントのバッファを実施するバッファード・コンテント・ハンドラ・クラス１０６−２（ＸＭＬ２ｘＢｕｆｆｅｒｅｄＣｏｎｔｅｎｔＨａｎｄｌｅｒ）。
（ｃ）マッピングを実行し、入力ターゲット・ストリームおよび出力ターゲットストリームをセットするマッピング・インターフェース１０６−３（ＸＭＬ２ｘＭａｐｐｉｎｇ）。
（ｄ）入力ＸＭＬ文書１０８から出力Ｊａｖａ（Ｒ）オブジェクト１１０へのマッピングのメソッドを提供するマッピング・クラス１０６−４（ＸＭＬ２ｘＭａｐｐｉｎｇＩｍｐｌ）。
【００３４】
さまざまなインターフェースおよびクラスのさらなる詳細を、下で説明する。用語「クラス」および「インターフェース」は、Ｊａｖａ（Ｒ）では固有の意味を有する。Ｊａｖａ（Ｒ）クラス（抽象、inner、またはfinal）は、特定のオブジェクトを定義するデータ・メンバおよびメソッドの集合であり、Ｊａｖａ（Ｒ）インターフェースは、ある機能性をそれを実装するクラスに強制するのに使用される（すなわち、インターフェースによって、クラスが行わなければならないことが指定される）。インターフェースは、そのインターフェースを実装するクラスによって使用することができる定数を提供するのにも使用される。インターフェースには、定数変数宣言およびメソッド宣言が含まれるが、メソッドの実装は、インターフェースを実装するクラスに委ねられる。１つのクラスによって、任意の個数のインターフェースを実装することができる。
【００３５】
表１に、入力ソース・クラス１０６−１（ＸＭＬ２ｘＩｎｐｕｔＳｏｕｒｃｅ）の主要な関数を要約する（すなわち、網羅的ではない）。
【００３６】
ＸＭＬ２ｘＩｎｐｕｔＳｏｕｒｃｅは、ＸＭ文書をバイト・ストリーム、文字ストリーム、またはＸＭＬ２ｘＢｕｆｆｅｒｅｄＣｏｎｔｅｎｔＨａｎｄｌｅｒ  １０６−２から読み取ることができるようにするのに使用される。
【００３７】
【表１】
2004530225.tif 000003
【００３８】
表２に、バッファード・コンテント・ハンドラ・クラス１０６−２（ＸＭＬ２ｘＢｕｆｆｅｒｅｄＣｏｎｔｅｎｔＨａｎｄｌｅｒ）の主要な関数を要約する（すなわち、網羅的でない）。ハンドラ・クラス１０６−２には、パーサ１０４からのＳＡＸイベントをバッファリングするコンテント・ハンドラも含まれる。これによって、イベントを再生できるようになる。この特徴が有用になる場合の例が、ＸＭＬ文書の異なる部分について異なるマッピング・ハンドラが使用される場合である。実装の例が、Simple Object Access Protocol（ＳＯＡＰ）である。
【００３９】
【表２】
2004530225.tif 000004
【００４０】
ＳＯＡＰは、非集中分散環境で情報を交換する軽量プロトコルである。ＳＯＡＰは、ＸＭＬベースのプロトコルであり、（１）メッセージに含まれるものと、それを処理する方法を記述するフレームワークを定義するエンベロープと、（２）アプリケーション定義のデータ型のインスタンスを表すエンコーディング・ルールの組と、（３）リモート・プロシージャ呼出しおよび応答を表す規約、という３つの部分からなる。ＳＯＡＰメッセージは、必須のＳＯＡＰエンベロープ、任意選択のＳＯＡＰヘッダ、および必須のＳＯＡＰ本体からなるＸＭＬ文書である。この状況では、エンベロープと本体に異なるマッピング・ハンドラを使用することが可能である。
【００４１】
表３に、マッピング・インターフェース１０６−３（ＸＭＬ２ｘＭａｐｐｉｎｇ）の主要な関数を要約する（すなわち、網羅的でない）。ＸＭＬ２ｘＭａｐｐｉｎｇによって、マッピングが実行され、ＩｎｐｕｔＳｔｒｅａｍの構成が可能になる。
【００４２】
【表３】
2004530225.tif 000005
【００４３】
表４に、マッピング・クラス１０６−４（ＸＭＬ２ｘＭａｐｐｉｎｇＩｍｐｌ）の主要な関数を要約する（すなわち、網羅的でない）。クラスおよびインターフェースの定義に関して上で述べたように、ＸＭＬ２ｘＭａｐｐｉｎｇＩｍｐｌクラスは、直接に使用されるのではなく、マッピングの元の入力ＸＭＬ文書１０８およびマッピング先の出力Ｊａｖａ（Ｒ）オブジェクト１１０の文書型定義に依存して、適当なメソッドに内容を追加されてサブクラス化される。
【００４４】
【表４】
2004530225.tif 000006
【００４５】
図３を参照すると、ＸＭＬ文書１０８をソフトウェア・オブジェクト１１０（たとえばＪａｖａ（Ｒ）  Ｂｅａｎ）にマッピングするために実行される全般的なステップを示すメソッド３００が示されており、これには下記が含まれる。
（ａ）ステップ３０２の、ＸＭＬからオブジェクトＸへのマッピングを実施するためにマッピング・インターフェース１０６−４（たとえば、ＸＭＬ２ＸＭａｐｐｉｎｇ）のインスタンスを取得することと、
（ｂ）ステップ３０４で、マッピング・インターフェース１０６−４を呼び出し、ステップ３０６で、入力ＸＭＬ文書１０８を供給することと、
（ｃ）ステップ３０８で、マッピング・インターフェース１０６−４によって、イベント・パーサのインスタンス（たとえばパーサ１０４）を取得し、ステップ３１０で、マッピング・インターフェース１０６−４をコンテント・ハンドラ（たとえばバッファード・コンテント・ハンドラ・クラス１０６−２）として登録することと、
（ｄ）ステップ３１２で、ＸＭＬ文書１０８に対してパーサ１０４を呼び出す（すなわち、文書の構文解析を開始する）ことと、
（ｅ）ステップ（ｄ）が実行される時に、ステップ３１４で、さまざまなメソッド（たとえば、ｓｔａｒｔＤｏｃｕｍｅｎｔ、ｓｔａｒｔＥｌｅｍｅｎｔ、ｃｈａｒａｃｔｅｒｓ、ｅｎｄＥｌｅｍｅｎｔ、ｅｎｄＤｏｃｕｍｅｎｔなど）を呼び出す、マッピング・インターフェース１０６−４へのコール・バックを行うことと、
（ｆ）ステップ３１６で、ｓｔａｒｔＤｏｃｕｍｅｎｔメソッドまたはｓｔａｒｔＥｌｅｍｅｎｔメソッドあるいはこの両方で、マッピング・インターフェース１０６−４によって、ソフトウェア・オブジェクト１１０を作成することと、
（ｇ）ステップ３１８で、ｅｎｄＥｌｅｍｅｎｔメソッドで、マッピング・インターフェース１０６−４によって、ソフトウェア・オブジェクト１１０に要素をセットすること。
【００４６】
上で説明したＳＡＸ  ＡＰＩには、当技術分野で既知の多数の仕様が含まれる。本発明は、「ＣｏｎｔｅｎｔＨａｎｄｌｅｒ」インターフェースを実装するクラスの作成に関し、ＣｏｎｔｅｎｔＨａｎｄｌｅｒインターフェースは、ＸＭＬ文書内で見つかる時にＳＡＸイベントのプログラムを通知するためにＸＭＬパーサによって使用されるコールバック・インターフェースである。このインターフェースは、ＸＭＬ２ｘＢｕｆｆｅｒｅｄＣｏｎｔｅｎｔＨａｎｄｌｅｒクラス１０６−２およびＸＭＬ２ｘＩｎｐｕｔＳｏｕｒｃｅクラス１０６−１と共に使用される。ＳＡＸ  ＡＰＩによって、「ＣｏｎｔｅｎｔＨａｎｄｌｅｒ」インターフェースの「ＤｅｆａｕｌｔＨａｎｄｌｅｒ」実装クラスも提供される。下で詳細に説明する例Ｉ「ＸＭＬ−Ｊａｖａ（Ｒ）カスタマ」では、「ＤｅｆａｕｌｔＨａｎｄｌｅｒ」を拡張して、カスタマＸＭＬ文書からカスタマＪａｖａ（Ｒ）  Ｂｅａｎを生成する。
【００４７】
例Ｉ
ＸＭＬ−Ｊａｖａ（Ｒ）カスタマ
以下のコンポーネント（下で詳細に説明する）が、例Ｉの一部である。
（Ａ）ｃｕｓｔｏｍｅｒ．ｘｍｌ  入力ＸＭＬ文書１０８のサンプルである。
（Ｂ）ＸＭＬ２ＣｕｓｔｏｍｅｒＭａｐｐｉｎｇ．ｊａｖａ  パーサ１０４がコール・バックするハンドラ・クラス１０６−２である。これには、カスタマ・オブジェクトを構成し、その値を確立する指示が含まれる。
（Ｃ）ｅｘｅｃｕｔｅ．ｊａｖａ  ＸＭＬからＪａｖａ（Ｒ）へおよびＪａｖａ（Ｒ）からＸＭＬへ（下の例ＩＩ）のマッピングを実行するのに使用されるマッピング・クラス／インターフェース１０６−３、１０６−４のプログラムである。
（Ｄ）ｃｕｓｔｏｍｅｒ．ｊａｖａ  出力カスタマＪａｖａ（Ｒ）  Ｂｅａｎ１１０である。
（Ｅ）ＣｕｓｔｏｍｅｒＳｙｍｂｏｌｓ．ｊａｖａ  整数定数およびハッシュマップが含まれる。ハッシュマップは、タグの名前を、ＸＭＬ２ＣｕｓｔｏｍｅｒＭａｐｐｉｎｇ．ｊａｖａ（Ｒ）で使用される整数定数にマッピングするのに使用される。
【００４８】
Ａ．入力ＸＭＬ文書（ｃｕｓｔｏｍｅｒ．ｘｍｌ）を下に示す。
2004530225.tif 000007
【００４９】
Ｂ．簡潔にするために部分的に省略された、カスタマ・オブジェクトを構成し、値をセットするプログラム（ＸＭＬ２ＣｕｓｔｏｍｅｒＭａｐｐｉｎｇ．ｊａｖａ）（すなわち、イベント・パーサがコール・バックするハンドラ）を下に示す。
2004530225.tif 000008
2004530225.tif 000009
2004530225.tif 000010
【００５０】
Ｃ．簡潔にするために部分的に省略された、ＸＭＬからＪａｖａ（Ｒ）へ（および、下の例ＩＩで詳細に示されるように、Ｊａｖａ（Ｒ）からＸＭＬへ）のマッピングを実行するのに使用されるプログラム（ｅｘｅｃｕｔｅ．ｊａｖａ）。
2004530225.tif 000011
2004530225.tif 000012
2004530225.tif 000013
【００５１】
Ｄ．カスタマＪａｖａ（Ｒ）  Ｂｅａｎ（ｃｕｓｔｏｍｅｒ．ｊａｖａ）の詳細を下に示す。Ｊａｖａ（Ｒ）  Ｂｅａｎは、当技術分野で既知の標準設計アーキテクチャを厳守する再利用可能なコンポーネントである。Ｂｅａｎは、実行時に可視または不可視とすることができるクラス・オブジェクトである。Ｊａｖａ（Ｒ）Ｂｅａｎｓによって、コンポーネント・アーキテクチャ、コンポーネント開発の標準フレームワークがもたらされる。
2004530225.tif 000014
2004530225.tif 000015
【００５２】
例Ｉからわかるように、ＸＭＬからＪａｖａ（Ｒ）へのマッピングは、パーサ１０４によって、開始タグ、要素タグ、および終了タグのすべてのイベントが処理され、イベントのトラッキングが改善されるので効率的である。
【００５３】
もう１つの例として、カスタマの配列への単一のカスタマＸＭＬ文書の拡張を検討されたい。カスタマ・ジャバ・ビーンズの配列を生成するには、下記の手順に従う。
（ｉ）ＣｕｓｔｏｍｅｒｓのｓｔａｒｔＥｌｅｍｅｎｔを使用して、ベクトルを作成する。
（ｉｉ）各ＣｕｓｔｏｍｅｒのｓｔａｒｔＥｌｅｍｅｎｔで、Ｃｕｓｔｏｍｅｒオブジェクトを作成する。
（ｉｉｉ）ＦｉｒｓｔＮａｍｅ、ＬａｓｔＮａｍｅ、およびＣｕｓｔＩＤのｓｔａｒｔＥｌｅｍｅｎｔイベント、ｇｅｔＥｌｅｍｅｎｔイベント、およびｅｎｄＥｌｅｍｅｎｔイベントを使用してＣｕｓｔｏｍｅｒオブジェクトに移植し、ＣｕｓｔｏｍｅｒのｅｎｄＥｌｅｍｅｎｔイベントを使用して、Ｃｕｓｔｏｍｅｒオブジェクトをベクトルに挿入し、ＣｕｓｔｏｍｅｒｓのｅｎｄＥｌｅｍｅｎｔイベントを使用して、ベクトルからＣｕｓｔｏｍｅｒｓの配列を作成し、共に動作するＪａｖａ（Ｒ）オブジェクトにセットする。
【００５４】
パーサ１０４によって、再帰的ＸＭＬ構造（すなわち、リストのリストを表すＸＭＬ要素）についてスタックが維持される。ｓｔａｒｔＥｌｅｍｅｎｔごとに１つのオブジェクトが作成される。スタックを使用して、必要に応じて状態を保存することができる。子要素が作成されたならば、その子要素を親オブジェクトにセットすることができる。
【００５５】
ソフトウェア・オブジェクト−ＸＭＬマッピング
図２に関して、オブジェクト−ＸＭＬマッピング・モジュール１１４に、下記のコンポーネントが含まれる。
（ａ）構文解析イベントを管理するハンドラ・インターフェース１１４−１（Ｘ２ＸＭＬＨａｎｄｌｅｒ）
（ｂ）マッピングおよび出力ターゲット・ストリームのセットを実行するマッピング・インターフェース１１４−２（Ｘ２ＸＭＬＭａｐｐｉｎｇ）
（ｃ）入力Ｊａｖａ（Ｒ）オブジェクト１１６から出力ＸＭＬ文書１１８へのマッピングのメソッドを提供するマッピング・クラス１１４−３（Ｘ２ＸＭＬＭａｐｐｉｎｇＩｍｐｌ）
（ｄ）出力ＸＭＬ文書１１８を実装する出力ターゲット・クラス１１４−４（Ｘ２ＸＭＬＯｕｔｐｕｔＴａｒｇｅｔ）
【００５６】
表５に、ハンドラ・インターフェース１１４−１（Ｘ２ＸＭＬＨａｎｄｌｅｒ）の主要な関数を要約する（すなわち、網羅的でない）。マッピング・モジュール１１４によって、インターフェース１１４−１が実装され、そのインスタンスがＪＳＰコンテナに登録される。文書テンプレート１１２によって、要素の開始および終了などと要素値の入手のための基本的な文書関連イベントについてマッピング・モジュール１１４へのコール・バックが行われる。
【００５７】
【表５】
2004530225.tif 000016
【００５８】
一般に、コンテナは、ライフ・サイクル管理、セキュリティ、デプロイメント、および実行時サービスをコンポーネントに提供する実体である。コンテナには、コンポーネント固有のサービスを提供する多数の固有のタイプ（ウェブ、ＪＳＰ、サーブレット、アプレットなど）がある。サーブレット・コンテナは、それを介して要求および応答が送られ、要求がデコードされ、応答がフォーマットされるネットワーク・サービスを提供するコンテナである。ＪＳＰコンテナは、サーブレット・コンテナと同一のサービスを提供するコンテナであり、ＪＳＰページを解釈し、サーブレットに処理するエンジンである。
【００５９】
Ｘ２ＸＭＬＨａｎｄｌｅｒ１１４−１によって、パーサ１０４によって作られる構文解析イベントに対する構文解析イベントのミラー（同一ではないが）イメージが提供される。効果的に、パーサ１０４によって提供される構造が、Ｘ２ＸＭＬからのパスにミラーリングされる。
【００６０】
パーサ１０４が、ＳＡＸを使用して実装される時に、イベントが、それを処理するハンドラ１０６−２（すなわち、効果的にコールバック機構）によって受け取られる。この例では、ハンドラ１０６−２が、Ｊａｖａ（Ｒ）クラスを移植するのに使用される。
【００６１】
テンプレート１１２は、呼び出される時に、Ｘ２ＸＭＬＨａｎｄｌｅｒインターフェース１１４−１をコール・バックする。ハンドラ１１４−１は、要求されたデータを取得し、構文解析の状態を維持することによって、コールバックを処理する。
【００６２】
ハンドラ・インターフェース１１４−１は、ＸＭＬ−オブジェクト・マッピング・モジュール１０６によって実行されるさまざまな機能に関して類似するが、ある種の相違がある。要素名は、生成されるか手でコーディングされ、「ネームスペース」サポートを有するスキーマからは取られない。要素名を、要素ごとに一意にすることができる。したがって、ｓｔａｒｔＥｌｅｍｅｎｔメソッドおよびｅｎｄＥｌｅｍｅｎｔメソッドでは、ｎａｍｅパラメータだけが必要である。
【００６３】
マッピングが、ＸＭＬ−オブジェクト・マッピング・モジュール１０６によって実行される時に、入力ソース・クラス１０６−１（すなわちＸＭＬＲｅａｄｅｒ）によって、要素の名前がストリングとして返される。マッピング・クラス／インターフェース１０６−３、１０６−４では、要素名が、一意の番号と対にされる。この番号は、要素の処理を制御するために、ｓｗｉｔｃｈステートメントで使用される。オブジェクト−ＸＭＬモジュール１１４では、要素名を整数定数として定義することによって、処理が最適化され、コーディング・アシスタンスが改善される。したがって、これらのメソッドへのコールバックでは、ストリングの代わりに整数定数が使用される。
【００６４】
ハンドラ・インターフェース１１４−１のイベントの順序は、オブジェクト１１６自体の情報の順序の鏡像になる。
【００６５】
ＸＭＬ文書テンプレート１１２（Ｊａｖａ（Ｒ）Ｓｅｒｖｅｒ  Ｐａｇｅｓ技術を使用して書き込まれる）では、下で詳細を示すコーディング・スタイルが使用される。ＪＳＰ技術では、ユーザ・インターフェースが内容生成から分離され、基礎になる動的な内容を変更せずに、全体的なページ・レイアウトを変更できるようになる。Ｊａｖａ（Ｒ）Ｓｅｒｖｅｒ  Ｐａｇｅｓは、当業者に周知のＪａｖａ（Ｒ）Ｓｅｒｖｌｅｔ技術の拡張である。
【００６６】
ＸＭＬ文書テンプレート１１２−ＪＳＰコーディング・スタイルの例
コールバックが、文書１１８の開始タグおよび終了タグと、複合型に関してコーディングされる。これによって、ハンドラ１１４−１が状態を維持できるようになる。ＪＳＰ  ＸＭＬ文書テンプレート１１２では、開始タグおよび終了タグも、直接にコーディングされ、その結果、これらのタグが、ターゲットに設定された出力ストリームに向けられる。単純型を扱う時には、コールバックをコーディングする必要はないが、開始タグおよび終了タグをコーディングし、その結果、これらのタグがターゲットに設定された出力ストリームに向けられるようにしなければならない。
【００６７】
複合型または単純型が、任意選択である場合には、テンプレート１１２内の条件文節でｉｓＯｐｔｉｏｎａｌＥｌｅｍｅｎｔＰｒｅｓｅｎｔ（）を使用して、任意選択要素を生成するかどうかを制御する。
【００６８】
属性が任意選択である場合には、複合型ではｉｓＯｐｔｉｏｎａｌＡｔｔｒｉｂｕｔｅＰｒｅｓｅｎｔ（ｉｎｔ  ａｔｔｒｉｂｕｔｅＮａｍｅ）を、単純型ではｉｓＯｐｔｉｏｎａｌＡｔｔｒｉｂｕｔｅＰｒｅｓｅｎｔ（ｉｎｔ  ｅｌｅｍｅｎｔＮａｍｅ、ｉｎｔ  ａｔｔｒｉｂｕｔｅＮａｍｅ）を使用する。要素型が、反復される単純型である場合には、ｉｓＯｐｔｉｏｎａｌＡｔｔｒｉｂｕｔｅＰｒｅｓｅｎｔ（ｉｎｔ  ｉｎｄｅｘ、ｉｎｔ  ｅｌｅｍｅｎｔＮａｍｅ、ｉｎｔ  ａｔｔｒｉｂｕｔｅＮａｍｅ）メソッドを使用して、任意選択の属性が含まれるかどうかを判定する。
【００６９】
反復される要素の場合には、ｇｅｔＥｌｅｍｅｎｔＲｅｐｅｔｉｔｉｏｎｓメソッドを使用して、反復される要素の数を返す。これは、テンプレート１１２内でループを構成して、各要素を処理するのに使用される。単純型の場合に、テンプレート１１２に、開始タグおよび終了タグが含まれなければならず、値を得るためにｇｅｔＥｌｅｍｅｎｔＶａｌｕｅ（ｉｎｔ  ｉｎｄｅｘ、ｉｎｔ  ｅｌｅｍｅｎｔＮａｍｅ）が呼び出される。複合型の場合には、状態を維持しなければならないので、テンプレート１１２によって、ｓｔａｒｔＥｌｅｍｅｎｔ（ｉｎｔ  ｉｎｄｅｘ、ｉｎｔ  ｅｌｅｍｅｎｔＮａｍｅ）メソッドおよびｅｎｄＥｌｅｍｅｎｔ（ｉｎｔ  ｉｎｄｅｘ、ｉｎｔ  ｅｌｅｍｅｎｔＮａｍｅ）メソッドを呼び出さなければならない。
【００７０】
表６に、マッピング・インターフェース１１４−２（Ｘ２ＸＭＬＭａｐｐｉｎｇ）の主要な関数を要約する（すなわち、網羅的でない）。マッピング・インターフェース１１４−２によって、マッピング機能（Ｊａｖａ（Ｒ）とＸＭＬの間の）が実行され、出力ターゲット・ストリームが確立される。マッピング・インターフェース１１４−２によって、ハンドラ・インターフェース１１４−１が拡張され、これによって出力ＸＭＬ文書１１８を生成するのに必要な文書テンプレート１１２のコール・バック・メソッドが提供される。
【００７１】
【表６】
2004530225.tif 000017
【００７２】
表７に、マッピング・クラス１１４−３（Ｘ２ＸＭＬＭａｐｐｉｎｇＩｍｐｌ）の主要な関数を要約する（すなわち、網羅的でない）。マッピング・クラス１１４−３によって、入力Ｊａｖａ（Ｒ）オブジェクト１１６から出力ＸＭＬ文書１１８へのマッピングのメソッドが提供される。クラスおよびインターフェースの定義に関して上で述べたように、Ｘ２ＸＭＬＭａｐｐｉｎｇＩｍｐｌクラス１１４−３は、直接に使用されるのではなく、マッピング先の出力ＸＭＬ文書１１８およびマッピング元の入力Ｊａｖａ（Ｒ）オブジェクト１１６の文書型定義に依存して、適当なメソッドに内容を追加されてサブクラス化される。
【００７３】
【表７】
2004530225.tif 000018
【００７４】
表８に、出力ターゲット・クラス１１４−４（Ｘ２ＸＭＬＯｕｔｐｕｔＴａｒｇｅｔ）の主要な関数を要約する（すなわち、網羅的でない）。
【００７５】
Ｘ２ＸＭＬＯｕｔｐｕｔＴａｒｇｅｔクラス１１４−４を用いると、ＸＭＬ文書１１８を、バイト・ストリームまたは文字ストリームに書き込めるようになる。クラス１１４−４によって、バイト・ストリームのターゲットをサーブレットの出力ストリームにすることを可能にするなど、最適化が提供される。したがって、ＸＭＬ文書１１８は、書き込まれる前にバッファリングされない。
【００７６】
【表８】
2004530225.tif 000019
【００７７】
要約すると、Ｘ２ＸＭＬＭａｐｐｉｎｇＩｍｐｌクラス１１４−３によって、Ｘ２ＸＭＬＭａｐｐｉｎｇインターフェース１１４−２が実装される。Ｘ２ＸＭＬＭａｐｐｉｎｇインターフェース１１４−２によって、Ｘ２ＸＭＬＨａｎｄｌｅｒインターフェース１１４−１が拡張される。したがって、Ｘ２ＸＭＬＭａｐｐｉｎｇＩｍｐｌクラス１１４−３によって、Ｘ２ＸＭＬＨａｎｄｌｅｒインターフェース１１４−１で定義されたメソッドが実装される。
【００７８】
図４に関して、ソフトウェア・オブジェクト１１６（たとえばＪａｖａ（Ｒ）Ｂｅａｎ）をＸＭＬ文書１１８にマッピングするために実行される一般的なステップを示すメソッド４００が示されており、この方法には下記が含まれる。
（ａ）ステップ４０２で、入力オブジェクトＸ１１６から出力ＸＭＬ文書１１８へのマッピングを実施するマッピング・インターフェース１１４−２（たとえばＸ２ＸＭＬＭａｐｐｉｎｇ）のインスタンスを得ることと、
（ｂ）ステップ４０４で、マッピング・インターフェース１１４−３でソフトウェア・オブジェクト１１６および出力ＸＭＬ文書１１８の出力ストリームをセットすることと、
（ｃ）ステップ４０６で、マッピング・インターフェース１１４−２を呼び出すことと、
（ｄ）ステップ４０８で、ＪＳＰコンテナを作成することと、
（ｅ）ステップ４１０で、マッピング・インターフェース１１４−２によって、ＸＭＬ文書１１８を作成するＪＳＰ  ＸＭＬテンプレート１１２を使用してＪＳＰコンテナを呼び出すことと、
（ｆ）ステップ４１２で、ＪＳＰコンテナによって、ＪＳＰ  ＸＭＬテンプレート１１２をコンパイルし、実行することと、
（ｇ）ステップ４１４で、コンパイルされたＪＳＰ  ＸＭＬテンプレート１１２によって、指定された出力ストリーム（ステップ４０４から）へのＸＭＬ文書１１８の書込を開始することと、
（ｈ）ステップ４１６で、要素／属性データおよび開始／終了タグについて適当な時に、コンパイルされたＪＳＰ  ＸＭＬテンプレート１１２によって、マッピング・インターフェース１１４−２をコール・バックして、処理の状態を維持し、出力ＸＭＬ文書１１８にデータを追加することと（データは、ソフトウェア・オブジェクト１１６から検索される）、
（ｉ）ステップ４１８で、コンパイルされたＪＳＰ  ＸＭＬテンプレート１１２によって、任意選択として、ｉｓＯｐｔｉｏｎａｌＥｌｅｍｅｎｔＰｒｅｓｅｎｔメソッドまたはｉｓＯｐｔｉｏｎａｌＡｔｔｒｉｂｕｔｅＰｒｅｓｅｎｔメソッドを呼び出して、ＸＭＬ文書のある部分を生成しなければならないかどうかを判定することができることと、
（ｊ）ステップ４２０で、ＪＳＰ  ＸＭＬテンプレート１１２によって、ｇｅｔＥｌｅｍｅｎｔＲｅｐｅｔｉｔｉｏｎｓメソッドをコール・バックして、ＸＭＬ文書のある部分の生成で何回ループしなければならないかを判定することと、
（ｋ）ステップ４２２で、スタックによって処理の状態を維持すること（これは、配列がある、再帰がある、または複合型が別の複合型に含まれる場合に、ＸＭＬ文書内で複合型を生成する時に有用である）。
【００７９】
Ｊａｖａ（Ｒ）からＸＭＬへのマッピングでは、ＸＭＬ文書テンプレート１１２が使用され、ＸＭＬ文書テンプレート１１２は、イベントを処理する（少なくとも複合オブジェクトについて）パーサ１０４によって課せられるものに類似する標準規格を用いてコーディングされる。たとえば、複合型について、開始タグおよび終了タグをコーディングしなければならない（プリミティブ型では不要）。下で詳細を示す例ＩＩ「Ｊａｖａ（Ｒ）−ＸＭＬカスタマ」では、入力カスタマｊａｖａ（Ｒ）オブジェクトから出力カスタマＸＭＬ文書を生成する。
【００８０】
例ＩＩ
Ｊａｖａ（Ｒ）−ＸＭＬカスタマ
下記のコンポーネント（下で詳細を示す）が、例ＩＩの一部である。
（Ａ）Ｃｕｓｔｏｍｅｒ２ＸＭＬＭａｐｐｉｎｇ．ｊａｖａ  出力ＸＭＬ文書１１８に移植される入力カスタマＪａｖａ（Ｒ）オブジェクト１１６から値を得るためにＪＳＰ１１２によって呼び出されるハンドラ・クラス１１４−１
（Ｂ）ｃｕｓｔｏｍｅｒ．ｊｓｐ  出力ＸＭＬ文書１１８を生成するのに使用されるＪＳＰテンプレート１１２
（Ｃ）ＣｕｓｔｏｍｅｒＳｙｍｂｏｌｓ．ｊａｖａ  定数およびハッシュマップが含まれる。ハッシュマップは、タグの名前を整数定数にマッピングするのに使用される。ＪＳＰテンプレート１１２では、整数定数が使用される
（Ｄ）ｅｘｅｃｕｔｅ．ｊａｖａ  Ｊａｖａ（Ｒ）からＸＭＬへおよびＸＭＬからＪａｖａ（Ｒ）へのマッピングを実行するのに使用されるマッピング・クラス／インターフェース１１４−２、１１４−３のプログラム（上の例Ｉの項目Ｃ）
【００８１】
Ａ．簡潔にするために部分的に省略された、入力Ｊａｖａ（Ｒ）オブジェクトからＸＭＬ文書を構成するプログラム（Ｃｕｓｔｏｍｅｒ２ＸＭＬＭａｐｐｉｎｇ．ｊａｖａ）。
2004530225.tif 000020
2004530225.tif 000021
【００８２】
Ｂ．簡潔にするために部分的に省略された、モジュール１１２のＪＳＰの文書テンプレート（Ｃｕｓｔｏｍｅｒ．ｊｓｐ）。
2004530225.tif 000022
【００８３】
Ｃ．簡潔にするために部分的に省略された、Ｃｕｓｔｏｍｅｒ．ｊｓｐによって使用されるハッシュマップおよび定数のプログラム（Ｃｕｓｔｏｍｅｒｓｙｍｂｏｌｓ．ｊａｖａ）。
2004530225.tif 000023
2004530225.tif 000024
【００８４】
例Ｉに関して言及した状況でカスタマの配列に関するＸＭＬ文書を生成するために、改訂されたｃｕｓｔｏｍｅｒ．ｊｓｐの例を下に示す。
2004530225.tif 000025
【００８５】
ハンドラ１１４−１は、配列サイズ（すなわち、何回のループを実行するか）を判定し、ｇｅｔＥｌｅｍｅｎｔＲｅｐｉｔｉｏｎｓでリターンする。ｃｕｓｔｏｍｅｒ．ｊｓｐによって、ｉｎｄｅｘおよびｎａｍｅを用いてｓｔａｒｔＥｌｅｍｅｎｔが呼び出される時に、ハンドラ１１４−１によって、配列内の特定のカスタマ・オブジェクトへの参照がセットされる。
【００８６】
再帰を処理するために、ハンドラ１１４−１によって、スタックが使用される。オブジェクトが再帰する時に、ハンドラ１１４−１によって、ｓｔａｒｔＥｌｅｍｅｎｔでスタックにプッシュされ、ｅｎｄＥｌｅｍｅｎｔでスタックからポップされる。作業オブジェクトは、スタック最上部のオブジェクトである。
【００８７】
オブジェクトが任意選択である場合には、ｉｓＯｐｔｉｏｎａｌＥｌｅｍｅｎｔ（）メソッドまたはｉｓＯｐｔｉｏｎａｌＡｔｔｒｉｂｕｔｅ（）メソッドを使用して、オブジェクトが存在するかどうかを判定する。ｃｕｓｔｏｍｅｒ．ｊｓｐでの処理を改訂して、ｉｓＯｐｔｉｏｎａｌｘｘｘメソッドの１つについて返されるブール値を使用する条件ステートメントを追加する。要約すると、本発明の例示的実施形態の長所には、下記が含まれる。
（ａ）ＸＭＬ文書からＪａｖａ（Ｒ）オブジェクトへおよびＪａｖａ（Ｒ）オブジェクトからＸＭＬ文書へのマッピングの共通フレームワークが提供され、このフレームワークでは、マッピングに関してプロパティがどのように得られるかをマスクするハンドラが使用される。
（ｂ）本発明のマッピング方法（ＸＭＬ／Ｊａｖａ（Ｒ））をインスタンス化するのに、すぐに入手可能なツール（たとえば、ＳＡＸパーサ、ＪＳＰ）が使用される。
（ｃ）本発明のマッピング処理の構造を単純にし、両方のマッピング方向でマッピング処理を似たものにするインターフェースおよびクラス（Ｊａｖａ（Ｒ）環境での）が提供される。
【図面の簡単な説明】
【００８８】
【図１】本発明を実施する方法および装置を実施するのに使用することができるコンピュータ・システムを示すブロック図である。
【図２】ＸＭＬとＪａｖａ（Ｒ）オブジェクトの間およびその逆でのマッピングのフレームワークを示すブロック図である。
【図３】図２のフレームワークを使用してＸＭＬ文書をソフトウェア・オブジェクトにマッピングする方法を示す流れ図である。
【図４】図２のフレームワークを使用してソフトウェア・オブジェクトをＸＭＬ文書にマッピングする方法を示す流れ図である。
【図１】
2004530225.tif 000026
【図２】
2004530225.tif 000027
【図３】
2004530225.tif 000028
【図４】
2004530225.tif 000029
【国際公開パンフレット】
2004530225.tif 000030
2004530225.tif 000031
2004530225.tif 000032
2004530225.tif 000033
2004530225.tif 000034
2004530225.tif 000035
2004530225.tif 000036
2004530225.tif 000037
2004530225.tif 000038
2004530225.tif 000039
2004530225.tif 000040
2004530225.tif 000041
2004530225.tif 000042
2004530225.tif 000043
2004530225.tif 000044
2004530225.tif 000045
2004530225.tif 000046
2004530225.tif 000047
2004530225.tif 000048
2004530225.tif 000049
2004530225.tif 000050
2004530225.tif 000051
2004530225.tif 000052
2004530225.tif 000053
2004530225.tif 000054
2004530225.tif 000055
2004530225.tif 000056
2004530225.tif 000057
2004530225.tif 000058
2004530225.tif 000059
2004530225.tif 000060
2004530225.tif 000061
2004530225.tif 000062
2004530225.tif 000063
2004530225.tif 000064
2004530225.tif 000065
2004530225.tif 000066
2004530225.tif 000067
2004530225.tif 000068
2004530225.tif 000069
2004530225.tif 000070
2004530225.tif 000071
2004530225.tif 000072
2004530225.tif 000073
2004530225.tif 000074
【国際調査報告】
2004530225.tif 000075