(57)【要約】  本発明の実施形態は、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに、宣言的変換によって変換するための、システム、方法およびコンピュータ記憶媒体に関する。変換には、第１のデータスキーマを定義するデータを識別するステップが含まれる。宣言的変換が生成されて、第１のデータスキーマを定義するデータが、第２のデータスキーマを定義するデータに変換される。宣言的変換は、加えて、第１のデータスキーマにインスタンス化されたデータを、第２のデータスキーマのデータ構造に変換する。宣言的変換は、第２のデータスキーマが定義される前に、生成される。一実施形態において、宣言的変換を利用して、第２のデータスキーマが生成される。データは、宣言的変換に由来する移行コードを利用して変換される。例示的な一実施形態において、宣言的変換は、人によりテキスト形式で、および／または、グラフィカルコンピュータアプリケーションを利用して、表される。
2012502389.tif 000002
【特許請求の範囲】
【請求項１】
宣言的変換によって、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに変換するための方法であって、
前記第１のデータスキーマを定義するデータを識別するステップ（５０２）と、
宣言的変換を生成して、前記第１のデータスキーマを定義するデータを前記第２のデータスキーマを定義するデータに変換するステップ（５０４）であって、前記宣言的変換は、前記第２のデータスキーマが定義される前に生成される、ステップと、
前記宣言的変換に由来する移行コードを利用して、前記第１のデータスキーマを定義するデータを変換するステップ（５０８）であって、変換されたデータは前記第２のデータスキーマを定義する、ステップと
を含むことを特徴とする方法。
【請求項２】
前記第１のデータスキーマおよび前記第２のデータスキーマは、関係モデル、オブジェクト指向モデル、およびエンティティモデルのうちのいずれか１つであることを特徴とする請求項１に記載の方法。
【請求項３】
データスキーマは、１つまたは複数の異なるクラス、プロパティ、および関係性の記述を提供することを特徴とする請求項１に記載の方法。
【請求項４】
前記宣言的変換は、前記第１のデータスキーマと前記第２のデータスキーマとの間の違いを識別することを特徴とする請求項１に記載の方法。
【請求項５】
前記宣言的変換は、前記第１のデータスキーマの１つまたは複数のデータ構造を、前記第２のデータスキーマにどのように変換するかを宣言することを特徴とする請求項１に記載の方法。
【請求項６】
前記宣言的変換が、
１）前記宣言的変換が適用される１つまたは複数のインスタンスについての指示と、
２）１つまたは複数のクラスをどのように変換するかについての指示と、
３）１つまたは複数のプロパティをどのように変換するかについての指示と、
４）前記第１のデータスキーマに適用される関係性をどのように変換するかについての指示と
を含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記宣言的変換を利用して、前記移行コードが自動的に生成されることを特徴とする請求項１に記載の方法。
【請求項８】
前記第２のデータスキーマは、前記移行コードを利用して前記第１のデータスキーマを定義するデータの変換の後にのみ、存在することを特徴とする請求項１に記載の方法。
【請求項９】
宣言的変換によって、第１のデータスキーマと互換性のある第１のデータインスタンス化からの第１のデータセットを、第２のデータスキーマと互換性のある第２のデータインスタンス化の第２のデータセットに変換するための方法を実行するために、コンピュータ実行可能命令を具現化させて有する、１つまたは複数のコンピュータ記憶媒体であって、前記方法が、
前記第１のデータインスタンス化の第１のデータセットを識別するステップ（６０２）と、
宣言的変換を生成して、前記第１のデータセットを前記第２のデータセットに変換するステップであって（６０４）、前記宣言的変換は、前記第２のデータスキーマが定義される前に生成される、ステップと、
前記宣言的変換に由来する前記移行コードを利用して、前記第１のデータインスタンス化からの前記第１のデータセットを変換するステップ（６０６）であって、前記変換された第１のデータセットが前記第２のデータセットとなる、ステップと
を含むことを特徴とする媒体。
【請求項１０】
前記第１のデータスキーマおよび前記第２のデータスキーマは、関係モデル、オブジェクト指向モデル、およびエンティティモデルのうちのいずれか１つであることを特徴とする請求項９に記載の媒体。
【請求項１１】
前記第１のインスタンス化は、実現されるデータスキーマの１つまたは複数のインスタンスにより形成される前記第１のデータスキーマの実現であることを特徴とする請求項９に記載の媒体。
【請求項１２】
データスキーマは、１つまたは複数の異なるクラス、プロパティ、および関係性の記述を提供することを特徴とする請求項９に記載の媒体。
【請求項１３】
前記宣言的変換は、前記第１のデータスキーマと前記第２のデータスキーマとの間の違いを識別することを特徴とする請求項９に記載の媒体。
【請求項１４】
前記宣言的変換は、前記第１のデータセットを前記第２のデータセットにどのように変換するかを宣言することを特徴とする請求項９に記載の媒体。
【請求項１５】
前記宣言的変換が、
１）前記宣言的変換が適用される１つまたは複数のインスタンスについての指示と、
２）１つまたは複数のクラスをどのように変換するかについての指示と、
３）１つまたは複数のプロパティをどのように変換するかについての指示と、
４）前記第１のデータスキーマに適用される関係性をどのように変換するかについての指示と
を含むことを特徴とする請求項９に記載の媒体。
【請求項１６】
前記宣言的変換を利用して、前記移行コードが自動的に生成されることを特徴とする請求項９に記載の媒体。
【請求項１７】
前記第２のデータスキーマは、移行を利用して前記第１のデータスキーマを定義する第１のデータが変換された後にのみ、存在することを特徴とする請求項９に記載の媒体。
【請求項１８】
前記宣言的変換を利用して、前記第２のデータスキーマの定義を生成するステップをさらに含むことを特徴とする請求項９に記載の媒体。
【請求項１９】
前記第２のデータスキーマの定義を利用して、前記第２のデータスキーマの図式的表現を生成するステップさらに含むことを特徴とする請求項１８に記載の媒体。
【請求項２０】
宣言的変換によって、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに変換するための方法であって、
前記第１のデータスキーマを定義するデータを識別するステップであって（７０２）、前記第１のデータスキーマはオブジェクト指向パラダイムに基づき、かつ、前記第１のデータスキーマは、１つまたは複数のクラス、プロパティ、および関係性の記述を提供する、ステップと、
宣言的変換を生成して、前記第１のデータスキーマを定義するデータを、前記第２のデータスキーマを定義するデータに変換するステップであって（７０４）、前記宣言的変換は、前記第２のデータスキーマを定義するデータにより第２のデータスキーマが定義される前に生成され、
前記宣言的変換が、
１）前記宣言的変換が適用される１つまたは複数のインスタンスについての指示と、
２）１つまたは複数のクラスをどのように変換するかについての指示と、
３）１つまたは複数のプロパティをどのように変換するかについての指示と、
４）前記第１のデータスキーマに適用される関係性をどのように変換するかについての指示と、を含むステップと、
前記宣言的変換を利用して、移行コードを自動的に生成するステップ（７０６）と、
前記移行コードを利用して、前記第１のデータスキーマを定義するデータを、前記第２のデータスキーマを定義するデータに変換するステップ（７０８）と
を含むことを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、宣言的変換（declarative transformation）を使用してデータスキーマを変換することに関する。
【背景技術】
【０００２】
典型的に、コンピュータアプリケーションは、該コンピュータアプリケーションが開発された目的の機能を実行するために、データを管理および記憶する。コンピュータアプリケーションの動作の間、データは、そのコンピュータアプリケーションによって操作される。コンピュータアプリケーションがデータを操作および保持するために、データは、いくつかのパラダイムのいずれか１つによって定義されるデータスキーマで構造化される。コンピュータアプリケーションが、後のバージョンに更新（evolve）されると、典型的には、以前に前のバージョンのコンピュータアプリケーションのデータスキーマでインスタンス化されたデータを、後のバージョンで操作することはできない。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
従来、開発者は、データを新しいスキーマに変換する変換コード（transformation code）を開発者が書くための設計図として機能する新しいデータスキーマを作成する。新しいデータスキーマの作成は、開発者の資質が要求される開発の工程である。そして、新しいデータスキーマは、開発者が、前のデータスキーマでインスタンス化されたデータを、更新されたコンピュータアプリケーションが操作することができるデータに変換する、変換コードを書く際の助けとして用いられる。変換コードの記述は、開発者が、任意の可能性のあるデータスキーマのインスタンス化を明らかにする必要があるため、エラーが起こりやすい。したがって、確実に有効なデータの変換が得られるように、変換コードをテストする必要がある。
【課題を解決するための手段】
【０００４】
本発明の実施形態は、宣言的変換（declarative transformation）によって、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに変換するためのシステム、方法およびコンピュータ記憶媒体に関する。変換には、第１のデータスキーマを定義するデータを識別することが含まれる。宣言的変換を生成して、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに変換する。宣言的変換は、第２のデータスキーマが定義される前に生成される。一実施形態において、宣言的変換を部分的に利用して、第２のデータスキーマが生成される。第１のデータスキーマを定義するデータは、宣言的変換から導出される移行コード（migration code）を用いて変換される。変換されたデータは、第２のデータスキーマを定義する。
【０００５】
この要約は、以下の「発明を実施するための形態」でさらに説明される概念の選択を簡略化した形式で紹介するために提供するものである。この要約は、特許請求される主題の主要な特徴および本質的な特徴を特定するようには意図されておらず、特許請求される主題の範囲を決定する際の助けとして使用されることも意図されていない。
【０００６】
本発明の例示的な実施形態を、以下で添付の図面を参照して詳細に説明する。
【図面の簡単な説明】
【０００７】
【図１】本発明の実施形態の実装に適切な例示のコンピューティングデバイスを示す図である。
【図２】宣言的変換によって、元のデータスキーマを第２のデータスキーマに変換するための本発明の実施形態の実装に適切な環境を示す図である。
【図３】本発明の一実施形態にしたがって、例示の宣言的変換に関連する第１のデータスキーマおよび第２のデータスキーマを図式的に示す図である。
【図４】本発明の一実施形態にしたがって、例示の宣言的変換に関連する別の第１のデータスキーマおよび別の第２のデータスキーマを図式的に示す図である。
【図５】本発明の一実施形態にしたがって、第１のデータスキーマを定義するデータを第２のデータスキーマを定義するデータに、宣言的変換によって変換する例示の方法を示す図である。
【図６】本発明の一実施形態にしたがって、宣言的変換によって、第１のデータスキーマの第１のデータインスタンス化からの第１のデータセットを、第２のデータスキーマの第２のデータインスタンス化の第２のデータセットに変換する例示の方法を示す図である。
【図７】本発明の一実施形態にしたがって、宣言的変換によって、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに変換する例示の方法を示す図である。
【発明を実施するための形態】
【０００８】
本発明の実施形態の主題は、本明細書において法的な要件に合致するよう特異性とともに説明される。しかし、説明自体は、本特許の範囲を制限しるようには意図されていない。むしろ、本発明者は、特許請求される主題が、本明細書で説明されるステップと異なるステップまたは同様のステップの組み合わせを含め、他の現在または将来の技術とともに、他の方法で具現化されることを意図している。
【０００９】
本発明の実施形態は、宣言的変換によって、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに変換するためのシステム、方法、およびコンピュータ記憶媒体に関する。変換には、第１のデータスキーマを定義するデータを識別することが含まれる。宣言的変換が生成されて、第１のデータスキーマを定義するデータが、第２のデータスキーマを定義するデータに変換される。宣言的変換は、第２のデータスキーマが定義される前に生成される。第１のデータスキーマを定義するデータは、宣言的変換から得られる移行コードを用いて変換される。一実施形態において、宣言的変換を部分的に用いて、自動的に第２のデータスキーマを生成する。例示的な実施形態では、変換されたデータは、第２のデータスキーマを定義することができる。
【００１０】
したがって、一態様では、本発明は、宣言的変換によって、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに変換するための方法を提供する。この方法は、第１のデータスキーマを定義するデータを識別するステップを含む。この方法は、宣言的変換を生成して、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに変換するステップも含む。宣言的変換は、第２のデータスキーマが定義される前に生成される。この方法は、さらに、宣言的変換から得られる移行コードを用いて、第１のデータスキーマを定義するデータを変換するステップを含む。変換されたデータは、第２のデータスキーマを定義する。
【００１１】
別の態様において、本発明は、宣言的変換によって、第１のデータスキーマと互換性のある第１のデータインスタンス化（data instantiation）の第１のデータセットを、第２のデータスキーマと互換性のある第２のデータインスタンス化の第２のデータセットに変換するための方法を実行するためのコンピュータ実行可能命令を有するコンピュータ記憶媒体を提供する。媒体は、第１のデータインスタンス化の第１のデータセットを識別することを含む。媒体は、宣言的変換を生成して、第１のデータセットを第２のデータセットに変換することも含む。宣言的変換は、第２のデータスキーマが定義される前に生成される。媒体は、さらに、宣言的変換から得られる移行コードを用いて第１のデータセットを第１のデータインスタンス化から変換することを含む。変換された第１のデータセットは第２のデータセットとなる。
【００１２】
本発明の第３の態様は、宣言的変換によって、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに変換するための方法を提供する。この方法には、第１のデータスキーマを定義するデータを識別するステップ含まれる。この第１のデータスキーマは、オブジェクト指向パラダイムに基づくものである。さらに、この第１のデータスキーマは、１つまたは複数のクラス、プロパティ、および関係性（relationship）の記述（description）を提供する。方法は、宣言的変換を生成して、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに変換するステップも含む。宣言的変換は、第２のデータスキーマを定義するデータによって第２のデータスキーマを定義する前に生成される。宣言的変換には、宣言的変換が適用される１つまたは複数のインスタンスに関する指示（indication）、１つまたは複数のクラスをどのように変換するかに関する指示、１つまたは複数のプロパティをどのように変換するかに関する指示、ならびに第１のデータスキーマに適用される関係性をどのように変換するかに関する指示が含まれる。この方法は、宣言的変換を用いて移行コードを自動的に生成するステップも含む。この方法は、移行コードを用いて、第１のデータスキーマを定義するデータを第２のデータスキーマを定義するデータに変換するステップも含む。
【００１３】
本発明の実施形態の概要を簡潔に説明したが、以下では、本実施形態を実装するのに適した例示的な動作環境を説明する。
【００１４】
全体を通して図面を参照するが、最初に図１を参照すると、本発明の実施形態を実装するのに適した例示的な動作環境が、全体的にコンピューティングデバイス１００として示され、指定されている。コンピューティングデバイス１００は、適切なコンピュータ環境の一例にすぎず、本発明の使用または機能性の範囲に関していかなる制限も示唆するようには意図されていない。コンピュータ環境１００は、図示されるモジュール／コンポーネントのいずれか１つまたは組み合わせに関していかなる依存関係および要件を有するように解釈されるべきでない。
【００１５】
実施形態を、コンピュータや、ＰＤＡ（携帯情報端末）もしくは他のハンドヘルドデバイスなどの他のマシンで実行されるプログラムモジュールなどのコンピュータ実行可能命令を含め、コンピュータコードまたはマシン使用可能命令の一般的コンテキストで説明する。一般に、ルーチン、プログラム、オブジェクト、モジュール、およびデータ構造などを含む、プログラムモジュールは、特定のタスクを実行するコード、または特定の抽象データ型を実装するコードを指す。実施形態は、ハンドヘルドデバイス、家庭用電化製品、汎用コンピュータ、特殊コンピューティングデバイスなどを含む、様々なシステム構成において実施することができる。実施形態は、通信ネットワークを介してリンクされるリモート処理装置によってタスクが実行される、分散コンピュータ環境において実施することもできる。
【００１６】
図１を続けて参照すると、コンピューティングデバイス１００は、バス１１０を含み、バス１１０は、直接または間接に次の装置、すなわち、メモリ１１２、１つまたは複数のプロセッサ１１４、１つまたは複数のプレゼンテーションモジュール１１６、入出力（Ｉ／Ｏ）ポート１１８、Ｉ／Ｏモジュール１２０、ならびに例示的な電源１２２に接続している。バス１１０は、１つまたは複数のバスが何であるのか（アドレスバス、データバス、またはその組み合わせなど）を表す。明確にする目的のために、図１の様々なブロックは線で示されているが、実際には、様々なモジュールの線引きはそれほど明確ではなく、例えるとすると、線は、より正確にはグレーまたはファジーであろう。例えば、ディスプレイ装置などのプレゼンテーションモジュールが、Ｉ／Ｏモジュールであると見なされることがある。また、プロセッサはメモリを有する。本発明者は、上述の事項は技術の性質であると認識し、図１の図は、単に１つまたは複数の実施形態との関連で使用することができる例示的なコンピューティングデバイスを図示しているものであることを繰り返して述べる。「ワークステーション」、「サーバ」、「ラップトップ」、「ハンドヘルドデバイス」などのカテゴリは区別されず、その全てが、図１の範囲内にあることが意図されており、「コンピュータ」または「コンピューティングデバイス」と称する。
【００１７】
コンピューティングデバイス１００は、典型的に、様々なコンピュータ読取可能媒体を含む。限定ではなく例として、コンピュータ読取可能媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ  ＲＯＭ、ＤＶＤ（デジタル多用途ディスク）もしくは他の光学媒体やホログラフィック媒体、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、搬送波、または所望の情報を符号化するのに使用可能でコンピューティングデバイス１００によりアクセス可能な任意の他の媒体を備えることができる。
【００１８】
メモリ１１２は、揮発性および／または不揮発性メモリの形式のコンピュータ記憶媒体を含む。メモリは、取り外し可能、取り外し不可能、またはその組み合わせとすることができる。例示的なハードウェアデバイスには、半導体メモリ、ハードドライブ、光ディスクドライブなどが含まれる。コンピューティングデバイス１００は、メモリ１１２またはＩ／Ｏモジュール１２０などの様々なエンティティからデータを読み出す、１つまたは複数のプロセッサを含む。プレゼンテーションモジュール１１６は、ユーザまたは他のデバイスに対してデータ指示（data indication）を提示する。例示的なプレゼンテーションモジュールには、ディスプレイ装置、スピーカ、印字（printing）モジュール、振動（vibration）モジュールなどが含まれる。Ｉ／Ｏポート１１８により、コンピューティングデバイス１００は、Ｉ／Ｏモジュール１２０を含む他の装置に論理的に結合することができ、結合される他の装置の一部は、内蔵されている。例示的なモジュールには、マイク、ジョイスティック、ゲームパッド、パラボラアンテナ、スキャナ、プリンタ、無線デバイスなどが含まれる。
【００１９】
図２を参照すると、宣言的変換によって、元のデータスキーマを第２のデータスキーマに変換するための例示的な環境２００が示されている。例示的環境２００は、ネットワーク２０２を含む。ネットワーク２０２は、１つまたは複数のローカルエリアネットワーク（ＬＡＮ）および／またはワイドエリアネットワーク（ＷＡＮ）を含むことができるが、これに制限されない。そのようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的なものである。したがって、本明細書では、ネットワーク２０２について、さらには説明しない。
【００２０】
例示的環境２００は、開発者コンピューティングデバイス２０４も含む。開発者コンピューティングデバイス２０４は、コンピュータアプリケーションの開発者によって使用されるコンピューティングデバイスであり、コンピュータアプリケーションおよび関連するデータ構造の更新を容易する。コンピュータアプリケーションの様々な開発段階を経て行われる更新は、開発者コンピューティングデバイス２０４により開始される。例えば、開発者は、開発者コンピューティングデバイス２０４を使用して、コンピュータアプリケーションが操作するデータのデータ構造を変更することができる。データ構造の変更は、しばしば、コンピュータアプリケーションが更新された後に、コンピュータアプリケーションがデータを操作できるようにするために必要となる。典型的には、コンピュータアプリケーションは、アップデート、アップグレードの結果、および／またはコンピュータアプリケーションへのリソース要求の増加の結果、更新される。例示的な一実施形態では、開発者コンピューティングデバイス２０４は、図１を参照して上述したようなコンピューティングデバイス１００である。
【００２１】
例示的環境２００は、サーバコンピューティングデバイス２０６も含む。サーバコンピューティングデバイス２０６は、コンピュータアプリケーションおよびコンピュータアプリケーションに関連するデータを記憶し、その操作を容易にする。例示的な一実施形態において、サーバコンピューティングデバイス２０６は、ネットワーク２０２によってアクセス可能なコンピュータアプリケーションを提供する。このコンピュータアプリケーションが更新され、その結果、関連するデータの構造も変更され、これにより更新されたコンピュータアプリケーションは、関連するデータを操作することが可能になる。したがって、例示的な一実施形態において、開発者は、開発者コンピューティングデバイス２０４を使用して、ネットワーク２０２を介してサーバコンピューティングデバイス２０６と通信する。開発者は、関連するデータに適用される宣言的変換を作成して、該関連するデータを、コンピュータアプリケーションが操作することができるデータ構造に変換する。
【００２２】
次に、図３を参照すると、例示的な宣言的変換に関する第１のデータスキーマ３００および第２のデータスキーマ３０２が図式的に示されている。第２のデータスキーマ３０２は、第１のデータスキーマ３００を変換したものである。例えば、コンピュータアプリケーションが、（第１のデータスキーマ３００でデータを保持している）第１のバージョンから、第２のバージョンに更新されると、第２のバージョンのコンピュータアプリケーションが既存のデータを操作できるようにデータも更新する必要がある。したがって、第２のデータスキーマ３０２には、第２のバージョンのコンピュータアプリケーションがデータとして操作することができる例示的なデータ構造を視覚的に示している。以下の検討では、典型的にオブジェクト指向プログラミングに関連する語彙が参照されるが、追加のプログラミングパラダイムも本発明に適用可能であることが理解されよう。例えば、リレーショナルデータベース管理システム（ＲＤＢＭＳ）と互換性のあるデータモデルなどのリレーショナルデータモデルを、宣言的変換によって変換することができる。
【００２３】
第１のデータスキーマ３００は、クラスＡ３０４およびクラスＢ３０６を含む。クラスは、共通のプロパティ（属性）および／またはメソッド（動詞（verb））を共有するオブジェクトを作成するのに使用されるプログラミング言語の構成要素である。プロパティは、オブジェクトまたはエレメントのプロパティを定義するのに使用される属性である。メソッドは、オブジェクトまたはエレメントに対して行うことができるアクションである。さらに、オブジェクト指向パラダイムには、クラスおよびプロパティ以外のビルディングブロックが含まれる。例えば、追加のビルディングブロックには、動詞とも称されるメソッドが含まれ、メソッドは、オブジェクトまたは他のエレメントに対して行われるアクションである。
【００２４】
特定のインスタンス化したオブジェクトまたはクラスは、インスタンスと称される。クラスとインスタンスとの間のつながりの一例として、「犬」というクラスを含むとき、品種および色などの複数のプロパティが含まれる。クラス「犬」の特定のインスタンスは、「ローバー」であり、ローバーは、色が黒で品種がラブラドールというプロパティを有する特定の犬である。したがって、ローバーは、犬のインスタンスである。さらに、様々なクラス間の対話は、クラスがどのように関係するかを説明する関係によって示される。
【００２５】
典型的に、コンピュータアプリケーション（アプリケーション）は、そのアプリケーションによって操作されるデータを利用する。アプリケーションは、インスタンス化の間データを保持する。しかし、次のバージョンへの更新など、アプリケーションが変化するとき、新しいバージョンのアプリケーションが、以前のバージョンで保持されるデータを処理する必要がある。従来的に、適応アルゴリズムは、以前のバージョンで保持されるデータを、アプリケーションの新しいバージョンで使用可能なデータスキーマに変換する。その適応は、１組のアクションとして実装され、これには元のスキーマに存在するオブジェクトを新しいデータスキーマの対応するオブジェクト内に移動させるアルゴリズムが含まれる。元のスキーマから新しいスキーマへの変更によっては、アルゴリズムが、非常に複雑でエラーの起こりやすいものとなり得る。元のスキーマのデータを新しいスキーマに適応させる際に実行され得る変更の例には、クラスのプロパティを追加または削除すること、クラスを追加または削除すること、クラス間の関係を追加または削除すること、複数のクラスを継承ツリーにグループ化すること、クラスのプロパティのマージにより複数のクラスを単一のクラスに集約すること、関係を識別することによりクラスを分離すること、他のフィールドの派生物（derivative）に基づいてプロパティを計算すること、意味制約を変更すること、および、ロール名の可視性（visibility）を変更することなどがあるが、これらには限定されない。
【００２６】
適応アルゴリズムは、伝統的に、元のデータスキーマおよび新しいデータスキーマに関する知識と理解を有する開発者によって作成される。典型的に、開発者は、元のデータスキーマと新しいデータスキーマの双方においてオブジェクトをインスタンス化する機能および破壊する機能も知っている必要がある。また、開発者は、元のデータスキーマと新しいデータスキーマとの間でデータをコピーする機能も知っている必要がある。さらに、開発者は、関係性を再構築するために、同じオブジェクトを表すスキーマ間でインスタンスを相互に関係付ける機能も知っている必要がある。上記に挙げた制限および要件により、適応アルゴリズムを成功裏に実装することは難しく、その理由としては、プロパティの再構築性が乏しいこと、関係の再構築性が乏しいこと、継承の再構築性が乏しいこと、元のデータスキーマにはなかった制約を新しいデータスキーマにおいて考慮できないこと、新しいデータスキーマにおいてプロパティが失われること、および、相互の関連付けの整合性が壊れることなどがある。したがって、適応アルゴリズムを宣言的変換と置き換えることにより、適応アルゴリズムの複雑さを伴わずに、元のデータスキーマで保持されていたデータを、新しいスキーマで操作することが可能になる。
【００２７】
宣言的変換は、例示的な一実施形態において、元のスキーマの定義を入力として使用する。宣言的変換は、次いで、各変換宣言（transformation declaration）が、新しいデータスキーマが元のデータスキーマとどのように異なるかを記述する、１組の変換宣言を適用する。その後、宣言的変換が出力として作成され、これが新しいデータスキーマの定義となる。追加の例示的な実施形態において、宣言的変換は、インスタンス化されたデータを元のデータスキーマから受け取り、新しいデータスキーマに従って、出力としてインスタンスを作成する。
【００２８】
例示的な宣言的変換は、どのインスタンスに変換を適用するか、クラスをどのように変換するか、影響を受けるインスタンスをどのように変換するか、および元のデータスキーマの関係をどのように変換するかに関する識別を含む。したがって、例示的な宣言的変換は、新しいデータスキーマのインスタンス化が制約違反にならないということを満たす。また、例示的な変換は、古いデータスキーマのインスタンス化が、未変換のオブジェクトを含まないこと、および新しいスキーマのインスタンス化が、変換済みのコンピュータアプリケーションの出力の定義を満たすことを確実にする。
【００２９】
以下に、元のデータスキーマによって保持されるデータを新しいデータスキーマに変換するときに利用することができる、例示的な変換のリストに含まれるものを列挙する。以下の変換は、変換の範囲に関する制限ではなく、単に例示的な変換である。さらに、命令型パラダイムおよび関数型パラダイムを含め、いくつかのプログラミングパラダイムを使用して、宣言的変換を実装することができる。更なる変換を利用して、元のデータスキーマから新しいデータスキーマへの宣言的変換を容易にすることも意図されている。例示的な変換には、以下のものが含まれる。
【００３０】
クラスレベルの変換 
（１）Rename（old name, new name）
Ｒｅｎａｍｅ（名前変更）変換は、古いクラスを新しいクラスに名前変更する。したがって、古い名前のインスタンスは、ここで新しい名前のインスタンスとなる。例示的な一実施形態において、古い名前に対する関係は全て、新しい名称へと調整される。
【００３１】
（２）DeleteInstances（class name, where condition）
Ｄｅｌｅｔｅ  Ｉｎｓｔａｎｃｅｓ（インスタンス削除）変換は、クラスのうち、所与の条件を満たすインスタンスを削除する。この結果、その所与の条件を満たすインスタンスが含まれている関係が全て除去される。
【００３２】
（３）Delete（class name）
Ｄｅｌｅｔｅ（削除）変換は、所与のクラスを削除する。例示的な一実施形態において、クラスが削除されると、インスタンスがそのクラス内に存在することはない。
【００３３】
（４）Create（class name）
Ｃｒｅａｔｅ（作成）変換では、新しいクラスを作成する。
【００３４】
（５）SetSuperClass（class name, property defaults）
Ｓｅｔ  Ｓｕｐｅｒ  Ｃｌａｓｓ（スーパークラスの設定）変換は、所与のクラスに対するスーパークラスを指定する。これは、スーパークラス内における各プロパティに関連付けられたプロパティ名とデフォルトの値を指示する。例示的な一実施形態では、宣言されたクラスがまだスーパークラスを有していないときにのみ、スーパークラスを設定することができる。
【００３５】
（６）DeleteInheritance（ ）。
Ｄｅｌｅｔｅ  Ｉｎｈｅｒｉｔａｎｃｅ（継承の削除）変換は、識別される継承を所与のクラスから除去する。例示的な一実施形態において、継承が除去されることとなるクラスの全てのインスタンスは、継承されるプロパティの全てにおいてデフォルトの値を有していなければならない。
【００３６】
（７）MoveInstances（destination class name, property defaults, where expression）
Ｍｏｖｅ  Ｉｎｓｔａｎｃｅｓ（インスタンスの移動）変換は、所与の条件を満たすインスタンスを、クラスから、識別された宛先クラスに移動させる。さらに、例示的な一実施形態では、Ｍｏｖｅ  Ｉｎｓｔａｎｃｅｓ変換は、宛先のクラスには存在するが元のクラスには存在しない各プロパティに与えられるべき、プロパティ名とデフォルトの値を提供する。
【００３７】
プロパティレベルの変換−Class(clname).Properties−
（１）Rename（old name, new name）
Ｒｅｎａｍｅ変換では、プロパティを元のプロパティ名から新しいプロパティ名に名称変更する。
【００３８】
（２）Ｄｅｌｅｔｅ（プロパティ名）。Ｄｅｌｅｔｅ変換では、識別されるプロパティを削除する。例示的な一実施形態において、識別されるプロパティの値が、クラスの全てのインスタンスに対して消去される。
【００３９】
（３）Ａｄｄ（プロパティ名、タイプ）。Ａｄｄ（追加）変換では、識別されるタイプのプロパティを追加する。例示的な一実施形態において、プロパティが追加されるクラスには、いずれのインスタンスも含むことができない。
【００４０】
（４）ＳｅｔＴｏＤｅｆａｕｌｔ（プロパティ名、ｗｈｅｒｅ  ｃｏｎｄｉｔｏｎ）。ＳｅｔＴｏＤｅｆａｕｌｔ（デフォルト設定）変換では、所与の条件を満足させるインスタンスに対するデフォルト値を設定する。
【００４１】
（５）ＣｈａｎｇｅＴｙｐｅ（プロパティ名、新しいタイプ）。ＣｈａｎｇｅＴｙｐｅ（タイプの変更）変換では、識別されるプロパティのタイプを変更する。例示的な一実施形態において、チェンジタイプ変換が適用されるクラスには、データが消去されたいずれのインスタンスも含むことができない。
【００４２】
（６）ＭｏｖｅＴｏＣｌａｓｓ（プロパティ名、相手側のクラス名、宛先のプロパティ名）。ＭｏｖｅＴｏＣｌａｓｓ（クラスへの移動）変換では、識別されるプロパティを、第１のクラスから、識別される宛先のクラスに移動させ、クラスの各インスタンスごとに、識別されるクラスの各インスタンスにプロパティが移動するようにする。例示的な一実施形態において、移動対象のプロパティは、識別される相手側のクラス名のいずれのインスタンスにもリンクされないクラスのインスタンスに対してデフォルト値を持っていなければならない。
【００４３】
関係性の変換  Ｃｌａｓｓ（ｃｌｎａｍｅ）．Ｒｅｌａｔｉｏｎｓｈｉｐｓ
（１）Ｒｅｎａｍｅ（古い名称、新しい名称）。Ｒｅｎａｍｅ変換では、古い関係性を、識別される新しい名称で名称変更する。
【００４４】
（２）Ａｄｄ（関係性名、相手側のクラス、相手側のアリティ、こちら側のアリティ、相手側のクラス上での名称、関連性タイプ）。Ａｄｄ変換では、新しい関係性を宣言する。変換の「相手側のアリティ」は、現在のクラス（ｃｌｎａｍｅ）の一インスタンスに関連付けることができる相手側のクラス内のインスタンスの数を示す。加えて、変換の「こちら側のアリティ」は、現在のクラスのインスタンスをいくつ、相手側のクラスのインスタンスに関連付けることができるかを示す。例示的な一実施形態において、「相手側のクラス上での名称」が「ｎｏｎｅ」以外のものであれば、関係は双方向である。加えて、例示的な一実施形態において、「関連性タイプ」は、Ａｓｓｏｃｉａｔｉｏｎ（関連性）、Ａｇｇｒｅｇａｔｉｏｎ（集約）、およびＣｏｍｐｏｓｉｔｉｏｎ（コンポジション：組成）とすることができる。
【００４５】
（３）ＭｏｖｅＴｏＣｌａｓｓ（関係性名、相手側のクラス名、宛先の関係性名）。ＭｏｖｅＴｏＣｌａｓｓ変換では、識別される関係性を、識別されるクラスに移動させる。例示的な一実施形態において、現在のクラス（ｃｌｎａｍｅ）の各インスタンス、識別される関係性を、関係性にリンクされる「相手側のクラス名」の各インスタンスに移動させる。
【００４６】
（４）ＣｈａｎｇｅＴｈｉｓＥｎｄＡｒｉｔｙ（関係性名、ｗｈｅｒｅ  ｅｘｐｒｅｓｓｉｏｎ）。ＣｈａｎｇｅＴｈｉｓＥｎｄＡｒｉｔｙ（こちら側のアリティの変更）変換では、識別されるこちら側での関係性のアリティ（例えば、相手側のクラス内の単一のインスタンスに関連付けられる現在のクラスのインスタンスの数）を変更する。例示的な一実施形態において、新しいアリティは、現在のクラスのインスタンスのいずれも乱すことはできない。
【００４７】
（５）ＤｅｌｅｔｅＥｌｅｍｅｎｔｓ（関係性名、ｗｈｅｒｅ  ｅｘｐｒｅｓｓｉｏｎ）。ＤｅｌｅｔｅＥｌｅｍｅｎｔｓ（エレメント削除）変換では、所与の式を満足させた識別される関係からエレメントを削除する。例示的な一実施形態において、関係性が双方向である場合、エレメントは双方の側から削除される。
【００４８】
（６）ＤｅｌｅｔｅＴｈｉｓＥｎｄ（関係性名）。ＤｅｌｅｔｅＴｈｉｓＥｎｄ（こちら側の削除）変換では、現在のクラスに関連する関係性の側を削除する。例示的な一実施形態において、関係性は、現在のクラス内の全てのインスタンスに対して内容の無いものでなければならない。
【００４９】
（７）ＭｏｖｅＥｌｅｍｅｎｔｓＴｏＲｅｌａｔｉｏｎｓｈｉｐ（相手側のクラス名、関係性、ｗｈｅｒｅ  ｅｘｐｒｅｓｓｉｏｎ）。ＭｏｖｅＥｌｅｍｅｎｔｓＴｏＲｅｌａｔｉｏｎｓｈｉｐ（エレメントを関係性に対して移動させる）変換では、式が満足である時に、エレメントを、識別される関係性から別の関係性に移動させる。例示的な一実施形態において、クラスの各インスタンス、関係性のエレメントを、関係性にリンクされる「相手側のクラス名」の各インスタンスに移動させる。
【００５０】
（８）ＣｏｐｙＥｌｅｍｅｎｔｓＴｏＲｅｌａｔｉｏｎｓｈｉｐ（相手側のクラス名、関係性、ここでは式）。ＣｏｐｙＥｌｅｍｅｎｔｓＴｏＲｅｌａｔｉｏｎｓｈｉｐ（エレメントを関係性にコピーする）変換では、式が満足である時に、エレメントを識別される関係性から別の関係性にコピーする。例示的な一実施形態において、クラスの各インスタンス、関係性のエレメントは、関係性にリンクされる「相手側のクラス名」の各インスタンスにコピーされる。
【００５１】
図３に戻ると、第１のデータスキーマ３００には、２つのプロパティ、すなわち、プロパティＵ３０８およびプロパティＶ３１０を含む、クラスＡ３０４が含まれる。クラスＢ３０６には、４つのプロパティ、すなわち、プロパティＷ３１２、プロパティＸ３１４、プロパティＹ３１６、および、プロパティＺ３１８、が含まれる。加えて、第１のデータスキーマ３００には、関係性Ｒ３２０が含まれる。関係性Ｒ３２０は、プロパティＶ３１０およびプロパティＺ３１８を介したクラスＡ３０４およびクラスＢ３０６の間の関係性を表す。クラスＡ３０４、クラスＢ３０６および関係性Ｒ３２０の収集は、データスキーマ、第１のデータスキーマ３００を視覚的に定義する。
【００５２】
第２のデータスキーマ３０２は、例示的な一実施形態において、コンピュータアプリケーション（アプリケーション）の新しいバージョンが操作可能なデータ構造を視覚的に示したものである。したがって、データは、元のバージョンでアプリケーションにより保持されていたのであり、元のバージョンでは、データを第１のデータスキーマ３００で操作されていたが、そのデータを、アプリケーションの更新されたバージョンにより第２のデータスキーマ３０２として、操作することが可能である。
【００５３】
第２のデータスキーマ３０２には、第１のデータスキーマ３００と関連するクラスおよびプロパティが含まれ、同様に名付けられたエレメントが２０だけ大きい数字で参照される。例えば、クラスＡ３２４は、第２のデータスキーマ３０２に含まれ、それにおいて、クラスＡ３２４は、第１のデータスキーマ３００のクラスＡ３０４と互換性を有し、参照番号に２０の差がある。
【００５４】
第２のデータスキーマ３０２にはまた、クラスＢ３２６、クラスＣ３４２、クラスＤ３４４、プロパティＵ３２８、プロパティＶ３３０、プロパティＷ３３２、プロパティＸ３３４、プロパティＹ３３６、プロパティＺ３３８、および、関係性Ｒ３４０も含まれる。例示的な一実施形態において、第１のデータスキーマ３００は、以下の１組の変換で宣言的に変換され、結果として第２のデータスキーマ３０２が得られる。
（１）Ｃｌａｓｓ．Ｃｒｅａｔｅ（Ｃ）
（２）Ｃｌａｓｓ．Ｃｒｅａｔｅ（Ｄ）
（３）Ｃｌａｓｓ（Ｃ）．ＳｅｔＳｕｐｅｒＣｌａｓｓ（Ｂ）
（４）Ｃｌａｓｓ（Ｄ）．ＳｅｔＳｕｐｅｒＣｌａｓｓ（Ｂ）
（５）Ｃｌａｓｓ（Ｂ）．ＭｏｖｅＩｎｓｔａｎｃｅ（Ｃ，“ａ＝＝ｔｙｐｅｉｓＯＮＥ”）
（６）Ｃｌａｓｓ（Ｂ）．ＭｏｖｅＩｎｓｔａｎｃｅ（Ｄ，“ａ！＝ｔｙｐｅｉｓＯＮＥ”）
（７）Ｃｌａｓｓ（Ｂ）．Ｐｒｏｐｅｒｔｉｅｓ．ＭｏｖｅＴｏＣｌａｓｓ（Ｙ，Ｃ，Ｙ）
（８）Ｃｌａｓｓ（Ｂ）．Ｐｒｏｐｅｒｔｉｅｓ．ＭｏｖｅＴｏＣｌａｓｓ（Ｘ，Ｄ，Ｘ）
（９）Ｃｌａｓｓ（Ｂ）．Ｒｅｌａｔｉｏｎｓｈｉｐｓ．ＭｏｖｅＴｏＣｌａｓｓ（Ｚ，Ｃ，Ｚ）
【００５５】
上記の例示的な１組の変換を行った結果、クラスＢ３０６が、サブクラスのクラスＣ３４２およびクラスＤ３４４内に屈折される。クラスＣ３４２は、変換「Ｃｌａｓｓ．Ｃｒｅａｔｅ（Ｃ）」で作成される。クラスＤ３４４は、変換「Ｃｌａｓｓ．Ｃｒｅａｔｅ（Ｄ）」で作成される。プロパティＸ３１４は、変換「Ｃｌａｓｓ（Ｂ）．Ｐｒｏｐｅｒｔｉｅｓ．ＭｏｖｅＴｏＣｌａｓｓ（Ｙ，Ｃ，Ｙ）」によりプロパティＸ３３４として、クラスＢ３０６からクラスＣ３４２へ移動される。同様に、クラス３０６のプロパティＸ３１４は、変換「Ｃｌａｓｓ（Ｂ）．Ｐｒｏｐｅｒｔｉｅｓ．ＭｏｖｅＴｏＣｌａｓｓ（Ｘ，Ｄ，Ｘ）」によりプロパティＸ３３４として、クラスＤ３４４へ移動される。また、プロパティＶ３１０とプロパティＺ３１８との間に存在する関係性Ｒ３２０は、変換「Ｃｌａｓｓ（Ｂ）．関係性．ＭｏｖｅＴｏＣｌａｓｓ（Ｚ，Ｃ，Ｚ）」により、プロパティＶ３３０とプロパティＺ３３８との間の関係性Ｒ３４０として、移動される。
【００５６】
例示的な一実施形態において、上記の例示的な宣言的変換のような宣言的変換は、開発者により開発者コンピューティングデバイス２０４を利用して作成される。宣言的変換は次に、開発者コンピューティングデバイス２０４またはサーバコンピューティングデバイス２０６のどちらかで移行コードとしてコンパイルされる。コンパイルされた宣言的変換は、移行コードとなり、第１のデータスキーマ３００等の元のデータスキーマに適用される。移行コードにより新しいデータスキーマが展開される結果、更新されたコンピュータアプリケーションは、最初は元のデータスキーマで保持されていたデータを、新しいデータスキーマのように操作することができる。
【００５７】
図４に戻ると、図４には、例示的な宣言的変換の第１のデータスキーマ４００および第２のデータスキーマ４０２が視覚的に示される。第２のデータスキーマ４０２は、第１のデータスキーマ４００の変換である。
【００５８】
第１のデータスキーマ４００には、クラスＡ４０４およびＤ４０６が含まれる。クラスＡ４０４には、プロパティＷ４０８およびプロパティＸ４１０が含まれる。クラスＤ４０６には、プロパティＹ４１２が含まれる。
【００５９】
加えて、関係性４１４が、クラスＡ４０４とクラスＤ４０６との間に存在する。関係性４１４は、クラスＤ４０６に向けられる関係性の矢印で示すように、一方向の関係性である。関係性４１４の一方向という性質のため、クラスＤ４０６からの特定のインスタンスを前提とすると、クラスＡ４０４のどのインスタンスが関係するかを判定することが概して可能ではないということになる。さらに、関係性４１４は、コンポジションであり（関係性４１４の黒塗りのひし形で示すような）、クラスＡ４０４のインスタンスが削除されると、削除されたインスタンスに関連付けられるクラスＤ４０６の全てのインスタンスも削除されるようにする。また、本例においては、関係性４１４は、アリティ「０．．１」を持ち、これは、クラスＤ４０６の特定のインスタンスが、クラスＡ４０４の０から１個のインスタンスの一部であることを示す。関係性４１４はまた、アリティ「０．．＊」を含み、これは、クラスＡ４０４の特定のインスタンスが、クラスＤ４０６の０または１個以上のインスタンスを持つことを示す。
【００６０】
従来、コンピュータアプリケーションが実行され、結果として第１のデータスキーマ４００でデータがインスタンス化される。インスタンス化の結果、いくつかの、クラスＡ４０４のオブジェクトインスタンスおよびクラスＤ４０６のオブジェクトインスタンスが得られ、それらのオブジェクトインスタンスは特定のプロパティおよび値を有する。典型的には、コンピュータアプリケーションが更新されると、データスキーマは更新される。例えば、第２のデータスキーマ４０２が定義され、開発者が変換コードを作成して第１のデータスキーマ４００の任意の可能性のあるスキーマのインスタンス化を第２のデータスキーマ４０２に変換する。上記で検討したように、開発者による変換コードの作成は、資源集約的であり、ミスが起こりやすい。その結果、１組の宣言的変換によって変換コードが自動的に展開され、コンパイルされると移行コードが作成されることが望ましい。したがって、本発明の例示的な一実施形態において、第２のデータスキーマ４０２は、１組の宣言的変換の結果として得られ、開発者が変換コードを作成する準備をして直接作成するのとは対照的である。
【００６１】
第２のデータスキーマ４０２には、クラスＡ４１６、クラスＢ４２４、クラスＣ４２６、およびクラスＤ４３２が含まれる。クラスＡ４１６には、プロパティＷ４１８およびプロパティＸ４２０が含まれる。プロパティＷ４１８およびＸ４２０は、第１のデータスキーマ４００のプロパティＷ４０８およびＸ４１０と同様である。第２のデータスキーマ４０２のクラスＣ４２６には、プロパティＺ４２６が含まれる。クラスＤ４３２には、プロパティＹ４３４が含まれる。クラスＢ４２４およびクラスＣ４２６は、固有性の連結４２２で示されるように、クラスＡ４１６のサブクラスである。加えて、関係性４３０は、クラスＢ４２４とクラスＤ４３２との間に存在する。関係性４３０は、双方向であり（矢印無しで示すように）、これは、クラスＤ４３２の特定のインスタンスを前提とすると、クラスＢ４２４の関係するインスタンスが判定可能であることを示す。加えて、関係性４３０は、コンポジションである。また、関係性４３０には、アリティ「０．．１」が含まれ、これは、クラスＤ４３２の特定のインスタンスを、クラスＢ４２４の０または１個のインスタンスの一部とすることができることを示す。関係性４３０にはまた、アリティ「１．．＊」が含まれ、これは、クラスＢ４２４の特定のインスタンスが、クラスＤ４３２の少なくとも１つのインスタンスを持たなければならないことを示す。
【００６２】
上記で検討したように、コンピュータアプリケーションが更新された後、開発者は典型的には、変換コードの作成前に絵図を作成して第２のデータスキーマ４０２を表す。変換コードにより、第１のデータスキーマ４００の任意の可能性のあるスキーマのインスタンス化が変換されなければならない。従来、全ての可能性のあるスキーマのインスタンス化が変換コードによりなされることを確実にすることは、非常に困難である。更新される前のコンピュータアプリケーションによりインスタンス化された、可能性のあるスキーマのインスタンス化を、変換コードで担うことができない場合、そのスキーマのインスタンス化のデータは、更新されたコンピュータアプリケーションでは利用できないであろう。その結果、全ての可能性のあるスキーマのインスタンス化を変換コード内で担うことを確実にするために、大量のテストが必要となる。
【００６３】
例示的な一実施形態においては、開発者が第２のデータスキーマから開始して変換コードを作成するのとは対照的に、開発者は、第１のデータスキーマから開始して、宣言的変換によって、第１のスキーマを変換して第２のスキーマを作成する。したがって、例示的な一実施形態において、データを第１のスキーマから第２のスキーマに変換する移行コードは、宣言的変換に基づき自動的に生成される。
【００６４】
例えば、第１のデータスキーマ４００は、以下の１組の宣言的変換で変換されて、結果として、データスキーマが第２のデータスキーマ４０２により視覚的に示される。
（１）Ｃｌａｓｓ．ＮｅｗＳｕｂｃｌａｓｓ（クラスＡ，クラスＣ，ａ：ｃｏｕｎｔ（４１４）＝＝０）
ａ．Ｃｌａｓｓ（Ａ）．ＮｅｗＳｕｂｃｌａｓｓ（クラスＣ）
ｂ．Ｃｌａｓｓ（Ａ）．ＭｏｖｅｔｏＣｌａｓｓ（クラスＣ，ａ：ｃｏｕｎｔ（４１４）＝＝０）
（２）Ｃｌａｓｓ（Ｃ）．ＡｄｄＡｔｔｒｉｂｕｔｅ（プロパティＺ，４）
（３）Ｃｌａｓｓ．ＮｅｗＳｕｂＣｌａｓｓ（クラスＡ，クラスＢ，ａ：ｃｏｕｎｔ（４１４）＞０）
ａ．Ｃｌａｓｓ（Ａ）．ＮｅｗＳｕｂｃｌａｓｓ（クラスＢ）
ｂ．Ｃｌａｓｓ（Ａ）．ＭｏｖｅＴｏＣｌａｓｓ（クラスＢ，ａ：ｃｏｕｎｔ（４１４）＞０）
（４）Ｃｌａｓｓ（Ａ）．Ｒｅｌａｔｉｏｎｓｈｉｐ．ＭｏｖｅＴｏＣｌａｓｓ（４１４，クラスＢ，４３０）
（５）Ｃｌａｓｓ（Ｂ）．Ｒｅｌａｔｉｏｎｓｈｉｐｓ．ＭａｋｅＲｅｌａｔｉｏｎｓｈｉｐＢｉｄｉｒｅｃｔｉｏｎａｌ（４３０）
（６）Ｃｌａｓｓ（Ｂ）．Ｒｅｌａｔｉｏｎｓｈｉｐ．ＣｈａｎｇｅＲｅｌａｔｉｏｎｓｈｉｐＡｒｉｔｙ（４３０，“１．．＊”）
【００６５】
第１の変換、「Ｃｌａｓｓ．ＮｅｗＳｕｂｃｌａｓｓ（クラスＡ，クラスＣ，ａ：ｃｏｕｎｔ（４１４）＝＝０）」では、クラスＣ４２６を、クラスＡ４１６のサブクラスとして作成する。クラスＤ４０６の０個のインスタンスに関連付けられていたクラスＡ４０４の全てのインスタンスが、新しく作成されたクラスＣ４２６に移動される。追加の実施形態において、この変換は、代わりに、一連の変換として記述することができ、「Ｃｌａｓｓ（Ａ）．ＮｅｗＳｕｂｃｌａｓｓ（ＣｌａｓｓＣ）」では、クラスＡ４１６のサブクラスとして、サブクラスであるクラスＣ４２６を作成し、「Ｃｌａｓｓ（Ａ）．ＭｏｖｅｔｏＣｌａｓｓ（ＣｌａｓｓＣ，ａ：ｃｏｕｎｔ（４１４）＝＝０）」では、関係性４１４を介してクラスＣの任意のインスタンスに関連付けられていないクラスＡのインスタンスに、クラスＣに移動するよう命令する。
【００６６】
第２の変換、「Ｃｌａｓｓ（Ｃ）．ＡｄｄＡｔｔｒｉｂｕｔｅ（プロパティＺ，４）」では、プロパティとして、プロパティＺ４２８をクラスＣ４２６に追加する。プロパティＺ４２８のデフォルト値は、４に設定される。
【００６７】
第３の変換、「Ｃｌａｓｓ．ＮｅｗＳｕｂＣｌａｓｓ（ＣｌａｓｓＡ，ＣｌａｓｓＢ，ａ：ｃｏｕｎｔ（４１４）＞０）」では、クラスＢ４２４をクラスＡ４１６のサブグラスとして作成する。クラスＣ４２６に移動されないクラスＡ４０４の全てのインスタンス（クラスＤ４０６との関係性が０より大きいインスタンス）を、新しく作成されたクラスＢ４２４に移動させる。追加の実施形態において、この変換は、代替の一連の変換で記述することができる。例えば、「Ｃｌａｓｓ（Ａ）．ＮｅｗＳｕｂｃｌａｓｓ（ＣｌａｓｓＢ）」では、サブクラスであるクラスＢ４２４をクラスＡ４１６のサブクラスとして作成し、「Ｃｌａｓｓ（Ａ）．ＭｏｖｅＴｏＣｌａｓｓ（ＣｌａｓｓＢ，ａ：ｃｏｕｎｔ（４１４）＞０）」では、関係性４１４によりいくつかのインスタンスに関連付けられるクラスＡのインスタンスが、クラスＢに移動されるよう命令する。
【００６８】
第４の変換、「Ｃｌａｓｓ（Ａ）．Ｒｅｌａｔｉｏｎｓｈｉｐ．ＭｏｖｅＴｏＣｌａｓｓ（４１４，ＣｌａｓｓＢ，４３０）」では、関係性４３０により表されるように、関係性４１４をクラスＡ４０４からクラスＢ４２４に移動させる。
【００６９】
第５の変換、「Ｃｌａｓｓ（Ｂ）．Ｒｅｌａｔｉｏｎｓｈｉｐ．ＭａｋｅＲｅｌａｔｉｏｎｓｈｉｐＢｉｄｉｒｅｃｔｉｏｎａｌ（４３０）」では、関係性４３０を、元の関係性４１４の一方向の関係性とは逆に、双方向の関係性にする。
【００７０】
第６の変換、「Ｒｅｌａｔｉｏｎｓｈｉｐ．ＣｈａｎｇｅＲｅｌａｔｉｏｎｓｈｉｐＡｒｉｔｙ（４３０，“１．．＊”）」では、関係性４３０のアリティを１またはそれ以上に変更する。これは、０またはそれ以上のアリティを持つ関係性４１４からの変更である。この変更は、０に等しいアリティを満足させていたインスタンスが、第１の変換によりクラスＣ４２６に移動されたことの結果である。
【００７１】
例示的な一実施形態において、開発者は、図２の開発者コンピューティングデバイス２０４を利用して上記の１組の変換を作成する。１組の宣言的変換は次に、開発者コンピューティングデバイス２０４によりコンパイルされて、移行コードが作成される。そして、得られる移行コードは、図２のサーバコンピューティングデバイス２０６に記憶されるデータに適用される。データは、第１のデータスキーマ４００で保持されるが、移行コードによる変換に続いて、データは第２のデータスキーマ４０２に変換される。第２のデータスキーマ４０２の構造のデータは、更新されたコンピュータアプリケーションにより操作することができる。
【００７２】
上記の例示的な変換が単なる例であり、かつ、本発明の範囲を制限することは意図されないことを、当業者は理解するであろう。例えば、上記の例において特定のシンタックス（構文）が検討されるが、本発明のシンタックスは本明細書において与えられる例に限定されない。加えて、上記の例において与えられる限定された宣言は、本発明の範囲についての限定ではない。それとは反対に、単なる例として与えられる宣言は、本発明に利用可能な宣言を定義ではなく例示するものであると、当業者により理解されるであろう。したがって、特定のシンタックスおよび宣言を用いた例が本明細書において与えられるが、それらの例は本発明の範囲に対する制限ではない。
【００７３】
ここで図５を参照すると、本発明の一実施形態にしたがって、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに、宣言的変換によって変換する例示的な方法５００が示されている。ステップ５０２にて、第１のデータスキーマを定義するデータが識別される。例示的な一実施形態において、第１のデータスキーマを定義するデータは、データを操作するコンピュータアプリケーションにより保持されるデータを構造化するために利用される、１つまたは複数の定義ファイルである。例えば、操作コンピュータアプリケーションが、定義ファイルにより定義される構造に基づき、データスキーマのインスタンスを記憶する。定義ファイルは、本質的には、複数のクラス、プロパティおよび関係性の間の関連を記述する。第１のデータスキーマを定義するデータの識別には、クラス、プロパティ、および関係性等の、構造の様々なエレメントを識別することが含まれる。上記で検討したように、例示的な実施形態では、オブジェクト指向のプログラミングパラダイムを記述するが、追加のパラダイムが適用可能であり、これには関係パラダイムなどがある。
【００７４】
例示的な一実施形態において、図２の開発者コンピューティングデバイス２０４が、第１のデータスキーマを定義するデータを識別する。第１のデータスキーマで記憶されるデータは、例示的な実施形態において、図２のサーバコンピューティングデバイス２０６で維持される。追加の例示的な実施形態において、開発者は、ステップ５０２にて表されるように、第１のデータスキーマを定義するデータを識別する。
【００７５】
ステップ５０４にて、宣言的変換が生成される。宣言的変換は、ステップ５０２にて識別されるデータを、コンピュータアプリケーションが操作可能な第２のデータスキーマに変換する。ステップ５０４で生成される宣言的変換には、例示的な一実施形態において、オブジェクト指向のパラダイムにおけるクラス、プロパティ、および関係性等の複数のエレメントを扱う１組の宣言的変換が含まれる。追加の例示的な実施形態において、ステップ５０４で生成される宣言的変換には、関係パラダイムの複数のエレメントを扱う複数の宣言的変換が含まれる。例示的な一実施形態において、宣言的変換が対処するパラダイムにかかわらず、ステップ５０４で生成される変換は、ステップ５０２で識別されるデータを利用する。加えて、ステップ５０４で生成される宣言的変換は、最初に第２のデータスキーマを定義せずに生成される。
【００７６】
ステップ５０４で生成される宣言的変換は、例示的な一実施形態において、どのインスタンスに宣言的変換が適用されるかについての指示が含まれる。加えて、宣言的変換には、１つまたは複数のクラスをどのように変換するかについての指示が含まれる。また、宣言的変換には、１つまたは複数のプロパティをどのように変換するかについての指示が含まれる。さらに、宣言的変換には、例示的な本実施形態において、第１のデータスキーマに適用される関係性をどのように変換するかについての指示が含まれる。任意のまたは全ての上記に挙げた指示を、宣言的変換に含めることができることは理解されるであろう。
【００７７】
例示的な一実施形態において、ステップ５０４で生成される宣言的変換は、図２の開発者コンピューティングデバイス２０４等のコンピューティングデバイスにより生成される。追加の例示的な実施形態において、開発者は、宣言的変換を生成し、それらの宣言的変換を図２の開発者コンピューティングデバイス２０４等のコンピューティングデバイスに入力する。例えば、開発者は、テキストベースのアプリケーションまたはグラフィックベースのアプリケーションを採用して宣言的変換を伝達することができる。
【００７８】
ステップ５０６にて、移行コードが生成される。移行コードは、ステップ５０４で生成される宣言的変換から作成される。例示的な一実施形態において、移行コードは、開発者コンピューティングデバイス２０４等のコンピューティングデバイスにより自動的に生成される。例えば、図２の開発者コンピューティングデバイス２０４を使用する開発者が、変換を開発者コンピューティングデバイス２０４に入力する。開発者は次に、開発者コンピューティングデバイス２０４に命令して、第１のデータスキーマから、得られる第２のデータスキーマにデータを変換する移行コードを、開発者が介入してまたは自動的に生成させる。追加の例示的な実施形態において、移行コードは、開発者により生成される。開発者は、例示的な実施形態において、ステップ５０４で生成される宣言的変換を利用して、ステップ５０６にて移行コードを生成する。
【００７９】
移行コードは、例示的な一実施形態において、ステップ５０４で生成される宣言的変換に基づき作成される。例えば、宣言的変換は、コンピューティングデバイスによりコンパイルされて、コンピューティングデバイスが読取可能なコードとなる。得られるコードは、コンピューティングデバイスに、第１のデータスキーマとして構造されたデータを第２のデータスキーマの構造に変換させる命令を与える。したがって、コンピュータアプリケーションの新しいバージョンが作成される時のように、第１のデータ構造でデータを保持していたコンピュータアプリケーションが更新される場合、保持されるデータは次に、移行コードに基づき変換される。用語「コンパイル」を使用することは制限するためではなく、代わりに、コンピューティングデバイスにより読取可能な移行コードの形式に宣言的変換をコンバートして、保持されるデータを変換するための１つの方法を表す、ということは理解されるであろう。
【００８０】
ステップ５０８にて、第１のデータスキーマを定義するデータが変換されて、第２のデータスキーマが定義される。例示的な一実施形態において、ステップ５０６で生成される移行コードが、コンピューティングデバイスにより処理されて、データの変換が行われる。例えば、図２のサーバコンピューティングデバイス２０６等のコンピューティングデバイスが、第１のデータスキーマを定義するデータを記憶する。コンピューティングデバイスは、移行コードを実行する。移行コードの実行により、コンピューティングデバイスに命令して、第１のデータスキーマを定義するデータを第２のデータスキーマに変換させる。追加の例示的な実施形態において、図２の開発者コンピューティングデバイス２０４等のコンピューティングデバイスは、第１のデータスキーマを定義するデータを変換させる移行コードを実行して、第２のデータスキーマを定義する。さらなる追加の例示的な実施形態において、開発者は、第１のデータスキーマを定義するデータを変換して、第２のデータスキーマを定義する。追加の実施形態において、第２のデータスキーマが、宣言的変換から生成される。したがって、例示的な一実施形態において、移行コードと第２のデータスキーマの双方が、宣言的変換を利用して生成される。
【００８１】
ここで図６を参照すると、宣言的変換によって、第１のデータスキーマの第１のデータインスタンス化からの第１のデータセットを、第２のデータスキーマの第２のデータインスタンス化の第２のデータセットに変換する例示的な方法６００が、示される。例示的な一実施形態において、第２のデータスキーマは、宣言的変換を作成する前は存在しない。代わりに、第２のデータスキーマは、宣言的変換が第１のデータスキーマに適用されることにより得られる。例えば、第１のデータスキーマは、入力とすることができ、この入力からから宣言的変換が生成される。宣言的変換は次に、第１のデータスキーマに適用されて、第２のデータスキーマが作成される。追加の例示的な実施形態において、第１のデータスキーマでコンピュータアプリケーションにより保持されるデータは、入力であり、この入力から宣言的変換が生成される。宣言的変換を、（第１のデータスキーマで構造化される）保持されるデータに適用して、保持されるデータを第２のデータスキーマの構造に変換することができる。本例において、第２のデータスキーマは、宣言的変換の生成前には作成されないが、代わりに、第２のデータスキーマは、保持されるデータに適用されるような宣言的変換から判定される。
【００８２】
ステップ６０２にて、第１のデータインスタンス化のデータが識別される。データの識別には、例示的な一実施形態において、更新されたコンピュータアプリケーションで変換したいデータ、または、更新されたコンピュータアプリケーションで操作するデータを、開発者が配置することが含まれる。追加の例示的な実施形態において、第１のデータインスタンス化のデータの識別は、コンピューティングデバイスにより識別される。例えば、図２の開発者コンピューティングデバイス２０４は、コンピュータアプリケーションにより操作され保持されるデータを識別するが、そこでは、データは前のバージョンのコンピュータアプリケーションにより利用されたデータスキーマで記憶されたものである。したがって、現在のバージョンのコンピュータアプリケーションでデータを操作するためには、現在のバージョンのコンピュータアプリケーションと互換性があるデータスキーマに、データが変換されなければならない。第１のデータインスタンス化のデータの識別は、手動でも自動的にでも識別することができる。
【００８３】
ステップ６０４にて、宣言的変換が生成される。宣言的変換は、自動的に、または手動で生成可能である。例示的な一実施形態において、宣言的変換は、第２のデータスキーマ（部分的に宣言的変換により定義される）が定義される前に、生成される。上記で検討したように、宣言的変換は、開発者および／またはコンピューティングデバイスにより生成することができる。宣言的変換では、命令的に（すなわち、プログラム的に）ではなく、宣言的にデータスキーマをアップデートする方法を提供する。例示的な一実施形態において、宣言的変換が、コンピューティングデバイスにより処理されて、移行コードが生成される。移行コードは、コンピューティングデバイスを命令的に制御して、スキーマのデータおよび／またはデータスキーマを定義するデータを変換させる、コンピュータ読取可能コードとすることができる。
【００８４】
ステップ６０６にて、第１のインスタンス化からの第１のデータセットが、移行コードにより変換される。移行コードは、ステップ６０４で生成される宣言的変換を部分的に利用して作成される。例示的な一実施形態において、移行コードは、宣言的変換をコンピュータ読取可能形式にコンパイルするコンピューティングデバイスにより作成される。例えば、コンピューティングデバイスは、ステップ６０４で生成される宣言的変換を入力として取り込み、移行コードを出力として作成する。移行コードは、本例において、宣言的変換の支援無しで第１のスキーマからのデータを第２のスキーマに変換することを試みる開発者により生成された、従来の変換コードと同様に構造化される（すなわち、ソースコード）。追加の例において、移行コードは、従来の変換コードとは構造においては同様でなく、代わりに、移行コードは、コンピューティングデバイスの支援無しで開発者により生成することが従来可能ではないコンピュータ読取可能構造である（すなわち、オブジェクトコード）。
【００８５】
ステップ６０６にて第１のデータセットを変換して第２のデータセットにすることにより、第１のデータスキーマでコンピュータアプリケーションにより保持され実現されたインスタンスが、第２のデータスキーマに変換される。一般に、第１のデータセットを保持していたコンピュータアプリケーションは更新され、その結果、コンピュータアプリケーションは、第１のデータスキーマで構造化された第１のデータセットを、もはや操作することができない。したがって、第１のデータセットは、第１のデータスキーマから第２のデータスキーマに変換されなければならない。変換は、例示的な本実施形態において、宣言的変換を利用すること、かつ、コンピューティングデバイスにより利用されて変換を生じさせる移行コードを作成すること、により達成される。その結果、コンピュータアプリケーションにより第１のデータスキーマから実現されるデータが、今度はコンピュータアプリケーションで操作可能となるが、これは、データがコンピュータアプリケーションと互換性のある第２のデータスキーマの下で構造化されるからである。
【００８６】
ステップ６０８にて、第２のデータスキーマを定義するデータが生成される。第２のデータスキーマを定義するデータは、第２のデータスキーマの構造で記憶されるデータとは異なる。例えば、ステップ６０６で変換されるデータは、コンピュータアプリケーションにより、コンピュータアプリケーションの保持されるデータとして操作されるデータである。データスキーマを定義するデータは、エレメントの構造、制約、および意味をどのように関連付けて、コンピュータアプリケーションにより操作可能なデータのスキーマまたは構造を形成するかについての定義である。第２のデータスキーマを定義するデータは、例示的な一実施形態において、図２の開発者コンピューティングデバイス２０４等のコンピューティングデバイスにより生成される。例示的な一実施形態において第２のデータスキーマを定義するデータは、実際はテキストであり、テキスト形式のエレメントを使用して第２のデータスキーマが定義される。追加の例示的な実施形態において、第２のスキーマを定義するデータは実際は図式的である。図式的表示を利用して、エレメント、制約、および意味ならびにそれらの関連が識別される。
【００８７】
ステップ６１０にて、第２のデータスキーマの図式表現が生成される。例示的な一実施形態において、図式表現は、ステップ６０４で生成される宣言的変換に基づき開発者により生成される。追加の例示的な実施形態において、図式表現は、コンピューティングデバイスにより、自動的にまたは開発者の要求で生成される。例えば、宣言的変換の基となる第１のデータスキーマに加えて、ステップ６０４で生成される宣言的変換が、コンピューティングデバイスに入力として与えられる。コンピューティングデバイスは、宣言的変換および第１のデータスキーマを利用して、第２のデータスキーマの図式表現を生成する。例示的な一実施形態において、図式表現は、図４に与えられるものと同様の視覚的表示である。特に、第２のデータスキーマ４０２は、第１のデータスキーマ４００として図式的に示される第１のデータスキーマから得られるデータスキーマの図式表現である。ステップ６１０で生成される図式表現は、本明細書に与えられる例に限定されず、代わりに、開発者が論理的表現でデータスキーマを視覚化することを可能にする図式表現を含む、ということは、当業者により理解かつ認識されるであろう。そのような論理的表現は当業者には既知のものである。
【００８８】
ここで図７を参照すると、宣言的変換によって、第１のデータスキーマを定義するデータを、第２のデータスキーマを定義するデータに変換する例示的な方法７００が示される。ステップ７０２にて、第１のデータスキーマを定義するデータが識別される。第１のデータスキーマを定義するデータは、例示的な一実施形態においては開発者により、または、別の実施形態においてはコンピューティングデバイスにより識別することができる。第１のデータスキーマを定義するデータの識別は、例示的な一実施形態において、入力として利用されて宣言的変換が生成される。
【００８９】
ステップ７０４にて、宣言的変換が生成される。宣言的変換により、第１のデータスキーマに関連するデータを変換するための青写真、または、第１のデータスキーマを定義するデータを変換するための青写真が与えられる。宣言的変換では、特定のプログラミングパラダイムの下に保持されるデータを、どのように変換して、更新されたコンピュータアプリケーションに対して存続可能なデータとして残すべきかを宣言する。
【００９０】
ステップ７０６にて、移行コードが自動的に生成される。移行コードは、例示的な一実施形態において、コンピューティングデバイスにより使用されて、データスキーマを定義するデータを変換するオブジェクトコードである。移行コードは、別の例示的な実施形態において、後にコンパイルされるソースコードと互換性があり、それにおいて、得られるコードが、コンピューティングデバイスにより利用されて、データスキーマを定義するデータまたはデータスキーマの下で記憶されるデータが変換される。移行コードは、ステップ７０４で生成される宣言的変換を、得られる移行コードのための入力として利用するコンピューティングデバイスにより、自動的に生成される。移行コードを宣言的変換から自動的に生成することにより、コンピュータアプリケーションにより利用されるデータスキーマを満足させる新しいデータスキーマのインスタンス化が得られる。
【００９１】
ステップ７０８にて、第１のデータスキーマを定義するデータが、第２のデータスキーマを定義するデータに変換される。例えば、ステップ７０２で識別されるデータが、コンピュータアプリケーションにより実装されるスキーマを定義すると、その際コンピュータアプリケーションは最初のバージョンであるが、後のバージョンに更新されるため、データスキーマを定義するデータも、変換を介して更新されなければならない。したがって、ステップ７０４で生成される宣言的変換を利用して、ステップ７０８に示されるように、コンピューティングデバイスに第１のデータスキーマを定義するデータを変換される移行コードが生成される。変換されたデータにより、ステップ７０４の宣言的変換により識別される構造を満足させる新しいデータスキーマが与えられる。
【００９２】
本発明の一実施形態において、宣言的変換は人により書かれる。人は、一実施形態において、テキスト形式の宣言を利用して、宣言的変換を書くことができる。追加の実施形態において、人は、グラフィカルツールを利用することができる。テキスト形式の宣言およびグラフィカルツールの任意の組み合わせを利用して宣言的変換を作成することは、本発明の範囲内以内である。
【００９３】
追加の実施形態において、上記で記載したように、新しいスキーマが、第１のデータスキーマに関連付けられる宣言的変換から自動的に生成される。さらに、さらなる追加の実施形態において、移行コードが、宣言的変換から自動的に生成される。移行コードにより、第１のデータスキーマのインスタンスを新しいデータスキーマのインスタンスに移行することが容易にされる。
【００９４】
追加の本発明の実施形態には、データを自動的に変換するステップが含まれる。変換は、第１のデータスキーマのインスタンスを入力として利用して、また、出力として第２のデータスキーマのインスタンスを利用して、自動的に実行される。したがって、本実施形態には、宣言的変換を作成する必要が無い。変換を実行するために、第１のデータスキーマのインスタンス、第２のデータスキーマのインスタンス、および宣言的変換の任意の組み合わせを利用することは、本発明の範囲内である。例えば、宣言的変換を利用して、移行コードと第２のデータスキーマが双方を生成する。したがって、一実施形態において、宣言的変換は、効果的な変換を得ることを可能にする関連する処理において、移行コードと第２のデータスキーマの双方を生成することに対して有益である。
【００９５】
示される様々なコンポーネントだけでなく図示されないコンポーネントも、多くの異なる配置が、本発明の精神および範囲から逸脱することなければ可能である。本発明の実施形態は、制限ではなく例示を意図して記載された。その範囲から逸脱しない代替の実施形態が、当業者には明らかであろう。当業者は、本発明の範囲から逸脱することなく上述の改善を実現させる代替の手段を開発することができる。
【００９６】
特定の特徴およびサブコンビネーションは、有用であり、他の特徴およびサブコンビネーションを参照することなく採用することができ、かつ、請求項の範囲内に熟考されるということは理解されるであろう。様々な図面に挙げた全てのステップが、記載される特定の順番で実行される必要があるわけではない。
【図１】
2012502389.tif 000003
【図２】
2012502389.tif 000004
【図３】
2012502389.tif 000005
【図４】
2012502389.tif 000006
【図５】
2012502389.tif 000007
【図６】
2012502389.tif 000008
【図７】
2012502389.tif 000009
【国際調査報告】
2012502389.tif 000010
2012502389.tif 000011