(57)【要約】【課題】マークアップ言語により構造化された文書を適切に処理する技術を提供する。【解決手段】マッチングユニット７０は、マークアップ言語により記述されたデータのパターン間の対応関係を定義した規則に基づいて、比較元のデータに合致するパターンを選択するマッチング部７６と、変数を含むパターンが選択されたとき、選択されたパターンにおける変数の位置と対応する位置にある比較元のデータを変数に代入する変数管理部７４を含む。変数管理部７４は、比較元のデータがマークアップ言語により記述されたデータであり、選択されたパターンにおける変数の位置と対応する位置にある比較元のデータが複数のノードを含むフラグメントである場合、フラグメントを変数に代入する。【選択図】図１１
2009223882.tif 000002
【特許請求の範囲】
【請求項１】
マークアップ言語により記述されたデータのパターンと、マークアップ言語により記述されたデータ又はマークアップ言語により記述されていないデータのパターンとの間の対応関係を定義した規則を取得する規則取得部と、
比較元のデータを取得するデータ取得部と、
前記比較元のデータに合致するパターンを選択するマッチング部と、を備え、
前記マッチング部は、前記パターンに変数が含まれる場合、前記パターンのうち前記変数以外のデータが前記比較元のデータに合致するパターンを選択し、
前記変数を含む前記パターンが選択されたとき、選択された前記パターンにおける前記変数の位置と対応する位置にある前記比較元のデータを前記変数に代入する変数管理部を更に備え、
前記変数管理部は、前記比較元のデータがマークアップ言語により記述されたデータであり、選択された前記パターンにおける前記変数の位置と対応する位置にある前記比較元のデータが複数のノードを含むフラグメントである場合、前記フラグメントを前記変数に代入することを特徴とするデータ処理装置。
【請求項２】
前記変数管理部は、選択された前記パターンにおける前記変数の位置と対応する前記比較元のデータの位置に、前記変数に代入可能な同種又は異種混合のデータが複数並列して存在する場合は、それらをリストとして前記変数に格納することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記変数管理部は、前記比較元のデータがマークアップ言語により記述されたデータであったときに、選択された前記パターンにおける前記変数の位置と対応する前記比較元のデータの位置にあるノードが複数の兄弟ノードを持つ場合は、それらのノード又はそれらのノードを頂点ノードとするフラグメントをリストとして前記変数に格納することを特徴とする請求項２に記載のデータ処理装置。
【請求項４】
前記変数管理部は、前記変数に、複数の任意のデータにマッチさせることを示すワイルドカードが付されている場合に、マッチした複数のデータをリストとして前記変数に格納することを特徴とする請求項２又は３に記載のデータ処理装置。
【請求項５】
前記変数管理部は、前記変数に、前記フラグメントのうちテキストノードを含まない任意のデータをマッチさせることを示すワイルドカードが付されている場合に、マッチしたフラグメントのうちテキストノードを除いたデータを前記変数に代入し、前記変数に、テキストノードも含んだ任意の前記フラグメントをマッチさせることを示すワイルドカードが付されている場合に、マッチしたフラグメントを前記変数に代入することを特徴とする請求項１から４のいずれかに記載のデータ処理装置。
【請求項６】
前記マッチング部がマークアップ言語により記述された要素又は属性同士を比較する際に、前記要素又は前記属性同士の名前空間を比較する名前空間管理部を更に備え、
前記マッチング部は、前記名前空間管理部により前記要素又は前記属性同士の名前空間が合致しないと判定された場合は、前記要素又は前記属性同士が合致しないと判定することを特徴とする請求項１から５のいずれかに記載のデータ処理装置。
【請求項７】
前記比較元のデータを、選択された前記パターンに対応するパターンのデータに変換する変換部を更に備えることを特徴とする請求項１から６のいずれかに記載のデータ処理装置。
【請求項８】
前記規則のうち、少なくとも一つの対応関係の定義は、対応する２つのパターンの間で同じ変数を含み、
前記比較元のデータに含まれるデータが前記変数に代入されることにより、前記比較元のデータが、前記比較元のデータの少なくとも一部を含んだ、前記比較元のデータとは異なるパターンのデータに変換されることを特徴とする請求項７に記載のデータ処理装置。
【請求項９】
前記マークアップ言語により記述されたパターンに、複数の値の集合を格納した変数が含まれ、前記変数に対する処理を記述する形式の構文により、前記複数の値のそれぞれに対して共通に実行すべき処理が記述されていた場合、前記複数の値のそれぞれに対して前記処理を実行する集合演算部を更に備えることを特徴とする請求項１から８のいずれかに記載のデータ処理装置。
【請求項１０】
前記構文は、前記処理を並列に実行する際の多重度を記述可能であり、前記パターンに、前記処理の多重度が記述されていた場合、前記集合演算部は、記述された多重度の数だけ前記処理を並列して実行することを特徴とする請求項９に記載のデータ処理装置。
【請求項１１】
前記構文は、前記処理の実行を開始するための条件を記述可能であり、前記パターンに、前記条件が記述されていた場合、前記集合演算部は、前記条件が満たされるまで待機してから前記処理を実行することを特徴とする請求項９又は１０に記載のデータ処理装置。
【請求項１２】
マークアップ言語により記述されたデータのパターンと、マークアップ言語により記述されたデータ又はマークアップ言語により記述されていないデータのパターンとの間の対応関係を定義した規則を取得するステップと、
比較元のデータを取得するステップと、
前記比較元のデータに合致するパターンを選択するステップと、
前記パターンに変数が含まれる場合、前記パターンのうち前記変数以外のデータが前記比較元のデータに合致するパターンを選択するステップと、
前記変数を含む前記パターンが選択されたとき、選択された前記パターンにおける前記変数の位置と対応する位置にある前記比較元のデータを前記変数に代入するステップと、
前記比較元のデータがマークアップ言語により記述されたデータであり、選択された前記パターンにおける前記変数の位置と対応する位置にある前記比較元のデータが複数のノードを含むフラグメントである場合、前記フラグメントを前記変数に代入するステップと、
を備えることを特徴とするデータ処理方法。
【請求項１３】
マークアップ言語により記述されたデータのパターンと、マークアップ言語により記述されたデータ又はマークアップ言語により記述されていないデータのパターンとの間の対応関係を定義した規則を取得するステップと、
比較元のデータを取得するステップと、
前記比較元のデータに合致するパターンを選択するステップと、
前記パターンに変数が含まれる場合、前記パターンのうち前記変数以外のデータが前記比較元のデータに合致するパターンを選択するステップ、
前記変数を含む前記パターンが選択されたとき、選択された前記パターンにおける前記変数の位置と対応する位置にある前記比較元のデータを前記変数に代入するステップと、
前記比較元のデータがマークアップ言語により記述されたデータであり、選択された前記パターンにおける前記変数の位置と対応する位置にある前記比較元のデータが複数のノードを含むフラグメントである場合、前記フラグメントを前記変数に代入するステップと、
をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文書処理技術に関し、特に、マークアップ言語により記述された文書を処理する文書処理装置及び方法に関する。
【背景技術】
【０００２】
ＸＭＬは、ネットワークなどを介して他者とデータを共有するのに適した形式として注目されており、ＸＭＬ文書を作成、表示、編集するためのアプリケーションが開発されている（たとえば、特許文献１参照）。ＸＭＬ文書は、文書型定義などにより定義されたボキャブラリ（タグセット）に基づいて作成されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−２９０８０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ボキャブラリは、任意に定義することが許されており、理論上、無限に多くのボキャブラリが存在しうる。本出願人は、このように柔軟な設計が許されるＸＭＬ文書を適切に処理することが可能な技術を開発した。そして、ＸＭＬの長所を十分に生かした利便性の高いデータ処理技術を想到するに至った。
【０００５】
本発明はこうした状況に鑑みてなされたものであり、その目的は、マークアップ言語により構造化された文書を適切に処理する技術を提供することにある。
【課題を解決するための手段】
【０００６】
本発明のある態様は、データ処理装置に関する。このデータ処理装置は、マークアップ言語により記述されたデータのパターンと、マークアップ言語により記述されたデータ又はマークアップ言語により記述されていないデータのパターンとの間の対応関係を定義した規則を取得する規則取得部と、比較元のデータを取得するデータ取得部と、前記比較元のデータに合致するパターンを選択するマッチング部と、を備え、前記マッチング部は、前記パターンに変数が含まれる場合、前記パターンのうち前記変数以外のデータが前記比較元のデータに合致するパターンを選択し、前記変数を含む前記パターンが選択されたとき、選択された前記パターンにおける前記変数の位置と対応する位置にある前記比較元のデータを前記変数に代入する変数管理部を更に備え、前記変数管理部は、前記比較元のデータがマークアップ言語により記述されたデータであり、選択された前記パターンにおける前記変数の位置と対応する位置にある前記比較元のデータが複数のノードを含むフラグメントである場合、前記フラグメントを前記変数に代入することを特徴とする。
【０００７】
前記変数管理部は、選択された前記パターンにおける前記変数の位置と対応する前記比較元のデータの位置に、前記変数に代入可能な同種又は異種混合のデータが複数並列して存在する場合は、それらをリストとして前記変数に格納してもよい。
【０００８】
前記変数管理部は、前記比較元のデータがマークアップ言語により記述されたデータであったときに、選択された前記パターンにおける前記変数の位置と対応する前記比較元のデータの位置にあるノードが複数の兄弟ノードを持つ場合は、それらのノード又はそれらのノードを頂点ノードとするフラグメントをリストとして前記変数に格納してもよい。
【０００９】
前記変数管理部は、前記変数に、複数の任意のデータにマッチさせることを示すワイルドカードが付されている場合に、マッチした複数のデータをリストとして前記変数に格納してもよい。
【００１０】
前記変数管理部は、前記変数に、前記フラグメントのうちテキストノードを含まない任意のデータをマッチさせることを示すワイルドカードが付されている場合に、マッチしたフラグメントのうちテキストノードを除いたデータを前記変数に代入し、前記変数に、テキストノードも含んだ任意の前記フラグメントをマッチさせることを示すワイルドカードが付されている場合に、マッチしたフラグメントを前記変数に代入してもよい。
【００１１】
データ処理装置は、前記マッチング部がマークアップ言語により記述された要素又は属性同士を比較する際に、前記要素又は前記属性同士の名前空間を比較する名前空間管理部を更に備えてもよく、前記マッチング部は、前記名前空間管理部により前記要素又は前記属性同士の名前空間が合致しないと判定された場合は、前記要素又は前記属性同士が合致しないと判定してもよい。
【００１２】
データ処理装置は、前記比較元のデータを、選択された前記パターンに対応するパターンのデータに変換する変換部を更に備えてもよい。
【００１３】
前記規則のうち、少なくとも一つの対応関係の定義は、対応する２つのパターンの間で同じ変数を含んでもよく、前記比較元のデータに含まれるデータが前記変数に代入されることにより、前記比較元のデータが、前記比較元のデータの少なくとも一部を含んだ、前記比較元のデータとは異なるパターンのデータに変換されてもよい。
【００１４】
本発明の別の態様は、データ処理方法に関する。このデータ処理方法は、マークアップ言語により記述されたデータのパターンと、マークアップ言語により記述されたデータ又はマークアップ言語により記述されていないデータのパターンとの間の対応関係を定義した規則を取得するステップと、比較元のデータを取得するステップと、前記比較元のデータに合致するパターンを選択するステップと、前記パターンに変数が含まれる場合、前記パターンのうち前記変数以外のデータが前記比較元のデータに合致するパターンを選択するステップ、前記変数を含む前記パターンが選択されたとき、選択された前記パターンにおける前記変数の位置と対応する位置にある前記比較元のデータを前記変数に代入するステップと、前記比較元のデータがマークアップ言語により記述されたデータであり、選択された前記パターンにおける前記変数の位置と対応する位置にある前記比較元のデータが複数のノードを含むフラグメントである場合、前記フラグメントを前記変数に代入するステップと、を備えることを特徴とする。
【００１５】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１６】
本発明によれば、マークアップ言語により構造化された文書を適切に処理する技術を提供することができる。
【図面の簡単な説明】
【００１７】
【図１】前提技術に係る文書処理装置の構成を示す図である。
【図２】文書処理装置により編集されるＸＭＬ文書の例を示す図である。
【図３】図２に示したＸＭＬ文書をＨＴＭＬで記述された表にマッピングする例を示す図である。
【図４（ａ）】図２に示したＸＭＬ文書を図３に示した表にマッピングするための定義ファイルの例を示す図である。
【図４（ｂ）】図２に示したＸＭＬ文書を図３に示した表にマッピングするための定義ファイルの例を示す図である。
【図５】図２に示したＸＭＬ文書を、図３に示した対応によりＨＴＭＬにマッピングして表示した画面の例を示す図である。
【図６】ユーザが定義ファイルを生成するために、定義ファイル生成部がユーザに提示するグラフィカルユーザインターフェースの例を示す図である。
【図７】定義ファイル生成部により生成された画面レイアウトの他の例を示す図である。
【図８】文書処理装置によるＸＭＬ文書の編集画面の一例を示す図である。
【図９】文書処理装置により編集されるＸＭＬ文書の他の例を示す図である。
【図１０】図９に示した文書を表示した画面の例を示す図である。
【図１１】第１の実施の形態に係る文書処理装置の構成を示す図である。
【図１２】プログラムコードの例を示す図である。
【図１３】ソース文書の例を示す図である。
【図１４】図１３に示したソース文書を図１２に示したプログラムで変換したデスティネーション文書を示す図である。
【図１５】図１４に示したデスティネーション文書を表示した画面の例を示す図である。
【図１６】第２の実施の形態に係る文書処理装置の構成を示す図である。
【図１７】図１７（ａ）（ｂ）（ｃ）は、第２の実施の形態に係る構文で記述されたプログラムコードの例を示す図である。
【発明を実施するための形態】
【００１８】
（前提技術）
図１は、前提技術に係る文書処理装置２０の構成を示す。文書処理装置２０は、文書内のデータが階層構造を有する複数の構成要素に分類された構造化文書を処理するが、本前提技術では構造化文書の一例としてＸＭＬ文書を処理する例について説明する。文書処理装置２０は、主制御ユニット２２、編集ユニット２４、ＤＯＭユニット３０、ＣＳＳユニット４０、ＨＴＭＬユニット５０、ＳＶＧユニット６０、及び変換部の一例であるＶＣユニット８０を備える。これらの構成は、ハードウエアコンポーネントでいえば、任意のコンピュータのＣＰＵ、メモリ、メモリにロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者には理解されるところである。
【００１９】
主制御ユニット２２は、プラグインのロードや、コマンド実行のフレームワークを提供する。編集ユニット２４は、ＸＭＬ文書を編集するためのフレームワークを提供する。文書処理装置２０における文書の表示及び編集機能は、プラグインにより実現されており、文書の種別に応じて必要なプラグインが主制御ユニット２２又は編集ユニット２４によりロードされる。主制御ユニット２２又は編集ユニット２４は、処理対象となるＸＭＬ文書の名前空間を参照して、ＸＭＬ文書がいずれのボキャブラリにより記述されているかを判別し、そのボキャブラリに対応した表示又は編集用のプラグインをロードして表示や編集を実行させる。例えば、文書処理装置２０には、ＨＴＭＬ文書の表示及び編集を行うＨＴＭＬユニット５０、ＳＶＧ文書の表示及び編集を行うＳＶＧユニット６０など、ボキャブラリ（タグセット）ごとに表示系及び編集系がプラグインとして実装されており、ＨＴＭＬ文書を編集するときはＨＴＭＬユニット５０が、ＳＶＧ文書を編集するときはＳＶＧユニット６０が、それぞれロードされる。後述するように、ＨＴＭＬとＳＶＧの双方の構成要素を含む複合文書が処理対象となっている場合は、ＨＴＭＬユニット５０とＳＶＧユニット６０の双方がロードされる。
【００２０】
このような構成によれば、ユーザは、必要な機能のみを選択してインストールし、後から適宜機能を追加又は削除することができるので、プログラムを格納するハードディスクなどの記録媒体の記憶領域を有効に活用することができ、また、プログラム実行時にも、メモリの浪費を防ぐことができる。また、機能拡張性に優れており、開発主体としても、プラグインの形で新たなボキャブラリに対応することが可能なので開発が容易となり、ユーザとしても、プラグインの追加により容易かつ低コストにて機能を追加することができる。
【００２１】
編集ユニット２４は、ユーザインターフェースを介してユーザから編集指示のイベントを受け付け、そのイベントを適切なプラグインなどに通知するともに、イベントの再実行（リドゥ）又は実行の取消（アンドゥ）などの処理を制御する。
【００２２】
ＤＯＭユニット３０は、ＤＯＭ提供部３２、ＤＯＭ生成部３４、及び出力部３６を含み、ＸＭＬ文書をデータとして扱うときのアクセス方法を提供するために定められた文書オブジェクトモデル（Document Object Model：ＤＯＭ）に準拠した機能を実現する。ＤＯＭ提供部３２は、編集ユニット２４に定義されているインタフェースを満たすＤＯＭの実装である。ＤＯＭ生成部３４は、ＸＭＬ文書からＤＯＭツリーを生成する。後述するように、処理対象となるＸＭＬ文書が、ＶＣユニット８０により他のボキャブラリにマッピングされる場合は、マッピング元のＸＭＬ文書に対応するソースツリーと、マッピング先のＸＭＬ文書に対応するデスティネーションツリーが生成される。出力部３６は、例えば編集終了時に、ＤＯＭツリーをＸＭＬ文書として出力する。
【００２３】
ＣＳＳユニット４０は、ＣＳＳ解析部４２、ＣＳＳ提供部４４、及びレンダリング部４６を含み、ＣＳＳに準拠した表示機能を提供する。ＣＳＳ解析部４２は、ＣＳＳの構文を解析するパーサの機能を有する。ＣＳＳ提供部４４は、ＣＳＳオブジェクトの実装であり、ＤＯＭツリーに対してＣＳＳのカスケード処理を行う。レンダリング部４６は、ＣＳＳのレンダリングエンジンであり、ＣＳＳを用いてレイアウトされるＨＴＭＬなどのボキャブラリで記述された文書の表示に用いられる。
【００２４】
ＨＴＭＬユニット５０は、ＨＴＭＬにより記述された文書を表示又は編集する。ＳＶＧユニット６０は、ＳＶＧにより記述された文書を表示又は編集する。これらの表示／編集系は、プラグインの形で実現されており、それぞれ、文書を表示する表示部（Canvas）５６、６６、編集指示を含むイベントを送受信する制御部（Editlet）５２、６２、編集コマンドを受けてＤＯＭに対して編集を行う編集部（Zone）５４、６４を備える。制御部５２又は６２が外部からＤＯＭツリーの編集コマンドを受け付けると、編集部５４又は６４がＤＯＭツリーを変更し、表示部５６又は６６が表示を更新する。これらは、ＭＶＣ（Model-View-Controller）と呼ばれるフレームワークに類似する構成をとっており、概ね、表示部５６及び６６が「View」に、制御部５２及び６２が「Controller」に、編集部５４及び６４とＤＯＭの実体が「Model」に、それぞれ対応する。本前提技術の文書処理装置２０では、ＸＭＬ文書をツリー表示形式で編集するだけでなく、それぞれのボキャブラリに応じた編集を可能とする。例えば、ＨＴＭＬユニット５０は、ＨＴＭＬ文書をワードプロセッサに類似した方式で編集するためのユーザインターフェースを提供し、ＳＶＧユニット６０は、ＳＶＧ文書を画像描画ツールに類似した方式で編集するためのユーザインターフェースを提供する。
【００２５】
ＶＣユニット８０は、マッピング部８２、定義ファイル取得部８４、及び定義ファイル生成部８６を含み、あるボキャブラリにより記述された文書を、他のボキャブラリにマッピングすることにより、マッピング先のボキャブラリに対応した表示編集用プラグインで文書を表示又は編集するためのフレームワークを提供する。本前提技術では、この機能を、ボキャブラリコネクション（Vocabulary Connection：ＶＣ）と呼ぶ。定義ファイル取得部８４は、マッピングの定義を記述したスクリプトファイルを取得する。この定義ファイルは、ノードごとに、ノード間の対応（コネクション）を記述する。このとき、各ノードの要素値や属性値の編集の可否を指定してもよい。また、ノードの要素値や属性値を用いた演算式を記述してもよい。これらの機能については、後で詳述する。マッピング部８２は、定義ファイル取得部８４が取得したスクリプトファイルを参照して、ＤＯＭ生成部３４にデスティネーションツリーを生成させ、ソースツリーとデスティネーションツリーの対応関係を管理する。定義ファイル生成部８６は、ユーザが定義ファイルを生成するためのグラフィカルユーザインターフェースを提供する。
【００２６】
ＶＣユニット８０は、ソースツリーとデスティネーションツリーの間のコネクションを監視し、表示を担当するプラグインにより提供されるユーザインタフェースを介してユーザから編集指示を受け付けると、まずソースツリーの該当するノードを変更する。ＤＯＭユニット３０が、ソースツリーが変更された旨のミューテーションイベントを発行すると、ＶＣユニット８０は、そのミューテーションイベントを受けて、ソースツリーの変更にデスティネーションツリーを同期させるべく、変更されたノードに対応するデスティネーションツリーのノードを変更する。デスティネーションツリーを表示／編集するプラグイン、例えばＨＴＭＬユニット５０は、デスティネーションツリーが変更された旨のミューテーションイベントを受けて、変更されたデスティネーションツリーを参照して表示を更新する。このような構成により、少数のユーザにより利用されるローカルなボキャブラリにより記述された文書であっても、他のメジャーなボキャブラリに変換することで、文書を表示することができるとともに、編集環境が提供される。
【００２７】
文書処理装置２０により文書を表示又は編集する動作について説明する。文書処理装置２０が処理対象となる文書を読み込むと、ＤＯＭ生成部３４が、そのＸＭＬ文書からＤＯＭツリーを生成する。また、主制御ユニット２２又は編集ユニット２４は、名前空間を参照して文書を記述しているボキャブラリを判別する。そのボキャブラリに対応したプラグインが文書処理装置２０にインストールされている場合は、そのプラグインをロードして、文書を表示／編集させる。プラグインがインストールされていない場合は、マッピングの定義ファイルが存在するか否かを確認する。定義ファイルが存在する場合、定義ファイル取得部８４が定義ファイルを取得し、その定義に従って、デスティネーションツリーが生成され、マッピング先のボキャブラリに対応するプラグインにより文書が表示／編集される。複数のボキャブラリを含む複合文書である場合は、後述するように、それぞれのボキャブラリに対応したプラグインにより、文書の該当箇所がそれぞれ表示／編集される。定義ファイルが存在しない場合は、文書のソース又はツリー構造を表示し、その表示画面において編集が行われる。
【００２８】
図２は、処理対象となるＸＭＬ文書の例を示す。このＸＭＬ文書は、生徒の成績データを管理するために用いられる。ＸＭＬ文書のトップノードである構成要素「成績」は、配下に、生徒ごとに設けられた構成要素「生徒」を複数有する。構成要素「生徒」は、属性値「名前」と、子要素「国語」、「数学」、「理科」、「社会」を有する。属性値「名前」は、生徒の名前を格納する。構成要素「国語」、「数学」、「理科」、「社会」は、それぞれ、国語、数学、理科、社会の成績を格納する。例えば、名前が「Ａ」である生徒の国語の成績は「９０」、数学の成績は「５０」、理科の成績は「７５」、社会の成績は「６０」である。以下、この文書で使用されているボキャブラリ（タグセット）を、「成績管理ボキャブラリ」と呼ぶ。
【００２９】
本前提技術の文書処理装置２０は、成績管理ボキャブラリの表示／編集に対応したプラグインを有しないので、この文書をソース表示、ツリー表示以外の方法で表示するためには、前述したＶＣ機能が用いられる。すなわち、成績管理ボキャブラリを、プラグインが用意された別のボキャブラリ、例えば、ＨＴＭＬやＳＶＧなどにマッピングするための定義ファイルを用意する必要がある。ユーザ自身が定義ファイルを作成するためのユーザインターフェースについては後述することにして、ここでは、既に定義ファイルが用意されているとして説明を進める。
【００３０】
図３は、図２に示したＸＭＬ文書をＨＴＭＬで記述された表にマッピングする例を示す。図３の例では、成績管理ボキャブラリの「生徒」ノードを、ＨＴＭＬにおける表（「TABLE」ノード）の行（「TR」ノード）に対応づけ、各行の第１列には属性値「名前」を、第２列には「国語」ノードの要素値を、第３列には「数学」ノードの要素値を、第４列には「理科」ノードの要素値を、第５列には「社会」ノードの要素値を、それぞれ対応付ける。これにより、図２に示したＸＭＬ文書を、ＨＴＭＬの表形式で表示することができる。また、これらの属性値及び要素値は、編集可能であることが指定されており、ユーザがＨＴＭＬによる表示画面上で、ＨＴＭＬユニット５０の編集機能により、これらの値を編集することができる。第６列には、国語、数学、理科、社会の成績の加重平均を算出する演算式が指定されており、生徒の成績の平均点が表示される。このように、定義ファイルに演算式を指定可能とすることにより、より柔軟な表示が可能となり、編集時のユーザの利便性を向上させることができる。なお、第６列は、編集不可であることが指定されており、平均点のみを個別に編集することができないようにしている。このように、マッピング定義において、編集の可否を指定可能とすることにより、ユーザの誤操作を防ぐことができる。
【００３１】
図４（ａ）及び図４（ｂ）は、図２に示したＸＭＬ文書を図３に示した表にマッピングするための定義ファイルの例を示す。この定義ファイルは、定義ファイル用に定義されたスクリプト言語により記述される。定義ファイルには、コマンドの定義と、表示のテンプレートが記述されている。図４（ａ）（ｂ）の例では、コマンドとして、「生徒の追加」と「生徒の削除」が定義されており、それぞれ、ソースツリーにノード「生徒」を挿入する操作と、ソースツリーからノード「生徒」を削除する操作が対応付けられている。また、テンプレートとして、表の第１行に「名前」、「国語」などの見出しが表示され、第２行以降に、ノード「生徒」の内容が表示されることが記述されている。ノード「生徒」の内容を表示するテンプレート中、「text-of」と記述された項は「編集可能」であることを意味し、「value-of」と記述された項は「編集不可能」であることを意味する。また、ノード「生徒」の内容を表示する行のうち、第６列には、「(src:国語 + src:数学 + src:理科 + src:社会) div 4」という計算式が記述されており、生徒の成績の平均が表示されることを意味する。
【００３２】
図５は、図２に示した成績管理ボキャブラリで記述されたＸＭＬ文書を、図３に示した対応によりＨＴＭＬにマッピングして表示した画面の例を示す。表９０の各行には、左から、各生徒の名前、国語の成績、数学の成績、理科の成績、社会の成績、及び平均点が表示されている。ユーザは、この画面上で、ＸＭＬ文書を編集することができる。たとえば、第２行第３列の値を「７０」に変更すると、このノードに対応するソースツリーの要素値、すなわち、生徒「Ｂ」の数学の成績が「７０」に変更される。このとき、ＶＣユニット８０は、デスティネーションツリーをソースツリーに追従させるべく、デスティネーションツリーの該当箇所を変更し、ＨＴＭＬユニット５０が、変更されたデスティネーションツリーに基づいて表示を更新する。したがって、画面上の表においても、生徒「Ｂ」の数学の成績が「７０」に変更され、更に、平均点が「５５」に変更される。
【００３３】
図５に示した画面には、図４（ａ）（ｂ）に示した定義ファイルに定義されたように、「生徒の追加」及び「生徒の削除」のコマンドがメニューに表示される。ユーザがこれらのコマンドを選択すると、ソースツリーにおいて、ノード「生徒」が追加又は削除される。このように、本前提技術の文書処理装置２０では、階層構造の末端の構成要素の要素値を編集するのみではなく、階層構造を編集することも可能である。このようなツリー構造の編集機能は、コマンドの形でユーザに提供されてもよい。また、例えば、表の行を追加又は削除するコマンドが、ノード「生徒」を追加又は削除する操作に対応づけられてもよい。また、他のボキャブラリを埋め込むコマンドがユーザに提供されてもよい。この表を入力用テンプレートとして、穴埋め形式で新たな生徒の成績データを追加することもできる。以上のように、ＶＣ機能により、ＨＴＭＬユニット５０の表示／編集機能を利用しつつ、成績管理ボキャブラリで記述された文書を編集することが可能となる。
【００３４】
図６は、ユーザが定義ファイルを生成するために、定義ファイル生成部８６がユーザに提示するグラフィカルユーザインタフェースの例を示す。画面左側の領域９１には、マッピング元のＸＭＬ文書がツリー表示されている。画面右側の領域９２には、マッピング先のＸＭＬ文書の画面レイアウトが示されている。この画面レイアウトは、ＨＴＭＬユニット５０により編集可能となっており、ユーザは、画面右側の領域９２において、文書を表示するための画面レイアウトを作成する。そして、例えば、マウスなどのポインティングデバイスにより、画面左側の領域９１に表示されたマッピング元のＸＭＬ文書のノードを、画面右側の領域９２に表示されたＨＴＭＬによる画面レイアウト中へドラッグ＆ドロップ操作を行うことにより、マッピング元のノードと、マッピング先のノードとのコネクションが指定される。例えば、要素「生徒」の子要素である「数学」を、ＨＴＭＬ画面の表９０の第１行第３列にドロップすると、「数学」ノードと、３列目の「ＴＤ」ノードの間にコネクションが張られる。各ノードには、編集の可否が指定できるようになっている。また、表示画面中には、演算式を埋め込むこともできる。画面の編集が終わると、定義ファイル生成部８６は、画面レイアウトとノード間のコネクションを記述した定義ファイルを生成する。
【００３５】
ＸＨＴＭＬ、ＭａｔｈＭＬ、ＳＶＧなどの主要なボキャブラリに対応したビューワやエディタは既に開発されているが、図２に示した文書のようなオリジナルなボキャブラリで記述された文書に対応したビューワやエディタを開発するのは現実的でない。しかし、上記のように、他のボキャブラリにマッピングするための定義ファイルを作成すれば、ビューワやエディタを開発しなくても、ＶＣ機能を利用して、オリジナルなボキャブラリで記述された文書を表示・編集することができる。
【００３６】
図７は、定義ファイル生成部８６により生成された画面レイアウトの他の例を示す。図７の例では、成績管理ボキャブラリで記述されたＸＭＬ文書を表示するための画面に、表９０と、円グラフ９３が作成されている。この円グラフ９３は、ＳＶＧにより記述される。後述するように、本前提技術の文書処理装置２０は、一つのＸＭＬ文書内に複数のボキャブラリを含む複合文書を処理することができるので、この例のように、ＨＴＭＬで記述された表９０と、ＳＶＧで記述された円グラフ９３とを、一つの画面上に表示することができる。
【００３７】
図８は、文書処理装置２０によるＸＭＬ文書の編集画面の一例を示す。図８の例では、一つの画面が複数に分割されており、それぞれの領域において、処理対象となるＸＭＬ文書を異なる複数の表示形式により表示している。領域９４には、文書のソースが表示されており、領域９５には、文書のツリー構造が表示されており、領域９６には、図５に示したＨＴＭＬにより記述された表が表示されている。これらのいずれの画面上においても、文書の編集が可能であり、いずれかの画面上でユーザが編集を行うと、ソースツリーが変更され、それぞれの画面の表示を担当するプラグインが、ソースツリーの変更を反映すべく画面を更新する。具体的には、ソースツリーの変更を通知するミューテーションイベントのリスナーとして、それぞれの編集画面の表示を担当するプラグインの表示部を登録しておき、いずれかのプラグイン又はＶＣユニット８０によりソースツリーが変更されたときに、編集画面を表示中の全ての表示部が、発行されたミューテーションイベントを受け取って画面を更新する。このとき、プラグインがＶＣ機能により表示を行っている場合は、ＶＣユニット８０がソースツリーの変更に追従してデスティネーションツリーを変更した後、変更されたデスティネーションツリーを参照してプラグインの表示部が画面を更新する。
【００３８】
例えば、ソース表示及びツリー表示を、専用のプラグインにより実現している場合は、ソース表示用プラグインとツリー表示用プラグインは、デスティネーションツリーを用いず、直接ソースツリーを参照して表示を行う。この場合、いずれかの画面において編集が行われると、ソース表示用プラグインとツリー表示用プラグインは、変更されたソースツリーを参照して画面を更新し、領域９６の画面を担当しているＨＴＭＬユニット５０は、ソースツリーの変更に追従して変更されたデスティネーションツリーを参照して画面を更新する。
【００３９】
ソース表示及びツリー表示は、ＶＣ機能を利用して実現することもできる。すなわち、ソース、ツリー構造をＨＴＭＬによりレイアウトし、そのＨＴＭＬにＸＭＬ文書をマッピングして、ＨＴＭＬユニット５０により表示してもよい。この場合、ソース形式、ツリー形式、表形式の３つのデスティネーションツリーが生成されることになる。いずれかの画面において編集が行われると、ＶＣユニット８０は、ソースツリーを変更した後、ソース形式、ツリー形式、表形式の３つのデスティネーションツリーをそれぞれ変更し、ＨＴＭＬユニット５０は、それらのデスティネーションツリーを参照して、３つの画面を更新する。
【００４０】
このように、一つの画面上に複数の表示形式で文書を表示することにより、ユーザの利便性を向上させることができる。例えば、ユーザは、ソース表示又はツリー表示により文書の階層構造を把握しつつ、表９０などを用いて視覚的に分かりやすい形式で文書を表示し、編集することができる。上記の例では、一つの画面を分割して複数の表示形式による画面を同時に表示したが、一つの画面に一つの表示形式による画面を表示し、表示形式をユーザの指示により切り替え可能としてもよい。この場合、主制御ユニット２２が、ユーザから表示形式の切り替え要求を受け付け、各プラグインに指示して表示を切り替える。
【００４１】
図９は、文書処理装置２０により編集されるＸＭＬ文書の他の例を示す。図９に示したＸＭＬ文書では、ＳＶＧ文書の「foreignObject」タグの中にＸＨＴＭＬ文書が埋め込まれており、さらに、ＸＨＴＭＬ文書の中にＭａｔｈＭＬで記述された数式が入っている。このような場合、編集ユニット２４が、名前空間を参照して、適切な表示系に描画作業を振り分ける。図９の例では、編集ユニット２４は、まず、ＳＶＧユニット６０に四角形を描画させ、つづいて、ＨＴＭＬユニット５０にＸＨＴＭＬ文書を描画させる。さらに、図示しないＭａｔｈＭＬユニットに、数式を描画させる。こうして、複数のボキャブラリを包含する複合文書が適切に表示される。表示結果を図１０に示す。
【００４２】
文書編集中、カーソル（キャリッジ）の位置に応じて、表示されるメニューを切り替えてもよい。すなわち、カーソルが、ＳＶＧ文書が表示された領域内に存在するときは、ＳＶＧユニット６０が提供するメニュー、又はＳＶＧ文書をマッピングするための定義ファイルに定義されたコマンドを表示し、カーソルが、ＸＨＴＭＬ文書が表示された領域内に存在するときは、ＨＴＭＬユニット５０が提供するメニュー、又はＸＨＴＭＬ文書をマッピングするための定義ファイルに定義されたコマンドを表示する。これにより、編集位置に応じて適切なユーザインターフェースを提供することができる。
【００４３】
複合文書において、あるボキャブラリに対応する適切なプラグイン又はマッピング定義ファイルがなかった場合は、そのボキャブラリにより記述された部分は、ソース表示又はツリー表示されてもよい。従来、ある文書に他の文書を埋め込んだ複合文書を開くとき、埋め込まれた文書を表示するアプリケーションがインストールされていないと、その内容を表示することができなかったが、本前提技術では、表示用のアプリケーションが存在しなくても、テキストデータにより構成されたＸＭＬ文書をソース表示又はツリー表示することにより内容を把握することができる。これは、テキストベースであるＸＭＬなどの文書ならではの特徴といえる。
【００４４】
データがテキストベースで記述されることの他の利点として、例えば、複合文書中の、あるボキャブラリにより記述される部分において、同一文書内の他のボキャブラリで記述された部分のデータを参照してもよい。また、文書内で検索を実行する時に、ＳＶＧなどの図に埋め込まれた文字列も検索対象とすることができる。
【００４５】
あるボキャブラリにより記述された文書内に、他のボキャブラリのタグを用いてもよい。このＸＭＬ文書は、妥当（valid）ではないが、整形式（well-formed）であれば、有効なＸＭＬ文書として処理可能である。この場合、挿入された他のボキャブラリのタグは、定義ファイルによりマッピングされてもよい。例えば、ＸＨＴＭＬ文書中に、「重要」、「最重要」などのタグを使用し、これらのタグで囲まれた部分を強調表示してもよいし、重要度の順にソートして表示してもよい。
【００４６】
図１０に示した編集画面において、ユーザにより文書が編集されると、編集された部分を担当するプラグイン又はＶＣユニット８０がソースツリーを変更する。ソースツリーには、ノードごとにミューテーションイベントのリスナーを登録できるようになっており、通常は、各ノードが属するボキャブラリに対応したプラグインの表示部又はＶＣユニット８０がリスナーとして登録される。ＤＯＭ提供部３２は、ソースツリーが変更されると、変更されたノードから上位の階層へたどって、登録されたリスナーがあれば、そのリスナーへミューテーションイベントを発行する。例えば、図９に示した文書において、＜ｈｔｍｌ＞ノードの下位のノードが変更された場合、＜ｈｔｍｌ＞ノードにリスナーとして登録されたＨＴＭＬユニット５０にミューテーションイベントが通知されるとともに、その上位の＜ｓｖｇ＞ノードにリスナーとして登録されたＳＶＧユニット６０にもミューテーションイベントが通知される。このとき、ＨＴＭＬユニット５０は、変更されたソースツリーを参照して表示を更新する。ＳＶＧユニット６０は、自身のボキャブラリに属するノードが変更されていないので、ミューテーションイベントを無視してもよい。
【００４７】
編集の内容によっては、ＨＴＭＬユニット５０による表示の更新に伴って、全体のレイアウトが変わる可能性がある。この場合は、画面のレイアウトを管理する構成、例えば最上位のノードの表示を担当するプラグインにより、プラグインごとの表示領域のレイアウトが更新される。例えば、ＨＴＭＬユニット５０による表示領域が以前より大きくなった場合、ＨＴＭＬユニット５０は、まず自身の担当する部分を描画して、表示領域の大きさを決定する。そして、画面のレイアウトを管理する構成に、変更後の表示領域の大きさを通知し、レイアウトの更新を依頼する。画面のレイアウトを管理する構成は、通知を受けて、プラグインごとの表示領域を再レイアウトする。こうして、編集された部分の表示が適切に更新されるとともに、画面全体のレイアウトが更新される。
【００４８】
（第１の実施の形態）
前提技術で説明したボキャブラリコネクション機能は、図４に示したように、ＸＳＬＴを拡張した言語により記述された定義ファイルを用いて実現された。本実施の形態では、より柔軟に、ＸＭＬデータとＸＭＬデータ又は他のデータとの対応関係を表現し、ＸＭＬデータとＸＭＬデータ又は他のデータとの間の変換、逆変換、対応関係の検証などを実現する技術について説明する。
【００４９】
ＸＳＬＴは、ＸＭＬで記述された文書を別のＸＭＬで記述された文書に変換するための言語であるが、変換に方向性があるため、逆変換を行う必要があるときには、逆変換の手順を別途定義する必要がある。例えば、処理系が実装されていないボキャブラリで記述された文書を、ＸＳＬＴを用いて、処理系の実装されたボキャブラリの文書へ変換すれば、変換後の文書を処理系により編集することはできるが、その編集を元の文書に反映させるには、逆変換を行う必要がある。しかし、変換先の文書に対して任意の編集を許すと、変換元の文書との間の整合性を保つことが困難になる。
【００５０】
前提技術では、順方向の変換の定義におけるノード間の対応関係を監視する構成を設け、変換先文書を表示した編集画面において、変換元文書に対する編集操作を受け付け、対応関係を監視する構成を介して、まず変換元文書を更新した後に、変換先文書へ更新を反映させることで、変換元文書と変換先文書との間の整合性を保ちながら編集を行う技術を採用し、このような問題を解決した。
【００５１】
しかし、ＸＳＬＴにはもう一つの問題がある。それは、単一のＸＭＬ構造に基づいて処理を行うことしかできないので、複数のノードを含んだＸＭＬフラグメントの対応関係を表現することができないことである。そこで、本実施の形態では、ＸＭＬフラグメントを代数化し、代数化されたＸＭＬフラグメントを含むデータ間の対応関係を定義することを可能とすることにより、より柔軟にデータ間の対応関係を表現し、データ間の変換、逆変換、対応関係の検証などを実現する技術を提案する。
【００５２】
データ間の対応関係を定義し、それらの対応関係に基づいてパターンマッチングを行うのに適したプログラミング言語として、例えば、一階述語論理に基づいたプログラミング言語であるProlog（Programming in Logic）などがある。しかし、Prologのパターンマッチングは、コードパターンのマッチングであり、そのままでは、ＸＭＬフラグメントを取り扱うのに適さない。例えば、要素名を比較する際に、実際には同じ名前空間であるのに、異なる名前空間接頭辞を用いて記述されているために、文字列としては一致せずにマッチングに失敗することがある。また、ある要素に複数の属性を記述できる場合に、実際には記述する順序は意味を持たないのに、規則に定義された順序とは異なる順序で属性が記述されているために、マッチングに失敗することがある。どのような順序で属性が記述されていてもマッチングに成功するようにするためには、想定されるあらゆる属性の並びを予め定義しておかなければならず、非常に煩雑である。本実施の形態では、こうしたＸＭＬの特性に合わせて、任意のＸＭＬフラグメントを一意に特定可能な表記法を採用する。
【００５３】
図１１は、第１の実施の形態に係る文書処理装置の構成を示す。第１の実施の形態に係る文書処理装置１００は、図１に示した前提技術の文書処理装置２０の構成に加えて、マッチングユニット７０を更に備える。マッチングユニット７０は、名前空間管理部７２、変数管理部７４、マッチング部７６を含む。その他の構成及び動作は、前提技術と同様である。
【００５４】
マッチングユニット７０は、マークアップ言語により記述されたデータのパターンと、マークアップ言語により記述されたデータ又はマークアップ言語により記述されていないデータのパターンとの間の対応関係を定義した規則に基づいて、比較元のデータに合致するパターンを探索しつつ、比較元のデータを処理する。マッチングユニット７０は、Prolog等のプログラミング言語により記述されたコードにしたがって逐次に処理を実行する処理系であってもよいし、プログラミング言語により記述されたコードをコンパイルした処理系であってもよい。
【００５５】
マッチング部７６は、データのパターン間の対応関係を定義した規則の中から、比較元のデータに合致するパターンを選択する。マッチング部７６は、パターンに変数が含まれる場合、パターンのうち変数以外のデータが比較元のデータに合致するパターンを選択する。
【００５６】
変数管理部７４は、マッチング部７６により変数を含むパターンが選択されたとき、選択されたパターンにおける変数の位置と対応する位置にある比較元のデータを変数に代入する。変数管理部７４は、比較元のデータがマークアップ言語により記述されたデータであり、選択されたパターンにおける変数の位置と対応する位置にある比較元のデータが複数のノードを含むフラグメントである場合、フラグメントを変数に代入する。
【００５７】
変数管理部７４は、選択されたパターンにおける変数の位置と対応する比較元のデータの位置に、同種のデータが複数並列して存在する場合は、それらをリストとして変数に格納する。とくに、比較元のデータがマークアップ言語により記述されたデータであったときに、選択されたパターンにおける変数の位置と対応する比較元のデータの位置にあるノードが複数の兄弟ノードを持つ場合は、変数管理部７４は、それらのノード又はそれらのノードを頂点ノードとするフラグメントをリストとして変数に格納する。
【００５８】
名前空間管理部７２は、マッチング部７６がマークアップ言語により記述された要素又は属性同士を比較する際に、要素又は属性同士の名前空間を比較する。名前空間管理部７２は、文書において宣言された名前空間接頭辞と名前空間ＵＲＩの対応を保持しており、要素又は属性に付された名前空間接頭辞を名前空間ＵＲＩに変換し、名前空間ＵＲＩを比較することにより、要素又は属性同士の名前空間が合致するか否かを判定する。すなわち、名前空間接頭辞が異なっていても、同じ名前空間ＵＲＩに対応づけられたものであれば、名前空間が合致すると判定する。逆に、同じ名前空間接頭辞が付されていても、異なる名前空間ＵＲＩに対応づけられたものであれば、名前空間が合致しないと判定する。名前空間管理部７２により要素又は属性同士の名前空間が合致しないと判定された場合は、マッチング部７６は、要素又は属性同士が合致しないと判定する。
【００５９】
図１２は、ＸＭＬ文書を変換するプログラムのコードの例を示す。図１２に示したプログラムでは、Prologと同様の表記法により、データ間の対応関係を定義する規則が記述されているが、上述したように、ＸＭＬフラグメントを取り扱うための拡張がなされている。例えば、変数に接尾辞としてワイルドカード「*」が付されている場合、マッチング部７６は、数、順序、種別を問わずに、複数の任意のＸＭＬフラグメントに変数をマッチさせる。このとき、変数管理部７４は、マッチした複数のＸＭＬフラグメントをリストとして変数に代入する。また、変数に接尾辞としてワイルドカード「+」が付されている場合、マッチング部７６は、テキストノードを含む任意のＸＭＬフラグメントに変数をマッチさせる。このとき、変数管理部７４は、マッチしたＸＭＬフラグメントを変数に代入する。また、変数に接尾辞としてワイルドカード「-」が付されている場合、マッチング部７６は、テキストノードを除いた任意のＸＭＬフラグメントに変数をマッチさせる。このとき、変数管理部７４は、マッチしたＸＭＬフラグメントのうちテキストノードを除いたデータを変数に代入する。ドキュメント型のＸＭＬフラグメントの場合、接尾辞「+」が付された変数には、テキストノードを含む全てのノードが代入されるが、接尾辞「-」が付された変数には、テキストノード以外のノードが代入される。
【００６０】
図１３は、ソース文書の例を示す。図１３に示した文書は、カクテルのレシピを記述するためのボキャブラリで記述されている。図１３では、名前空間宣言が省略されているが、文書中に名前空間宣言がなされているものとする。文書には、頂点要素「Recipe」の下位に、レシピの名称を格納する要素「recipename」と、グラスの種別を格納する要素「glass」と、材料を格納する要素「ingredients」と、味の種別を格納する要素「taste」が記述されている。要素「ingredients」は、材料の種別ごとに、１以上の要素「ingredient」を含んでおり、各要素「ingredient」は、材料の名称を格納する要素「name」と、材料の分量を格納する要素「measure」を含む。要素「measure」は、分量の単位を格納する属性「unit」を含む。
【００６１】
ここで、マッチングユニット７０が、図１３に示したソース文書を、図１２に示した定義を用いて変換する動作の詳細を説明する。マッチングユニット７０が、順方向変換用の質問「trans(入力ファイル名,出力ファイル名)」を受け付けると、マッチング部７６は、この質問に合致する事実又は規則を探索し、規則５００「trans(_InFile,_Outfile)」を選択する。このとき、変数管理部７４は、質問の第１引数に指定された入力ファイル名を自由変数「_InFile」に代入し、第２引数に指定された出力ファイル名を自由変数「_OutFile」に代入する。
【００６２】
つづいて、マッチングユニット７０は、規則５００の１番目のゴールを実行し、指定された入力ファイルをロードする。ここでは、図１３に示したソース文書がロードされる。このとき、ＤＯＭ生成部は、ロードされた文書からソースＤＯＭを生成する。変数管理部７４は、生成されたソースＤＯＭを自由変数「_sourceXML」に代入する。
【００６３】
つづいて、マッチングユニット７０は、規則５００の２番目のゴールである「eq(_sourceXML,_destXML)」を実行する。マッチング部７６は、変数「_sourceXML」に格納されているソースＤＯＭと、規則５０２の頭部の第１引数とを比較し、自由変数以外の部分のマッチングに成功すれば、すなわち、ソースＤＯＭが規則５０２の頭部の第１引数に記述されたＸＭＬフラグメントと同じ構造を有していれば、規則５０２を選択する。このとき、変数管理部７４は、各自由変数に、ソースＤＯＭ中の該当位置のＸＭＬフラグメントを代入する。
【００６４】
図１３に示したソース文書は、規則５０２の頭部の第１引数と同じ構造を有しているので、マッチング部７６は規則５０２を選択し、変数管理部７４は、自由変数「NameOfRecipe」に文字列「ギムレット」を代入し、自由変数「_NameOfGlass」に文字列「カクテルグラス」を代入し、自由変数「_Ingredients」に要素「ingredients」の下位のＸＭＬフラグメントを代入し、自由変数「_Tastes」に、要素「ingredients」よりも後に記述されているＸＭＬフラグメントを代入する。ここで、自由変数「_Ingredients」には接尾辞としてワイルドカード「*」が付されており、図１３に示したソース文書では、要素「ingredients」の下位に２つの要素「ingredient」が記述されているので、変数管理部７４は、これらの要素「ingredient」を頂点ノードとする２つのＸＭＬフラグメントをリストとして自由変数「_Ingredients」に格納する。
【００６５】
また、変数管理部７４は、自由変数「_destXML」に規則５０２の頭部の第２引数に記述されているＸＭＬフラグメントを代入する。このとき、第２引数に記述されたＸＭＬフラグメントには、第１引数に記述されたＸＭＬフラグメントに含まれる変数と同一の変数、例えば、変数「_NameOfRecipe」などが含まれており、図１３に示したソース文書中のデータの一部がデスティネーション文書中に反映される。第２引数に記述されたＸＭＬフラグメントに含まれる変数「_TRofIngredients」及び変数「_Input」には、まだ値が代入されていない。
【００６６】
つづいて、マッチングユニット７０は、規則５０２の１番目のゴールである「equivIngWithTr(_Ingredients,_TRofIngredients)」を実行する。マッチング部７６は、規則５０４の頭部の第１引数と変数「_Ingredients」を比較するが、変数「_Ingredients」は空のリストではないので、規則５０４とのマッチングは失敗する。マッチング部７６は、次に、規則５０６の頭部の第１引数と変数「_Ingredients」を比較する。変数「_Ingredients」はリストであるので、マッチング部７６は、規則５０６とのマッチングに成功し、変数管理部７４は、変数「_Ingredients」の１番目のＸＭＬフラグメントを変数「_Ingredient」に、残りを変数「_Ingredients」に代入する。
【００６７】
つづいて、マッチングユニット７０は、規則５０６の１番目のゴールである「equiv(_Ingredient,_TRofIngredient)」を実行する。マッチング部７６は、変数「_Ingredient」に格納されているＸＭＬフラグメントと、規則５０８の頭部の第１引数とを比較する。いま、変数「_Ingredient」には、図１３に示したソース文書中の２つの要素「Ingredient」のうち、１番目の要素「Ingredient」を頂点ノードとするＸＭＬフラグメントが格納されているので、マッチング部７６は、規則５０８とのマッチングに成功し、変数管理部７４は、自由変数「_Name」に文字列「ドライジン」を、自由変数「_UNIT」に文字列「ml」を、自由変数「_VALUE」に文字列「45」を代入する。
【００６８】
変数管理部７４は、更に、規則５０８を呼び出した規則５０６の１番目のゴールの第２引数である自由変数「_TRofIngredient」に、規則５０８の頭部の第２引数を代入する。このとき、規則５０８の第２引数の中に記述された変数「_Name」、「_VALUE」、「_UNIT」には、既にソース文書中から抽出されたデータが格納されている。こうして、ソース文書中の要素「Ingredient」を頂点とするＸＭＬフラグメントから、ＸＨＴＭＬの要素「tr」を頂点とするＸＭＬフラグメントが生成される。規則５０８の体部にはカットが記述されているので、マッチングユニット７０は、規則５０６の１番目のゴールの実行を終了し、２番目のゴールを実行する。
【００６９】
規則５０８の２番目のゴールでは、「equivIngWithTr(_Ingredients,_TRofIngredients)」が再帰的に呼び出される。こうして、変数「_Ingredients」に格納されていたＸＭＬフラグメントは全て処理され、最終的に、変数「_Ingredients」のリストが空になると、規則５０４が選択される。規則５０４の体部にはカットが記述されているので、マッチングユニット７０は、規則５０２の１番目のゴールの実行を終了する。こうして、変数「_Ingredients」に格納されていたＸＭＬフラグメントから生成されたＸＭＬフラグメントが、変数「_destXML」に含まれる変数「_TRofIngredients」に代入される。
【００７０】
規則５０２の２番目のゴールの実行により、同様にして、変数「_Tastes」に格納されていたＸＭＬフラグメントから、異なるパターンのＸＭＬフラグメントが生成され、変数「Inputs」に格納される。最後に、規則５００の３番目のゴールが実行され、変数「_destXML」に格納されているＸＭＬフラグメントが出力ファイルに書き込まれる。このようにして生成されたデスティネーション文書を図１４に示す。また、このデスティネーション文書をＨＴＭＬユニット５０により表示した画面の例を図１５に示す。
【００７１】
逆方向の変換を実行するには、逆方向変換用の質問「rtrans(入力ファイル名,出力ファイル名)」をマッチングユニット７０に実行させればよい。マッチングユニット７０は、図１２に示した規則を用いて、上述した順方向の変換と同様の手順により、逆方向の変換を実行することができる。また、同様にして、マッチングユニット７０は、あるＸＭＬ文書が規則に記述されたパターンのＸＭＬフラグメントを有しているかどうかを検証することができ、ＸＭＬ文書のバリデーションを行うことができる。
【００７２】
（第２の実施の形態）
図１６は、第２の実施の形態に係る文書処理装置の構成を示す。第２の実施の形態に係る文書処理装置１００は、図１１に示した第１の実施の形態の文書処理装置１００の構成に加えて、集合演算部７８を更に備える。集合演算部７８は、後述するように、複数の値の集合を格納した変数のそれぞれの値に対して共通に実行すべき処理を簡便に記述するために追加された新たな構文により記述された演算を実行する。その他の構成及び動作は、前提技術と同様である。
【００７３】
第１の実施の形態では、リストに含まれる複数の値のそれぞれを処理するために、再帰を用いてプログラムを記述していた。具体的には、図１２に示したプログラムにおいて、変数「_Ingredients」に格納されたＸＭＬフラグメントのリストをＨＴＭＬフラグメントに変換するために、規則５０６の「equivIngWithTr」の頭部において、リストの先頭の値を変数「_Ingredient」に取り出し、１番目のゴールで規則５０８の「equiv」を呼び出して変換を行い、変換先のＨＴＭＬフラグメントを変数「_TRofIngredients」の先頭の値に格納するという処理を、リストの残りの値に対して再帰的に繰り返すことにより、リストに含まれる全てのＸＭＬフラグメントをＨＴＭＬフラグメントに変換した結果を、リストとして変数「_TRofIngredients」に格納するプログラムを記述している。
【００７４】
このように、リストに含まれる全ての値に対して共通の処理を実行させる場面は非常に多いので、このような処理を実現するためのより簡略な構文を用意しておけば、プログラムを記述する際にも、プログラムを解析又は検証する際にも、非常に便利である。したがって、本実施の形態では、複数の値の集合を格納した変数に対して実行すべき共通の処理を簡便に記述するために、以下のような新しい構文を追加する。
【００７５】
_X[*|+|-| ] [ : Op [-> _Y [^ Directive]]]
ここで、「:」は、変数「_X」に格納されているリストに対するオペレーションの指示子であり、「Op」は、変数「_X」に格納されているリストに対して処理を施すオペレーション（述語）である。また、「->」は、「Op」の結果をリストに構築して変数「_Y」に束縛させるオペレーションである。また、「^」は、「Op」の動作に対しての指示子であり、「Directive」は、「Op」の動作に対しての指示を指定する。この指定は、集合演算部７８の動作に関する指示の指定であり、演算結果には影響しない。例えば、「#n」として、処理「Op」を並列に実行する際の多重度を記述可能である。集合演算部７８は、処理の多重度が記述されていた場合、記述された多重度の数だけ処理を並列して実行する。また、「Wait(条件)」として、処理「Op」の実行を開始するための条件を記述可能である。集合演算部７８は、「Wait( _Status )」という条件が記述されていた場合、「_Status」が束縛されるまで待機してから処理「Op」の実行を開始する。
【００７６】
この構文で記述されたプログラムコードの例を図１７（ａ）（ｂ）（ｃ）に示す。図１７（ａ）に示すプログラムにおいて、「hoge(引数)」が実行されると、まず、マッチング部７６は、引数に指定されたＸＭＬフラグメントと、規則「hoge」の頭部の引数に記述されたＸＭＬフラグメントとを比較し、同じ構造を有していれば、すなわち、引数に指定されたＸＭＬフラグメントの頂点要素が「a」であれば、図１７（ａ）に示した規則「hoge」を選択する。このとき、変数管理部７４は、変数「_X」に要素「a」の下位のＸＭＬフラグメントを代入する。変数「_X」には接尾辞として「*」が付されているので、前述したように、変数管理部７４は、要素「a」の下位に複数のＸＭＬフラグメントが存在する場合には、それぞれをリストとして変数「_X」に格納する。
【００７７】
規則「hoge」では、変数「_X」のリストに含まれる複数の値のそれぞれに対して処理「f」を実行し、その結果をリストとして構築して変数「_Y」に束縛させるよう指定されている。したがって、集合演算部７８は、まず、変数「_X」のリストの先頭の値に対して処理「f」を実行し、変数「_Y」のリストの先頭の値として格納し、以降、順次、変数「_X」のリストのそれぞれの値に対して同様に処理「f」を実行して変数「_Y」のリストを構築する。
【００７８】
ここで、規則「hoge」では、処理「f」を実行する際に、多重度「３」で実行することが指定されている。したがって、集合演算部７８は、３つの値に対する処理「f」を同時に並行して実行する。すなわち、まず、最初の値に対して処理「f」の実行を開始すると、その実行の終了を待たずに、２番目の値及び３番目の値に対して処理「f」の実行を開始して、３つの処理を同時並列的に実行する。集合演算部７８は、３つの処理のうちいずれかの処理が終了すると、つづいて、４番目の値に対して処理「f」を開始する。このように、集合演算部７８は、３つの処理が並列して実行されるように制御する。これにより、効率良く処理を進めることができ、処理に要する時間を短縮することができる。また、処理の多重度を簡便に指定可能な構文を用意することにより、開発者の利便性を向上させることができる。
【００７９】
集合演算部７８は、上記のように指定された多重度で並列処理を実行する際に、文書処理装置１００を実現するコンピュータのＣＰＵの稼働率やメモリの空き容量などを考慮して、並列処理の適否を判断してもよい。例えば、集合演算部７８は、１番目の処理を実行開始した後、２番目の処理を実行する前に、１番目の処理の実行に要したメモリの容量やＣＰＵの稼働率などと、現在のメモリの空き容量やＣＰＵの稼働率などを参照して、十分なリソースが確保できない場合は、十分なリソースが確保されるまで、２番目の処理の実行を開始しないように制御してもよい。これにより、プログラムの実行環境に合わせて、並列処理の多重度を適切に調整することができる。
【００８０】
図１７（ｂ）に示したプログラムにおいて、規則「validate」が呼び出されると、マッチング部７６は、規則「validate」を選択し、変数管理部７４は、引数に指定されたＸＭＬフラグメントのうち、要素「List」の属性「origin」の値を変数「_URL」に格納し、要素「List」の子要素「Users」が有する複数の子要素のうちテキストノード以外のデータをリストとして変数「_USRS」に格納する。
【００８１】
規則「validate」では、変数「_URL」の値に対して処理「CheckURL」を実行し、その結果を変数「_Status」に束縛させるよう指定されている。また、変数「_USRS」のリストに含まれるそれぞれの値に対して処理「CheckID」を実行するよう指定されている。ここで、処理「CheckID」に対しては、変数「_Status」が束縛されるまで処理を待つよう指定されている。したがって、集合演算部７８は、変数「_URL」に対する処理「CheckURL」の実行に成功して変数「_Status」の値が確定するまで待機してから、変数「_USRS」に対する処理「CheckID」の実行を開始する。
【００８２】
このように、処理を開始するための条件を簡便に指定可能な構文を用意することにより、開発者の利便性を向上させることができる。また、マークアップ言語により記述されたパターンの中に、集合を格納した変数に対する処理を記述するとともに、その処理を開始するための条件を記述することにより、記述されたプログラムをパースするときに、ある処理の開始条件として別の処理の終了が指定されているというような関連性を適切にチェックすることができ、デッドロック等の発生を適切かつ容易に検出することができる。
【００８３】
図１７（ｃ）に示したプログラムは、図１７（ｂ）に示したプログラムにおける処理「CheckID」を、多重度「３」で並列実行することが指定されている。集合演算部７８は、処理「CheckURL」が終了して変数「_Status」の値が確定すると、３つの処理「CheckID」を並列して実行し、それ以降は、実行中の処理「CheckID」のいずれかが終了すると、それに換えて新たな処理「CheckID」を開始する。
【００８４】
上記の例のように、本実施の形態で用いられる構文によれば、複数の値の集合に対する共通の処理を記述する場合に、個別に記述する必要がなく、まとめて記述することができる。すなわち、複数の値の中から一つを取り出すコードや、規則を再帰的に呼び出すコードなどを記述する必要がなく、複数の値の集合を格納した変数に対する処理を直接記述する形式になっているので、プログラムの開発時にも、保守時にも、利便性を向上させることができる。
【００８５】
上述した例では、集合演算部７８が上記の構文を解釈して集合に対する演算を実行したが、別の例では、集合演算部７８は、上記の構文を解釈して、図１２に示したような、再帰的な呼び出しを用いてリストに含まれるそれぞれの値に対する処理を実現する従来の形式の構文によるプログラムコードに変換してもよい。この場合、プログラムの実行時には、第１の実施の形態と同様に演算が実行される。
【００８６】
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００８７】
実施の形態では、ＸＭＬ文書を処理する例について説明したが、本実施の形態の文書処理装置１００は、他のマークアップ言語、例えば、ＳＧＭＬ、ＨＴＭＬなどで記述された文書も同様に処理可能である。
【符号の説明】
【００８８】
２０  文書処理装置、２２  主制御ユニット、２４  編集ユニット、３０  ＤＯＭユニット、３２  ＤＯＭ提供部、３４  ＤＯＭ生成部、３６  出力部、４０  ＣＳＳユニット、４２  ＣＳＳ解析部、４４  ＣＳＳ提供部、４６  レンダリング部、５０  ＨＴＭＬユニット、５２，６２  制御部、５４，６４  編集部、５６，６６  表示部、６０  ＳＶＧユニット、７０  マッチングユニット、７２  名前空間管理部、７４  変数管理部、７６  マッチング部、７８  集合演算部、８０  ＶＣユニット、８２  マッピング部、８４  定義ファイル取得部、８６  定義ファイル生成部、１００  文書処理装置。
【図１】
2009223882.tif 000003
【図２】
2009223882.tif 000004
【図３】
2009223882.tif 000005
【図４（ａ）】
2009223882.tif 000006
【図４（ｂ）】
2009223882.tif 000007
【図５】
2009223882.tif 000008
【図６】
2009223882.tif 000009
【図７】
2009223882.tif 000010
【図８】
2009223882.tif 000011
【図９】
2009223882.tif 000012
【図１０】
2009223882.tif 000013
【図１１】
2009223882.tif 000014
【図１２】
2009223882.tif 000015
【図１３】
2009223882.tif 000016
【図１４】
2009223882.tif 000017
【図１５】
2009223882.tif 000018
【図１６】
2009223882.tif 000019
【図１７】
2009223882.tif 000020