(57)【特許請求の範囲】
【請求項１】
コンピュータ読み取り可能な媒体上の、マークアップ言語に従って構成された内容を有する文書に存在するデータに、記憶装置を有する装置を用いてアクセスするための方法であって、
文書の複数の部分のうち、前記文書の各部分について、当該部分がどのくらいアクセスされているかを示す使用状況を判断するステップを含み、各部分はマークアップ言語の１つ以上の構成体に基づいており、前記方法はさらに、
前記使用状況に基づき、前記記憶装置の記憶領域の消費を止めるために、前記文書のある特定の部分を選択するステップと、
前記特定の部分により消費される記憶領域を解放するステップとを含み、
前記方法は、
使用状況を判断する前記ステップが、前記記憶領域を消費する各部分に対する、装置による未完了動作の数を判断するステップをさらに含み、
特定の部分を選択する前記ステップが、前記特定の部分に対する未完了動作の数が最小数よりも少ないことを判断するステップを含むことを特徴とする、方法。
【請求項２】
前記方法は、記憶領域を解放するための条件が満たされているかどうかを判断するステップをさらに含み、
特定の部分を選択する前記ステップは、記憶領域を解放するための前記条件が満たされていると判断された場合にのみ行なわれる、請求項１に記載の方法。
【請求項３】
使用状況を判断する前記ステップは、前記記憶領域を消費する文書のすべての部分による前記記憶装置の全体の使用状況を判断するステップをさらに含み、
記憶領域を解放するための条件は、全記憶領域の使用が、限られた記憶領域よりも少ないしきい値を上回ることを含む、請求項２に記載の方法。
【請求項４】
前記最小数は１である、請求項１〜３のいずれかに記載の方法。
【請求項５】
特定の部分を選択する前記ステップは、未完了動作の数が最小数よりも少ない、複数の部分のうちの最も以前に使用された特定の部分を選択するステップをさらに含む、請求項
１〜４のいずれかに記載の方法。
【請求項６】
特定の部分により消費される記憶領域を解放する前記ステップは、
特定の部分の内容が永続的ストレージに、文書の異なる部分とは別個に存在しているかどうかを判断するステップと、
内容が永続的ストレージに、異なる部分とは別個に存在していないと判断された場合には、特定の部分により消費される記憶領域を解放する前に、内容を永続的ストレージに、異なる部分とは別個に書込むステップとを含む、請求項１〜５のいずれかに記載の方法。
【請求項７】
特定の部分により消費される装置リソースを解放する前記ステップは、内容が永続的ストレージに、異なる部分とは別個に存在すると判断された場合には、内容を永続的ストレージに書込むことなく、特定の部分により消費される装置リソースを解放するステップを行なうステップをさらに含む、請求項６に記載の方法。
【請求項８】
永続的ストレージは、ファイルシステムにおけるファイルである、請求項６または請求項７に記載の方法。
【請求項９】
永続的ストレージは、データベースシステムにおけるデータベースオブジェクトである、請求項６または請求項７に記載の方法。
【請求項１０】
文書に関連する型定義文書から文書の階層要素を判断するステップと、
階層要素に基づいて、文書の複数の部分を判断するステップとをさらに含む、請求項１〜９のいずれかに記載の方法。
【請求項１１】
文書は拡張可能マークアップ言語（ＸＭＬ）文書である、請求項１〜１０のいずれかに記載の方法。
【請求項１２】
文書はＸＭＬ文書であり、型定義文書は文書型定義（ＤＴＤ）文書である、請求項１０に記載の方法。
【請求項１３】
文書はＸＭＬ文書であり、型定義文書はＸＭＬスキーマ文書である、請求項１０に記載の方法。
【請求項１４】
記憶領域を解放する前記ステップは、永続的ストレージにおける特定部分への参照を返すステップをさらに含む、請求項６〜９のいずれかに記載の方法。
【請求項１５】
マークアップ言語に従って構成された内容を有する文書のデータをプロセッサが取り扱うための方法であって、
データの取り扱いが前記文書の複数の部分の取り扱いを含むことを判断するステップを含み、前記複数の部分は、１つ以上の部分の第１の組と１つ以上の部分の第２の組とを有しており、各部分はマークアップ言語の１つ以上の構成体に基づいており、前記方法はさらに、
前記データの取り扱いの実行中に以下の処理を行なうステップを含み、前記以下の処理は、
前記文書の１つ以上の部分の前記第１の組を揮発性メモリにロードするステップ、
前記データの取り扱いの完了前に、前記文書の１つ以上の部分の前記第１の組の各部分について、前記文書の１つ以上の部分の前記第１の組の各部分に対する未完了動作の数を判断するステップを含む、当該部分がどのくらいアクセスされているかを示す使用状況を判断するステップ、
前記データの取り扱いの完了前に、特定の部分に対する未完了動作の数が最小数より
も少ないことを判断するステップを含む、揮発性メモリの記憶領域の消費を止めるために、前記第１の組における少なくとも１つの部分を、前記使用状況に基づき選択するステップ、および、
前記データの取り扱いの完了前でかつ前記少なくとも１つの部分の選択後に、前記文書の１つ以上の部分の前記第２の組を揮発性メモリにロードするために、前記少なくとも１つの部分を保持した揮発性メモリを解放するステップを含む、方法。
【請求項１６】
前記文書は、コンピュータ装置の揮発性メモリを上回るサイズを有する拡張可能マークアップ言語（ＸＭＬ）文書であり、
前記データの取り扱いは、ＸＭＬ文書を表わすデータのストリームをコンピュータ装置の揮発性メモリに受取ることによって、コンピュータ装置の揮発性メモリに文書をロードすることを伴い、
少なくとも１つの部分を選択するステップは、１つ以上のＸＭＬ構成体に基づいて文書の複数の部分のうちのある特定の部分を判断するステップを含み、
前記方法はさらに、
ＸＭＬ文書のすべてが揮発性メモリに受取られる前に、特定の部分を永続的ストレージに別個に記憶するステップと、
揮発性メモリにおいて、特定の部分についてのロケータを、特定の部分が基づいている少なくとも１つのＸＭＬ構成体についての親ノードに対応しているＸＭＬ構成体と関連付けるステップとを含む、請求項１５に記載の方法。
【請求項１７】
１つ以上のプロセッサにより実行される際、１つ以上のプロセッサに請求項１〜１６のいずれかに記載の方法を実行させる、命令の１つ以上のシーケンスを格納したコンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００２】
発明の分野
この発明は、装置にとって利用可能な限定されたリソースに対応する、任意に大きな文書内のデータにアクセスするための手法に関し、特に、利用可能なメモリが明示できるものよりも大きなＸＭＬ文書で記憶されたデータを処理することに関する。
【背景技術】
【０００３】
発明の背景
情報を電子的にやり取りする業務の数は急増している。情報をやり取りする業務は、データを表現するための共通基準に対する必要性を認識してきた。拡張可能マークアップ言語（ＸＭＬ）は急速に、データを表現するための共通基準になりつつある。
【０００４】
ＸＭＬは、ここにＸＭＬ文書と呼ばれる、ファイルまたはデータパケットといったデータの本体を記載し、それに構造を提供する。ＸＭＬ基準は、ＸＭＬ要素または単に「要素」と呼ばれる、ＸＭＬ文書のセクションの範囲を定めるタグを提供する。
【０００５】
要素は、要素属性および他の要素を含むさまざまな種類のデータを含んでいてもよい。別の要素によって含まれる要素は、その要素の子孫と呼ばれる。属性および子孫要素を含む要素を定義することにより、ＸＭＬ文書は、要素、その子孫要素、およびその属性間の親子階層関係を定義する。
【０００６】
ノードという用語は、ＸＭＬ文書における個々の要素および要素属性を指すために使用される。このため、ＸＭＬ文書は、親子関係を有するノードの階層を定義する。そのような階層はここにノードツリーまたはノード階層と呼ばれる。
【０００７】
属性という用語はここでは、構造の別個の部分または要素、たとえばオブジェクト指向の方法に従ったオブジェクト型に属するオブジェクトまたはデータ構造を指すために使用される。属性は、ここに属性のメンバーと呼ばれる、１つ以上の他の属性を含む複合構成体であってもよい。ＸＭＬ基準は、名前と値のペアの形の要素属性を提供する。ここに使用されるような属性という用語の意味は要素属性を包括するものの、この用語はそう限定はされない。
【０００８】
業界基準は、ＸＭＬ文書を表現するための構造を定義している。そのような１つの基準は、ワールドワイドウェブ・コンソーシアム（Ｗ３Ｃ）によって公布されているドキュメントオブジェクトモデル（ＤＯＭ）である。
【０００９】
コンピュータがＸＭＬ文書上で作動するために、ＸＭＬ文書のインメモリ表現が生成される。一般に、ＸＭＬ文書は、記憶装置（たとえばＸＭＬエンティティを含むファイルを記憶するディスク）から、または通信チャネルを通して受取られたデータからロードされて、ＸＭＬ文書を表現するために使用されるインメモリデータ構造を生成する。インメモリデータ構造は、ソフトウェアおよびプログラムを実行するコンピュータプロセスによって操作される。ＸＭＬ文書をメモリにロードし、ＸＭＬ文書のインメモリ表現を生成する
プロセスは、明示、またはＸＭＬ文書を明示することと呼ばれる。通常、アプリケーションは、ＡＰＩを介し、明示によって作り出されたインメモリデータ構造にアクセスし、それを操作する。
【００１０】
明示のための従来のアプローチの下では、ＸＭＬ文書が明示される場合、ＸＭＬ文書全体が明示される。ＸＭＬ文書は非常に大きい場合があり、このため、それらを明示する際に著しい量のメモリを必要とする。ＸＭＬ文書の中には、非常に大きくて、それらを明示するために必要なメモリがそれらに割当てられたメモリを大幅に上回るものもあり、また、多くのコンピュータの容量も大幅に上回り得るものもある。
【００１１】
前述の事項に基づき、ＸＭＬ文書を明示するために必要なメモリの量を低減させるメカニズムを提供することが望ましい。
【００１２】
米国特許出願連続番号第１０／２５６，７７７号に記載された一アプローチでは、ＸＭＬ文書は、データベースシステムのデータベースオブジェクトに別個に記憶され得る複数のロード可能ユニットに分解される。次に、プロセスがＸＭＬ文書からのデータを明示しようとする際、対象となるデータを含むロード可能ユニットのみが、データベースからメモリにロードされる。ＸＭＬ文書全体は明示されない。ロード可能ユニットは、ＸＭＬ文書における１つ以上のノードの組である。ロード可能ユニットの１ノードが明示されると、ロード可能なユニットの全ノードも明示される。ロード可能ユニットは、永続的ストレージにノードを記憶する内容構造に相関していてもよいが、必ずしもそうでなくてもよい。
【００１３】
米国特許出願連続番号第１０／２５６，７７７号のシステムは多くの目的にとって有用であるが、動作の中には、別個に記憶されロードされたロード可能ユニットを利用できないものもある。そのような動作は引続き過度の量のメモリを必要とし、大きなＸＭＬ文書に対応していない。そのような動作は、大きなＸＭＬ文書のロード可能ユニットの多くま
たはすべてに関心を示す動作、および、大きなＸＭＬ文書全体をデータベースシステムなどの永続的ストレージに最初に挿入する動作を含む。
【００１４】
前述の事項に基づき、利用可能なメモリを上回るＸＭＬ文書の十分なロード可能ユニットを伴う動作によって必要とされるメモリの量を低減させるための手法を提供することが望ましい。
【００１５】
加えて、米国特許出願連続番号第１０／２５６，７７７号のアプローチは、メモリにロードされるロード可能ユニットの内容がそこでは変えられず、そのためロード可能ユニットが、そのロード可能ユニットを永続的ストレージから再ロードすることによって常時置換えられ得る、ということを仮定している。しかしながら、多くの動作では、ロード可能ユニットの１つ以上は、それらが永続的ストレージに別個に記憶したものとは異なる内容をメモリに有する。たとえば、データベースシステムへの最初の挿入中、メモリに最初にロードされるどのロード可能ユニットも、永続的ストレージ上のデータベースにおいて別個に記憶されたユニットとして存在していない。そのようなロード可能ユニットは「ダーティ」であると言われる。米国特許出願連続番号第１０／２５６，７７７号のアプローチは、ダーティなロード可能ユニットには好適ではない。
【００１６】
前述の事項に基づき、ＸＭＬ文書のダーティなロード可能ユニットを伴う動作中に情報を保持するための手法を提供することがさらに望ましい。
【００１７】
この項に記載された過去のアプローチは追求可能であるが、それらは必ずしも、以前に考えられまたは追求されたアプローチであるとは限らない。したがって、ここに特に示されていない限り、この項に記載されたアプローチは、この背景の項に存在するというだけの理由で、本出願の請求項に対する先行技術として考えられるべきではない。
【００１８】
この発明を、添付図面の図において、限定のためではなく例示のために説明する。図中、同じ参照番号は同様の要素を指す。
【発明を実施するための最良の形態】
【００１９】
発明の詳細な説明
限定されたリソースを有する装置により、大きな文書内のデータにアクセスするための方法および製品が記載される。以下の記載では、説明のため、数多くの特定の詳細がこの発明の完全な理解を提供するために述べられる。しかしながら、この発明がこれらの特定の詳細なしで実践され得ることは明らかである。他の点では、この発明を不必要に不明瞭にしないよう、周知の構造および装置はブロック図の形で示される。
【００２０】
この発明の実施例が、メモリに十分に明示された場合にはデータベースサーバ上で利用可能なメモリの量を超えるＸＭＬ文書のすべてまたは一部を用いるという状況で、ここに説明される。しかしながら、この発明はこの状況に限定されない。この発明の他の実施例は、サーバがデータベースサーバではないものの、ＸＭＬ文書に基づいて他のサービスを提供している他の状況に適用されてもよい。さらに他の実施例では、ＸＭＬ文書は、サーバではないスタンドアローンのアプリケーション、つまり別個のクライアントプロセスからの要求に応じないアプリケーションへの入力として使用されてもよい。実施例によっては、アクセスされる文書はＸＭＬ文書ではなく、別のマークアップ言語に従った多数の構成体でできた文書である。実施例によっては、限定されているのはメモリではなく、何か他のリソース、たとえば、文書を処理するアプリケーションのホストコンピュータに接続された入力または出力装置上のバッファ、もしくは文書が送信されるネットワーク接続上の帯域幅である。
【００２１】
例示されている実施例では、ＸＭＬ文書の別個にアクセス可能な部分（たとえば米国特許出願連続番号第１０／２５６，７７７号の「ロード可能ユニット」ＬＵ）がメモリにロードされ、それらの部分の使用が監視される。追加のメモリが望まれる場合、それらの部分の１つ以上に割当てられたメモリが、使用に基づいて解放される。たとえば、最も以前に使用された部分に割当てられたメモリが解放される。割当てられたメモリを失う部分は、メモリから「アンロードされる」と言われる。実施例によっては、アンロードされる部分がダーティである場合（たとえば、データベースの１つ以上のコンテナに、ロード可能ユニットといった別個の部分として永続的に記憶されてはいないデータを含む場合）、その部分は、メモリが文書の別の部分に再割当される前に永続的に記憶される。各ロード可能ユニットは永続的ストレージから独自にアクセス可能であるため、ロード可能ユニットはその後、それが再び使用される場合、永続的ストレージから検索され得る。実施例によっては、この部分は、データベースのオブジェクトリレーショナルデータベース構造に直接、永続的に記憶される。実施例によっては、この部分は、永続的記憶装置の一時ファイルに永続的に記憶される。
【００２２】
この発明の手法により、限定されたリソースを有する文書処理装置はスケールアップして、さもなければ利用可能なリソースを上回ってしまう大きな文書を処理するようになる。これは、利用可能なメモリでは十分明示できない大きなＸＭＬ文書を、多数のロード可能ユニットとしてデータベースまたは他の永続的記憶装置に最初に挿入する際、利点である。これはまた、動作がメモリに一度に明示可能なものを上回る部分を伴う場合、または動作がロード可能ユニットの内容を修正する場合に、大きなＸＭＬ文書の異なる部分が永続的なデータ記憶装置に別個に挿入された後でも、利点である。そのような動作の一例は、提示用の文書全体をグラフィカルデータベース上でＸＭＬスタイルシートを用いてフォーマット化する動作、および、大きなＸＭＬ文書の任意の要素を編集する動作である。
【００２３】
構造的概要
図１は、一実施例に従った、利用可能なメモリを上回るＸＭＬ文書を処理するＸＭＬ処理システム１００においてサーバによって使用されるデータ構造を示すブロック図である。このシステム１００はデータベースサーバ１２０を含み、それは、ＸＭＬ文書を処理するために割当てられたサーバ高速メモリ１５０を含む。ここで使用されるように、高速メモリという用語は、データおよび命令をプロセッサ外部に記憶させるためにプロセッサが最も容易に利用できるメモリを指す。現在の技術では、この目的のために使用されるメモリは迅速な応答時間を有するが、このメモリへの電力が失われると、データはそのようなメモリにおいて持続されない。高速メモリは他の種類のメモリよりも価格が高い傾向にあり、そのため、それは往々にして他の種類のメモリよりも少ない。サーバ１２０は、サーバ永続的ストレージ１３０を提供する１つ以上の永続的記憶装置も含む。現在の技術では、そのような永続的ストレージは、電力が失われてもデータを保持するが、そのようなストレージは遅く、プロセッサ用の最も容易に利用可能なメモリとしての使用には望ましくない。永続的ストレージは、一時的ストレージ１３２用に確保された記憶領域と、データベース記憶空間１４０用に使用される記憶領域とを含む。
【００２４】
データベース記憶空間１４０は、以下にオブジェクトリレーショナル構造１４４として総称される、１つ以上のオブジェクトリレーショナル構造１４４ａ、１４４ｂ、および省略記号１４６によって示される他のオブジェクトリレーショナル構造のためのストレージを含む。オブジェクトリレーショナル構造１４４は、データオブジェクトを、１つ以上のリレーショナルデータベースデータ構造、たとえば表、行、列、および記憶された手順に記憶させる。
【００２５】
システム１００はＸＭＬ文書型データ構造１０２を処理し、それは、その型のインスタンスであるＸＭＬ文書によって使用され得る各要素型の属性を定義する。データ構造は、後の項でより詳細に記載される、サーバ１２０によって読み取り可能な任意のコンピュータ読み取り可能な媒体、たとえば取外し可能な磁気ディスクまたは光ディスク上に、または通信チャネルにわたって存在していてもよい。データベース記憶空間１４０は、１つ以上のオブジェクトリレーショナル構造１４４でのデータオブジェクトとＸＭＬ文書に使用
される要素属性または要素との間のマッピング１４２を含む。システム１００は、当該技術分野において公知の任意のメカニズムを用いて、ＸＭＬ文書型データ構造１４２の内容に基づいてマッピング１４２の内容を生成する。実施例によっては、オブジェクトリレーショナル構造は、ＸＭＬ文書型データ構造１０２の内容に基づいて、実際に定義され、作成される。一実施例では、米国特許出願連続番号第１０／２５６，７７７号に記載されたメカニズムを採用して、ＸＭＬ文書型データ構造の要素および属性をオブジェクトリレーショナルデータ構造１４４のデータオブジェクトにマッピングする。
【００２６】
ＸＭＬ文書１１０は、データ構造１０２で定義された型のインスタンスである。ＸＭＬ文書１１０は、１つ以上の属性を各々含み得る１つ以上の要素を含んでおり、その各々は、文書型データ構造１０２で定義されるように、別の要素であってもよい。ＸＭＬ文書１１０はこのため、ノードのある特定の階層を設立し、この場合、各子ノードはその親ノードの属性を表わし、各属性はその型にとって適切な値を有する。
【００２７】
例示のため、ＸＭＬ文書１１０が、要素１１２ａによって表わされる１つの属性と要素１１２ｂによって表わされる別の属性とを含む、いくつかの属性を有すると仮定される。さらに、要素１１２ａが、要素１１４ａ、１１４ｂ、１１５、および省略記号１１３により表わされる他の要素によって表わされる属性を含む、いくつかの属性を有すると仮定される。さらに、要素１１４ａ、１１４ｂは図示されていない他の要素を含む他の属性を含み得ると仮定される。また、要素１１５が、ＸＭＬ型データ構造１０２によりさらに分割されたり定義されたりしないデータのブロックであり、それが「不透明」要素と呼ばれ、かなり大きい場合がある、ということを仮定される。たとえば、不透明要素１１５は、発
注契約書の条項の長い記載用のテキストを含むかもしれず、または、遺伝子コードシーケンスを表わす文字列を含むかもしれない。さらに、要素１１２ｂが、要素１１６、１１７、および省略記号１１８により表わされる他の要素によって表わされる属性を含む、いくつかの属性を有すると仮定される。
【００２８】
サーバは、以下にロード可能ユニット（ＬＵ）データ構造１５２として総称される、１５２ａ、１５２ｂ、および省略記号１５３により表わされる他のＬＵデータ構造といった、１つ以上のＬＵデータ構造を設立する。処理中、ＸＭＬ文書１１０の１つ以上のノード用のデータは、永続的ストレージ１３０への記憶のために、メモリ１５０においてＬＵに変換される。ＬＵの中には、属性の値がＬＵに含まれるものもある。ＬＵの中には、子要素などの属性についての値がＬＵに含まれないものもある。その代わり、他の属性はそれ自体、異なるＬＵである。ロケータは、永続的ストレージ１３０での異なるＬＵについての場所を示す。異なるＬＵ用のロケータは、親ＬＵに含まれている。このため、ＬＵは、ＸＭＬツリーの残りを、親ＬＵのノードを越えるノードにロードするのに十分な情報を含んでいる。親ＬＵのロケータによって示されるＬＵは時折、「アウトオブライン」ＬＵと呼ばれる。なぜなら、それはしばしば、親ＬＵを記憶するデータ構造とは異なる１つ以上のデータ構造に記憶されるためである。
【００２９】
サーバ１２０はまた、ＬＵデータ構造１５２におけるデータの使用を記録するための使用データ構造１５６も設立する。たとえば、使用データ構造１５６は、サーバ１２０上でのプロセスがメモリ１５０のある特定のＬＵデータ構造１５２内のデータについて終わっているかどうかを示す第１のデータ項目を含んでいる。実施例の中には、使用データ構造が、特定のＬＵデータ構造１５２内のデータが最後に使用された相対時間を示す第２のデータ項目を含むものもある。
【００３０】
サーバ１２０はまた、ロケータデータ構造１５８も設立する。ロケータデータ構造１５８は、ある特定のＬＵが永続的ストレージ１３０のどこに記憶されているかを示すロケータを保持し、そのロケータをＬＵ名などのＬＵ識別子と関連付ける。たとえば、ロケータは、一時的ストレージ１３２内のラージオブジェクト（ＬＯＢ）に書込まれたデータについてのファイル名およびオフセットを示す。別の例では、ロケータは、データベース記憶空間１４０の１つ以上のオブジェクトリレーショナル構造１４４における、行などのデータ項目を示す。オブジェクトリレーショナル構造１４４は、とりわけ、データベースＬＯＢ構造を含んでいてもよい。
【００３１】
機能的概要
図２は、一実施例に従った、利用可能なメモリを上回るＸＭＬ文書を処理するための高レベルの方法２００を示すフローチャートである。図２ではステップがある特定の順序で示されているが、他の実施例では、ステップは異なる順序で行なわれてもよく、または時間が重複していてもよい。
【００３２】
ステップ２０２で、ある文書についてのロード可能ユニットが、ＸＭＬ文書型データ構造１０２における要素型定義に基づいて判断される。ＸＭＬについての基準は、ＸＭＬ文書の構造を特定するためのスキーマ言語を定義し、その言語はデータ構造１０２において使用されてもよい。ＸＭＬ文書型データ構造１０２で定義された構造はここで、ＸＭＬスキーマと呼ばれる。データベースサーバ１２０は、ＸＭＬ文書型データ構造１０２を解釈して、ＸＭＬスキーマをサポートするために必要なオブジェクトリレーショナル構造１４４を作成または修正する能力を有する。たとえば、ＸＭＬスキーマ構成体＜complexType＞は、データベースのあるオブジェクト型にマッピングされる。ＸＭＬスキーマにおける追加のユーザ注釈が、特定の記憶パラメータを特定するために使用され、このため、ＸＭＬ文書の一部が追加の表、ラージオブジェクト（ＬＯＢ）および他のデータベースコンテ
ナに記憶されるようにする。他の実施例では、異なるサーバが、ＸＭＬ文書型データ構造１０２を解釈して、ＸＭＬスキーマをサポートするために必要な他のデータコンテナを作成または修正する能力を有する。
【００３３】
ステップ２１０で、ロード可能ユニット（ＬＵ）が、ＸＭＬ文書の処理に割当てられた高速メモリ１５０にロードされ、ＬＵデータ構造１５２内に記憶される。ＬＵは、データベース記憶空間１４０のデータベースから、または一時的ストレージ１３２から、もしくは何らかの他のコンピュータ読み取り可能な媒体上のＸＭＬ文書１１０から検索されてもよい。１つ以上の属性用のロケータを使用するＬＵが一時的ストレージ１３２またはＸＭＬ文書１１０からロードされる際、そのロケータについての値がまだ、データベースにおけるその属性の場所について設定されていない場合がある。そのような場合、ＬＵに対応する第１の要素の名前といった、ロケータについての一時的な値が使用される。
【００３４】
たとえば、例示のため、要素１１２ａが１つのロード可能ユニットに対応し、要素１１４ａ、１１４ｂ、および１１５が各々異なるロード可能ユニットであると仮定される。このため、要素１１２ａ用のＬＵは、要素１１４ａ、１１４ｂおよび１１５に対応する属性についての実際の値の代わりに、ロケータを使用する。要素１１２ａがサーバ１２０によって新しいＸＭＬ文書１１０から読出されると、この要素を保持するためにＬＵデータ構造１５２（たとえば１５２ｂ）がメモリ１５０に生成されるが、要素１１４ａ、１１４ｂ、１１５はまだ永続的ストレージ１３０に読込まれたり記憶されていないため、これらのＬＵを保持するＬＵデータ構造については、ロケータはまだ定義されていない。これらの要素が読出されると、ＬＵデータ構造が作成される。
【００３５】
ステップ２２０で、メモリデータ構造１５２に記憶されたＬＵについて使用が判断され、その使用は使用データ構造１５６に記憶される。一実施例では、使用データ構造１５６は、メモリ１５０内の各ＬＵデータ構造について、ＬＵメモリアドレスフィールド（以下“ＭＥＭ＿ＡＤＤＲ”と示す）、カウントフィールド（以下“ＣＯＵＮＴ”と示す）、および時間フィールド（以下“ＴＩＭＥ”と示す）を含む。実施例の中には、使用データ構造１５６がＬＵデータ構造１５２から分かれており、各ＬＵデータ構造１５２について、別個の記録が使用データ構造１５６に含まれるものもある。ＬＵデータ構造１５２がメモリ１５０内に作成されると、行がこれらのフィールドにおける値とともに使用データ構造１５８に追加される。ＭＥＭ＿ＡＤＤＲフィールドについての値は、メモリ１５０のどこからＬＵデータ構造１５２が始まるかを示している。ＣＯＵＮＴフィールドについての値は「１」に設定されて、１つのプロセス（この場合、データ構造を作成中のプロセス）がＬＵデータ構造を使用中であることを示している。ＴＩＭＥフィールドについての値は現在のシステム時間に設定されて、ＬＵデータ構造が最後にいつ使用されたかを示している。
【００３６】
他の実施例では、使用データ構造１５６において、より多い、またはより少ないフィールドが使用される。たとえば、実施例によっては、各ＬＵデータ構造１５２についてサイズフィールド（以下“ＳＩＺＥ”と示す）が含まれて、ＬＵデータ構造１５２のサイズを示す。実施例によっては、各ＬＵデータ構造１５２についてダーティフラグフィールド（以下“ＤＩＲＴＹ”フィールドと示す）が含まれて、ＬＵの内容がダーティかどうか、つまり永続的ストレージ１３０上のそのＬＵの内容ともしかすると異なるかどうかを示す。ＤＩＲＴＹフィールドは、２つの値のうちの１つを保持する。一方の値は、対応するＬＵがダーティであることを示し、他方の値は、対応するＬＵがダーティではないことを示している。
【００３７】
実施例によっては、使用データ構造１５６はＬＵデータ構造１５２の一部である。そのような実施例では、ＭＥＭ＿ＡＤＤＲフィールドは省略されてもよく、ＬＵデータ構造１
５２がメモリ１５０内に作成されると、上述のように、値は使用データ構造１５６の他のフィールドに記憶される。
【００３８】
ＬＵデータ構造１５２を使用するサーバ１２０のプロセスが始まる際にはいつでも、そのＬＵに対応するＣＯＵＮＴフィールドの値は１ずつインクリメントされ、そのＬＵに対応するＴＩＭＥフィールドの値は更新される。ＬＵデータ構造を使用するプロセスの開始を以下に、そのＬＵデータ構造の「タッチ」と呼ぶ。ＬＵデータ構造１５２を使用するサーバ１２０のプロセスが終了する際にはいつでも、そのＬＵに対応するＣＯＵＮＴフィールドの値は１ずつデクリメントされ、そのＬＵに対応するＴＩＭＥフィールドの値は更新される。たとえば、ＸＭＬ文書１１０からデータを単にロードするプロセスは、ＬＵデータ構造１５２が作成される場合には対応するＣＯＵＮＴの値を１にし、ＬＵがデータ構造１５２に十分にロードされた場合にはＣＯＵＮＴの値をゼロにデクリメントする。属性に対応するＬＵがロードされるやいなや、親ＬＵは十分にロードされたと考えられる。
【００３９】
例示された実施例では、使用データ構造１５６は、アンロード可能ユニットのリストを含む。ＣＯＵＮＴフィールドの値がゼロに達すると、対応するＬＵデータ構造がリストに追加される。ＬＵをリスト上に示すために、任意の方法が使用されてもよい。一例では、リストのＬＵは、そのメモリアドレスによって示される。他の例では、ゼロ以外のＣＯＵＮＴフィールドの値を用いて、ＬＵデータ構造に、アンロード可能ユニットのリストに含まれるよう資格を与えてもよい。このリストを使用する実施例は、使用データ構造１５６にＴＩＭＥフィールドを維持する必要はない。なぜなら、ＬＵデータ構造がアンロード可能ユニットのリストに、アンロード可能になった最初から最後までの時間順で追加されるためである。
【００４０】
ステップ２３０で、１つ以上のＬＵデータ構造１５２に割当てられたメモリを解放するための条件が満たされているかどうかが判断される。例示された実施例では、メモリを解放するための条件は、ＬＵデータ構造１５２によるメモリ１５０の全使用がしきい値を上回ることである。しきい値は通常、割当てられた全メモリよりも少なくなるよう選択される。たとえば、メモリを解放するための条件は、メモリ１５０の７５％以上がＬＵデータ構造１５２によって消費されることであってもよい。消費される全メモリは、使用データ構造１５６のＳＩＺＥフィールドの値をすべて加算することによって計算されてもよい。ステップ２３０でメモリを解放するための条件が満たされていないと判断された場合、制御はステップ２１０に戻り、次のＬＵを高速メモリにロードする。ステップ２３０でメモリを解放するための条件が満たされていると判断された場合、制御はステップ２４０に渡る。
【００４１】
ステップ２４０で、ＬＵデータ構造の１つ以上が、使用に基づいて、アンロードされるよう選択される。たとえば、最も以前に使用されたＬＵデータ構造が、アンロードされるよう選択される。最も以前に使用されたＬＵデータ構造は、ＴＩＭＥフィールドの最初の値に対応するＬＵデータ構造１５２を見つけることによって判断することができる。
【００４２】
実施例によっては、プロセスにより依然として使用中のＬＵをアンロードしないよう、ゼロのＣＯＵＮＴ値を有するＬＵデータ構造のみがアンロード用に考慮される。いくつかのそのような実施例では、上述されたアンロード可能なユニットのリストからのみ、最も以前に使用されたＬＵが判断される。最も以前に使用されたＬＵデータ構造は、アンロード可能ユニットのリストに示された最初のＬＵデータ構造である。
【００４３】
ステップ２５０で、選択されたＬＵデータ構造に割当てられたメモリが解放される。実施例によっては、ステップ２５０はステップ２５２、２５４、２５６を含む。
【００４４】
ステップ２５２で、選択されたＬＵデータ構造１５２の内容が永続的ストレージに別個に記憶されているかどうかが判断される。各ＬＵデータ構造１５２に関連するＤＩＲＴＹフィールドを用いた実施例では、ステップ２５２は、ＬＵデータ構造１５２がダーティではないことをＤＩＲＴＹフィールドが示すかどうかを判断することによって行なわれてもよい。選択されたＬＵデータ構造１５２がダーティではないと判断された場合、制御は、永続的ストレージに内容を書込むことなく、以下に記載するステップ２５６に渡る。
【００４５】
ステップ２５２で選択されたＬＵデータ構造がダーティであると判断された場合、制御はステップ２５４に渡る。ステップ２５４で、ＬＵデータ構造１５２のＬＵ内容は、永続的ストレージ１３０のＬＵデータ構造に書込まれる。実施例によっては、ＬＵは一時的ストレージ１３２のデータ構造に書込まれる。実施例によっては、ＬＵはデータベース記憶空間１４０のオブジェクトリレーショナル構造１４４に書込まれる。いずれの、または他の実施例でも、永続的ストレージ１３０におけるＬＵについての場所を示すロケータが返され、そのため、ＬＵは後でメモリ１５０に再ロードされ得る。例示された実施例では、返されたロケータはロケータデータ構造１５８に記憶され、そこでロケータは、ＬＵ名または第１の対応するＸＭＬ要素の名前といったＬＵ識別子に関連付けられる。
【００４６】
ステップ２５６で、高速メモリ１５２の選択されたＬＵデータ構造１５２に割当てられたメモリは割当解除され、異なるＬＵデータ構造への割当用に利用可能となる。実施例によっては、このステップは、使用データ構造１５６から、選択されたＬＵデータ構造に対応する使用情報を削除するステップを含む。制御は次にステップ２３０に戻って、メモリを解放するための条件が依然として満たされているかどうかを判断する。
【００４７】
これらの手法により、限定されたリソース、たとえば限定された量の高速メモリを有する装置は、任意に大きいサイズの文書を処理するようスケールアップするようになる。この能力は、利用可能なメモリでは十分に明示できない大きなＸＭＬ文書を、多数のロード可能ユニットとしてデータベースまたは他の永続的記憶装置に最初に挿入する際、利点である。この能力はまた、動作がメモリに一度に明示可能なものを上回る部分を伴う場合、たとえばＸＭＬスタイルシート（ＸＳＬ）文書に特定されたスタイルにあてはまるよう、ＸＭＬ文書全体を処理する際に、大きなＸＭＬ文書の異なる部分が永続的データ記憶装置に別個に挿入された後でも、利点である。これらの２つの場合についての例示された実施例の使用を、次の２つの項に記載する。
【００４８】
ＸＭＬ文書のデータベースへの挿入
この場合を例示するために、データベースのオブジェクトリレーショナル構造１４４がステップ２０２中に、ＸＭＬ文書型データ構造１０２に提示されたＸＭＬスキーマに基づいて既に作成または修正されていると仮定される。さらに、ＸＭＬ文書１１０が何らかの外部源から、たとえば通信チャネルを通して、または取外し可能な光ディスクから受取られて、データベースに挿入されると仮定される。さらに、サーバ高速メモリ１５０が文書１１０を処理するために割当てられていると仮定される。さらに、使用データ構造１５６のＣＯＵＮＴフィールド、ＳＩＺＥフィールド、およびＤＩＲＴＹフィールドが各ＬＵデータ構造に含まれ、使用データ構造１５６が、ＬＵデータ構造１５２の外部に、ＣＯＵＮＴ値がゼロであるＬＵデータ構造を示すアンロード可能ユニットのリストを含むことを仮定される。ＬＵデータ構造は、ＬＵデータ構造１５２の最初のバイトのメモリアドレスによって、リストにおいて識別される。さらに、この文書に割当てられた高速メモリ１５０の量は２ミリオンバイト（２ＭＢ）であり、ロード可能ユニットをアンロードするためのしきい値は１．５ＭＢであると仮定される。
【００４９】
ステップ２１０の最中、サーバ１２０は、以下“ＬＵ−Ａ”と呼ばれる第１のＬＵデータ構造１５２ａを作成し、ＸＭＬ階層における最高ノード、文書１１０についての文書レ
ベルノードを記憶する。ＣＯＵＮＴフィールドは値１で初期化される。ＤＩＲＴＹフィールドは値１で開始され、それは、例示のため、ダーティなＬＵデータ構造を示すと仮定される。ＬＵデータ構造ＬＵ−Ａ  １５２ａはダーティである。なぜなら、内容がまだＬＵとして永続的に記憶されていなかったためである。ＳＩＺＥフィールドは、文書レベルＬＵの最小サイズで開始され、それは、文書１１０についてそのスキーマに基づいて予想される要素の最小数までの要素１１２ａ、１１２ｂなどについてのロケータおよび属性の値に対して、十分な余地を含んでいる。例示のため、ＬＵ−ＡのＳＩＺＥは０．０１ＭＢであると仮定される。サーバ１２０は、ＸＭＬ文書１１０の最初の数ラインを処理し、文書の属性の値をＬＵ−Ａ、１５２ａにロードする。サーバは次に、要素１１２ａ、１１２ｂに関連するアウトオブラインＬＵについてのロケータが判断される前に、要素１１２ａを開始するＸＭＬ文書のラインに来る。このため、ロードするプロセスはＬＵ−Ａでは終わらず、ＣＯＵＮＴは１の値に設定されたままである。
【００５０】
ステップ２２０の最中、ＬＵデータ構造１５２によって使用される全メモリがＬＵ−ＡのＳＩＺＥであることが判断される。使用データ構造１５６におけるアンロード可能ユニットのリストは空である。ステップ２３０で、この量のメモリ（０．０１ＭＢ）がしきい値１．５ＭＢを上回っていないことが判断され、制御はステップ２１０に戻って次のＬＵのロードを開始する。
【００５１】
ステップ２１０のこの繰返しの最中、サーバ１２０は、以下“ＬＵ−Ｂ”と呼ばれる第２のロード可能ユニットデータ構造１５２ｂを作成して、要素１１２ａに関連するノードを記憶する。ＣＯＵＮＴフィールドおよびＤＩＲＴＹフィールドは各々、値１で初期化される。ＳＩＺＥフィールドは、要素１１２についてのＬＵの最小サイズで開始され、要素１１２ａについてそのスキーマに基づいて予想される要素の最小数までの要素１１４ａ、１１４ｂ、１１５についてのロケータおよび属性の値に対して、十分な余地を含んでいる。例示のため、ＬＵ−ＢのＳＩＺＥは０．１ＭＢであると仮定される。サーバ１２０は、要素１１２ａの最初の数ラインを処理し、要素の属性の値をＬＵ−Ｂ、１５２ｂにロードする。サーバは次に、要素１１４ａ、１１４ｂ、１１５に関連するアウトオブラインＬＵについてのロケータが判断される前に、要素１１４ａを開始するＸＭＬ文書のラインに来る。このため、ロードするプロセスはＬＵ−Ｂでは終わらず、ＣＯＵＮＴは１の値に設定されたままである。
【００５２】
ステップ２２０の次の繰返しの最中、ＬＵデータ構造１５２によって使用される全メモリがＬＵ−ＡおよびＬＵ−ＢのＳＩＺＥであることが判断される。使用データ構造１５６におけるアンロード可能ユニットのリストは空である。ステップ２３０の次の繰返しの際、この量のメモリ（０．１１ＭＢ）がしきい値１．５ＭＢを上回っていないことが判断され、制御はステップ２１０に戻って次のＬＵのロードを開始する。
【００５３】
プロセスは、要素１１４ａ、１１４ｂ、１１５を含む１１２ａの子要素に関連する次のＬＵに続く。例示のため、要素１１４ａ、１１４ｂおよび１１５は子要素を含まないこと、および、これら３つの要素のＳＩＺＥフィールドについての値はそれぞれ０．２ＭＢ、０．２ＭＢ、１．１ＭＢであることが仮定される。さらに、要素１１４ｂ、１１５の存在に基づいて、追加のロケータがＬＵ−Ｂに追加され、ＬＵ−ＢのＳＩＺＥフィールドの値がそれにより０．１１に増加することが仮定される。各々がメモリ１５０のＬＵデータ構造ＬＵ−Ｃ、ＬＵ−Ｄ、ＬＵ−Ｅ（図示せず）にそれぞれ完全にロードされるやいなや、ＣＯＵＮＴフィールドの値はゼロにデクリメントされ、３つのＬＵデータ構造のアドレスが、使用データ構造１５６のアンロード可能ユニットのリストに追加される。
【００５４】
ステップ２２０の次の繰返しの最中、ＬＵデータ構造１５２によって使用される全メモリが、ＬＵ−Ａ、ＬＵ−Ｂ、ＬＵ−Ｃ、ＬＵ−ＤおよびＬＵ−ＥのＳＩＺＥフィールドに
おける値の合計であることが判断される。使用データ構造１５６のアンロード可能ユニットのリストは、ＬＵ−Ｃ、ＬＵ−ＤおよびＬＵ−Ｅのメモリアドレスを含む。ステップ２３０の次の繰返しでは、この量のメモリ（１．６２ＭＢ）がしきい値１．５ＭＢを上回らないことが判断され、制御はステップ２４０に戻って、メモリ１５０からアンロードするＬＵデータ構造１５２を選択する。
【００５５】
ステップ２４０で、アンロード可能ユニットのリストにおいて最も以前に使用されたＬＵデータ構造が選択される。リストにおける第１のＬＵデータ構造である、要素１１４ａに対応するＬＵ−Ｃが、最も以前に使用されている。したがって、ＬＵ−Ｃが、アンロードされるＬＵデータ構造として選択される。他の実施例では、他の選択基準が使用されてもよい。たとえば、ＳＩＺＥの最大値（１．１ＭＢ）を有するＬＵデータ構造ＬＵ−Ｅが選択されてもよい。適正な選択は、システムが使用される態様に基づいて判断される。最も直前に使用されたＬＵは再び使用される可能性が最も高く、最も以前に使用されたものは再び使用される可能性が最も低い、ということが予想される。したがって、再びロードされる可能性がより高いＬＵをアンロードしないよう、最も可能性が低いものが選択される。
【００５６】
ステップ２５２で、ＬＵ−Ｃがダーティかどうかが判断される。ＬＵ−ＣがダーティであるとＤＩＲＴＹフィールドの値が示しているため、制御はステップ２５４に渡る。ステップ２５４で、ＬＵ−Ｃはデータベースのオブジェクトリレーショナル構造１４４に書込まれ、ここに“Ｌ−Ｃ”として示されるＬＵ−Ｃ用のロケータが、プロセスにおいて返される。サーバ１２０は、要素１１４ａのために形成されたＬＵへの識別子に関連して、値“Ｌ−Ｃ”をロケータデータ構造１５８に書込む。属性としての要素１１４ａへの未解決の参照を有する、メモリ内のＬＵデータ構造１５２はすべて、このロケータ“Ｌ−Ｃ”を用いることによって、それらの参照を解決させる。その最後の未解決のロケータを受取るＬＵデータ構造はどれも、そのＣＯＵＮＴフィールドをデクリメントさせる。ＬＵデータ構造が、ゼロに達するＣＯＵＮＴ値に関連する場合、ＬＵデータ構造はアンロード可能ユニットのリストに追加される。ステップ２５６で、ＬＵ−Ｃに割当てられたメモリは解放され、そのためそれは別のＬＵデータ構造に割当てられ得る。また、ステップ２５６で、使用データ構造１５６におけるＬＵ−Ｃについての使用情報が削除される。
【００５７】
制御は次にステップ２３０に戻って、メモリ使用が依然としてしきい値を上回るかどうかを判断する。ＬＵデータ構造１５２によって使用される全メモリは、ＬＵ−Ａ、ＬＵ−Ｂ、ＬＵ−ＤおよびＬＵ−Ｅ（ＬＵ−Ｃはなし）のＳＩＺＥフィールドにおける値の合計である。使用データ構造１５６のアンロード可能ユニットのリストは、ＬＵ−Ｄ、ＬＵ−Ｅ（ＬＵ−Ｃはなし）のメモリアドレスを含む。この量のメモリ（１．４２ＭＢ）がしきい値１．５ＭＢを上回らないことが判断され、制御はステップ２１０に戻って、次のロード可能ユニットをメモリ１５０にロードする。
【００５８】
こうして、任意のサイズのＸＭＬ文書が、文書に割当てられた限定量の高速メモリを有するサーバを用いてデータベースに挿入され得る。
【００５９】
実施例によっては、ＸＭＬ文書は、短期間のみ使用されるもののデータベースに永続的には記憶されない非常駐文書である。そのような実施例では、ステップは同様であるが、ステップ２５４での永続的ストレージへの書込中、ＬＵが一時的ストレージのデータ構造に書込まれる点が異なる。このグループの一実施例では、一時的記憶データ構造は、ＬＵが開始する多数のオフセットバイトを有するＬＯＢファイルであり、マッピング１４２は依然としてデータベース内に記憶される。
【００６０】
データベースからのＸＭＬ文書の処理
この場合を例示するために、前の場合に用いた仮定を再度行なうが、ＸＭＬ文書１１０を外部源から得る代わりに、それが既にデータベース内に存在するという点が異なる。このため、アウトオブラインの子ＬＵを使用するＬＵはすべて、その子ＬＵ用の定義されたロケータを有する。さらに、ＸＭＬ文書全体は、ＸＳＬ文書に従ってスタイリングされた提示を形成するよう動作され、スタイリングされた結果は表示装置に送信されることが仮定される。
【００６１】
ステップ２１０の最中、サーバ１２０は、“ＬＵ−Ａ”と呼ばれる第１のロード可能ユニットデータ構造１５２ａを作成して、ＸＭＬ階層における最高ノード、文書１１０についての文書レベルノードを記憶する。ＣＯＵＮＴフィールドは値１で初期化される。ＤＩＲＴＹフィールドは値０で開始され、ダーティではないＬＵデータ構造を示す。内容がデータベースの永続的ストレージから検索されて変更されていないため、ＬＵデータ構造はダーティではない。ＳＩＺＥフィールドは、文書レベルＬＵについての実際のサイズで開始される。サーバ１２０は、ＸＳＬ文書に従ってＸＭＬ文書１１０の最初のいくつかの属性を処理し、宛先である表示装置に結果を送信する。サーバは次に、文書全体がスタイリングされる前に、要素１１２ａのスタイリングを開始しなければならない。このため、スタイリングプロセスはＬＵ−Ａでは終わらず、ＣＯＵＮＴは１の値に設定されたままである。
【００６２】
上述のように、ステップ２２０の最中、ＬＵデータ構造１５２によって使用される全メモリがＬＵ−ＡのＳＩＺＥであることが判断される。使用データ構造１５６におけるアンロード可能ユニットのリストは空である。ステップ２３０で、この量のメモリ（０．０１ＭＢ）がしきい値１．５ＭＢを上回っていないことが判断され、制御はステップ２１０に戻って次のＬＵのロードを開始する。
【００６３】
ステップ２１０のこの繰返しの最中、サーバ１２０は、“ＬＵ−Ｂ”と呼ばれる第２のロード可能ユニットデータ構造１５２ｂを作成して、要素１１２ａに関連するノードを記憶する。ＣＯＵＮＴフィールドおよびＤＩＲＴＹフィールドはそれぞれ、値１、０で初期化される。ＳＩＺＥフィールドは、要素１１２用のＬＵについての実際のサイズで開始される。例示のため、ＬＵ−ＢのＳＩＺＥは０．１１ＭＢであると仮定される。サーバ１２０は、要素１１２ａの最初のいくつかの属性をスタイリングし、宛先表示装置に結果を送信する。サーバは、要素１１２ａのスタイリングを終了する前に、要素１１４ａに対応する属性をスタイリングするようになる。このため、スタイリングプロセスはＬＵ−Ｂでは終わらず、ＣＯＵＮＴは１の値に設定されたままである。
【００６４】
ステップ２２０の次の繰返しの最中、ＬＵデータ構造１５２によって使用される全メモリがＬＵ−ＡおよびＬＵ−ＢのＳＩＺＥであることが判断される。使用データ構造１５６におけるアンロード可能ユニットのリストは空である。ステップ２３０の次の繰返しの際、この量のメモリ（０．１２ＭＢ）がしきい値１．５ＭＢを上回っていないことが判断され、制御はステップ２１０に戻って次のＬＵのロードを開始する。
【００６５】
プロセスは、要素１１４ａ、１１４ｂ、１１５を含む１１２ａの子要素に関連する次のＬＵに続く。上述のように、例示のため、要素１１４ａ、１１４ｂおよび１１５は子要素を含まないこと、および、これら３つの要素のＳＩＺＥフィールドについての値はそれぞれ０．２ＭＢ、０．２ＭＢ、１．１ＭＢであることが仮定される。各々がメモリ１５０のＬＵデータ構造ＬＵ−Ｃ、ＬＵ−Ｄ、ＬＵ−Ｅ（図示せず）にそれぞれ完全にロードされるやいなや、ＣＯＵＮＴは１にインクリメントされ、スタイリングが始まると、ＣＯＵＮＴは再度インクリメントされて２になる。スタイリングが終了すると、ＣＯＵＮＴはデクリメントされて１となり、結果が宛先表示装置に送信されると、ＣＯＵＮＴフィールドは再度デクリメントされてゼロになる。３つのＬＵデータ構造の各々についてＣＯＵＮＴが
ゼロにデクリメントされると、各々のアドレスが使用データ構造１５６のアンロード可能ユニットのリストに追加される。
【００６６】
ステップ２２０の次の繰返しの最中、ＬＵデータ構造１５２によって使用される全メモリが、ＬＵ−Ａ、ＬＵ−Ｂ、ＬＵ−Ｃ、ＬＵ−ＤおよびＬＵ−ＥのＳＩＺＥフィールドにおける値の合計であることが判断される。使用データ構造１５６のアンロード可能ユニットのリストは、ＬＵ−Ｃ、ＬＵ−ＤおよびＬＵ−Ｅのメモリアドレスを含む。ステップ２３０の次の繰返しでは、この量のメモリ（１．６２ＭＢ）がしきい値１．５ＭＢを上回らないことが判断され、制御はステップ２４０に戻って、メモリ１５０からアンロードするＬＵデータ構造１５２を選択する。
【００６７】
ステップ２４０で、アンロード可能ユニットのリストにおいて最も以前に使用されたＬＵデータ構造が選択される。リストにおける第１のＬＵデータ構造である、要素１１４ａに対応するＬＵ−Ｃが、最も以前に使用されている。したがって、ＬＵ−Ｃが、アンロードされるＬＵデータ構造として選択される。
【００６８】
ステップ２５２で、ＬＵ−Ｃがダーティかどうかが判断される。ＬＵ−ＣがダーティではないとＤＩＲＴＹフィールドの値が示しているため、制御はステップ２５６に渡る。ステップ２５６で、ＬＵ−Ｃに割当てられたメモリは、別のＬＵデータ構造に割当てられるよう解放され、使用データ構造１５６におけるＬＵ−Ｃについての使用情報が削除される。
【００６９】
制御は次にステップ２３０に戻って、メモリ使用が依然としてしきい値を上回るかどうかを判断する。ＬＵデータ構造１５２によって使用される全メモリが、ＬＵ−Ａ、ＬＵ−Ｂ、ＬＵ−ＤおよびＬＵ−Ｅ（ＬＵ−Ｃはなし）のＳＩＺＥフィールドにおける値の合計であることが判断される。使用データ構造１５６のアンロード可能ユニットのリストは、ＬＵ−Ｄ、ＬＵ−Ｅ（ＬＵ−Ｃはなし）のメモリアドレスを含む。ステップ２３０の次の繰返しの際、この量のメモリ（１．４２ＭＢ）がしきい値１．５ＭＢを上回らないことが判断され、制御はステップ２１０に戻って、次のロード可能ユニットをメモリ１５０にロードする。
【００７０】
こうして、任意のサイズのＸＭＬ文書が、文書に割当てられた限定量の高速メモリを有するサーバを用いて、データベースから処理され得る。
【００７１】
ハードウェア概要
図３は、この発明の一実施例が実現され得るコンピュータシステム３００のブロック図を示す。コンピュータシステム３００は、情報を通信するためのバス３０２または他の通信メカニズムと、情報を処理するためにバス３０２と結合されたプロセッサ３０４とを含む。コンピュータシステム３００はまた、プロセッサ３０４により実行されるべき命令および情報を記憶するためにバス３０２に結合された、ランダムアクセスメモリ（ＲＡＭ）または他のダイナミック記憶装置といったメインメモリ３０６も含む。メインメモリ３０６は、プロセッサ３０４により実行されるべき命令の実行中に一時的な変数または他の中間情報を記憶するためにも使用されてもよい。コンピュータシステム３００はさらに、プロセッサ３０４用の命令およびスタティック情報を記憶するためにバス３０２に結合された読出専用メモリ（ＲＯＭ）３０８または他のスタティック記憶装置を含む。磁気ディスクまたは光ディスクといった記憶装置３１０が、情報および命令を記憶するために提供され、バス３０２に結合されている。
【００７２】
コンピュータシステム３００は、情報をコンピュータユーザに表示するためのブラウン管（ＣＲＴ）などのディスプレイ３１２に、バス３０２を介して結合されていてもよい。
英数字キーおよび他のキーを含む入力装置３１４が、情報およびコマンド選択をプロセッサ３０４に通信するためにバス３０２に結合されている。ユーザ入力装置の別の種類は、方向情報およびコマンド選択をプロセッサ３０４に通信し、ディスプレイ３１２上のカーソルの動きを制御するための、マウス、トラックボール、またはカーソル方向キーといったカーソル制御３１６である。この入力装置は通常、２つの軸、つまり第１の軸（たとえばｘ）および第２の軸（たとえばｙ）において２つの自由度を有しており、それによりこの装置は平面における場所を特定することができる。
【００７３】
この発明は、ここに説明された手法を実現するためのコンピュータシステム３００の使用に関する。この発明の一実施例によれば、それらの手法は、プロセッサ３０４がメインメモリ３０６に含まれる１つ以上の命令の１つ以上のシーケンスを実行するのに応じて、コンピュータシステム３００によって実行される。そのような命令は、記憶装置３１０などの別のコンピュータ読み取り可能な媒体からメインメモリ３０６に読込まれてもよい。メインメモリ３０６に含まれる命令のシーケンスの実行により、プロセッサ３０４は、ここに説明されたプロセスステップを実行するようになる。代替的な実施例では、この発明を実現するために、ソフトウェア命令の代わりに、またはソフトウェア命令と組合わせて、配線接続回路が使用されてもよい。このため、この発明の実施例は、配線接続回路とソフトウェアとのどの特定の組合せにも限定されない。
【００７４】
ここで用いられるような用語「コンピュータ読み取り可能な媒体」とは、プロセッサ３０４に命令を実行用に提供することに関与するあらゆる媒体を指す。そのような媒体は、不揮発性媒体、揮発性媒体、および通信媒体を含むもののそれらに限定されない多くの形態を取り得る。不揮発性媒体はたとえば、記憶装置３１０などの光ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ３０６などのダイナミックメモリを含む。通信媒体は、バス３０２を構成する配線を含む、同軸ケーブル、銅線および光ファイバを含む。通信媒体はまた、無線周波数および赤外線データ通信中に発生するものといった音波または光波の形も取り得る。
【００７５】
コンピュータ読み取り可能な媒体の一般的な形態は、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、または任意の他の磁気媒体、ＣＤ−ＲＯＭ、任意の他の光媒体、パンチカード、紙テープ、孔のパターンを有する任意の他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、任意の他のメモリチップまたはカートリッジ、以下に説明するような搬送波、または、コンピュータがそこから読み取り可能な任意の他の媒体を含む。
【００７６】
コンピュータ読み取り可能な媒体のさまざまな形態は、プロセッサ３０４への１つ以上の命令の１つ以上のシーケンスを実行用に保持することに関与していてもよい。たとえば、命令はまず、遠隔コンピュータの磁気ディスク上に保持されてもよい。遠隔コンピュータは命令をそのダイナミックメモリにロードし、電話回線を通してモデムを用いて命令を送信することができる。コンピュータシステム３００にとってローカルなモデムは、電話回線上のデータを受信し、赤外線送信機を用いてデータを赤外線信号に変換することができる。赤外線検出器は赤外線信号で搬送されたデータを受信でき、適切な回路がデータをバス３０２上に配置することができる。バス３０２はデータをメインメモリ３０６に搬送し、そこからプロセッサ３０４が命令を検索して実行する。メインメモリ３０６によって受信された命令は、プロセッサ３０４による実行の前または後のいずれかで、記憶装置３１０上に随意に記憶されてもよい。
【００７７】
コンピュータシステム３００はまた、バス３０２に結合された通信インターフェイス３１８も含む。通信インターフェイス３１８は、ローカルネットワーク３２２に接続されたネットワークリンク３２０に双方向データ通信結合を提供する。たとえば、通信インター
フェイス３１８は、データ通信接続を対応する種類の電話回線に提供するデジタル相互サービス網（ＩＳＤＮ）カード、またはモデムであってもよい。別の例として、通信インターフェイス３１８は、データ通信接続を互換性があるＬＡＮに提供するローカルエリアネットワーク（ＬＡＮ）カードであってもよい。無線リンクも実現され得る。任意のそのような実現化例では、通信インターフェイス３１８は、さまざまな種類の情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号、または光信号を送信および受信する。
【００７８】
ネットワークリンク３２０は通常、１つ以上のネットワークを介して、他のデータ装置にデータ通信を提供する。たとえば、ネットワークリンク３２０は、ローカルネットワーク３２２を介して、ホストコンピュータ３２４に、またはインターネットサービスプロバイダ（ＩＳＰ）３２６により運営されるデータ装置に、接続を提供してもよい。ＩＳＰ３２６は次に、現在一般に「インターネット」３２８と呼ばれている全世界的パケットデータ通信ネットワークを介して、データ通信サービスを提供する。ローカルネットワーク３２２およびインターネット３２８は双方とも、デジタルデータストリームを搬送する電気信号、電磁信号または光信号を使用する。コンピュータシステム３００へ、またはコンピュータシステム３００からデジタルデータを搬送する、さまざまなネットワークを通る信号、ネットワークリンク３２０上の信号、および通信インターフェイス３１８を通る信号は、情報を運ぶ搬送波の例示的な形態である。
【００７９】
コンピュータシステム３００は、ネットワーク、ネットワークリンク３２０および通信インターフェイス３１８を介して、メッセージを送信し、プログラムコードを含むデータを受信する。インターネットの例では、サーバ３３０は、アプリケーションプログラム用の要求されたコードを、インターネット３２８、ＩＳＰ３２６、ローカルネットワーク３２２、および通信インターフェイス３１８を介して送信してもよい。
【００８０】
受信されたコードは、受信された際にプロセッサ３０４によって実行されてもよく、および／または、後での実行用に記憶装置３１０または他の不揮発性ストレージに記憶されてもよい。このように、コンピュータシステム３００は、搬送波の形をしたアプリケーションコードを取得し得る。
【００８１】
前述の明細書において、この発明を、その特定の実現化例を参照して説明してきた。しかしながら、請求項により定義されるようなこの発明の範囲を逸脱することなく、様々な修正および変更がそれになされてもよいことは、明らかである。したがって、明細書および図面は、限定的な意味というよりもむしろ例示的な意味で考慮されるべきである。
【図面の簡単な説明】
【００８２】
【図１】一実施例に従った、利用可能なメモリを上回るＸＭＬ文書を処理するためにサーバによって使用される構造を示すブロック図である。
【図２】一実施例に従った、利用可能なメモリを上回るＸＭＬ文書を処理するための高レベルの方法を示すフローチャートである。
【図３】この発明の実施例が実現され得るコンピュータシステムを示すブロック図である。
【図１】
0004476813.tif 000002
【図２】
0004476813.tif 000003
【図３】
0004476813.tif 000004