(57)【特許請求の範囲】
【請求項１】
拡張マークアップ言語を使用して、コンピュータシステム内に含まれるレガシコンピュータシステムからデータファイルを出力するための方法であって、
前記コンピュータシステムのモデリングエンジンが、前記レガシコンピュータシステムと相互作用して、該レガシコンピュータシステムにおける１つか又は複数のプログラムアプリケーションのデータモデルを、該１つか又は複数のプログラムアプリケーションの各々内における１つか又は複数のインシデントを自動的に識別することによって生成し、
前記コンピュータシステムのマッピングエンジンが、前記モデリングエンジンと相互作用して、前記レガシコンピュータシステムにおける前記１つか又は複数のプログラムアプリケーションの前記データモデルを拡張マークアップ言語スキーマにマッピングし、及び、
前記コンピュータシステムのコード生成エンジンであって、前記マッピングエンジン及び前記レガシコンピュータシステムと相互作用する該コード生成エンジンが、前記マッピングに基づき、前記レガシコンピュータシステムにおける前記１つか又は複数のプログラムアプリケーションを自動的に修正する
ことを含み、
前記データモデルは、前記インシデントを含むものであり、前記インシデントの各々は、選択されたデータファイルにデータを書き込む前記１つか又は複数のプログラムアプリケーションの書き込み動作に対応する、該プログラムアプリケーションに書き込まれたデータが、記述されたものであり、及び、
前記１つか又は複数のプログラムアプリケーションを自動的に修正することは、前記修正されたプログラムアプリケーションの各々が前記コンピュータシステムのプロセッサにより実行させられて、前記レガシコンピュータシステムから拡張マークアップ言語形式で前記データファイルを出力するよう動作可能となるように、前記コード生成エンジンが前記１つか又は複数のプログラムアプリケーションのコードを修正することを含むことからなる、方法。
【請求項２】
前記モデリングエンジンがデータモデルを前記生成することが、
所定の１つか又は複数のプログラムアプリケーション内における１つか又は複数のインシデントのリストを作成し、及び、
前記１つか又は複数のインシデントのデータフィールドに対する値か又は型を有する出力データモデルを生成する
ことを更に含むことからなる、請求項１に記載の方法。
【請求項３】
前記１つか又は複数のインシデントの各々に対応する前記書き込み動作により書き込まれるデータフィールドの静的に決定された値か又は型を、前記出力データモデルが含むことからなる、請求項２に記載の方法。
【請求項４】
書き込まれることとなるデータを生成するために、前記書き込み動作がどのように組み合わされるのかを記述する形式文法を、前記出力データモデルが更に含むことからなる、請求項３に記載の方法。
【請求項５】
１つか又は複数のプログラムアプリケーションの前記データモデルを、前記マッピングエンジンがマッピングすることが、
前記レガシコンピュータシステムの前記１つか又は複数のプログラムアプリケーションに対する修正を画定する仕様を作成する
ことを更に含み、
前記修正が、データを書き込むアプリケーションと、前記拡張マークアップ言語スキーマとの間の関係を画定することからなる、請求項１に記載の方法。
【請求項６】
前記仕様を作成することが、
前記データモデルの前記インシデントを、前記拡張マークアップ言語スキーマと前記プログラムアプリケーションのコードとにマッピングする
ことを更に含むことからなる、請求項５に記載の方法。
【請求項７】
前記１つか又は複数のプログラムアプリケーションを前記コード生成エンジンが自動的に修正することが、
前記マッピングエンジンによって生成された拡張マークアップ言語コンテキストテーブルであって、前記拡張マークアップ言語スキーマを有する該拡張マークアップ言語コンテキストテーブルを、前記レガシコンピュータシステムに提供し、
前記レガシコンピュータシステムに書き込みエンジンを提供し、及び、
前記修正されたプログラムアプリケーションを用いて前記書き込みエンジンを呼び出す
ことを更に含み、
前記書き込みエンジンが、前記修正されたプログラムアプリケーションにより呼び出されて、前記拡張マークアップ言語コンテキストテーブルと連携して、前記レガシコンピュータシステムから、構文的に正しい拡張マークアップ言語データを出力することからなる、請求項１に記載の方法。
【請求項８】
前記呼び出された前記書き込みエンジンが、前記レガシコンピュータシステムから、構文的に正しい拡張マークアップ言語データを出力することが、前記レガシコンピュータシステムから、前記拡張マークアップ言語形式と、未修正のレガシコンピュータシステムによる形式との両方の形式でデータを出力することを更に含むことからなる、請求項７に記載の方法。
【請求項９】
レガシコンピュータシステムから拡張マークアップ言語形式でデータファイルを出力するためのコンピュータシステムであって、
前記レガシコンピュータシステムと相互作用するモデリングエンジンであって、前記レガシコンピュータシステム上に常駐するプログラムアプリケーションのデータモデルを、該プログラムアプリケーション内における１つか又は複数のインシデントを自動的に識別することによって生成するよう該モデリングエンジンが動作可能であり、該データモデルは、該インシデントを含むものであり、該インシデントの各々は、選択された前記データファイルにデータを書き込む該プログラムアプリケーションの書き込み動作に対応する、該プログラムアプリケーションに書き込まれたデータが、記述されたものであることからなる、モデリングエンジンと、
前記モデリングエンジンと相互作用するマッピングエンジンであって、前記プログラムアプリケーションの前記データモデルを拡張マークアップ言語スキーマにマッピングすることにより修正仕様を生成するよう動作可能なマッピングエンジンと、
前記マッピングエンジン及び前記レガシコンピュータシステムと相互作用するコード生成エンジンであって、前記修正仕様に基づき、前記レガシコンピュータシステムのプログラムアプリケーションのコードを自動的に修正するよう動作可能なコード生成エンジン
とを備え、
前記修正仕様は、前記レガシコンピュータシステムの前記プログラムアプリケーションに対する修正を画定する仕様であり、
前記プログラムアプリケーションのコードを修正することは、その修正されたプログラムアプリケーションが前記コンピュータシステムのプロセッサにより実行させられて、前記レガシコンピュータシステムから拡張マークアップ言語形式で前記データファイルを出力するよう動作可能となるように、前記コード生成エンジンが前記プログラムアプリケーションのコードを修正することを含むことからなる、システム。
【請求項１０】
前記モデリングエンジンによって生成される前記プログラムアプリケーションの前記データモデルが、
前記データファイルを出力する前記プログラムアプリケーション内におけるインシデントのリストと、
前記インシデントの各々のデータフィールドに対する値か又は型を有する出力データモデル
とを含むことからなる、請求項９に記載のシステム。
【請求項１１】
書き込まれることとなるデータを生成するために、書き込み動作がどのように組み合わされるのかを記述する形式文法を、前記出力データモデルが更に含むことからなる、請求項１０に記載のシステム。
【請求項１２】
前記レガシコンピュータシステムの前記プログラムアプリケーションを自動的に修正する命令を、前記修正仕様が含むことからなる、請求項９に記載のシステム。
【請求項１３】
前記レガシコンピュータシステムに関連付けられたコンテキストテーブルであって、前記マッピングエンジンにより生成されて、前記拡張マークアップ言語スキーマを前記レガシコンピュータシステムに提供する、コンテキストテーブルと、
前記レガシコンピュータシステム上にロードされる書き込みエンジンであって、該レガシコンピュータシステムの前記修正されたプログラムアプリケーションから呼び出されて、前記コンテキストテーブルに基づいて、拡張マークアップ言語形式でデータを出力するよう動作させられる、書き込みエンジン
とを更に備えることからなる、請求項９に記載のシステム。
【請求項１４】
前記書き込みエンジンが、前記レガシコンピュータシステムのコンピュータ言語でコーディングされている、請求項１３に記載のシステム。
【請求項１５】
前記コンピュータ言語がＣＯＢＯＬを含み、前記コンテキストテーブルがＣＯＢＯＬのコピーブックを含むことからなる、請求項１４に記載のシステム。
【請求項１６】
コンピュータシステム内に含まれるレガシコンピュータシステムを更新して拡張マークアップ言語形式でデータファイルのデータを出力するための方法であって、
前記コンピュータシステムのモデリングエンジンが、前記レガシコンピュータシステム上に常駐する１つか又は複数のプログラムアプリケーションを自動的に分析して、データを出力する該１つか又は複数のプログラムアプリケーション内におけるインシデントを識別し、
前記インシデントを、前記コンピュータシステムのマッピングエンジンが、拡張マークアップ言語スキーマに関連付け、及び、
修正された前記プログラムアプリケーションの各々が前記コンピュータシステムのプロセッサにより実行させられて前記レガシコンピュータシステムから拡張マークアップ言語形式でデータを出力することとなるように、前記関連付けに基づいて、前記コンピュータシステムのコード生成エンジンが、前記プログラムアプリケーションのコードを自動的に修正する
ことを含む、方法。
【請求項１７】
レガシコンピュータシステム上で前記修正されたプログラムアプリケーションが前記コンピュータシステムのプロセッサにより前記レガシコンピュータシステム上において実行させられて、拡張マークアップ言語形式でデータを前記レガシコンピュータシステムから出力することを更に含むことからなる、請求項１６に記載の方法。
【請求項１８】
前記１つか又は複数のプログラムアプリケーションを前記モデリングエンジンが分析することが、
前記レガシコンピュータシステムの前記プログラムアプリケーションについての制御フローのグラフを決定し、
出力データモデルを得るために、前記制御フローのグラフにおける書き込み動作を決定し、
前記書き込み動作によって書き込まれた各データフィールドごとの値か又は型の情報を前記グラフにアタッチし、及び、
前記値か又は型の情報とともに前記出力データモデルについての形式文法を書き込む
ことを更に含むことからなる、請求項１７に記載の方法。
【請求項１９】
前記マッピングエンジンが前記インシデントを関連付けることが、
前記形式文法とアタッチされた値及び型を利用して前記プログラムアプリケーションの前記インシデントを、前記拡張マークアップ言語スキーマにマッピングすることを含むことからなる、請求項１８に記載の方法。
【請求項２０】
前記コード生成エンジンが前記プログラムアプリケーションを自動的に修正することが、
前記マッピングを前記プログラムアプリケーションに適用して、前記拡張マークアップ言語形式で前記インシデントからのデータを出力することをサポートするコードを有する修正されたプログラムアプリケーションを自動的に生成することを含むことからなる、請求項１９に記載の方法。
【請求項２１】
前記修正されたプログラムアプリケーションを、前記レガシコンピュータシステム上において実行し、
前記修正されたプログラムアプリケーションのうちの所定の１つからの呼び出しに応答して、前記レガシコンピュータシステム上において書き込みエンジンを実行し、ここで、該書き込みエンジンは、前記所定の修正されたプログラムアプリケーションからのデータ出力を受け取って、前記マッピングエンジンにより生成されたコンテキストテーブルに基づいて、拡張マークアップ言語タグを前記データに適用し、該タグは、該コンテキストテーブル内の前記拡張マークアップ言語スキーマにより画定され、及び、
前記所定の修正されたプログラムアプリケーションからの前記データを拡張マークアップ言語形式で前記レガシコンピュータシステムから出力する
ことを更に含むことからなる、請求項２０に記載の方法。
【発明の詳細な説明】
【０００１】
（技術分野）
本発明は、一般的にコンピュータシステムの分野に関し、より詳細には、コンピュータシステムからＸＭＬデータを報告するための方法とシステムに関する。
【０００２】
（関連出願の相互引用）
本出願は、この出願と同時に出願されたＢａｌｌａｎｔｙｎｅ，ｅｔ  ａｌ．の「ＭＥＴＨＯＤ  ＡＮＤ  ＳＹＳＴＥＭ  ＦＯＲ  ＭＯＤＥＬＩＮＧ  ＬＥＧＡＣＹ  ＣＯＭＰＵＴＥＲ  ＳＹＳＴＥＭ」という名称の米国特許出願第＿＿＿＿＿号に関するものである。
【０００３】
本出願は、この出願と同時に出願されたＢａｌｌａｎｔｙｎｅ，ｅｔ  ａｌ．の「ＭＥＴＨＯＤ  ＡＮＤ  ＳＹＳＴＥＭ  ＦＯＲ  ＡＰＰＬＹＩＮＧ  ＸＭＬ  ＳＣＨＥＭＡ」という名称の米国特許出願第＿＿＿＿＿号に関するものである。
【０００４】
（発明の背景）
インターネットおよび電子商取引（ｅ−ｃｏｍｍｅｒｃｅ）は、世界で行われているビジネスの形を急速に変えつつある。インターネット経由の直接購入に加えて、消費者は購入の決定を下すにあたってインターネットを通じて利用できる情報に次第に依存するようになってきている。企業は、消費者と、供給者など他の企業とに対し直接インターネット経由で情報により多くアクセスできるようにすることによって対応してきた。インターネット経由の電子情報へのアクセスが増加した結果、印刷された「ハードコピー」情報に対する依存性と要望が少なくなっている。
【０００５】
拡張マークアップ言語（「ＸＭＬ」）［ｅｘｔｅｎｓｉｂｌｅ  ｍａｒｋ−ｕｐ  ｌａｎｇｕａｇｅ］は、インターネットを介した企業間の電子商取引および、データ発行のための優れたツールとなっている。ＸＭＬでは、インターネット上でのデータ送信、異なるアプリケーション間でのオブジェクトとしての直接転送、あるいはブラウザ技術を使ったデータの直接表示および操作に容易に適合される形式を指定する。現在、データをＸＭＬ形式にするためにレガシコンピュータシステム形式のデータ出力に対して複雑な変換を行っている。
【０００６】
通常レガシコンピュータシステム（ｌｅｇａｃｙ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍ）によって出力された作成済みレポートから電子レポートに変換する一例は、電話料金請求書である。従来、電話会社は、通話料金請求情報を追跡し報告するためにＣＯＢＯＬのコードを実行するメーンフレームまたはレガシコンピュータシステムに依存していた。通常、これらのレガシコンピュータシステムのレポートは印刷され、コピーされて、その情報を必要とする人たちに配布される。しかし、従来のレガシコンピュータシステムのレポート形式は電子的に送信したり操作するのが困難である。それでも、電子メール、請求者のＷｅｂサイト、または消費者が選択した請求書のコンソリデータ（ｂｉｌｌ  ｃｏｎｓｏｌｉｄａｔｏｒ）などを利用する請求書の電子配布を使用すると、特に複雑な取引送り状の扱いの場合に、請求書の支払いの柔軟性が増し、管理しやすくなる。
【０００７】
一般に、従来のレガシレポートを異なる形式で利用できるようにするために、レポート印刷ストリームに基づいてデータに対して複雑な変換を実行する。変換手法のひとつは、レガシコンピュータシステムをとり巻く「ラッパ」を書くことである。このラッパには、レガシコンピュータシステムのレポートをＸＭＬ形式の出力に変換するパーザとジェネレータが含まれる。パーザはさまざまなルールを適用し、レガシレポート内のデータ出力を識別しタグ付けをする。たとえば、ドル記号があるかどうか、またはデータフィールド内の小数点の位置に基づいて、電話料金請求書のデータフィールドがドル建て金額を表していること、あるいは数値がないことにより、データフィールドが顧客名を表していることをパーザが判断できる。パーザがレガシレポートを解読した後、ジェネレータがレガシコンピュータシステムのデータを適切にタグ付けされたＸＭＬ形式に変換する。
【０００８】
構文解析および変換プロセスの最終結果はＸＭＬ形式のデータであるが、プロセス自体は実装が困難であり、また費用がかかり、さらに維持がやっかいである。基礎となるプログラムロジックを慎重に調べないと、一般には、レガシコンピュータシステムからのすべての潜在的出力を信頼できる形で判別することはできない。具体的には、かなり大きな出力サンプルであっても、一部のプログラムロジックは実行されるのがまれであるという点でほぼ確実に不完全である。構文解析および変換プロセスの他の困難なことは、レガシコンピュータシステムの基礎となるプログラムアプリケーションに変更を加えたときに、構文解析および変換システムが一般に、その基礎となる変更を反映させる更新を必要とすることである。これら下流の変更により、レガシコンピューターシステムを維持することに関連する時間と費用が増大し、またＸＭＬ形式の出力に誤りが入り込む可能性も高まる。
【０００９】
ＸＭＬを使用する上でさらに関連する困難の１つに、ＸＭＬを採用すると出力データの利用が劇的に改善されるが、ＸＭＬの出力の生成は、やっかいなデータ構造に準拠する基礎のプログラムに依存する。たとえば、構文上正しいＸＭＬを生成するには、厳密にラベル付けされたツリー構造に準拠し、出力データがＸＭＬスキーマによって定義されているＸＭＬデータ構造と関連付けられている「タグ」と「終了タグ」によって識別される必要がある。定義済みＸＭＬスキーマ内のサーブスキーマなどのＸＭＬツリーの深く埋め込まれた要素を書くときには、その要素の先祖要素のすべてに対応するタグも書く必要がある。現在のＸＭＬサブスキーマの一部でない他の要素を書くときには、先祖要素の釣り合う閉じる終了タグの適切なレベルで閉じる必要がある。ＸＭＬスキーマではさらに、要素に対する型と出現回数の制約を指定する。そのため、プログラマ側の誤りを最小限にするために、ＸＭＬを出力するプログラムのかなりのやっかいなブックキーピングがＸＭＬスキーマに関して必要になる。
【００１０】
（発明の概要）
したがって、ＸＭＬ形式で出力するようにレガシコンピュータシステムをすばやくかつ自動的に修正する方法とシステムの必要性が生じた。
【００１１】
さらに、基礎となるレガシコンピュータシステムのプログラムロジックまたはビジネスルールを変更せずにＸＭＬ形式で出力するようにレガシコンピュータシステムを修正する方法とシステムの必要性も存在する。
【００１２】
さらに、ノードの修正を可能にしレガシコンピュータシステムがデータをＸＭＬ形式で出力するようにレガシコンピュータシステムの書き込み操作を決定する方法とシステムも必要である。
【００１３】
さらに、プログラミングの誤りを最小限に抑えるためブックキーピング作業を自動化した構文的に正しいＸＭＬ出力を生成する方法とシステムも必要である。
【００１４】
本発明によれば、レガシコンピュータシステムからＸＭＬ形式に出力を変換する以前に開発された方法およびシステムに関連する欠点および問題点を実質的になくすか、低減する方法とシステムが提示されている。本発明では、レガシコンピュータシステムの形式でデータのレポートを作成した後レガシコンピュータシステムから出力変換する代わりにデータのレポートをＸＭＬ形式で作成するように基礎のレガシコンピュータシステムのプログラムアプリケーションを修正することによりＸＭＬの出力を行う。
【００１５】
より具体的には、コード生成エンジンにより、修正されたレガシプログラムアプリケーションを作成するようにレガシコンピュータシステムのプログラムアプリケーションが自動的に修正される。修正されたレガシプログラムアプリケーションがレガシコンピュータシステム上で実行され、レガシコンピュータシステムから出力されたデータはＸＭＬ形式になる。修正されたレガシプログラムアプリケーションは、レガシコンピュータシステムのコンピュータ言語で作成されるため、レガシコンピュータシステムが直接、ＸＭＬバージョンの出力を生成することができ、レガシコンピュータシステムの無修正のプログラムアプリケーションに埋め込まれているロジックまたはビジネスルールを変更する必要がない。
【００１６】
コード生成エンジンでは、マッピングエンジンにより作成された修正仕様に従って修正済みプログラムアプリケーションを作成する。マッピングエンジンは、レガシコンピュータシステムの書き込み操作のモデルをＸＭＬスキーマにマッピングすることにより修正仕様およびコンテキストテーブルを生成する。マッピングエンジンは、修正仕様をコード生成エンジンに送る。コード生成エンジンは、修正済みのレガシコンピュータシステムのプログラムアプリケーションを作成し、レガシコンピュータシステム上で使用する。書き込みエンジンは、レガシコンピュータシステム上にロードされるアプリケーションプログラムであり、レガシコンピュータシステムの言語で書かれている。書き込みエンジンは、修正済みプログラムアプリケーション側から呼び出され、コンテキストテーブルでエンコードされたＸＭＬスキーマの形式でＸＭＬ出力を書き込む。
【００１７】
マッピングエンジンによって使用されるモデルは、レポートデータモデルを使用するなどして、書き込み操作を識別しモデル化するためにレガシコンピュータシステムを分析するモデリングエンジンにより生成される。モデリングエンジンは、データのレポート作成するレガシコンピュータシステムのプログラムアプリケーションのリストを決定する。データのレポートを作成するプログラムアプリケーションをさらに分析して、書き込み操作が存在するそれぞれのプログラムアプリケーション内の出来事を判別する。次に、レポートデータモデルをそれぞれの出来事のデータフィールドに対する値およびまたは型でコンパイルする。レポートデータモデルは、レガシコンピュータシステムのプログラムアプリケーションの実行パスへの相対的書き込み操作のプロセスを簡素化する形式構文によって補強される。
【００１８】
修正済みプログラムアプリケーションはレガシコンピュータシステムにロードされた後、レガシコンピュータシステムは引き続きその機能操作を実行するが、基礎となるビジネスロジックまたはプログラムロジックに変更を加えることはしない。レガシコンピュータシステムのプログラムアプリケーションがデータのレポート作成を指示するコマンドを発行すると、修正済みプログラムアプリケーションから出される修正された命令によって書き込みエンジンが呼び出され、構文的に正しいＸＭＬデータが出力される。書き込みエンジンは、ＸＭＬ出力の現在のコンテキストを判別し、コンテキストテーブルと連動して適切なスキーマ要素のデータ構造を開く。書き込みエンジンは、その後、現在のスキーマ要素のデータ構造と呼び出されたスキーマ要素を分析し、呼び出されたスキーマ要素と現在のスキーマ要素との関係を判別する。呼び出されたスキーマ要素が現在のスキーマ要素の子孫であれば、書き込みエンジンは呼び出されたスキーマ要素を下ってスキーマ要素のＩＤタグを開いてゆき、構文的に正しいＸＭＬ形式でスキーマ要素からのデータを出力する。スキーマ要素が現在のスキーマ要素の子孫でない場合、書き込みエンジンは首尾一貫した出現回数を持つ共通の先祖を探し、その先祖スキーマ要素に至るまでスキーマ要素ＩＤタグを閉じてゆき、呼び出されたスキーマ要素を下ってスキーマ要素ＩＤ各を開き続け、構文的に正しいＸＭＬ形式でデータを出力する。さらに、書き込みエンジンは、完全な構文単位が利用できるようになるときまでタグおよび属性の印刷を遅らせる機能をサポートしている。
【００１９】
本発明は、多数の重要な技術的利点を備えている。重要な技術的利点の１つに、レガシコンピュータシステムのプログラムアプリケーションを迅速にかつ自動的に修正し、ＸＭＬバージョンのデータ出力を直接生成することを可能にする機能がある。基礎となるレガシコンピュータシステムのプログラムアプリケーションを修正することにより、レガシコンピュータシステム形式からデータ自体を変換することなくＸＭＬ出力をレガシコンピュータシステムから直接利用できるようにする。さらに、基礎となるプログラムロジックをおよびビジネスルールは変更されないため、レガシコンピュータシステムの実質的な機能を変更する必要はない。したがって、レガシコンピュータシステムを使用する企業にとって、計算機に影響を与えることなくＸＭＬ形式の出力から得られるデータが非常に利用しやすくなる。
【００２０】
本発明の他の重要な技術的利点として、基礎となるレガシコンピュータのプログラムアプリケーションの修正は、運用上、レガシコンピュータシステムの出力をＸＭＬ形式に変換する方法に比べて費用がかからず、あまり複雑でなく、時間もかからないという点があげられる。たとえば、修正されたプログラムアプリケーションをレガシコンピュータシステム上で実行すると、ＸＭＬ形式の出力は、データにさらにアクションを実行することなく利用できる。比較すると、レガシコンピュータシステムによってデータのレポートが作成された後、出力をＸＭＬ形式に変換するには、各データレポートでのアクションが必要となる。したがって、基礎となるレガシプログラムアプリケーションに変更を加えた場合、一般に、基礎となる変更をミラー化する変換アプリケーションにも変更を加える必要がある。このため、レガシコンピュータシステムの保守がさらに煩雑になる。
【００２１】
本発明の他の重要な技術的利点としては、レガシコンピュータシステムで使用するかしないかに関係なく、書き込みエンジンおよびコンテキストテーブルが構文的に正しいＸＭＬ出力の生成を支援するという点があげられる。例えば、書き込みエンジンにより、埋め込まれたＸＭＬ要素を書き出すコマンドは必ず、埋め込まれた要素の先祖要素のすべてに対応するタグを含む。また、現在のＸＭＬサブスキーマの一部でないＸＭＬ要素を書き込むと、書き込みエンジンは、先祖スキーマ要素の適切なレベルに合わせて現在のＸＭＬサブスキーマを閉じる。ＸＭＬスキーマに関連するブックキーピングの自動化により、ＸＭＬレポートに関連する構文エラーが発生する危険性をなくすことができる。遅延印刷機能とは、元のレガシシステムのアプリケーションプログラム内の印刷コマンドのシーケンスがＸＭＬスキーマによって規定されているＸＭＬ要素の順序に直接マップされない場合でも、プログラムが正しいＸＭＬデータを生成できるようにするメカニズムである。
【００２２】
本発明の他の重要な利点として、基礎となるプログラムロジックをモデル化するという複雑な作業をツールサポートで管理することにより、ＸＭＬ形式のデータを出力するようにレガシコンピュータシステムを修正する時間を短縮し費用を著しく低減できるという点があげられる。ツールを利用することで、レガシアプリケーションの制御の流れのグラフを決定する作業、このグラフからレポートの行を書くことに特に関連するサブグラフを抽出する作業、タグ付きＸＭＬとして書く必要がある要素を容易に識別できるように印刷行に流れ込む定数とデータ項目を識別する作業、およびヘッダとフッタの位置などの領域固有の情報を識別する作業が簡単に行えるようになる。ツールサポートでの自動化により、プログラムの複雑さの管理が大幅に向上する。
【００２３】
類似の参照番号は類似の機能を示している付属の図面ととともに、次の説明を参照することにより本発明およびその利点をさらに完全に理解することができる。
【００２４】
（発明の詳細な説明）
本発明の好ましい実施形態は図に示されており、類似の番号はさまざまな図面の類似の対応する部分を参照するために使用されている。
【００２５】
電子商取引の媒体としてＸＭＬを使用することにより得られる機会を活用するために、企業は最終的に既存のレガシコンピュータシステムを置き換えるか、またはレガシコンピュータシステム上のアプリケーションを書き換える必要がある。しかし、企業は既存のレガシコンピュータシステムと関連アプリケーションに多大な投資を行っているため、これらのシステムをおよびアプリケーションの大規模な交換は短期的には実用的でない。レガシコンピュータシステムは、請求書作成、在庫管理、および膨大なオンラインおよびバッチトランザクション処理を必要とするスケジューリングなどの重要な機能を実行する。それでも、ＣＯＢＯＬなどの言語で書かれたレガシコンピュータシステムのアプリケーションは、予測不可能な将来も多くの大規模な組織の企業アプリケーションの重要な部分として残る。実際、既存のソフトウェアのこのようなインストール基盤は多くの組織のビジネスルールの主たる実施形態を表している。原理的にはこれらのアプリケーションはデータをＸＭＬ形式で出力できるように手作業で修正することもできるが、現実には、単純なレポートアプリケーションであってもその基礎となるロジックは理解することも解読することも困難な場合がある。
【００２６】
文武  したがって、迅速に費用をかけずに既存のコンピュータシステムを手直しし、電子商取引がもたらす機会を活用できるようにするということが、多くの企業が直面しているたいへんな問題なのである。新しいコンピュータシステムおよび更新されたコンピュータシステムをインストールするときであっても、電子商取引の発展はとどまることがないため、企業は新しいコンピュータシステムの重要な構成要素として柔軟性を取り込む必要がある。ＸＭＬは、インターネット上での送信、異なるアプリケーション間でのオブジェクトとしての直接転送、ブラウザ技術を使用した表示および操作などの重要な電子商取引機能に簡単に適応をできることから、データのレポート作成のために普及してきている。ＸＭＬが柔軟であるのは、ＸＭＬスキーマ内のデータの関係を識別する、データを囲む名前付きタグを含んでいるからである。しかし、ＸＭＬデータレポートの実装は、ＸＭＬスキーマ内の出力データを定義するためのタグの正確な使用にかかっている。そこで、ＸＭＬを実装するコンピュータシステムは、ＸＭＬスキーマに忠実に従い、正確なブックキーピングを使用して正確なレポートを作成する。
【００２７】
本発明は、ＸＭＬデータを出力するようにレガシコンピュータシステムのプログラムアプリケーションを修正し、ＸＭＬスキーマ内のＸＭＬ出力を追跡し、ＸＭＬデータがレガシコンピュータシステムから発生したものかどうかに関係なく正確な出力を実現することによりＸＭＬをレポート用に実装する作業を支援する。そこで図１を参照すると、ブロック図はデータをＸＭＬ形式で出力するようにレガシコンピュータシステム１２を修正したコンピュータシステム１０を示している。コード生成システム１４は、レガシコンピュータシステム１２とインターフェイスし、１つまたは複数のレガシプログラムアプリケーション１６の分析および１つまたは複数の修正されたレガシプログラムアプリケーション１８の生成を行うことができる。コード生成システム１４もまた、レガシコンピュータシステム２２に対し書き込みエンジン２０とコンテキストテーブル２２を提供する。レガシコンピュータシステム１２は、修正されたレガシプログラムアプリケーション１８がコンテキストテーブル２２と連携して書き込みエンジン２０を呼び出し構文的に正しいＸＭＬデータを出力するときにＸＭＬ形式のデータを直接出力することができる。
【００２８】
コード生成システム１４は、コード生成エンジン２４、マッピングエンジン２６、およびモデリングエンジンに２８を備える。モデリングエンジンに２８は、レガシコンピュータシステム１２とインターフェイスし、確認とモデリングを自動化するためレガシプログラムアプリケーション１６のコピーを取得する。モデリングエンジン２８は、データが書き込まれるプログラム内の複数の位置でのインシデントのリストを生成する。たとえば、モデリングエンジン２８は、選択された出力ストリームのコマンドを報告するまたは書き込むレガシプログラムアプリケーションのソースコード検索することができる。レポートインシデントのリストを使用し、レガシプログラムアプリケーション１６から書き込まれたデータフィールドの値および型のリストを作成するレポートデータモデルなどによりレガシコンピュータシステムのレポート機能をモデル化する。次に、ＸＭＬスキーマをレガシプログラムアプリケーションによって報告される出力に関連付けるために使用する形式文法により、レポートインシデントのリストを補強する。レポートインシデントのリストと形式文法は、レガシシステムのアプリケーションプログラム用のレポートデータモデルの２つの構成要素である。簡単に言うと、インシデントはレポート内の１行であり、形式文法は、アプリケーションプログラムによりこれらの行を並べて１つのレポートを形成する方法である。
【００２９】
モデリングエンジン２８は、レガシプログラムアプリケーション１６内のレポートインシデントを識別するレポートデータモデルをマッピングエンジン２６およびモデリング／マッピンググラフィカルユーザーインターフェイス３０に供給する。マッピングエンジン２６は、レポートデータモデルからレポートインシデントをＸＭＬスキーマ３２にマップし、レポートデータモデルとＸＭＬスキーマ３２の間のこのような関係をモデリング／マッピンググラフィカルユーザーインターフェイス３０上に表示する。マッピングエンジン２６は、レガシプログラムアプリケーション１６のレポートインシデントとＸＭＬスキーマ３２との間の関係を確定することにより、ＸＭＬデータを出力するようにレガシプログラムアプリケーション１６を修正する仕様を定義する。モデリング／マッピンググラフィカルユーザーインターフェイス３０は、修正仕様の情報をプログラマに供給する。モデリング／マッピンググラフィカルユーザーインターフェイス３０は、修正仕様とコンテキストテーブル２２を生成する。プログラマは、オプションにより、モデリング／マッピンググラフィカルユーザーインターフェイス３０を使用することで、ＸＭＬスキーマを作成または修正することができる。
【００３０】
コード生成エンジン２４は、修正仕様、レガシプログラムアプリケーションのコピー１６、およびコンテキストテーブル２２を受け付け、修正されたレガシプログラムアプリケーション１８を生成する。コード生成エンジン２４は、この修正仕様に基づき、レガシプログラムアプリケーション１６に挿入されているレガシコンピュータシステムのコンピュータ言語でＸＭＬデータの出力を指令するソースコードを生成し、修正されたソースコードを修正済みレガシプログラムアプリケーション１８として保存する。修正済みレガシプログラムアプリケーション１８は、レガシコンピュータシステムのレポート命令を保持し続けるため、修正済みプログラムアプリケーション１８はＸＭＬ形式に加えてレガシコンピュータシステムの形式でそのままデータのレポートを作成することができる。両方の形式を出力できるため、修正されたコードからのデータと修正されていないコードからのデータを直接比較することで品質管理が簡単に行える。それとは別に、コード生成エンジン２４によって与えられる修正された命令で、レガシプログラムアプリケーション１６のレポート命令を置き換えることができるため、修正済みレガシプログラムアプリケーション１８ではＸＭＬ形式でのみデータのレポートを作成することができる。書き込みエンジン２０は、レガシコンピュータシステム１２のコンピュータ言語で書かれており、レガシシステム１２から出力されるデータの適切なＸＭＬスキーマ要素を判別するためコンテキストテーブルに２２を参照する。修正されたレガシプログラムアプリケーション１８内の修正されたコードは、ＸＭＬ形式でデータを出力するときに書き込みエンジン２０を呼び出す。
【００３１】
そこで図２を参照すると、簡素化された流れ図はデータをＸＭＬ形式で出力する修正されたレガシプログラムアプリケーションの生成のプロセスを示している。このプロセスは、レガシプログラムアプリケーション１６のレガシコードがコード生成システム１４から利用できるようになるステップ３４から始まる。たとえば、ＣＯＢＯＬソースコードを実行しているメインフレームのレガシコンピュータシステムが、修正されたコードの分析と生成のためソースコードのコピーをコード生成システム１４にダウンロードする。
【００３２】
ステップ３６で、コード生成システム１４はレガシプログラムアプリケーションをモデル化し、レガシプログラムアプリケーションのコードから書き込みインシデントとその基礎となる文法のレポートデータモデルを供給する。たとえば、レポートデータモデルでは、データの値と型を含む、データが選択された出力デバイスに書き込まれるレガシプログラムアプリケーション１６のコード内にあるインシデントを識別する。ステップ３８で、レポートデータモデルは修正仕様を生成するために使用される。修正仕様は、ＸＭＬデータを出力するために修正されたレガシプログラムアプリケーション１８の書き込み命令に対しデータ構造を定義するステップ４０で与えられるＸＭＬスキーマと連携している生成される。
【００３３】
ステップ４２で、修正仕様を使用し、レガシコンピュータシステム１２上で実行する修正されたレガシコードを自動的に生成する。修正されたレガシコードはステップ４４で実行され、修正されたレガシプログラムアプリケーションがレガシシステム１２から出力をＸＭＬ形式で送出するため、出力データの変換をこれ以上行う必要はない。
【００３４】
レガシコンピュータシステム１２をモデル化するプロセスは、図３に詳細に示されている。モデリングエンジン２８は、基礎となるレガシコードの自動分析により、レガシプログラムアプリケーション１６のレポートデータモデルを抽出する。自動化された分析により、レガシコードの動作が理解しやすくなっており、また基礎となるレガシコードの操作および保守に関して誤りを犯す可能性が小さくなる。本質的に、モデリングエンジン２８は、レガシソフトウェアプロセスを構文解析してルールを生成し、その制御の流れをグラフ化する。制御の流れの抽象化により、レポートデータモデル内の各書き込み命令で書かれたデータ型と不変なデータ値を理解できるレポートデータモデルが作成される。このレポートデータモデルと書き込まれたデータフィールドの値および型とを組み合わせるステップで、レガシプログラムアプリケーション１６のモデルが得られる。
【００３５】
図３を参照すると、モデリングプロセスは、レガシプログラムの制御の流れのグラフの決定を通じてステップ４６から始まる。特定のレガシプログラムアプリケーションの制御の流れのグラフは、レガシプログラムアプリケーションが何らかの可能な実行状態について、ｎ１からｎ２まで直接移動できる場合にＮがプログラムアプリケーションの各実行点のノードを含み、Ａがｎ１およびｎ２をＮの要素とする弧＜ｎ１，ｎ２＞を含む、有向グラフ（Ｎ，Ａ）であり、ただし、ｎ１およびｎ２はＮの要素である。
【００３６】
ステップ４８で、データファイルの制御のグラフを取得するために、制御の流れのグラフの書き込み操作を決定する。本質的に、制御の流れのグラフは抽象化され、開始ノード、停止ノード、および選択されたデータファイルに書き込みを行うノードのみを含む。このため、レガシプログラムアプリケーション内の書き込みインシデントを識別するデータファイルの制御のグラフが得られる。制御の流れのグラフ（Ｎ，Ａ）から抽象化されたデータファイルの制御のグラフは、有向グラフ（ＮＲ，ＡＲ）である。ノードｎは、ノードｎがレガシプログラムアプリケーションを起動するか、レガシプログラムアプリケーションを停止するか、またはデータファイルに書き込みを行う場合に、ノードＮＲの集合内に含まれる。ｎ１とｎｍの両方がノードＮＲ内にある場合に弧＜ｎ１、ｎｍ＞がＡＲ内にあり、２〜ｍ−１のｉについて、ｎｉがノードＮＲの集合に含まれない弧のシーケンス＜ｎ１，ｎ２＞、＜ｎ２，ｎ３＞、．．．＜ｎｍ−１，ｎｍ＞がＡ内に存在する。
【００３７】
データファイルの制御グラフが完了すると、ステップ５０で、各データファイルの書き込みノードで書き込まれたデータに関する情報がそのデータファイルの制御のグラフにアタッチされる。たとえば、各ノードで書き込まれた各データフィールドの値または型は、制御の流れのグラフの中のデータの流れにより静的に決定され、データファイルの制御のグラフのノードにアタッチされる。
【００３８】
ステップ５２で、開始ノードから始まりデータファイルの制御のグラフを通り停止ノードに至る経路は、形式文法で表される。この形式文法は、アタッチされたデータフィールドの情報とともに、レポートデータモデルを形成する。このモデルは、レガシプログラムアプリケーションによって書くステップができるデータファイルの抽象表現であり、修正仕様を書くための基盤を提供する。
【００３９】
レポートデータモデルは２つの部分で表される。まず、データフィールド情報がアタッチされている各書き込みノードをインシデントとして提示する。これらのインシデントは、レポートデータモデルの最も基本的なつまり葉となる部分表現である。次に、レポートデータモデルの葉でない部分表現は、インシデントから上へ階層的に構築するルールとして提示される。
【００４０】
レガシプログラムアプリケーションのレポートデータモデルの生成と表示については、電話料金請求書作成の例を考察するステップにより理解できる。図４は、ＣＯＢＯＬプログラムで作成した電話料金請求書の印刷された出力を示している。典型的なＣＯＢＯＬプログラムでは、たとえば、所定の用紙サイズおよび段数など、電話料金請求書を所定の形式で印刷する。図４の「総通話数」という行の印刷は、総通話数、総通話時間、および総通話料金の計算結果である。制御の流れのグラフの単一ノードの例として、図４の通話数合計行を出力するＣＯＢＯＬコードから得られたインシデントを以下に示す。
0004495895.tif 000002
【００４１】
インシデント４７では、第４１４行の書き込み命令でプログラム内の適切な位置に書き込まれたデータを記述する。データは、「総通話数」と「総通話時間」という見出しを含み、その後に総通話数、総通話時間、および総通話料金の累計値が続く。定数値「総通話数」と「総通話時間」は、レガシアプリケーションプログラムのデータの流れを分析するステップで決定される。
【００４２】
レポートデータモデルは、書き込みインシデントから上へ構築された文法ルールを含む。各文法ルールが適切なインシデントとサブルールから定義されると、図４に示されている請求書に対するレガシプログラムアプリケーションの潜在的出力を記述するレポート文法が次のように生成される。
0004495895.tif 000003
【００４３】
これらの文法ルールは、レガシアプリケーションプログラムによって書き込まれる出力を表すため書き込みインシデントをどのように組み合わせるかを示す。たとえば、ルール６１は、サブルールとインシデント２４，４７，４８、５１、および２３のシーケンスからなる。データファイル内の各サブルールまたはインシデントで記述されるデータの後に、順番に、次のサブルールまたはインシデントで記述されるデータが続く。つまり、ルール６１では、インシデント４７で記述されるデータの直後にインシデント４８によって記述されるデータが続く。ルール６２は、６１によって記述されたデータをデータファイルに書き込むかまたは完全にスキップするとができるステップを示す条件付きルールである。ルール６４は、０回以上繰り返されるルール６３によって記述されたデータがあるステップを示す反復ルールである。
【００４４】
そこで図５を参照すると、図４のレガシコンピュータ出力のデータ構造を与える図５ＡのＸＭＬスキーマによる形式のデータが示されている。データは、開くタグ＜ｂｉｌｌ＞と閉じるタグ＜／ｂｉｌｌ＞の間に記述する。「ｂｉｌｌ」スキーマは、「ｄｅｔａｉｌ−ｌｉｓｔ」サブスキーマを含み、これはさらに、「ｄｅｔａｉｌ−ｂｙ−ｐｈｏｎｅ」サブスキーマを含む。「ｄｅｔａｉｌ−ｂｙ−ｐｈｏｎｅ」サブスキーマ内で、図４の「総通話数」行からデータのレポートを作成する別のタグが定義されている。「ｔｏｔａｌ−ｂｉｌｌ−ｂｙ−ｐｈｏｎｅ」サブスキーマ、「ｔｏｔａｌ−ｔｉｍｅ−ｂｙ−ｐｈｏｎｅ」サブスキーマ、および「ｔｏｔａｌ−ｃａｌｌｓ」サブスキーマは、レガシコンピュータシステム出力の「総通話数」行に印刷されるデータを定義する。
【００４５】
図５Ａは、図５でデータを出力するために使用されるＸＭＬ請求書スキーマを示している。スキーマのルート要素は、「ｂｉｌｌ」という名前の要素型である。そのサブスキーマは、下位要素の型である。請求書のｄｅｔａｉｌ−ｌｉｓｔサブスキーマのｄｅｔａｉｌ−ｂｙ−ｐｈｏｎｅサブスキーマは、図４の「総通話数」行に報告されるデータ構造を含む。
【００４６】
そこで図６を参照すると、モデリング／マッピンググラフィカルユーザーインターフェイス３０による表示の一例では、ＸＭＬスキーマ、レポートデータモデル、および図６ａのＣＯＢＯＬコードとして示されている基礎となるレガシコンピュータプログラムアプリケーションの間の対応関係を示している。文法ウィンドウ５４には、レガシプログラムアプリケーションのレポートデータモデルによって定められるレポートデータモデルの文法ルールのリストが表示される。ＸＭＬスキーマウィンドウ５６は、図４に示されているレガシコンピュータシステム出力を表す図５によって示されているＸＭＬスキーマを示している。マッピングウインドウ５８は、レガシプログラムアプリケーションの変数とＸＭＬスキーマのＸＭＬタグの間の関係を示す。たとえば、ＲＳ−ＴＩＭＥはＸＭＬスキーマの「ｔｏｔａｌ−ｔｉｍｅ」タグにマップされるＣＯＢＯＬ変数である。ルール７９は、上で示したレポートデータモデルによって与えられる文法のルートまたは先頭を表す。文法ウィンドウ内で、インシデント４７はレガシプログラムアプリケーションから総料金を報告するために呼び出されるインシデントとしてルール７８に分類される。
【００４７】
レポートデータモデルとＸＭＬスキーマとの間の関係が確立されると、修正仕様が書かれ、修正されたレガシプログラムアプリケーションの生成が自動的に実行される。修正されたレガシプログラムアプリケーションは、データの特性を記述するＸＭＬスキーマタグとともにレガシコンピュータシステムからデータを報告するように設計されている。たとえば、以下は、ＸＭＬタグ情報とその中で注釈されているデータフィールドの型および値を含むインシデント４７である。
0004495895.tif 000004
【００４８】
注釈が入っているインシデントは、エンジン２６をコード生成エンジン２４にマッピングして修正されたレガシプログラムアプリケーションを作成するステップにより用意される修正仕様の基礎となる。たとえば、インシデント４７の修正仕様は次のとおりである。
0004495895.tif 000005
ただし、データ項目ＲＳ−ＨＨ、ＲＳ−ＭＭ、およびＲＳ−ＳＳは、データ項目ＲＳ−ＴＩＭＥのもとにまとめられているステップに注意されたい。
【００４９】
コード生成エンジン２４は、修正仕様を適用し、レガシコードがデータに関係する適切なタグをＸＭＬスキーマに出力するために必要な修正を決定する。たとえば、インシデント４７に関係する修正されたレガシプログラムアプリケーションからＸＭＬ形式のデータを送出するために、修正仕様に基づいて、コード生成エンジン２４により次のコードが追加される。
0004495895.tif 000006
【００５０】
修正されたレガシプログラムアプリケーションは、書き込みエンジン２０を呼び出して、コンテキストテーブル２２に格納されているＸＭＬスキーマから供給されるタグとともに出力を送出する。修正されたレガシプログラムアプリケーション１８がレガシコンピュータシステム１２にロードされると、書き込みエンジン２０はコンテキストテーブル２２とともに、修正されたレガシプログラムアプリケーション１８によって呼び出され、ＸＭＬデータストリームを出力する。
【００５１】
ＸＭＬスキーマから、埋め込まれたＸＭＬ要素の正確な書き込みを制御するのに必要な事前に計算されたデータが生成される。事前に計算されたデータは、インデックスから深さへのマップ、ｓｔａｒｔ−ｌａｂｅｌ、ｓｔｏｐ−ｌａｂｅｌ、ｐａｒｅｎｔ−ｉｎｄｅｘ、および正しいＸＭＬを生成するのに必要なその他の情報からなる。たとえば、図７に示されているＸＭＬスキーマは、顧客の名前、住所、およびＩＤを印刷するためのデータ構造を定めている。図７Ａは、図７に示されているＸＭＬスキーマのツリー構造を示している。図７Ｂは、ツリー構造内の要素の位置に対応する各要素の深さおよびその先祖要素を示す各要素のインデックスを含む、図７に示されているＸＭＬスキーマの計算されたデータ構造を示している。たとえば、「Ｃｕｓｔｏｍｅｒ」要素は、ＸＭＬスキーマのルートであり、「Ａｄｄｒｅｓｓ」という子孫要素を持つ。「Ｓｔｒｅｅｔ」要素は、「Ａｄｄｒｅｓｓ」要素のＩＤに対応する番号３で示されている「Ａｄｄｒｅｓｓ」要素の子孫である。
【００５２】
そこで、図８を参照すると、流れ図は、ＸＭＬデータストリームを出力するために書き込みエンジン内に実装されたプロセスを示している。図７Ｂに示されている計算されたデータは、図７に示されているＸＭＬスキーマに関してＸＭＬデータストリームの書き込みに適用される。プロセスはステップ１００から始まり、そこでＸＭＬ印刷コマンドがスキーマ要素のＩＤおよび印刷する値とともに呼び出される。たとえば、次のコマンドは、
0004495895.tif 000007
計算されたデータ構造の「Ｓｔｒｅｅｔ」要素に対するＩＤを与える。
【００５３】
ステップ１０２で、ＸＭＬ印刷プロセスが起動してデータを送出したかどうかを調べるテストが実行される。送出されていなければ、適切なデータ構造または現在のコンテキストが初期化され、識別されたデータファイルがステップ１０４で開かれる。たとえば、顧客データに関係するＸＭＬ印刷命令の実行の結果、「Ｃｕｓｔｏｍｅｒ」をルート要素として持つ現在のコンテキストの初期化が行われる。ステップ１０６で、データ構造のすべてのデータが送出されたかどうかを調べるテストが実行される。すべてのデータが送出されると、プロセスはステップ１０８に進み、そこで、適切なＸＭＬ終了タグが送出され、データファイルが閉じられる。しかし、ノードＩＤがデータ構造の終わりのところにない場合、プロセスはステップ１０９に進む。たとえば、ノードＩＤが「Ｃｉｔｙ」の場合、プロセスはステップ１０９に進む。
【００５４】
ステップ１０９で、呼び出されたノードＩＤが現在のノードの子孫であるかどうかを調べるテストが実行される。たとえば、「Ｓｔｒｅｅｔ」要素は、「Ａｄｄｒｅｓｓ」要素の子孫である。したがって、「Ａｄｄｒｅｓｓ」要素が現在の要素で、「Ｓｔｒｅｅｔ」要素が呼び出された要素の場合、プロセスはステップ１１０に進む。それと対照的に、現在の要素が「Ｎａｍｅ」要素で、呼び出された要素が「Ｓｔｒｅｅｔ」要素の場合、プロセスはステップ１１２に進み、呼び出された要素と一致する出現回数を持つ最も近い相互の先祖のノードＩＤを特定する。そのため、「Ｎａｍｅ」要素と「Ｓｔｒｅｅｔ」要素の相互先祖である、「Ｃｕｓｔｏｍｅｒ」要素が識別されるステップになる。ステップ１１４で、終了タグは、「Ｃｕｓｔｏｍｅｒ」要素まで閉じてゆき、プロセスはステップ１１０に進む。ステップ１１２の出現回数チェックにより、先祖が子孫の出現を１回しか許さない場合、その子孫は１回しか印刷されない。たとえば、子孫要素が送出され連続して出現する場合、子孫の出力ごとに先祖要素が閉じられ、その先祖の新しいインスタンスが開かれるステップを出現回数は示している。
【００５５】
ステップ１１０で、タグが、識別された先祖から呼び出されたノードを下って次々に開かれ、ノードの属性がツリー構造に沿って適切な値とともに送出される。ステップ１１６で、プロセスはステップ１００に戻り、ＸＭＬデータストリーム内の次の値を受け付ける。
【００５６】
書き込みエンジン２０の追加機能に、データを完全なデータ構造として書き込む遅延処理がある。たとえば、書き込みエンジン２０は、属性、値、およびテキスト値をデータ構造に書き込むが、その際にデータ構造の属性、値、およびテキスト値がすべて揃うまでデータを送出しない。この遅延処理により、書き込みエンジン２０はＸＭＬスキーマのシーケンス要件に従う。
【００５７】
以下のサンプル出力は、この機能が必要であるステップを示している。
0004495895.tif 000008
【００５８】
２つの住所が１ページに並べて印刷される。１つは顧客の住所でもう一つは送金人の住所である。そのため、１行の出力に、以下に示されているターゲットのＸＭＬスキーマにより、２つの異なるサブスキーマからの交互に並んだ要素が含まれる。
0004495895.tif 000009
【００５９】
送金人住所サブスキーマの前に完全な顧客住所サブスキーマを送出する必要がある。（以下に示す）レガシコードの構造のせいで、顧客用のＸＭＬ構造を書き込みながら送金人住所コンポーネントをバッファリングする必要がある。コンテキストテーブルは、他のブックキーピングの役割に加えて、このバファリングの操作用の記憶域を備える。
【００６０】
元のレガシコードは次のとおりである。
0004495895.tif 000010
【００６１】
修正されたコードを次に示すが、連続する操作であるステップをコメントで説明してある。
0004495895.tif 000011
【００６２】
この特定の例について得られた出力を以下に示す。
0004495895.tif 000012
【００６３】
ＸＭＬスキーマは、コンポーネント要素に出現回数の制約を課すステップができる。たとえば、以下のスキーマでは、Ｃ、Ｃ１、およびＣ２は、それぞれの親の中にそれぞれ１回しか出現できない。このスキーマのインスタンスを生成するときに、この特性に注意するステップが重要である。
0004495895.tif 000013
【００６４】
「Ａ」をルートとするスキーマを表すコンテキストテーブルの事前に計算した要素を以下の表にまとめた。
0004495895.tif 000014
【００６５】
ＩＤ列には、それぞれの要素に関連する一意的な識別子が入る。出現回数の列は、その親の中での要素の出現の回数に対する制約を示している。「ｎ」は、０またはそれ以上であるステップを意味している。「１」は、ちょうど１つなければならないステップを示している。
【００６６】
以下の表は、ＸＭＬ−ＰＲＩＮＴコマンドの実行時にこの情報をどのように動的に使用するかを示している。（「コンテキスト」の「カウント」列は、特定のスキーマ要素に関する出現回数の値の変化を示しているステップに注意するステップ。）
0004495895.tif 000015
【００６７】
初期状態０には、空のスタックが含まれ、スキーマ要素に関連する出現回数カウントは含まれない。Ｖ１１をスキーマ要素Ｃ１として印刷するコマンドにより、状態、＜Ａ＞および＜Ｃ＞先祖ラベルの出力、およびラベル付きＶ１１要素の出力が検査される。「スタック」は、開いている＜Ａ＞と＜Ｃ＞の現在のコンテキストを記録するように修正され、Ａ、Ｃ、およびＣ１の出現回数が１に設定される。
【００６８】
スキーマ要素Ｃ２としてＶ２１を印刷するコマンドにより、状態が検査される。Ｃ２の先祖に関して「スタック」は正しいため、ラベル付きＶ２１要素の出力は印刷操作だけである。「スタック」は変更されない。Ｃ２の出現回数は１に設定される。
【００６９】
スキーマ要素Ｃ１でラベルが付けられているＶ１２を印刷するコマンドで、状態が検査される。状態３の「スタック」はＣ１の先祖に関して正しい。ただし、Ｃ１の出現回数は１に等しく、これは、この型の要素で許される出現回数である。そこで、Ｃを閉じて、その子であるＣ１とＣ２に対する出現回数をリセットする。このときに、Ｃの出現回数は１に等しく、これは、この型の要素で許される出現回数であるステップがわかる。そこで、Ａを閉じて、Ｃに対する出現回数を０にリセットする。この時点で（状態６）、スタックは空であり、先祖ラベル＜Ａ＞と＜Ｃ＞を出力し、ラベル付きＶ１２要素を出力し、ＳＴＡＣＫを修正して、開いている＜Ａ＞と＜Ｃ＞の現在のコンテキストを記録し、ＣおよびＣ１の出現回数を１に、Ａの出現回数を２に設定する。
【００７０】
そこで、型Ｃの要素の最大出現回数に上限がない場合について考察する。つまり、Ａ内のＣの要素定義を次のように変更する。
＜ｅｌｅｍｅｎｔ  ｔｙｐｅ＝“Ｃ”ｍａｘＯｃｃｕｒｓ＝“ｎ”／＞
すると３番目の印刷ステップは、以下の表に示されているように、小さくなる。
0004495895.tif 000016
【００７１】
最初の２つのＸＭＬ−ＰＲＩＮＴ操作は前のように進む。ＡのＣ下位要素はいくらでもあるので、Ａを閉じて新しいのを開く必要はない。Ｃを閉じて、ＳＴＡＣＫを［Ａ］に設定し、Ｃの子孫Ｃ１およびＣ２に対する出現回数をリセットする。新しいＣを開き、Ｃの出現回数を２に増やす。最後に、ラベル付きＶ１２要素を出力し、Ｃ１の出現回数を１に設定する。
【００７２】
最後に、前の例と要素の出現に上限がないケース、つまり、Ｃ、Ｃ１およびＣ２の要素定義が次のように変更されている場合と対比する。
0004495895.tif 000017
【００７３】
状態の変化は次の表に示されているとおりである。
0004495895.tif 000018
【００７４】
最初と２番目の呼び出しは前のように動作する。３番目の呼び出しは、なおいっそう単純である。ＣのＣ１下位要素はいくらでもあるので、Ｃを閉じて新しいのを開く必要はない。ラベル付きＶ１２要素を出力し、Ｃ１の出現回数を２に増やす。
【００７５】
レガシコードを修正する場合、ヘッダおよびフッタに入れるスキーマデータをいつ印刷するかを決定するステップは難しい。電話送り状の例を考察する。送り状作成プログラムの出力は、送り状のシーケンスで構成される。それぞれの送り状には、１ページまたは複数ページが必要になる。送り状が複数ページを占有する場合、ヘッダは通常、繰り返し表示される。そのため、ヘッダが新しい送り状スキーマ要素を導入しているときがあり、また別のときに、人間が読みとれる出力のページ装飾だけのときもある。現在の送り状タグを閉じて、新しいタグを開く必要があるステップを認識するには、各送り状インスタンスと関連する何らかの一意的な識別子があるステップ、またこの「キー」の値が変化したときに、現在の送り状が閉じられ、新しい送り状が開かれるステップを知っている必要がある。この計算を使用できるように、コンテキストテーブルには、キー要素のブール識別子とそれらの要素の現在値を含める。この検査は、出現回数検査と同時に実行される。
【００７６】
本発明は、電子商取引および電子取引を行っていない企業によるレガシコンピュータレポートのより効率的な使用に関係する多数の重要なビジネスアプリケーションを対象とする。一例として、手作業による検査のため紙に印刷している社内レポートを、紙を使わずに、ＸＭＬ形式でデータベースに格納し利用できるようにするという方法がある。いったん電子的に格納すると、レポートは、電子的情報資産として利用可能になり、ブラウザや他の電子的分析機能によりレビューするステップができる。また、レポートは、かなり単純なものとなり、データウェアハウスに格納できる。
【００７７】
他の商業アプリケーションとして、アプリケーション間でデータを転送するエンタープライズアプリケーションインテグレーション（ＥＡＩ：Ｅｎｔｅｒｐｒｉｓｅ  Ａｐｐｌｉｃａｔｉｏｎ  Ｉｎｔｅｇｒａｔｉｏｎ）ミドルウェアがある。ＸＭＬ形式を使用するなどして構造化データベースからのデータの転送をセットアップするステップは、データ定義を意味論的タグとして取り扱えるため比較的簡単である。それとは対照的に、代表的なレガシコンピュータシステムのレポートは、データ構造ではなくビジネスロジックに従って生成されるデータを表すので、構造化されていない。基礎となるレガシアプリケーションを修正してＸＭＬ形式のデータを直接出力できるようにするステップで、出力されたデータを構造化されたデータファイルとして取り扱い、エンタープライズアプリケーション群に統合するステップが簡単にできる。
【００７８】
他の商業アプリケーションとして、Ｅｌｅｃｔｒｏｎｉｃ  Ｂｉｌｌ  Ｐｒｅｓｅｎｔｍｅｎｔ  ａｎｄ  Ｐａｙｍｅｎｔ（ＥＢＰＰ）がある。通常のレガシコンピュータシステムから電子請求書を発行するために、一般にパーザを使用して、タグが付いていない送り状データファイルを解析し、その後、そのデータファイルに意味論的に意味のある識別子をタグとして付ける。パーザは、セットアップおよび保守に費用がかかり、その扱いも難しい。対照的に、基礎となるレガシコンピュータシステムのコードを修正してＸＭＬ形式のデータを直接出力するようにすると時間が節約され、専門的技術知識も費用も少なくて済み、またデータを電子商取引で認識される形式により送るステップができる。そこで、レガシコンピュータシステムを使用する企業は、ＸＭＬ形式のレポートを出力し、自動請求書支払い機能など電子商取引での進歩を活用するステップができる。たとえば、個人電話顧客は、個人の請求明細にアクセスできるサイトへのＷｅｂリンクを記載した電子メールで電話料金請求書を受け取るステップができる。
【００７９】
他の商業アプリケーションとして、請求明細書のアーカイブがある。たとえば、銀行は、顧客請求明細書をマイクロフィッシュ上に縮小した写真コピーや光ディスクシステム上の印刷ストリームとして格納した大規模なアーカイブを保持している。これらのアーカイブの検索システムは、維持が複雑で困難である。印刷ストリームからのデータ抽出は、最近の改善であり、米国特許第６０３１６２５号（ＵＳ６０３１６２５）で開示されているが、このようなシステムでも、まだ、レガシアプリケーションから出力した後に印刷ストリームの処理が必要である。対照的に、基礎となるレガシコンピュータコードを修正して直接ＸＭＬ形式の請求明細書を出力するようにすると、請求明細書のアーカイブおよび検索がかなり簡単になる。たとえば、ＸＭＬステートメントをリレーショナルデータベースに格納すると簡単に検索できる。さらに、検索したステートメントは、ＸＭＬ表現になっているので、たとえば、ブラウザ技術を使用して直接見るステップも可能である。
【００８０】
他の商業アプリケーションとして、電子情報資産を分析して購入行動や販売行動などのビジネス行動を調べようとするビジネス情報分野のものがある。データプロバイダのシンジケートは、販売店や購入者に基づいて解析したレポートを利用して情報分析を行うためのデータを取得する。この詳細な構文解析は、ＥＢＰＰ機能をサポートするために使用する構文解析機能よりもなおいっそう複雑になるステップがある。そのため、レガシコンピュータシステムからＸＭＬ形式のデータを直接生成し、送り状レポートを作成する方法は、電子請求書作成やその他のアプリケーションよりもビジネス情報の役割でのほうがいっそう効率的であり、詳細な構文解析システムを適用しなくても詳細なデータ分析を利用できる。
【００８１】
全体に、ＸＭＬ形式のデータをレガシコンピュータシステムから直接生成すると、情報の転送が単純になるため情報ネットワーク内の摩擦が小さくなる。そのため、情報を追跡するコスト、ビジネス情報を交換し分析する手作業による労力が低減され、また既存のデータソースから価値あるビジネス情報を取り出す作業に関連する時間も短縮できる。データを意味論的に意味のある形式で用意するステップにより、顧客はベンダ関係管理に関して自社仕入れ先を自動的に分析するステップができ、仕入れ先は顧客関係管理に関して自社顧客を自動的に分析するステップができ、メーカーは市況情報に関して自社製品の市場を自動的に分析するステップができる。
【００８２】
本発明について詳細に説明したが、付属する請求項で定義されている本発明の精神と範囲から逸脱するステップなくさまざまな変更、置き換え、改変を加えるステップができるステップは理解されるだろう。
【図面の簡単な説明】
【図１】  レガシコンピュータシステムと通信するコード生成システムのブロック図である。
【図２】  ＸＭＬデータを出力するように修正されたレガシプログラムアプリケーションの生成を示す流れ図である。
【図３】  レガシプログラムアプリケーション書き込み操作のモデルの生成を示す流れ図である。
【図４】  電話料金請求のためのレガシコンピュータシステムのレポートのサンプル出力を示す図である。
【図５】  図４に示されているレガシコンピュータシステムのレポートに対応するＸＭＬ形式のデータを示す図である。
【図５Ａ】  図５に示されている出力に対するＸＭＬスキーマを示す図である。
【図６】  レガシコンピュータシステムのコードを拡張マークアップ言語スキーマとレポートデータモデルにマッピングするグラフィカルユーザーインターフェイスを示す図である。
【図６Ａ】  図６のレポートデータモデルによってモデル化された基礎となるＣＯＢＯＬコードを示す図である。
【図７】  住所データを出力する拡張マークアップ言語スキーマのサンプル図である。
【図７Ａ】  図７のスキーマに対するツリー構造を示す図である。
【図７Ｂ】  図７に示されているスキーマの計算されたデータコンテキストテーブルを示す図である。
【図８】  構文的に正しい拡張マークアップ言語データ出力の生成を行うＸＭＬ印刷操作の流れ図である。
【図１】
0004495895.tif 000019
【図２】
0004495895.tif 000020
【図３】
0004495895.tif 000021
【図４】
0004495895.tif 000022
【図５】
0004495895.tif 000023
【図５Ａ】
0004495895.tif 000024
【図６】
0004495895.tif 000025
【図６Ａ】
0004495895.tif 000026
【図７】
0004495895.tif 000027
【図７Ａ】
0004495895.tif 000028
【図７Ｂ】
0004495895.tif 000029
【図８】
0004495895.tif 000030