(57)【要約】【課題】複数のＸＭＬデータを結合処理する速度を高速化できるようにＸＭＬ変換プログラムを最適化するためのＸＭＬ変換プログラム最適化方法を提供することにある。【解決手段】ＸＭＬ変換プログラムを入力するステップ（Ｓ１００）と、入力されたＸＭＬ変換プログラムから結合先のＸＭＬデータを指定するためのＸＰａｔｈ式を探索して分解処理するステップ（Ｓ１３０）と、前記分解処理ステップにより取得されたパス表現群を使用して、複数のＸＭＬデータを結合する変換命令を書き換えて最適化されたＸＭＬ変換プログラムを構成するステップ（Ｓ１４０）とを有するＸＭＬ変換プログラム最適化方法が開示されている。【選択図】    図２
2004295415.tif 000002
【特許請求の範囲】
【請求項１】
複数のＸＭＬデータを結合する機能を含むＸＭＬ変換プログラムの最適化方法であって、
ＸＭＬ変換プログラムを格納した記憶手段から書換え対象のＸＭＬ変換プログラムを入力するステップと、
入力されたＸＭＬ変換プログラムから結合先のＸＭＬデータを指定するためのｄｏｃｕｍｅｎｔ関数から始まるＸＰａｔｈ式を探索して分解処理するステップと、
前記分解処理ステップにより取得されたパス表現群を使用して、複数のＸＭＬデータを結合する命令を書き換えて最適化されたＸＭＬ変換プログラムを構成するステップと、
前記構成ステップにより最適化されたＸＭＬ変換プログラムを出力するステップと
を有する手順から構成されることを特徴とするＸＭＬ変換プログラムの最適化方法。
【請求項２】
前記分解処理ステップは、探索した前記ＸＰａｔｈ式を所定の５つの変数からなるパス表現群に分解処理することを特徴とする請求項１に記載のＸＭＬ変換プログラムの最適化方法。
【請求項３】
前記構成ステップは、ハッシュ表の定義命令を生成する処理と、複数のＸＭＬデータを結合するための命令を書き換える処理とを含むことを特徴とする請求項１または請求項２のいずれか１項に記載のＸＭＬ変換プログラムの最適化方法。
【請求項４】
前記構成ステップは、ハッシュ表の定義命令を生成する処理と、複数のＸＭＬデータを結合するための命令を書き換える処理と、パス表現を書き換える処理とを含むことを特徴とする請求項１または請求項２のいずれか１項に記載のＸＭＬ変換プログラムの最適化方法。
【請求項５】
前記構成ステップは、ハッシュ表の定義命令を生成する処理と、複数のＸＭＬデータを結合するための命令を書き換える処理と、パス表現を書き換える処理と、結合先のＸＭＬデータを読み込む命令を追加する処理とを含むことを特徴とする請求項１または請求項２のいずれか１項に記載のＸＭＬ変換プログラムの最適化方法。
【請求項６】
複数のＸＭＬデータを結合する機能を含むＸＭＬ変換プログラムの最適化処理を実行するためのＸＭＬ変換最適化プログラムであって、
ＸＭＬ変換プログラムを格納した記憶手段から書換え対象のＸＭＬ変換プログラムを入力する手順と、
入力されたＸＭＬ変換プログラムから結合先のＸＭＬデータを指定するためのｄｏｃｕｍｅｎｔ関数から始まるＸＰａｔｈ式を探索して分解処理する手順と、
前記分解処理ステップにより取得されたパス表現群を使用して、複数のＸＭＬデータを結合する命令を書き換えて最適化されたＸＭＬ変換プログラムを構成する手順と、
前記構成されたＸＭＬ変換プログラムを出力する手順と
をコンピュータに実行させるためのＸＭＬ変換最適化プログラム。
【請求項７】
前記分解処理手順は、探索した前記ＸＰａｔｈ式を所定の５つの変数からなるパス表現群に分解処理することを特徴とする請求項６に記載のＸＭＬ変換最適化プログラム。
【請求項８】
前記構成手順は、ハッシュ表の定義命令を生成する処理と、複数のＸＭＬデータを結合するための命令を書き換える処理とを含むことを特徴とする請求項６または請求項７のいずれか１項に記載のＸＭＬ変換最適化プログラム。
【請求項９】
前記構成手順は、ハッシュ表の定義命令を生成する処理と、複数のＸＭＬデータを結合するための命令を書き換える処理と、パス表現を書き換える処理とを含むことを特徴とする請求項６または請求項７のいずれか１項に記載のＸＭＬ変換最適化プログラム。
【請求項１０】
前記構成手順は、ハッシュ表の定義命令を生成する処理と、複数のＸＭＬデータを結合するための命令を書き換える処理と、パス表現を書き換える処理と、結合先のＸＭＬデータを読み込む命令を追加する処理とを含むことを特徴とする請求項６または請求項７のいずれか１項に記載のＸＭＬ変換最適化プログラム。
【請求項１１】
複数のＸＭＬデータを結合する機能を含むＸＭＬ変換プログラムの最適化処理を実行するためのＸＭＬ変換最適化プログラムを記録し、コンピュータにより読取り可能な記憶媒体であって、
ＸＭＬ変換プログラムを格納した記憶手段から書換え対象のＸＭＬ変換プログラムを入力する手順と、
入力されたＸＭＬ変換プログラムから結合先のＸＭＬデータを指定するためのｄｏｃｕｍｅｎｔ関数から始まるＸＰａｔｈ式を探索して分解処理する手順と、
前記分解処理ステップにより取得されたパス表現群を使用して、複数のＸＭＬデータを結合する命令を書き換えて最適化されたＸＭＬ変換プログラムを構成する手順と、
前記構成されたＸＭＬ変換プログラムを出力する手順と
を有する前記ＸＭＬ変換最適化プログラムを記録したことを特徴とする記憶媒体。
【請求項１２】
前記分解処理手順は、探索した前記ＸＰａｔｈ式を所定の５つの変数からなるパス表現群に分解処理することを特徴とする請求項１１に記載の記憶媒体。
【請求項１３】
前記構成手順は、ハッシュ表の定義命令を生成する処理と、複数のＸＭＬデータを結合するための命令を書き換える処理とを含むことを特徴とする請求項１１または請求項１２のいずれか１項に記載の記憶媒体。
【請求項１４】
前記構成手順は、ハッシュ表の定義命令を生成する処理と、複数のＸＭＬデータを結合するための命令を書き換える処理と、パス表現を書き換える処理とを含むことを特徴とする請求項１１または請求項１２のいずれか１項に記載の記憶媒体。
【請求項１５】
前記構成手順は、ハッシュ表の定義命令を生成する処理と、複数のＸＭＬデータを結合するための命令を書き換える処理と、パス表現を書き換える処理と、結合先のＸＭＬデータを読み込む命令を追加する処理とを含むことを特徴とする請求項１１または請求項１２のいずれか１項に記載の記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般的にはＸＭＬで表現されたデータを異なる形式のＸＭＬデータに変換するＸＭＬ変換技術に関し、特に、複数のＸＭＬデータの結合処理の高速化を実現するＸＭＬ変換プログラムの最適化方法に関する。
【０００２】
【従来の技術】
近年、特にインターネットに関するＷｅｂ技術分野の中で、データ記述言語としてＸＭＬ（ｅｘｔｅｎｓｉｂｌｅ  ｍａｒｋｕｐ  ｌａｎｇｕａｇｅ）が注目されている。このＸＭＬは、一般的な文書情報だけでなく、ＲＤＢ（ｒｅｌａｔｉｏｎａｌ  ｄａｔａｂａｓｅ）のデータや、Ｗｅｂページ（ホームページ）のデータなどの記述形式（データを表現又は格納するためのフォーマット）として、所謂業界標準として使用される言語である。
【０００３】
このＸＭＬを処理するためのＸＳＬ（ｅｘｔｅｎｓｉｂｌｅ  ｓｔｙｌｅｓｈｅｅｔｓ  ｌａｎｇｕａｇｅ）というスタイル言語が開発されている。このＸＳＬは、ある形式のＸＭＬデータを、他のＸＭＬデータに変換するための言語である。このＸＭＬ変換方法（ＸＴＬと表記することがある）については、各種の方法が提案されている（例えば、特許文献１を参照）。
【０００４】
また、ＸＳＬの関連仕様として、ＸＳＬＴ（ｅｘｔｅｎｓｉｂｌｅ  ｓｔｙｌｅｓｈｅｅｔｓ  ｌａｎｇｕａｇｅ  ｔｒａｎｓｆｏｒｍａｔｉｏｎｓ）も開発されている（例えば、非特許文献１を参照）。
【０００５】
さらに、ＸＳＬＴ，ＸＴＬで使用される言語であって、入力ＸＭＬ内の変換対象を指定するための言語として、ＸＰａｔｈの仕様に関しても開示されている（例えば、非特許文献２を参照）。
【０００６】
ＸＳＬＴとＸＴＬは、ＸＭＬ変換方法を記述する言語である。ＸＳＬＴによるＸＳＬＴプロセッサまたはＸＴＬプログラムによるＸＴＬプロセッサが、入力ＸＭＬに対して変換処理を実行し、変換結果のＸＭＬを出力する。このＸＳＬＴプロセッサに関して、各種の方式が提案されている（例えば、非特許文献３，４を参照）。
【０００７】
【特許文献１】
特願２００２−２９９１３３号
【非特許文献１】
２００２年９月１７日検索、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｗ３．ｏｒｇ／ＴＲ／ｘｓｌｔ＞
【非特許文献２】
２００２年９月１７日検索、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｗ３．ｏｒｇ／ＴＲ／ｘｐａｔｈ＞
【非特許文献３】
インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｘｍｌ．ａｐａｃｈｅ．ｏｒｇ／ｘａｌａｎ−ｊ／＞
【非特許文献４】
インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｓａｘｏｎ．ｓｏｕｒｃｅｆｏｒｇｅ．ｎｅｔ／＞。
【０００８】
【発明が解決しようとする課題】
ＸＳＬＴやＸＴＬで記述されるＸＭＬ変換プログラムでは、例えば複数のＸＭＬ文章であるＸＭＬデータを結合処理するための処理速度がＸＭＬ変換プログラムの実行速度（処理性能）のボトルネックになっている。従って、複数のＸＭＬデータを結合する処理を高速化することは重要な課題の一つである。
【０００９】
そこで、本発明の目的は、複数のＸＭＬデータを結合処理する速度を高速化できるようにＸＭＬ変換プログラムを最適化するためのＸＭＬ変換プログラム最適化方法を提供することにある。
【００１０】
【課題を解決するための手段】
本発明の観点は、例えばＸＳＬＴで記述されたＸＭＬ変換プログラムを、複数のＸＭＬデータを結合処理する速度を高速化するように最適化したＸＭＬ変換プログラムを書き換えて出力する最適化方法に関する。
【００１１】
本発明の観点に従ったＸＭＬ変換プログラムの最適化方法は、複数のＸＭＬデータを結合する機能を含むＸＭＬ変換プログラムの最適化方法であって、ＸＭＬ変換プログラムを格納した記憶手段から書換え対象のＸＭＬ変換プログラムを入力するステップと、入力されたＸＭＬ変換プログラムから結合先のＸＭＬデータを指定するためのｄｏｃｕｍｅｎｔ関数から始まるＸＰａｔｈ式を探索して分解処理するステップと、前記分解処理ステップにより取得されたパス表現群を使用して、複数のＸＭＬデータを結合する変換命令を書き換えて最適化されたＸＭＬ変換プログラムを構成するステップと、前記構成されたＸＭＬ変換プログラムを出力するステップとを有する手順から構成される。
【００１２】
このような構成であれば、ＸＭＬ変換プログラムの実行速度のボトルネックとなる複数のＸＭＬデータ（ＸＭＬ文章）の結合処理に関する処理速度を約６倍程度向上させることが可能となる。また、本発明の方法は、ＸＭＬ変換プログラムの実行速度の高速化を図るように、例えばＸＳＬＴのソースコードへの変換を自動的に実行する。従って、ユーザが、例えばＸＳＬＴ記述によりＸＭＬ変換プログラムを作成する場合に、当該高速化のためのＸＳＬＴ記述を工夫する必要性がなくなる。このため、ＸＭＬ変換プログラムの作成において、ユーザは動作の論理的な記述に専念できるため、プログラムの記述性を向上させることが可能となる。
【００１３】
【発明の実施の形態】
以下図面を参照して、本発明の実施の形態を説明する。
（システム構成）
図１は、本実施形態に関するＸＭＬ変換プログラムの最適化システムの構成を示すブロック図である。
【００１４】
ＸＭＬ変換プログラム最適化装置（以下単に最適化装置と表記）１０は、図１に示すように、記憶媒体であるディスク１１またはメモリ１２に格納されたＸＭＬ変換プログラムを読み込み（入力し）、当該ＸＭＬ変換プログラムを、後述する最適化方法により書き換え処理して、ディスク１１またはメモリ１２に書き出す装置である。最適化装置１０は、書換え処理（最適化処理）を実行する際に、メモリ１３の作業記憶領域を利用する。この作業記憶領域には、後述する分解パス記憶領域１３０が設定される。
【００１５】
ここで、ディスク１１は、ディスクドライブによりリード／ライトされるディスク記憶媒体である。メモリ１２，１３は、通常では、ＲＡＭまたはフラッシュＥＥＰＲＯＭなどのリード／ライト可能なＩＣメモリを意味する。
（ＸＭＬ変換プログラムの最適化処理）
以下、図２から図６の各フローチャートを参照して、本実施形態の最適化装置１０によるＸＭＬ変換プログラムの最適化処理の手順を説明する。
【００１６】
図２は、本実施形態の最適化装置１０のメイン処理の手順を示すフローチャートである。当該最適化装置１０は、ディスク１１またはメモリ１２に格納されたＸＭＬ変換プログラムを読み込み、メモリ１３の作業記憶領域に書き込む（ステップＳ１００）。
【００１７】
次に、最適化装置１０は、メモリ１３の作業記憶領域に展開されたＸＭＬ変換プログラムの中からｄｏｃｕｍｅｎｔ関数を含むＸＰａｔｈ式を全て探索する（ステップＳ１１０）。ｄｏｃｕｍｅｎｔ関数は、結合先のＸＭＬデータ（ＸＭＬ文章）を指定するための関数である。
【００１８】
最適化装置１０は、探索した各ＸＰａｔｈ式について、ＸＰａｔｈ分解処理を実行するサブルーチンを呼び出し、当該ＸＰａｔｈ式を入力する（ステップＳ１２０のＹＥＳ，Ｓ１３０）。さらに、最適化装置１０は、作業記憶領域に格納されたＸＭＬ変換プログラムを書き換えて最適化に構成するＸＭＬ変換プログラム構成を実行するサブルーチンを呼び出す（ステップＳ１４０）。
【００１９】
これらのサブルーチンの処理により、最適化装置１０は、探索した全てのＸＰａｔｈ式の分解処理が終了してＸＭＬ変換プログラム構成が完了すると、作業記憶領域から書き換えられたＸＭＬ変換プログラムを出力して、ディスク１１又はメモリ１２に書き出す（ステップＳ１２０のＮＯ，Ｓ１５０）。
（ＸＰａｔｈ分解処理）
図３は、ＸＰａｔｈ分解処理を実行するサブルーチンの処理手順を示すフローチャートである。当該サブルーチンは、ＸＰａｔｈ式を入力とし、分解パス記憶領域１３０の変数ｐ１，ｐ２，…，ｐ５に値を書き込む処理を実行する。
【００２０】
当該サブルーチンは、ＸＰａｔｈ式を入力とし、ＸＰａｔｈ式の先頭のロケーションステップに指定されるｄｏｃｕｍｅｎｔ関数部を切り出して分解処理する（ステップＳ１３３）。具体的には、分解パス記憶領域１３０の変数ｐ１に書き込み、残りのパス表現を出力する（ステップＳ１３３）。
【００２１】
次に、当該サブルーチンは、ステップＳ１３３の処理により出力されたパス表現を入力し、結合条件を探索して分解処理する（ステップＳ１３６）。具体的には、入力のパス表現の先頭から結合条件を含むロケーションステップまでを切り出し、残りのパス表現を分解パス記憶領域１３０の変数ｐ３に書き込む。さらに、切り出されたパス表現から結合条件を除いたパス表現を、分解パス記憶領域１３０の変数ｐ２に書き込み、結合条件を出力する。
【００２２】
ここで、結合条件とは、「パス表現＝ＸＳＬの変数／パス表現」の形式をしているＸＰａｔｈの述語を意味する。
【００２３】
さらに、当該サブルーチンは、ステップＳ１３６の処理により出力された結合条件を入力し、結合先と結合元のパス表現を分解処理する（ステップＳ１３９）。具体的には、そのＸＰａｔｈ述部のＸＳＬの変数を含む側のパス表現を切り出して、分解パス記憶領域１３０の変数ｐ５に書き込み、反対のパス表現を変数ｐ４に書き込む。
【００２４】
以上のような５つのパス表現（ｐ１〜ｐ５）の要点は以下の通りである。
【００２５】
即ち、変数ｐ１はｄｏｃｕｍｅｎｔ関数とそのパラメータ部である。当該ｄｏｃｕｍｅｎｔ関数のパラメータは、結合先のＸＭＬデータを指定する。
【００２６】
変数ｐ２は、ｄｏｃｕｍｅｎｔ関数以降のロケーションステップから結合条件を含むロケーションステップまでのパス表現（ロケーションパス）である。但し、結合条件以外の結合条件があればこのパス表現はそれらを含める。結合条件とは、結合元のＸＭＬデータと結合先のＸＭＬデータとをどのような条件において結合するかを指定する条件のことである。
【００２７】
変数ｐ３は、結合条件が指定された要素以降のパス表現である。
【００２８】
変数ｐ４は、結合条件における結合元側のパス表現である。
【００２９】
変数ｐ５は、結合条件における結合先側のパス表現である。
（ＸＭＬ変換プログラム構成の処理）
図４は、ＸＭＬ変換プログラム構成の処理を実行するサブルーチンの処理手順を示すフローチャートである。当該サブルーチンは、変数ｐ１，ｐ２，…，ｐ６に書き込まれた値をＸＰａｔｈ式の入力とし、メモリ１３の作業記憶領域に書き込まれたＸＭＬ変換プログラムを書き換える処理を実行する。
【００３０】
当該サブルーチンは、ハッシュ表を定義する命令を生成
（構成）する処理と、複数のＸＭＬデータを結合するための命令を書き換える処理と、パス表現を書き換える処理と、結合先のＸＭＬデータを読み込む命令を追加する処理とを含む。
【００３１】
ハッシュ表を定義する命令を構成する処理では、適宜ハッシュ表に名称を割り当て、変数ｐ２のパス表現により指定されるノードセットをハッシュ表に登録するよう指定する。また、変数ｐ４のパス表現により指定される値をハッシュ表のキー値として指定する。
【００３２】
パス表現を書き換える処理では、該当するｄｏｃｕｍｅｎｔ関数から始まるＸＰａｔｈ式を書き換えて、定義したハッシュ表を参照することで高速化された等価な処理を実現する。ハッシュ表の参照では、変数ｐ５のパス表現が指定する値をキー値とする。元のパス表現と等価な処理を実現するために、ハッシュ表の参照のためのパス表現に続けて、変数ｐ３のパス表現を結合する。
【００３３】
結合先のＸＭＬを読み込む命令を追加する処理は、変数ｐ１のパス表現を用いて結合先のＸＭＬを読み込んで定義されたハッシュ表にデータを登録するためのものである。但し、ｄｏｃｕｍｅｎｔ関数から始まるＸＰａｔｈ式を指定するＸＭＬの変換命令の上位の命令が条件分岐命令などの場合は、当該ＸＭＬデータを読み込む命令を追加する処理によって他の命令に変更影響が及んでしまう。これを避けるため、変数ｐ１のパス表現を書き換える処理で得られたパス表現を条件として結合する。
【００３４】
具体的には、当該サブルーチンは、ハッシュ表の定義命令を生成してＸＭＬ変換プログラムに追記する処理を実行する（ステップＳ１６０）。具体的には、分解パス記憶領域１３０の変数ｐ２，ｐ４を入力とし、ハッシュ表に割り当てるための名称を自動生成してその値を変数ｐ６に書き込む。そして、変数ｐ２，ｐ４，ｐ６を用いてハッシュ表の生成命令を構築し、それをメモリ１３の作成記憶領域に書き込まれたＸＭＬ変換プログラムに追記する。
【００３５】
ここで、ハッシュ表の生成命令の構築処理は、変数ｐ２のパス表現により指定されるノードセットをハッシュ表に登録するよう指定する。さらに、変数ｐ４のパス表現により指定される値をハッシュ表のキー値として指定し、当該変数ｐ４をハッシュ表の名称として指定する処理からなる。
【００３６】
次に、当該ルーチンは、複数のＸＭＬデータを結合するための命令を書き換える処理を実行するサブルーチンを呼び出す（ステップＳ１７０）。
【００３７】
当該サブルーチンは、図５のフローチャートに示すように、パス表現を書き換え処理を実行する（ステップＳ１８０）。具体的には、分解パス記憶領域１３０の変数ｐ３，ｐ５，ｐ６を入力とし、メモリ１３の作業領域にあるｄｏｃｕｍｅｎｔ関数を含むＸＰａｔｈ式をハッシュ表を参照するように書き換える。このハッシュ表の定義命令は、前記ステップＳ１６０の処理で生成されて、ＸＭＬ変換プログラムに追記される。
【００３８】
書き換えられたＸＰａｔｈ式の生成は、変数ｐ６でハッシュ表名を指定し、変数ｐ５をキー値として指定したハッシュ表参照命令を構築する。そして、当該ハッシュ表参照命令に対して、分解パス記憶領域１３０の変数ｐ３を結合する。
【００３９】
次に、当該ルーチンは、結合先のＸＭＬデータを読み込む命令を追加する処理を実行するサブルーチンを呼び出す（ステップＳ１９０）。
【００４０】
当該サブルーチンは、図６のフローチャートに示すように、前記ステップＳ１８０でのパス表現の書き換え処理によるいわば副作用の有無を判断し（ステップＳ２００）、この判断結果に基づいて結合先のＸＭＬデータを読み込む命令を構築して追記する。この命令の追記により、結合先のＸＭＬデータ（ＸＭＬ文書）を読み込むように、ＸＭＬ変換プログラムを書き換える。
【００４１】
具体的には、メモリ１３の作業記憶領域にあるｄｏｃｕｍｅｎｔ関数を含むＸＰａｔｈ式の上位の変換命令を参照し、ステップＳ１８０でのパス表現の書き換え処理による副作用の有無を判断する（ステップＳ２００）。
【００４２】
例えば上位の変換命令が条件分岐の命令の場合には、パス表現の書き換え処理により分岐条件が変化するという副作用が生じる（ステップＳ２００の有）。条件分岐の具体例は、後述する図８及び図１０を参照。
【００４３】
判断結果が無の場合には、分解パス記憶領域１３０の変数ｐ１（結合先ＸＭＬデータ（文書）を読み込むｄｏｃｕｍｅｎｔ関数部）を入力とし、結合先のＸＭＬデータを読み込む命令を構築する。そして、現在参照しているメモリ１３の作業記憶領域のＸＰａｔｈ式の上位の変換命令として、当該読み込む命令を追記する（ステップＳ２１０）。これにより、結合先のＸＭＬデータ（文書）を読み込むようにＸＭＬ変換プログラムを書き換えることになる。
【００４４】
一方、判断結果が有の場合には、分解パス記憶領域１３０の変数ｐ１、及び前記ステップＳ１８０で得られたパス表現を入力とし、後者が変数ｐ１の述語になるように結合する。そして、現在参照しているメモリ１３の作業記憶領域のＸＰａｔｈ式の上位の変換命令として、当該読み込む命令を追記する（ステップＳ２２０）。これにより、結合先のＸＭＬデータ（文書）を読み込むようにＸＭＬ変換プログラムを書き換えることになる。
【００４５】
以上要するに本実施形態によれば、複数のＸＭＬデータ（文書）を結合する命令を含むＸＭＬ変換プログラムを入力とし、ＸＭＬデータ（文書）を結合する命令を自動的に書き換えることで、ハッシュ表を使用してＸＭＬ変換プログラムを最適化できる。このような最適化方法により、以下のような効果が得られる。
【００４６】
第１に、複数のＸＭＬデータ（文書）を結合処理する処理速度を高速化できるため、ＸＭＬ変換プログラムの実行速度（実行性能）の向上を図ることができる。具体的には、５ＫＢｙｔｅの結合元ＸＭＬデータと１２４０ＫＢｙｔｅの結合先ＸＭＬデータとを結合する命令を本実施形態の方法を利用して実行した場合と、利用しないで実行した場合とを比較する。本実施形態の方法を利用しない場合には当該命令の処理時間は約１４４秒であるのに対して、本実施形態の方法を利用した場合には当該命令の処理時間は約２５秒となる測定結果が得られる。結果として、本実施形態の方法を利用すると、約６倍の性能向上を達成することができることになる。
【００４７】
第２に、プログラマなどがＸＭＬ変換プログラムを書き換えて最適化する作業がなくなるため、結果としてＸＭＬ変換プログラムを作成する上での記述性（作業効率性）を向上できる。
【００４８】
ここで、本実施形態の最適化方法の要点であるＸＭＬ変換プログラムを書き換える手法は、従来のデータベース技術分野での問い合わせ言語ＳＱＬの処理手法（ハッシュ表を用いた結合処理の最適化）に類似しているように見える。しかしながら、以下のように、従来のデータベース技術分野での結合処理の最適化では、本実施形態のＸＭＬ変換プログラムの最適化には適用できないことは明白である。
【００４９】
具体的には、ＸＰａｔｈ式を分解する処理に関して、データベース技術分野の問い合わせ言語ＳＱＬでの全ての操作は１リレーションで実施されるように表現される。これに対して、本実施形態でのＸＭＬ変換で用いられるＸＰａｔｈは、ＸＭＬの木構造の中から特定のノード群を指定するように表現される。要するに、従来のデータベース技術分野での結合処理の最適化技術では、ＸＰａｔｈが指定するデータの木構造を考慮した書き換えを実現することが不可能である。
【００５０】
また、ＸＭＬ変換プログラムを構成する処理に関して、従来のデータベース技術分野の実行プログラムは、データベース管理システムの内部表現であるため、表現の自由度が高い。これに対して、本実施形態のＸＭＬ変換言語（ＸＳＬＴ，ＸＴＬ）の最適化では、最適化した結果も自身の言語仕様を満たす必要がある。要するに、本実施形態のＸＭＬ変換プログラムを構成する処理には、従来のデータベース技術分野の結合処理の最適化技術を単純に適用することは不可能である。
【００５１】
図７〜図１１は、本実施形態のＸＭＬ変換プログラムの書き換え方法（最適化方法）を、具体的なＸＭＬ変換プログラムに適用した場合の具体例を示すものである。
【００５２】
図７及び図８は、ＸＴＬに適用した場合の具体例である。また、図９から図１１は、ＸＳＬＴに適用した場合の具体例である。
【００５３】
図７（Ａ）に示す上側部分は、入力となるＸＭＬ変換プログラムを示し、同図（Ｂ）に示す下側部分は本実施形態の方法により書き換えられたプログラムを示す。符号７０，７１が差分の部分に相当する。
【００５４】
図２のステップＳ１１０の処理では、符号７０の部分において、ｄｏｃｕｍｅｎｔ（‘．．／ＢｏｏｋＣｏｓｔｓ．ｘｍｌ’）／ＢｏｏｋＣｏｓｔｓ／Ｂｏｏｋ［Ｔｉｔｌｅ＝＄Ｂｏｏｋ／Ｔｉｔｌｅ］／ＣｏｓｔのＸＰａｔｈ式が抽出される。
【００５５】
ステップＳ１３０の処理では、当該ＸＰａｔｈを入力し、変数ｐ１（ｄｏｃｕｍｅｎｔ）、変数ｐ２（／ＢｏｏｋＣｏｓｔｓ／Ｂｏｏｋ）、変数ｐ３（／Ｃｏｓｔ）、変数ｐ４（Ｔｉｔｌｅ）、変数ｐ５（＄Ｂｏｏｋ／Ｔｉｔｌｅ）が分解処理され、各変数としてに設定される。
【００５６】
さらに、図４のステップＳ１６０の処理では、変数ｐ２と変数ｐ４を入力し、ハッシュ表を登録するための命令（＜！ＫＥＹ＿Ｃｏｓｔ  ＡＳ｛／ＢｏｏｋＣｏｓｔｓ／Ｂｏｏｋ｝ＢＹ｛Ｔｉｔｌｅ｝＞）が構築されて、メモリ１３の作業記憶領域に書き込まれる。なお（＿Ｃｏｓｔ）はハッシュ表の名称であり、変数ｐ６に書き込まれる。
【００５７】
図５のステップＳ１８０の処理では、変数ｐ３，ｐ５，ｐ６を入力とし、メモリ１３の作業記憶領域のＸＰａｔｈが（ｋｅｙ（‘＿Ｃｏｓｔ’，＄Ｂｏｏｋ／Ｔｉｔｌｅ）／Ｃｏｓｔ）と書き換えられる。
【００５８】
図６のステップＳ２００の処理では、上位の変換命令が条件分岐でないことからステップＳ２１０の処理に移行する。即ち、変数ｐ１のパス表現を入力とし、結合先のＸＭＬを読み込む命令（（…）＊ＡＳ｛ｄｏｃｕｍｅｎｔ（‘．．／ＢｏｏｋＣｏｓｔｓ．ｘｍｌ’）｝）をメモリ１３の作業記憶領域に書き込む。
【００５９】
図８（Ａ）に示す上側部分は、入力となるＸＭＬ変換プログラムを示し、同図（Ｂ）に示す下側部分は本実施形態の方法により書き換えられたプログラムを示す。符号８０，８１が差分の部分に相当する。
【００６０】
図２のステップＳ１１０の処理では、符号８０の部分において、ｄｏｃｕｍｅｎｔ（‘．．／ｅｃｌ／ａｌｌ．ｘｍｌ’）／／ｐｅｒｓｏｎ［ｅｍａｉｌ＝＄ｍｅｍｂｅｒ］のＸＰａｔｈ式が抽出される。
【００６１】
ステップＳ１３０の処理では、当該ＸＰａｔｈを入力し、
変数ｐ１（ｄｏｃｕｍｅｎｔ（’．．／ｅｃｌ／ａｌｌ．ｘｍｌ’））、変数ｐ２（／／ｐｅｒｓｏｎ）、変数ｐ３（無し）、変数ｐ４（ｅｍａｉｌ）、変数ｐ５（＄ｍｅｍｂｅｒ）が分解処理され、各変数としてに設定される。
【００６２】
さらに、図４のステップＳ１６０の処理では、変数ｐ２と変数ｐ４を入力し、ハッシュ表を登録するための命令（＜！ＫＥＹ＿ｅｃｌｐｅｒｓｏｎ  ＡＳ｛／／ｐｅｒｓｏｎ｝ＢＹ｛ｅｍａｉｌ｝＞）が構築されて、メモリ１３の作業記憶領域に書き込まれる。なお、（＿ｅｃｌｐｅｒｓｏｎｔ）はハッシュ表の名称であり、変数ｐ６に書き込まれる。
【００６３】
図５のステップＳ１８０の処理では、変数ｐ３，ｐ５，ｐ６を入力とする。作業記憶領域のＸＰａｔｈは、
（ｋｅｙ（‘＿ｅｃｌｐｅｒｓｏｎ’，＄ｍｅｍｂｅｒ））と書き換えられる。
【００６４】
図６のステップＳ２００の処理では、上位の変換命令が条件分岐であることからステップＳ２２０に移行する。
【００６５】
即ち、変数ｐ１のパス表現とＳ１８０で得られたパス表現を用いて結合先のＸＭＬを以下の読み込む命令でメモリ１３の作業記憶領域に書き込む。
（…）＊ＡＳ｛ｄｏｃｕｍｅｎｔ（‘．．／ｅｃｌ／ａｉｌ．ｘｍｌ’）［ｋｅｙ（‘＿ｅｃｌｐｅｒｓｏｎ’，＄ｍｅｍｂｅｒ）］｝）。
【００６６】
図９（Ａ）に示す上側部分は、入力となるＸＭＬ変換プログラムを示し、同図（Ｂ）に示す下側部分は本実施形態の方法により書き換えられたプログラムを示す。符号９０，９１，９２が差分の部分に相当する。
【００６７】
図２のステップＳ１１０の処理では、符号９０の部分において、ｄｏｃｕｍｅｎｔ（‘ＢｏｏｋＣｏｓｔｓ．ｘｍｌ’）／ＢｏｏｋＣｏｓｔｓ／Ｂｏｏｋ［Ｔｉｔｌｅ＝＄Ｂｏｏｋ／Ｔｉｔｌｅ］／ＣｏｓｔのＸＰａｔｈ式が抽出される。
【００６８】
ステップＳ１３０の処理では、当該ＸＰａｔｈを入力し、変数ｐ１（ｄｏｃｕｍｅｎｔ（‘ＢｏｏｋＣｏｓｔｓ，ｘｍｌ’）、変数ｐ２（／ＢｏｏｋＣｏｓｔｓ／Ｂｏｏｋ）、変数ｐ３（／Ｃｏｓｔ）、変数ｐ４（Ｔｉｔｌｅ）、変数ｐ５（＄Ｂｏｏｋ／Ｔｉｔｌｅ）が分解処理されて、各変数に設定される。
【００６９】
さらに、図４のステップＳ１６０の処理では、変数ｐ２と変数ｐ４を入力し、ハッシュ表を登録するための命令（＜ｘｓｌ：ｋｅｙ  ｎｅｍｅ＝”．．Ｃｏｓｔ”ｍａｔｃｈ＝’／ＢｏｏｋＣｏｓｔｓ／Ｂｏｏｋ”  ｕｓｅ＝”Ｔｉｔｌｅ”／＞）が構築されて、メモリ１３の作業記憶領域に書き込まれる。なお、（＿Ｃｏｓｔ）はハッシュ表の名称であり、変数ｐ６に書き込まれる。
【００７０】
図５のステップＳ１８０の処理では、変数ｐ３，ｐ５，ｐ６を入力とし、作業記憶領域のＸＰａｔｈが（ｋｅｙ（‘＿Ｃｏｓｔ’，＄Ｂｏｏｋ／Ｔｉｔｌｅ）／Ｃｏｓｔ）と書き換えられる。
【００７１】
図６のステップＳ２００の処理では、上位の変換命令が条件分岐でないことからステップＳ２１０に移行する。変数ｐ１のパス表現を入力とし、結合先のＸＭＬを読み込む命令（＜ｘｓｌ：ｆｏｒ−ｅａｃｈ  ｓｅｌｅｃｔ＝”ｄｏｃｕｍｅｎｔ’．ｘｍｌ’）”＞…＜／ｘｓｌ：ｆｏｒ−ｅａｃｈ＞）をメモリ１３の作業記憶領域に書き込む。
【００７２】
図１０は、入力となるＸＭＬ変換プログラムを示し、図１１は本実施形態の方法により書き換えられたプログラムを示す。符号１００，１１０，１１２が差分の部分に相当する。
【００７３】
図２のステップＳ１１０の処理では、３、４行目から（ｄｏｃｕｍｅｎｔ（‘．．／ｅｃｌ／ａｌｌ．ｘｍｌ’）／／ｐｅｒｓｏｎ［ｅｍａｉｌ＝＄ｍｅｍｂｅｒ］）のＸＰａｔｈ式が抽出される。
【００７４】
ステップＳ１３０の処理では、当該ＸＰａｔｈを入力し、変数ｐ１（ｄｏｃｕｍｅｎｔ’．．／ｅｃｌ／ａｌｌ．ｘｍｌ’））、変数ｐ２（／／ｐｅｒｓｏｎ）、変数ｐ３（なし）、変数ｐ４（ｅｍａｉｌ）、変数ｐ５（＄ｍｅｍｂｅｒ）が分解処理されて、各変数に設定される。
【００７５】
図４のステップＳ１６０の処理では、変数ｐ２と変数ｐ４を入力し、ハッシュ表を登録するための命令、
＜ｘｓｌ：ｋｅｙｎｅｍｅ＝’Ｃｏｓｔ”ｍａｔｃｈ＝”／ＢｏｏｋＣｏｓｔｓ／Ｂｏｏｋ”ｕｓｅ＝”Ｔｉｔｌｅ”／＞）が構築されて、メモリ１３の作業記憶領域に書き込まれる。なお、（＿ｅｃｌｐｅｒｓｏｎｔ）はハッシュ表の名称であり、変数ｐ６に書き込まれる。
【００７６】
図５のステップＳ１８０の処理では、変数ｐ３，ｐ５，ｐ６を入力とし、メモリ１３の作業記憶領域のＸＰａｔｈが、ｋｅｙ（‘＿ｅｃｌｐｅｒｓｏｎ’，＄ｍｅｍｂｅｒ））と書き換えられる。
【００７７】
図６のステップＳ２００の処理では、上位の変換命令が条件分岐であることからＳ２２０に移行する。即ち、変数ｐ１のパス表現とステップＳ１８０で得られたパス表現を用いて結合先のＸＭＬを、以下の読み込む命令でメモリ１３の作業記憶領域に書き込む。
ｘｓｌ：ｆｏｒ−ｅａｃｈｓｅｌｅｃｔ＝”ｄｏｃｕｍｅｎｔ（‘．．／ｅｃｌ／ａｌｌ．ｘｍｌ’）［ｋｅｙ（‘＿ｅｃｌｐｅｒｓｏｎ’，＄ｍｅｍｂｅｒ）］”＞…＜／ｘｓｌ：ｆｏｒ−ｅａｃｈ＞）。
【００７８】
【発明の効果】
以上詳述したように本発明によれば、複数のＸＭＬデータを結合処理する速度を高速化できるようにＸＭＬ変換プログラムを最適化するためのＸＭＬ変換プログラム最適化方法を提供することができる。
【図面の簡単な説明】
【図１】本発明の実施形態に関するＸＭＬ変換プログラムの最適化システムの構成を示すブロック図。
【図２】本実施形態に関するＸＭＬ変換プログラム最適化装置のメイン処理の手順を説明するためのフローチャート。
【図３】本実施形態に関するＸＰａｔｈ分解処理の手順を説明するためのフローチャート。
【図４】本実施形態に関するＸＭＬ変換プログラム構成の処理手順を説明するためのフローチャート。
【図５】本実施形態に関する複数のＸＭＬデータを結合するための命令を書き換える処理手順を説明するためのフローチャート。
【図６】本実施形態に関する結合先のＸＭＬデータを読み込む命令を追加する処理手順を説明するためのフローチャート。
【図７】本実施形態に関する最適化方法をＸＴＬ記述のＸＭＬ変換プログラムに適用した具体例を示す図。
【図８】本実施形態に関する本実施形態に関する最適化方法をＸＴＬ記述のＸＭＬ変換プログラムに適用した具体例を示す図。
【図９】本実施形態に関する本実施形態に関する最適化方法をＸＳＬＴ記述のＸＭＬ変換プログラムに適用した具体例を示す図。
【図１０】本実施形態に関する本実施形態に関する最適化方法をＸＳＬＴ記述のＸＭＬ変換プログラムに適用した具体例を示す図。
【図１１】本実施形態に関する本実施形態に関する最適化方法をＸＳＬＴ記述のＸＭＬ変換プログラムに適用した具体例を示す図。
【符号の説明】
１０…ＸＭＬ変換プログラム最適化装置
１１…ディスク
１２…メモリ
１３…メモリ
【図１】
2004295415.tif 000003
【図２】
2004295415.tif 000004
【図３】
2004295415.tif 000005
【図４】
2004295415.tif 000006
【図５】
2004295415.tif 000007
【図６】
2004295415.tif 000008
【図７】
2004295415.tif 000009
【図８】
2004295415.tif 000010
【図９】
2004295415.tif 000011
【図１０】
2004295415.tif 000012
【図１１】
2004295415.tif 000013