(57)【要約】【課題】  検証処理を効率化できる構造化文書検証装置および構造化文書検証方法を提供する。【解決手段】  入力された構造化文書が対応する文書スキーマに記述された条件を満たしているか否か検証後に、前記構造化文書または前記構造化文書の一部、および前記条件の少なくともいずれかに対して検証結果に影響する変更が加えられたか否かを判定する判定手段と、前記判定手段によって変更が加えられたと判定された場合、前記構造化文書または前記構造化文書の一部が前記条件を満たしているか否かを検証して該検証結果を出力する出力手段と、前記入力された構造化文書から、前記判定手段の処理対象にすると処理効率が低下する構造化文書または構造化文書の一部を前記判定手段の処理を実行しないで前記出力手段の処理の対象とする判定除外対象として特定する特定手段とを備える。【選択図】          図１
2008117015.tif 000002
【特許請求の範囲】
【請求項１】
入力された構造化文書情報が対応する文書スキーマに記述された条件を満たしているか否かの検証後に、前記構造化文書の少なくとも一部および前記条件のうち少なくとも一方に対して前記検証結果に影響する変更が加えられたか否かを判定する判定手段と、
前記判定手段によって変更が加えられたと判定された場合、前記構造化文書の少なくとも一部が前記条件を満たしているか否かを検証して該検証結果を出力する出力手段と、
前記入力された構造化文書情報から、前記判定手段の処理対象にすると処理効率が低下する構造化文書の少なくとも一部を前記判定手段の処理を実行しないで前記出力手段の処理の対象とする判定除外対象として特定する特定手段と、を備えることを特徴とする構造化文書検証装置。
【請求項２】
前記判定除外対象に対しては前記出力手段の処理を実行し、前記判定除外対象以外に対しては前記判定手段の処理を実行して変更が加えられたと判定された場合には前記出力手段の処理を実行することを特徴とする、請求項１に記載の構造化文書検証装置。
【請求項３】
前記判定手段は、前記構造化文書が直近に検証された時点で前記構造化文書に所定の演算を実行して得られた情報と、前記入力された構造化文書に所定の演算を実行して得られた情報に基づいて、前記構造化文書の少なくとも一部および前記条件のうち少なくとも一方に対して前記検証結果に影響する変更が加えられたか否かを判定することを特徴とする、請求項１または請求項２に記載の構造化文書検証装置。
【請求項４】
前記特定手段は、前記入力された構造化文書から、前記判定手段において検証結果に影響する変更が加えられていないと判定され得ない構造化文書の少なくとも一部を、前記判定除外対象として特定することを特徴とする、請求項１から請求項３のいずれかに記載の構造化文書検証装置。
【請求項５】
前記入力された構造化文書の全部または一部の基となる派生元文書の全部または一部の頂点に位置する文書要素名と、前記派生元文書の全部または一部に所定の演算を実行して得られる情報の組である検証履歴が１つ以上前記入力された構造化文書に対応付けられており、
前記特定手段は、前記入力された構造化文書に対応付けられているすべての検証履歴の文書要素名と同一の名前を持つすべての文書要素を頂点とする文書フラグメントを前記入力された構造化文書から除いた残りを前記判定除外対象として特定することを特徴とする、請求項１から請求項３のいずれかに記載の構造化文書検証装置。
【請求項６】
前記特定手段は、前記入力された構造化文書の文書スキーマのうち、前記入力された構造化文書の全部または一部の基となる派生元文書の文書スキーマと共有する文書スキーマフラグメントを特定し、前記入力された構造化文書から前記共有する文書スキーマフラグメントに対応する文書フラグメントを除いた残りを前記判定除外対象として特定することを特徴とする、請求項１から請求項３のいずれかに記載の構造化文書検証装置。
【請求項７】
ＷＳＤＬ文書を前記入力された構造化文書とし、前記派生元文書の文書スキーマを前記ＷＳＤＬ文書で定義されているリクエスト・レスポンス型Ｗｅｂサービスのリクエスト文書の文書スキーマとし、前記入力された構造化文書の文書スキーマを前記Ｗｅｂサービスのレスポンス文書の文書スキーマとすることを特徴とする、請求項６記載の構造化文書検証装置。
【請求項８】
前記特定手段は、前記入力された構造化文書の文書スキーマのうち、前記入力された構造化文書の全部または一部を基に生成される派生先文書の文書スキーマと共有する共有文書スキーマフラグメントを特定し、前記入力された構造化文書から前記共有文書スキーマフラグメントに対応する文書フラグメントを除いた残りを前記判定除外対象として特定することを特徴とする、請求項１から請求項３のいずれかに記載の構造化文書検証装置。
【請求項９】
ＷＳＤＬ文書を前記入力された構造化文書とし、前記入力された構造化文書の文書スキーマを前記ＷＳＤＬ文書で定義されているリクエスト・レスポンス型Ｗｅｂサービスのリクエスト文書の文書スキーマとし、前記派生先文書の文書スキーマを前記Ｗｅｂサービスのレスポンス文書の文書スキーマとすることを特徴とする、請求項８記載の構造化文書検証装置。
【請求項１０】
前記特定手段は、前記入力された構造化文書から、前記判定手段の処理対象にする場合の処理時間の期待値よりも前記出力手段の処理対象にする場合の処理時間の期待値が小さい構造化文書の少なくとも一部を前記判定除外対象として特定することを特徴とする、請求項１から請求項３のいずれかに記載の構造化文書検証装置。
【請求項１１】
前記特定手段は、前記入力された構造化文書から、前記判定手段の処理対象にする場合の処理時間の期待値よりも前記出力手段の処理対象にする場合の処理時間の期待値が小さい構造化文書の全部または一部を、前記出力手段の処理対象にする場合の処理時間の期待値よりも前記判定手段の処理対象にする場合の処理時間の期待値が小さい構造化文書の全部または一部よりも高い確率で特定することを特徴とする、請求項１から請求項３のいずれかに記載の構造化文書検証装置。
【請求項１２】
前記特定手段は、前記入力された構造化文書の全部または一部を基に生成される派生先文書、および前記入力された構造化文書がともに含み得る文書の全部または一部で、前記入力された構造化文書と前記派生先文書がともに前記文書の全部または一部を含む確率と、前記入力された構造化文書と前記派生先文書がともに前記文書の全部または一部を含まない確率の和が小さいものを前記判定除外対象として特定することを特徴とする、請求項１０または請求項１１に記載の構造化文書検証装置。
【請求項１３】
前記特定手段は、前記入力された構造化文書から、前記判定手段の処理の結果、前記出力手段による検証処理が必要となる確率が大きい構造化文書の少なくとも一部を前記判定除外対象として特定することを特徴とする、請求項１０または請求項１１に記載の構造化文書検証装置。
【請求項１４】
前記特定手段は、前記入力された構造化文書の全部または一部が対応する文書スキーマに対応する過去の入力文書の全部または一部に対する前記判定手段の処理時間および前記出力手段の処理時間と、前記過去の入力文書の全部または一部が前記判定手段の処理対象となった回数と前記出力手段の処理対象となった回数とを測定し、前記処理時間と前記回数とに基づいて、前記入力された構造化文書の全部または一部を判定手段の処理対象にする場合の処理時間の期待値と前記出力手段の処理対象にする場合の処理時間の期待値を算出することを特徴とする、請求項１１に記載の構造化文書検証装置。
【請求項１５】
前記構造化文書を分割する分割手段をさらに備え、
前記出力手段は、前記分割された構造化文書のそれぞれが所定の条件を満たしているか否かを検証することを特徴とする、請求項１から請求項１４のいずれかに記載の構造化文書検証装置。
【請求項１６】
入力された構造化文書情報が対応する文書スキーマに記述された条件を満たしているか否かの検証後に、前記構造化文書の少なくとも一部および前記条件のうち少なくとも一方に対して前記検証結果に影響する変更が加えられたか否かを判定する判定ステップと、
前記変更が加えられたと判定された場合、前記構造化文書の少なくとも一部が前記条件を満たしているか否かを検証して該検証結果を出力する出力ステップとを有し、
前記入力された構造化文書情報から、前記判定ステップの処理対象にすると処理効率が低下する構造化文書の少なくとも一部を前記判定ステップの処理を実行しないで前記出力ステップの処理の対象とする判定除外対象として特定する特定ステップをさらに有することを特徴とする構造化文書検証方法。
【請求項１７】
前記判定除外対象に対しては前記出力ステップの処理を実行し、前記判定除外対象以外に対しては前記判定ステップの処理を実行して変更が加えられたと判定された場合には前記出力ステップの処理を実行することを特徴とする、請求項１６に記載の構造化文書検証方法。
【請求項１８】
前記判定ステップは、前記構造化文書が直近に検証された時点で前記構造化文書に所定の演算を実行して得られた情報と、前記入力された構造化文書に所定の演算を実行して得られた情報に基づいて、前記構造化文書の少なくとも一部および前記条件の少なくともいずれかに対して検証結果に影響する変更が加えられたか否かを判定することを特徴とする、請求項１６または請求項１７に記載の構造化文書検証方法。
【請求項１９】
前記特定ステップは、前記入力された構造化文書情報から、前記判定ステップにおいて検証結果に影響する変更が加えられていないと判定され得ない構造化文書の少なくとも一部を、前記判定除外対象として特定することを特徴とする、請求項１６から請求項１８のいずれかに記載の構造化文書検証方法。
【請求項２０】
前記入力された構造化文書の全部または一部の基となる派生元文書の全部または一部の頂点に位置する文書要素名と、前記派生元文書の全部または一部に所定の演算を実行して得られる情報の組である検証履歴が１つ以上前記入力された構造化文書に対応付けられており、
前記特定ステップは、前記入力された構造化文書に対応付けられているすべての検証履歴の文書要素名と同一の名前を持つすべての文書要素を頂点とする文書フラグメントを前記入力された構造化文書から除いた残りを前記判定除外対象として特定することを特徴とする、請求項１６から請求項１８のいずれかに記載の構造化文書検証方法。
【請求項２１】
前記特定ステップは、前記入力された構造化文書の文書スキーマのうち、前記入力された構造化文書の全部または一部の基となる派生元文書の文書スキーマと共有する文書スキーマフラグメントを特定し、前記入力された構造化文書から前記共有する文書スキーマフラグメントに対応する文書フラグメントを除いた残りを前記判定除外対象として特定することを特徴とする、請求項１６から請求項１８のいずれかに記載の構造化文書検証方法。
【請求項２２】
前記特定ステップは、前記入力された構造化文書の文書スキーマのうち、前記入力された構造化文書の全部または一部を基に生成される派生先文書の文書スキーマと共有する共有文書スキーマフラグメントを特定し、前記入力された構造化文書から前記共有文書スキーマフラグメントに対応する文書フラグメントを除いた残りを前記判定除外対象として特定することを特徴とする、請求項１６から請求項１８のいずれかに記載の構造化文書検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インターネットなどのネットワーク上でＸＭＬ文書などの構造化文書を処理する文書処理装置および構造化文書検証方法に関する。
【背景技術】
【０００２】
構造化文書の処理を開始する前に、その文書が所定の条件を満たしているか否か判定する処理(検証処理)を実行することが広く行われている。文書処理を実行するプログラムは、前記所定の条件を満たす文書を対象にして記述されていることが多いので、検証処理の結果、所定の条件を満たしていないと判定された構造化文書は、文書処理の対象とはならないのが一般的である。たとえば、ＸＭＬ文書を対象とした検証処理としては、文書が整形式であるか否か判定する処理と、文書が文書型定義やＸＭＬスキーマ、ＲＥＬＡＸＮＧなどの文書スキーマに記載される条件を満たしているか否か判定する処理(妥当性判定処理)がある。なお、ある文書が対応する文書スキーマに記載される条件を満たしているとき、その文書は文書スキーマに適合しているという。
【０００３】
ＸＭＬ文書やＳＧＭＬ文書が満たすべき条件を記述する代表的な形式には文書型定義(Document Type Definition)やＸＭＬスキーマ、ＲＥＬＡＸ ＮＧなどがある。これらはいずれもＸＭＬ文書やＳＧＭＬ文書の文書要素をノードとする木構造とみなし、各ノードが満たすべき条件やノード間の位置関係に関する条件を記述している。文書型定義とは、ＸＭＬ文書やＳＧＭＬ文書が満たすべき条件を記述するものであり、記述形式がＸＭＬやＳＧＭＬの仕様の一部として標準化されている。文書型定義に記載された条件を満足するように作成された構造化文書は広く流通しており、また、文書型定義に記載された条件を満足しているか否か検証するプログラムも広く利用されている。
【０００４】
ＸＭＬスキーマとは、文書型定義と同様、ＸＭＬ文書が満たすべき条件を記述するものであり、記述形式が国際標準化団体によって標準化されている。ＸＭＬスキーマに記載された条件を満足するように作成された構造化文書は今後広く流通することが予想され、また、ＸＭＬスキーマに記載された条件を満足しているか否か検証するプログラムも広く利用されている。ＲＥＬＡＸ ＮＧとは、文書型定義やＸＭＬスキーマと同様、ＸＭL文書が満たすべき条件を記述するものであり、記述形式が国際標準化団体によって標準化されている。上記の文書スキーマの条件を満たす以前に、ＸＭＬ文書は、その仕様で定められた所定の形式で記述されていなければならない。ＸＭＬ文書が所定の形式で記述されているとき、そのＸＭＬ文書は整形式(well-formed)であるという。
【０００５】
・ＸＭＬ標準仕様 http://www.w3.org/TR/REC-xml/  
・ＸＭＬ標準仕様の日本語訳 http://www.fxis.co.jp/xmlcafe/tmp/wrapper-xml-19980210.html
・XMLスキーマ標準仕様 http://www.w3.org/TR/xmlschema-0/
・RELAX NG標準仕様 http://www.relaxng.org/spec-20011203.html
【０００６】
構造化文書処理システムを作成・運用する上で、検証処理の負荷の大きさが処理効率低下の一因となっていた。この問題へ対処するため、従来は、(１)検証処理プログラムの高速化、(２)変換処理結果の文書が所定の文書スキーマに適合することを保証することによる検証処理の不要化、(３)計算機資源の豊富な機器への検証処理の委譲、といったアプローチがとられてきた。検証処理プログラム高速化手法の例としては、特許文献１に記載の手法がある。具体的には、ＸＭＬ文書の妥当性検証処理において、文書型定義の内容モデル毎の複数のテーブル構造（文字列オートマトン）間の類似性を検出する。この類似性を利用して各内容モデルのオートマトンを取り纏め小型化する。あるいは各内容モデルの複数のテーブル構造を、要素の親子関係の規則を表すテーブルとともに取り纏めて単一のテーブル構造とする。
【０００７】
そしてこのテーブルの最小化を行う。一旦、最小化操作を終えていれば、従来技術より格段に小さい記憶領域、プログラムサイズによる妥当性検証が可能になる。またテーブルのデータへのアクセスも容易になるため、検証の高速化も可能になる。このテーブル構造を使い、記憶容量が少なくても高速に動作する汎用の検証器を作ることができる。検証処理を不要化する手法の例として、特許文献２に記載の手法および、特許文献３に記載の手法がある。
【０００８】
特許文献２に記載の方法では、XSL Transformations (XSLT)標準に準拠した文書処理プログラムと変換結果の文書の文書スキーマから変換対象の文書の文書スキーマを自動生成する方法が開示されている。この方法で生成した文書スキーマに適合する文書のみを文書変換プログラムに入力することにより、文書変換プログラムが出力した文書が所定の文書スキーマに適合することを保証できるので、出力文書に対する検証処理が不要となる。
・XSL Transformations標準仕様 http://www.w3.org/TR/xslt  
【０００９】
また、特許文献３に記載の方法では、第１の文書型定義に基づいて形成された第１の構造化文書を第２の文書型定義に基づいて形成された第２の構造化文書に変換する際に、第１の文書型定義及び第２の文書型定義を解析し、相違する文書型定義を抽出し、前記解析の結果に応じて、第２の構造化文書が第２の文書型定義に矛盾することのないような変換ルールを記述した変換テンプレートを生成し、変換テンプレートを用いて文書変換処理を行うことにより、第２の構造化文書が第２の文書型定義に適合することを保証し、変換後の妥当性検証ステップを省略できるようにする方法を開示している。
【００１０】
検証処理を委譲する手法の例として、特許文献４に記載の手法がある。この手法では、ＸＭＬ文書に対する処理を実行する文書処理モジュールと、文書スキーマに対する文書の妥当性を検証するモジュール(検証モジュール)および文書のＤＯＭツリーおよびＳＡＸツリーを生成するモジュール(ツリー生成モジュール)を分離し、携帯電話や携帯端末上の文書処理モジュールからネットワークで接続されたサーバ上の検証モジュールやツリー生成モジュールを呼び出すよう構成することで、計算機資源の貧弱な機器上での文書処理を可能とする方法を開示している。
【００１１】
しかし、上記の従来手法は、検証処理による処理負担の増加という問題を解決しているとはいえない。まず、検証処理プログラム高速化手法では、今後予想される文書スキーマの大規模化に対処しきれない。また、特許文献２に記載の方法では、ＸＳＬＴに基づく文書変換処理に特化したものであり、それ以外の処理には利用できない。また、特許文献３に記載の方法では、変換後の文書が所定の文書スキーマに適合するように変換テンプレートを人手で編集する必要があるが、複雑な文書スキーマ間の変換処理では、この編集作業は一般に容易ではない。また、検証処理の委譲手法は、文書処理を実行する機器がネットワークを介して計算機資源の豊富なサーバに常時接続されていることを前提としているが、それらが常に接続されているとは限らない。
【特許文献１】特開２００３−８４９８７号公報
【特許文献２】特開２００３−８５０１６号公報
【特許文献３】特開２００３−１５０５８６号公報
【特許文献４】特開２００４−３０６５１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
上記背景に基づき、構造化文書に対する検証処理の負担を軽減することにより、処理効率を向上させる構造化文書検証装置が本出願人によって提案されている（特願２００６−１３２９９９）。この構造化文書検証装置は、入力された構造化文書が文書検証手段で検証された後に変更されたか否かを判定し、変更されたと判定した場合には、入力された構造化文書が所定の条件を満たしているか否かを検証するというものである。
【００１３】
しかしながら、この構造化文書検証装置は、検証処理による処理負担の増加という問題を十分に解決しているとはいえない。この構造化文書検証装置は、判定処理に要する時間やコストが検証処理に要する時間やコストよりも十分に小さく、かつ、判定処理の結果として検証処理を実行せずに済むことが頻繁に発生する場合に効果を発揮する。しかし、これらの条件が十分に満たされない場合、判定処理によるオーバヘッドが検証処理を実行せずに済む効果を相殺してしまい、十分な効果を得られなくなってしまう。
【００１４】
そこで、本発明は、上記問題点に鑑みてなされたもので、入力された構造化文書が文書検証手段で検証された後に変更されたか否かを判定する処理に要する時間やコストが、入力された構造化文書が所定の条件を満たしているか否かを検証する処理に要する時間やコストよりも十分に小さくない場合でも、検証処理を効率化できる構造化文書検証装置および構造化文書検証方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記課題を解決するために、本発明の構造化文書検証装置は、入力された構造化文書情報が対応する文書スキーマに記述された条件を満たしているか否か検証後に、前記構造化文書の少なくとも一部および前記条件のうち少なくとも一方に対して前記検証結果に影響する変更が加えられたか否かを判定する判定手段と、前記判定手段によって変更が加えられたと判定された場合、前記構造化文書の少なくとも一部が前記条件を満たしているか否かを検証して該検証結果を出力する出力手段と、前記入力された構造化文書情報から、前記判定手段の処理対象にすると処理効率が低下する構造化文書の少なくとも一部を前記判定手段の処理を実行しないで前記出力手段の処理の対象とする判定除外対象として特定する特定手段とを備える。
【００１６】
本発明によれば、入力された構造化文書のうち、特定手段で特定された構造化文書または構造化文書の一部に対しては、判定手段による判定処理を行うと処理効率が低下するため、判定手段による処理をパスして出力手段の処理のみを実行する。一方、特定手段で特定されない構造化文書または構造化文書の一部に対しては、通常通り、判定手段の処理を実行して変更が加えられたと判定された場合には出力手段の処理を実行する。したがって、不要な処理を実行せずに済み、処理効率を向上できる。すなわち、判定手段で判定する処理に要する時間やコストが、入力された構造化文書が所定の条件を満たしているか否かを検証する処理に要する時間やコストよりも十分に小さくない場合には、判定手段による判定処理がパスされるため、検証処理を効率化できる。
【００１７】
具体的には、前記判定除外対象に対しては前記出力手段の処理を実行し、前記判定除外対象以外に対しては前記判定手段の処理を実行して変更が加えられたと判定された場合には前記出力手段の処理を実行するようにしている。
【００１８】
また、前記判定手段は、例えば、前記構造化文書が直近に検証された時点で前記構造化文書に所定の演算を実行して得られた情報と、前記入力された構造化文書に所定の演算を実行して得られた情報に基づいて、前記構造化文書の少なくとも一部および前記条件のうち少なくとも一方に対して前記検証結果に影響する変更が加えられたか否かを判定する。
【００１９】
また、前記特定手段は、例えば、前記入力された構造化文書から、前記判定手段において検証結果に影響する変更が加えられていないと判定され得ない構造化文書の少なくとも一部を、前記判定除外対象として特定する。
【００２０】
また、前記入力された構造化文書の全部または一部の基となる派生元文書の全部または一部の頂点に位置する文書要素名と、前記派生元文書の全部または一部に所定の演算を実行して得られる情報の組である検証履歴が１つ以上前記入力された構造化文書に対応付けられている。この場合、前記特定手段は、前記入力された構造化文書に対応付けられているすべての検証履歴の文書要素名と同一の名前を持つすべての文書要素を頂点とする文書フラグメントを前記入力された構造化文書から除いた残りを前記判定除外対象として特定する。
【００２１】
また、前記特定手段は、検証履歴を用いてマッチングの相手がいない文書部分を特定する場合、前記入力された構造化文書の文書スキーマのうち、前記入力された構造化文書の全部または一部の基となる派生元文書の文書スキーマと共有する文書スキーマフラグメントを特定し、前記入力された構造化文書から前記共有する文書スキーマフラグメントに対応する文書フラグメントを除いた残りを前記判定除外対象として特定する。このとき、ＷＳＤＬ文書を前記入力された構造化文書とし、前記派生元文書の文書スキーマを前記ＷＳＤＬ文書で定義されているリクエスト・レスポンス型Ｗｅｂサービスのリクエスト文書の文書スキーマとし、前記入力された構造化文書の文書スキーマを前記Ｗｅｂサービスのレスポンス文書の文書スキーマとする。
【００２２】
また、前記特定手段は、将来マッチングされ得ない文書部分を特定する場合、前記入力された構造化文書の文書スキーマのうち、前記入力された構造化文書の全部または一部を基に生成される派生先文書の文書スキーマと共有する共有文書スキーマフラグメントを特定し、前記入力された構造化文書から前記共有文書スキーマフラグメントに対応する文書フラグメントを除いた残りを前記判定除外対象として特定する。このとき、ＷＳＤＬ文書を前記入力された構造化文書とし、前記入力された構造化文書の文書スキーマを前記ＷＳＤＬ文書で定義されているリクエスト・レスポンス型Ｗｅｂサービスのリクエスト文書の文書スキーマとし、前記派生先文書の文書スキーマを前記Ｗｅｂサービスのレスポンス文書の文書スキーマとする。
【００２３】
また、前記特定手段は、判定処理がコスト的に見合わない文書部分を特定する場合、前記入力された構造化文書から、前記判定手段の処理対象にする場合の処理時間の期待値よりも前記出力手段の処理対象にする場合の処理時間の期待値が小さい構造化文書の少なくとも一部を前記判定除外対象として特定する。
【００２４】
また、前記特定手段は、処理コスト期待値に応じて判定処理実行の確率を変更する場合、前記入力された構造化文書から、前記判定手段の処理対象にする場合の処理時間の期待値よりも前記出力手段の処理対象にする場合の処理時間の期待値が小さい構造化文書の全部または一部を、前記出力手段の処理対象にする場合の処理時間の期待値よりも前記判定手段の処理対象にする場合の処理時間の期待値が小さい構造化文書の全部または一部よりも高い確率で特定する。
【００２５】
また、前記特定手段は、文書と派生元／派生先文書でともに出現する／しないことが少ない文書部品を特定する場合、前記入力された構造化文書の全部または一部を基に生成される派生先文書、および前記入力された構造化文書がともに含み得る文書の全部または一部で、前記入力された構造化文書と前記派生先文書がともに前記文書の全部または一部を含む確率と、前記入力された構造化文書と前記派生先文書がともに前記文書の全部または一部を含まない確率の和が小さいものを前記判定除外対象として特定する。
【００２６】
また、前記特定手段は、判定の結果、再検証が必要になる確率が高い文書部分を特定する場合、前記入力された構造化文書から、前記判定手段の処理の結果、前記出力手段による検証処理が必要となる確率が大きい構造化文書の少なくとも一部を前記判定除外対象として特定する。
【００２７】
また、前記特定手段は、処理時間の期待値を算出する具体的方法として、前記入力された構造化文書の全部または一部が対応する文書スキーマに対応する過去の入力文書の全部または一部に対する前記判定手段の処理時間および前記出力手段の処理時間と、前記過去の入力文書の全部または一部が前記判定手段の処理対象となった回数と前記出力手段の処理対象となった回数とを測定し、前記処理時間と前記回数とに基づいて、前記入力された構造化文書の全部または一部を判定手段の処理対象にする場合の処理時間の期待値と前記出力手段の処理対象にする場合の処理時間の期待値を算出する。
【００２８】
また、本発明の構造化文書検証装置は、前記構造化文書を分割する分割手段をさらに備え、前記出力手段は、前記分割された構造化文書のそれぞれが所定の条件を満たしているか否かを検証する。
【００２９】
本発明の構造化文書検証方法は、入力された構造化文書情報が対応する文書スキーマに記述された条件を満たしているかの否か検証後に、前記構造化文書の少なくとも一部および前記条件のうち少なくとも一方に対して前記検証結果に影響する変更が加えられたか否かを判定する判定ステップと、前記変更が加えられたと判定された場合、前記構造化文書の少なくとも一部が前記条件を満たしているか否かを検証して該検証結果を出力する出力ステップとを有し、前記入力された構造化文書情報から、前記判定ステップの処理対象にすると処理効率が低下する構造化文書の少なくとも一部を前記判定ステップの処理を実行しないで前記出力ステップの処理の対象とする判定除外対象として特定する特定ステップをさらに有する。
【００３０】
本発明によれば、入力された構造化文書のうち、判定除外対象特定手段で特定された構造化文書または構造化文書の一部に対しては出力手段の処理のみを実行し、特定されない構造化文書の少なくとも一部に対しては判定手段の処理を実行して変更が加えられたと判定された場合には出力手段の処理を実行する。したがって、不要な処理を実行せずに済み、処理効率を向上できる。
【００３１】
前記構造化文書検証方法において、前記判定除外対象に対しては前記出力ステップの処理を実行し、前記判定除外対象以外に対しては前記判定ステップの処理を実行して変更が加えられたと判定された場合には前記出力ステップの処理を実行する。
【００３２】
前記判定ステップは、前記構造化文書が直近に検証された時点で前記構造化文書に所定の演算を実行して得られた情報と、前記入力された構造化文書に所定の演算を実行して得られた情報に基づいて、前記構造化文書の少なくとも一部および前記条件の少なくともいずれかに対して検証結果に影響する変更が加えられたか否かを判定する。
【００３３】
前記特定ステップは、前記入力された構造化文書情報から、前記判定ステップにおいて検証結果に影響する変更が加えられていないと判定され得ない構造化文書の少なくとも一部を、前記判定除外対象として特定する。
【００３４】
前記構造化文書検証方法において、前記入力された構造化文書の全部または一部の基となる派生元文書の全部または一部の頂点に位置する文書要素名と、前記派生元文書の全部または一部に所定の演算を実行して得られる情報の組である検証履歴が１つ以上前記入力された構造化文書に対応付けられており、前記特定ステップは、前記入力された構造化文書に対応付けられているすべての検証履歴の文書要素名と同一の名前を持つすべての文書要素を頂点とする文書フラグメントを前記入力された構造化文書から除いた残りを前記判定除外対象として特定する。
【００３５】
前記特定ステップは、前記入力された構造化文書の文書スキーマのうち、前記入力された構造化文書の全部または一部の基となる派生元文書の文書スキーマと共有する文書スキーマフラグメントを特定し、前記入力された構造化文書から前記共有する文書スキーマフラグメントに対応する文書フラグメントを除いた残りを前記判定除外対象として特定する。
【００３６】
前記特定ステップは、前記入力された構造化文書の文書スキーマのうち、前記入力された構造化文書の全部または一部を基に生成される派生先文書の文書スキーマと共有する共有文書スキーマフラグメントを特定し、前記入力された構造化文書から前記共有文書スキーマフラグメントに対応する文書フラグメントを除いた残りを前記判定除外対象として特定する。
【発明の効果】
【００３７】
本発明によれば、入力された構造化文書が文書検証手段で検証された後に変更されたか否かを判定する処理に要する時間やコストが、入力された構造化文書が所定の条件を満たしているか否かを検証する処理に要する時間やコストよりも十分に小さくない場合でも、検証処理を効率化できる構造化文書検証装置および構造化文書検証方法を提供することができる。
【発明を実施するための最良の形態】
【００３８】
以下、本発明を実施するための最良の形態について説明する。
【実施例１】
【００３９】
従来の構造化文書検証装置は、判定処理に要する時間やコストが検証処理に要する時間やコストよりも十分に小さく、かつ、判定処理の結果として検証処理を実行せずに済むことが頻繁に発生する場合に効果を発揮する。しかし、これらの条件が十分に満たされない場合、判定処理によるオーバヘッドが検証処理を実行せずに済む効果を相殺してしまい、十分な効果を得られなくなってしまう。この従来の構造化文書検証装置の判定処理によるオーバヘッドが発生する第一の例として、従来の構造化文書検証本装置が図１の文書を検証対象とする場合を考える。
この場合、従来の構造化文書検証装置は、ヘッダ部に保持されている検証履歴(図１の３行目から６行目)を参照し、検証対象文書の文書要素Ｃ(図１の９行目から１４行目)と文書要素Ｄ(図１の１５行目)の検証処理を実行せずに済む可能性があると判断し、検証対象文書を文書要素Ｃ、文書要素Ｄとそれ以外に分割してハッシュ関数などの一方向関数を適用してそれぞれのダイジェスト値を算出する。しかし、文書要素Ｃ、文書要素Ｄをのぞいた検証対象文書は出力文書で再利用され得ないにも関わらず、本装置は、文書要素Ｃ、文書要素Ｄをのぞいた検証対象文書に対しても本来不要な一方向関数適用処理を実行してしまう。
【００４０】
また、第二の例として、図２の文書スキーマに適合する文書を入力とし、図３の文書スキーマに適合する文書を出力するインターネット上のサービスを考える。これらの文書スキーマは、文書要素Ｃの定義(図２、図３ともに１０行目から１７行目)と文書要素Ｄの定義(図２、図３ともに１８行目)を共有している。本装置が本サービスの入力文書(たとえば図４７)と出力文書(たとえば図１の８行目から１７行目)を検証対象とする場合、入力文書中の文書要素Ｃ(図４７の６行目から１１行目)と文書要素(図４７の１２行目)が出力文書で再利用される可能性が高いと判断し、入力文書を文書要素Ｃ、文書要素Ｄとそれ以外に分割してハッシュ関数などの一方向関数を適用してそれぞれのダイジェスト値を算出する。
【００４１】
そして、出力文書も文書要素Ｃ(図１の９行目から１４行目)、文書要素Ｄ(図１の１５行目)とそれ以外に分割して一方向関数を適用し、入出力文書の文書要素Ｃのダイジェスト値が同一なら出力文書中の文書要素Ｃに対する検証処理を実行せず、入出力文書の文書要素Ｄのダイジェスト値が同一なら出力文書中の文書要素Ｄに対する検証処理を実行しないことにより、検証処理を効率化する。
【００４２】
しかし、第一の例と同様、文書要素Ｃ、文書要素Ｄをのぞいた入力文書は出力文書で再利用され得ないにも関わらず、本装置は、文書要素Ｃ、文書要素Ｄをのぞいた入力文書に対しても本来不要な一方向関数適用処理を実行してしまう。同様に、文書要素Ｃ、文書要素Ｄを除いた出力文書は入力文書を基に作成されていないにも関わらず、本装置は、文書要素Ｃ、文書要素Ｄをのぞいた出力文書に対しても本来不要な一方向関数適用処理を実行してしまう。また、前記サービスが入力文書中の文書要素Ｃを高い確率で変更して出力文書の一部とする場合、入力文書の文書要素Ｃと出力文書の文書要素Ｃに一方向関数を適用しても両者の代表値が一致せず、出力文書の文書要素Ｃに対して検証処理を実行することが頻繁に発生する。この結果、文書要素Ｃに対する一方向関数適用処理が全体の処理効率を低下させてしまう。
【００４３】
さらに、第三の例として、図４〜図１９の文書スキーマに適合する図２０の文書を入力とし、同じ文書スキーマに適合する図２１の文書を出力するインターネット上のサービスを考える。このサービスの入出力文書が検証サービスで検証され、検証サービスでは、図４〜図１９の文書スキーマの情報を利用してこれらの文書を分割して一方向関数を適用した場合を考える。なお、図４〜図１９は一つの文書スキーマを示している。図２２に、分割された文書フラグメントの一覧と各文書フラグメントに一方向関数を適用したときの処理時間の実例の一覧を示す。なお、空欄は、対応する文書フラグメントが入力文書または出力文書に存在しないことを意味する。また図４〜図１９、図２０、図２１で用いている文書スキーマや文書、および、図２２の文書要素名は、XMLコンソーシアムで制定されているTravelXMLという標準の関連資料として公開されているものを引用したものである。また図２３および図２４の記載もTravelXML関連資料の記載に基づくものである。
【００４４】
たとえば、図２２の２５行目を参照すると、入力文書の文書要素“RoomAvailabilityInquiry”に対して一方向関数が適用され、１７０．４マイクロ秒を費やしたにもかかわらず、出力文書にはこの名前の文書要素が含まれなかったのでこの１７０．４マイクロ秒は無駄になってしまっていることがわかる。同様に、図２２の３行目から７行目、および２６行目を参照すると、これらの文書要素は入力文書に含まれないにも関わらず、出力文書の文書要素に対して一方向関数が適用され、あわせて４５８．４マイクロ秒が無駄に消費されてしまっていることがわかる。これらの数値は決して大きいものとはいえないが、インターネット上を流通するすべての構造化文書に対して検証処理を実行すべきものと考えると、潜在的な処理コストは莫大なものになると考えられる。
【００４５】
次に、図面を参照しながら、本発明の構造化文書検証装置の詳細について説明する。図２３は、本実施例で用いる予約サービスシステム１の構成図である。図２３に示すように、予約サービスシステム１は、サービス利用者端末２、旅行代理店サーバ３、旅行企画会社サーバ４、宿泊施設サーバ５、６、７、企画会社サーバ８、構造化文書検証装置としての検証サービスサーバ９を備える。なお、予約サービスの各構成者はインターネットなどのネットワーク１０で接続されており、一連の処理は自動的に実行される。本サービス実行時にやりとりされる商品予約票、予約完了通知、予約通知連絡、通知受付完了通知は、受信者が受信して実行する前にインターネット上の検証サービスサーバ９で妥当性を検証するものとする。検証サービスサーバ９は、ネットワーク１０を介して入力された構造化文書（入力文書）が対応する文書スキーマに記述された条件を満たしているか否かを検証するものである。
【００４６】
図２４は、この一連の処理を記載したシーケンス図を示す。本サービスを利用する利用者が操作する利用者端末２が旅行代理店サーバ３に対して予約したい旅行商品を特定すると、旅行代理店サーバ３は、旅行企画会社サーバ４に商品予約依頼を送信する。旅行企画会社サーバ４は旅行商品の在庫を確認して予約を実行し、旅行代理店サーバ３に予約完了通知を送信する。そして、旅行商品で利用される宿泊施設サーバ５、６、７に対して予約通知連絡を送信する。宿泊施設サーバ５、６、７は通知受付完了通知を旅行企画会社サーバ４に返信する。
【００４７】
図２５は、本実施例の検証サービスサーバ９の構成図を示す。図２５に示すように、検証サービスサーバ９は、文書スキーマ保持部９１、初期化処理部９２、文書分割部９３および文書比較・検証部９４を有する。
【００４８】
文書スキーマ保持部９１は、文書スキーマを保持する。図３は、文書スキーマ保持部９１に保持されている文書スキーマを示す。本実施例では、図３の文書スキーマを予約完了通知スキーマであるものとする。なお、本説明書で用いる文書スキーマは、W3C XML Schema標準で規定された記法に基づいて記述されている。
【００４９】
（判定処理）
文書比較・検証部９４は、判定処理として、入力された構造化文書が対応する文書スキーマに記述された条件を満たしているか否か検証後に、構造化文書または構造化文書の一部、およびスキーマに記述された条件の少なくともいずれかに対して検証結果に影響する変更が加えられたか否かを判定する。このとき、文書比較・検証部９４は、例えば構造化文書が直近に検証された時点で構造化文書に所定の演算を実行して得られたダイジェスト値（情報）と、入力された構造化文書に所定の演算を実行して得られたダイジェスト値（情報）に基づいて、構造化文書または構造化文書の一部、およびスキーマに記述された条件の少なくともいずれかに対して検証結果に影響する変更が加えられたか否かを判定する。文書比較・検証部９４は、両ダイジェスト値が異なる場合に、構造化文書または構造化文書の一部、およびスキーマに記述された条件の少なくともいずれかに対して検証結果に影響する変更が加えられたと判定する。
【００５０】
文書比較・検証部９４は、出力処理として、変更が加えられたと判定された場合、構造化文書または構造化文書の一部がスキーマに記述された条件を満たしているか否かを検証して検証結果を出力する。
【００５１】
また、文書比較・検証部９４は、判定処理の除外対象となる判定除外対象を特定する機能を有する。この判定除外対象とは、入力された構造化文書から、判定処理の対象にすると処理効率が低下する構造化文書または構造化文書の一部を判定処理を実行しないで出力処理の対象となるものである。このとき、文書比較・検証部９４は、判定処理が必ず無駄になる文書部分を特定するため、入力された構造化文書から、判定処理において検証結果に影響する変更が加えられていないと判定され得ない構造化文書または構造化文書の一部を、判定除外対象として特定する。文書比較・検証部９４は、判定除外対象に対しては出力処理を実行し、判定除外対象以外に対しては判定処理を実行して変更が加えられたと判定された場合には出力処理を実行する。
【００５２】
以下では、検証サービスサーバ９によって一度検証処理がなされた入力された構造化文書には、入力された構造化文書の全部または一部の基となる派生元文書の全部または一部の頂点に位置する文書要素名と、この派生元文書の全部または一部に所定の演算を実行して得られる情報の組である検証履歴が１つ以上対応付けられているものとする。
【００５３】
図２６は、検証サービスサーバ９の処理の流れの概要を示す図である。図２６に示すとおり、検証サービスサーバ９の処理は、起動直後に実行される初期化処理（ステップＳ１１）と、文書入力時に実行される文書分割処理（ステップＳ１３）および文書比較・検証処理（ステップＳ１４）に大別される。まず初期化処理（ステップＳ１１）が実行され、文書が入力されると（ステップＳ１２）、文書分割処理（ステップＳ１３）が行われ、文書比較・検証処理（ステップＳ１４）の後、検証結果が出力される（ステップＳ１５）。
【００５４】
次に、検証サービスサーバ９の初期化処理（ステップＳ１１）について詳細に説明する。図２７は、検証サービスサーバ９の初期化処理の流れを示す図である。図２７に示すとおり、初期化処理は、文書スキーマ保持部９１中のすべての文書スキーマの文書内容モデル中のelement要素のnillable属性の値をtrueに設定する処理である。
【００５５】
初期化処理部９２は、処理対象を文書スキーマ保持部９１中の先頭の文書スキーマとし（ステップＳ２１）、処理対象中のelement要素でref属性をもつものすべてに対し、属性nillable、値trueを設定する（ステップＳ２２）。初期化処理部９２は、処理対象が文書スキーマ保持部９１中の最後のスキーマの場合（ステップＳ２３で「ＹＥＳ」）、処理を終了し、最後のスキーマでない場合（ステップＳ２３で「ＮＯ」）、処理対象を次の文書スキーマとし（ステップＳ２４）、ステップＳ２２へ戻る。
【００５６】
図２８は、図３の文書スキーマに対して初期化処理を実行した結果得られる文書スキーマを示す図である。W3C XML Schema標準に準拠する文書スキーマ中のelement要素のnillable属性の値をtrueに設定しておくと、このelement要素に対応付けられる文書中の文書要素は空要素であることが許される。ただし、文書要素のxsi:nil属性の値がtrueに設定されている必要がある。
【００５７】
次に、検証サービスサーバ９の分割処理（ステップＳ１３）について説明する。図２９は、検証サービスサーバ９の分割処理の流れを示す図である。文書分割部９３は、まず、処理対象を入力文書のルート文書要素とし（ステップＳ３１）、ロケーションパス末尾の文書要素指定記述に処理対象がマッチする検証履歴がない場合（ステップＳ３２で「ＮＯ」）、ステップＳ３４へ進み、処理対象がマッチする検証履歴がある場合（ステップＳ３３で「ＹＥＳ」）、処理対象を頂点とする部分木を文書から分割する（ステップＳ３３）。
【００５８】
次に、文書分割部９３は、分割した部分木と上記検証履歴を対応付ける（ステップＳ３４）。そして、文書分割部９３は、文書を深さ優先探索するとき、処理対象の次に到達する文書要素がない場合（ステップＳ３５で「ＮＯ」）、処理を終了し、処理対象の次に到達する文書要素がある場合（ステップＳ３５で「ＹＥＳ」）、処理対象を処理対象の次に到達する文書要素とし（ステップＳ３６）、ステップＳ３２へ戻る。
【００５９】
図１の予約完了通知文書が検証サービスサーバ９に入力されたとき、分割処理の結果得られる文書フラグメントおよび文書を図３０から図３２に示す。図３２の文書では、文書要素Ｃと文書要素Ｄを頂点とする文書フラグメントが分割されたため、これらの文書要素は空要素となり、xsi:nil属性の値がtrueに設定されている。これによって、文書比較・検証部９４は、入力された構造化文書に対応付けられているすべての検証履歴の文書要素名と同一の名前を持つすべての文書要素を頂点とする文書フラグメントを入力された構造化文書から除いた残りを判定除外対象として特定する。
【００６０】
次に、文書比較・検証処理（ステップＳ１４）について説明する。図３３は、文書比較・検証処理の流れを示す図である。文書比較・検証部９４は、処理対象を分割後の文書・文書フラグメントの先頭要素とし（ステップＳ４１）、処理対象に検証履歴が対応付けられている場合（ステップＳ４２で「ＹＥＳ」）、処理対象のダイジェスト値を算出する（ステップＳ４３）。次に、文書比較・検証部９４は、算出したダイジェスト値と同じダイジェスト値を持つ検証履歴がある場合（ステップＳ４４で「ＹＥＳ」）、検証結果を算出したダイジェスト値と同じダイジェスト値を持つ検証履歴の検証結果真偽値とし（ステップＳ４５）、ステップＳ４７へ進む。
【００６１】
文書比較・検証部９４は、ステップＳ４２で処理対象に検証履歴が対応付けられていない場合、検証結果を処理対象に対応付けられた文書スキーマによる検証結果真偽値とし（ステップＳ４６）、ステップＳ４７へ進む。このように、文書比較・検証部（特定手段）９４は、処理対象に検証履歴が対応付けられていない場合には、この処理対象を判定除外対象と判定し、この判定除外対象については、検証結果に影響する変更が加えられていないと判定され得ないため、判定処理をスキップすることで処理効率が向上できる。
【００６２】
また、ステップＳ４４で、算出したダイジェスト値と同じダイジェスト値を持つ検証履歴がない場合、検証結果を処理対象に対応付けられた文書スキーマによる検証結果真偽値とし（ステップＳ４６）、ステップＳ４７へ進む。文書比較・検証部９４は、ダイジェスト値が算出済みでない場合（ステップＳ４７で「ＮＯ」）、ステップＳ４９に進み、ダイジェスト値を算出済の場合（ステップＳ４７で「ＹＥＳ」）、ダイジェスト値、ロケーションパス、検証結果真偽値を用いて検証履歴を作成し、出力文書のHeader要素直下に追加する（ステップＳ４８）。
【００６３】
文書比較・検証部９４は、すべての処理対象を処理済の場合（ステップＳ４９で「ＹＥＳ」）、処理を終了し、すべての処理対象が処理済みでない場合（ステップＳ４９で「ＮＯ」）、処理対象を分割後の文書・文書フラグメントの次要素とし（ステップＳ４１０）、ステップＳ４２へ戻る。
【００６４】
図３０の文書フラグメントから算出されるダイジェスト値が“1ac4bb7484335fe3c22677accf31115f”であり、図３１の文書フラグメントから算出されるダイジェスト値が“b8b12a7370238e8d9a0c56ab9f6b6aa6”であるとすると、これらの値は対応する検証履歴のダイジェスト値と同一であるため、変更が加えられていないと判断され、これらに対する検証処理はスキップされる。また、図３２の文書は判定除外対象となり、判定処理の処理対象にすると処理効率が低下する文書であるため、図３２の文書のダイジェスト値は算出されず、検証処理のみが実行される。これらにより、判定除外対象に対しては出力処理のみを実行し、判定除外対象以外に対しては判定処理を実行して変更が加えられたと判定された場合には出力処理を実行することで、処理効率が向上できる。
【００６５】
実施例１によれば、検証結果に影響する変更が加えられていないと判定され得ない構造化文書または構造化文書の一部が特定され、これらに対する判定処理は実行されない。したがって、不要な処理を実行せずに済み、処理効率を向上できる。たとえば、上述した第一の例では、入力文書および出力文書の文書要素Ｃ、文書要素Ｄを除いたものに対して判定処理は実行されないので、処理効率を向上できる。
【実施例２】
【００６６】
実施例２でも、図２３および図２４に示した旅行商品予約サービスを用いる。実施例１と同様、本サービス実行時にやりとりされる商品予約票、予約完了通知、予約通知連絡、通知受付完了通知は、受信者が受信して実行する前にインターネット上の検証サービスサーバ１０９で妥当性を検証するものとする。
【００６７】
実施例２における検証サービスサーバ１０９の構成図を図３４に示す。図３４に示すように、検証サービスサーバ１０９は、文書スキーマ保持部９１、初期化処理部９２、文書分割部９３、文書比較・検証部９４およびサービスインタフェース保持部９５を有する。検証サービスサーバ１０９の文書スキーマ保持部９１に保持されている文書スキーマを図２および図３に示す。以下、本実施例では、図２の文書スキーマを商品予約依頼スキーマであり、図３の文書スキーマを予約完了通知スキーマであるものとする。また、サービスインタフェース保持部９５に保持されているサービスインタフェースを図３５に示す。
【００６８】
図３５のサービスインタフェースは、検証サービスサーバ１０９が、ルート文書要素の拡張文書要素名がhttp://metalraven.crl.fujixerox.co.jp/:SampleXML}:Aである文書(問合せ文書としての商品予約依頼)を受信し、ルート文書要素の拡張文書要素名がhttp://metalraven.crl.fujixerox.co.jp/:SampleXML}:Bである文書(応答文書としての予約完了通知)を返信するサービス(旅行企画会社サーバ４)の入出力文書を検証対象としてサポートしていることを示す。
【００６９】
次に、検証サービスサーバ１０９の処理の流れについて説明する。検証サービスサーバ１０９の処理の流れの概要は実施例１で説明した図２６と同様である。再度、図２６を参照すると、検証サービスの処理は、起動直後に実行される初期化処理（ステップＳ１１）と、文書入力時に実行される文書分割処理（ステップＳ１３）および文書比較・検証処理（ステップＳ１４）に大別される。まず初期化処理（ステップＳ１１）が実行され、文書が入力されると（ステップＳ１２）、文書分割処理（ステップＳ１３）が行われ、文書比較・検証処理（ステップＳ１４）の後、検証結果が出力される（ステップＳ１５）。
【００７０】
次に、第２実施例による初期化処理の流れの概要を図３６に示す。図３６に示すとおり、初期化処理は、サービスインタフェース初期化処理の繰り返しである。初期化処理部９２は、処理対象をサービスインタフェース保持部９５の先頭要素（ステップＳ５１）とし、サービスインタフェース初期化処理を行う（ステップＳ５２）。初期化処理部９２は、処理対象がサービスインタフェース保持部９５の末尾要素の場合（ステップＳ５３で「ＹＥＳ」）、処理を終了し、処理対象がサービスインタフェース保持部９５の末尾要素でない場合（ステップＳ５３で「ＮＯ」）、処理対象をサービスインタフェース保持部９５の次要素とし（ステップＳ５４）、ステップＳ５２へ戻る。
【００７１】
次に、サービスインタフェース初期化処理（ステップＳ５２）について詳細に説明する。サービスインタフェース初期化処理の流れを図３７に示す。初期化処理部９２は、問合せ文書、応答文書の文書スキーマを文書スキーマ保持部９１から特定する（ステップＳ６１）。ここでは、初期化処理部９２は、図２の商品予約依頼スキーマを問合せ文書のスキーマとして、図３の予約完了通知スキーマを応答文書のスキーマとして特定する。次に、初期化処理部９２は、各文書スキーマの文書スキーマツリーを作成する（ステップＳ６２）。ステップＳ６２で作成される文書スキーマツリーを図３８および図３９に示す。図３８は図２の商品予約依頼スキーマから作成された文書スキーマツリーを、図３９は図３の予約完了通知スキーマから作成された文書スキーマツリーを示している。文書スキーマツリーは、文書要素定義ノード(白長方形)、文書要素定義参照ノード(灰色長方形)、タイプ定義ノード(白楕円形)、タイプ参照ノード(灰色楕円形)をノードとする有向木である。
【００７２】
次に、初期化処理部９２は、各文書スキーマの文書スキーマグラフを作成する（ステップＳ６３）。ステップＳ６３で作成される文書スキーマグラフを図４０および図４１に示す。図４０は図２の商品予約依頼スキーマから作成された問合せ文書スキーマグラフを示し、図４１は図３の予約完了通知スキーマから作成された応答文書スキーマグラフを示している。文書スキーマグラフは、文書要素定義ノードの有向グラフである。文書スキーマグラフは、文書スキーマツリー中で同じ名前を持つ文書要素定義ノードと文書要素定義参照ノードを単一の文書要素定義ノードに集約し、タイプ定義ノードに接続されている文書要素定義ノードと同じ名前のタイプ参照ノードに接続されている文書要素定義ノードを直接接続することで生成される。
【００７３】
また、文書スキーマグラフの文書要素定義ノードには、その文書定義に対応する文書要素を、文書スキーマに対応する文書で特定するためのXPathロケーションパスが設定されている。なお、図４０および図４１では、文書スキーマグラフの各ノードと、対応する文書スキーマツリーのノードとの対応関係がそれぞれ破線および一点鎖線で示されている。
【００７４】
次に、初期化処理部９２は、図４０の問い合わせ文書スキーマグラフと図４１の応答文書スキーマグラフを合成してサービスインタフェースグラフを作成する（ステップＳ６４）。ステップＳ６４で作成されるサービスインタフェースグラフを図４２に示す。サービスインタフェースグラフは文書スキーマグラフと同様、文書要素定義ノードの有向グラフであるが、２つの文書スキーマグラフによって共有されている共有ノードを含む。
【００７５】
図４２のサービスインタフェースグラフは、http://metalraven.crl.fujixerox.co.jp/:SampleXML}:Ｃとhttp://metalraven.crl.fujixerox.co.jp/:SampleXML}:Ｄの２つの共有ノードを含む。共有ノードには、XPathロケーションパスが２つ設定されている。また、ノード“{http://metalraven.crl.fujixerox.co.jp/:SampleXML}:Ａ”および、ノードhttp://metalraven.crl.fujixerox.co.jp/:SampleXML}:Ｂの名前が白抜きになっているが、これは、これらの名前の組がこのサービスインタフェースグラフを特定するためのキーになっていることを示している。
【００７６】
次に、初期化処理部９２は、文書スキーマ中の文書要素定義要素のうち、ＣとＤの２つの共有ノードに対応するものにnillable属性(値はtrue)を設定する（ステップＳ６５）。ステップＳ６５で作成される文書スキーマを図４３および図４４に示す。また、図４３と図４４に対応する文書スキーマグラフ（部分検証用文書スキーマグラフ）を含むサービスインタフェースグラフを図４５に示す。図４３と図４４の文書スキーマによって、ＣとＤの２つの共有ノードに対応する文書要素を頂点とする文書フラグメント、および、これらの文書フラグメントを検証対象の文書から分割した残りの文書を検証することができる。
【００７７】
図４５の部分検証用文書スキーマグラフは、図４２の文書スキーマグラフ中の共有ノードに対応付けられている文書要素定義参照ノードのうち、ルート文書要素定義ノードにもっとも近いもののnillable属性の値をtrueに設定することで得られる。そして、初期化処理部９２は、サービスインタフェースグラフ、文書スキーマ、部分検証用文書スキーマとサービスインタフェースを対応付け、サービスインタフェース保持部９５に保存する（ステップＳ６６）。
【００７８】
次に、第２実施例による文書分割処理（ステップＳ１３）について説明する。第２実施例による文書分割処理の流れを図４６に示す。文書分割部（特定手段）９３は、入力文書の文書スキーマのうち、入力文書の全部または一部の基となる派生元文書の文書スキーマと共有する文書スキーマフラグメントを特定するため以下のような処理を行う。文書分割部９３は、入力文書のHeader要素の属性から問い合わせ文書ルート文書要素名、応答文書ルート要素名を取得する（ステップＳ７１）。次に、文書分割部９３は、ルート文書要素名の組からサービスインタフェースを特定する（ステップＳ７２）。そして、文書分割部９３は、サービスインタフェースグラフから、部分検証用文書スキーマである共有フラグメントを入手する（ステップＳ７３）。
【００７９】
文書分割部９３は、共有フラグメントのロケーションパスを用いて入力文書を分割し、分割した文書フラグメントのルート文書要素のコピーを作成してnil属性(値はtrue)を設定し、ルート文書要素があった位置に追加する（ステップＳ７４）。また、図４７の文書が検証サービスサーバ１０９に入力されたとき、ステップＳ７４の分割処理の結果得られる文書フラグメントおよび文書を図４８から図５０に示す。図４８はＣの共有ノードに対応する文書要素を頂点とする文書フラグメント、図４９はＤの共有ノードに対応する文書要素を頂点とする文書フラグメント、図５０はこれらの文書フラグメントを検証対象の文書から分割した残りの文書（判定除外対象）をそれぞれ示している。そして、文書分割部９３は、各文書フラグメントの分割に用いたロケーションパス末尾の文書要素指定記述と同じ文書要素指定記述をロケーションパス末尾に持つ検証履歴をHeader要素直下から特定して対応付ける（ステップＳ７５）。
【００８０】
次に、文書比較・検証処理（ステップＳ１４）について説明する。文書比較・検証処理の流れを図５１に示す。文書比較・検証部９４は、処理対象を分割後の文書・文書フラグメントの先頭要素とする（ステップＳ８１）。文書比較・検証部９４は、処理対象に検証履歴が対応付けられている場合（ステップＳ８２「ＹＥＳ」）、ステップＳ８４に進み、処理対象に検証履歴が対応付けられていない場合（ステップＳ８２「ＮＯ」）、ステップ８３に進む。
【００８１】
処理対象が文書フラグメントの場合（ステップＳ８３で「ＹＥＳ」）、処理対象のダイジェスト値を算出する（ステップＳ８４）。文書比較・検証部９４は、算出したダイジェスト値と同じダイジェスト値を持つ検証履歴がある場合（ステップＳ８５で「ＹＥＳ」）、検証結果を算出したダイジェスト値と同じダイジェスト値を持つ検証履歴の検証結果真偽値とし（ステップＳ８６）、ステップＳ８８に進む。
【００８２】
文書比較・検証部９４は、処理対象が文書フラグメントでなく判定除外対象としての文書である場合（ステップＳ８３で「ＮＯ」）、検証結果を処理対象に対応付けられた文書スキーマによる検証結果真偽値とし（ステップＳ８７）、ステップＳ８８に進む。このように、文書比較・検証部（特定手段）９４は、入力文書から共有する文書スキーマフラグメントに対応する文書フラグメントを除いた残りを判定除外対象として特定し、この判定除外対象については、判定処理をスキップすることで、処理効率が向上できる。
【００８３】
また、ステップＳ８５で、算出したダイジェスト値と同じダイジェスト値を持つ検証履歴がない場合、検証結果を処理対象に対応付けられた文書スキーマによる検証結果真偽値とし（ステップＳ８７）、ステップＳ８８に進む。文書比較・検証部９４は、まだダイジェスト値が算出されていない場合（ステップＳ８８で「ＮＯ」）、ステップＳ８１０へ進み、ダイジェスト値を算出済の場合（ステップＳ８８「ＹＥＳ」）、ダイジェスト値、ロケーションパス、検証結果真偽値を用いて検証履歴を作成し、出力文書のHeader要素直下に追加する（ステップＳ８９）。文書比較・検証部９４は、すべての処理対象を処理済の場合（ステップＳ８１０で「ＹＥＳ」）、処理を終了し、すべての処理対象が処理済みでない場合（ステップＳ８１０で「ＮＯ」）、処理対象を分割後の文書・文書フラグメントの次要素とし（ステップＳ８１１）、ステップＳ８２へ戻る。
【００８４】
上記文書比較・検証処理において、図４７の文書が検証サービスサーバ１０９に入力されたとき、図４８および図４９の文書フラグメントのダイジェスト値は算出されるが、従来の手法で算出していた図５０の文書は判定除外対象であるため、この文書のダイジェスト値は算出されない。これにより、不要なダイジェスト値算出処理を実行せずに済み、処理効率を向上できる。
【００８５】
次に、図４７の文書に対して文書比較・検証処理を実行した結果得られる出力文書を図５２に示す。この出力文書が旅行企画会社サーバ４に出力されると、旅行企画会社サーバ４は文書に対する所定の処理を実行する。図５２の出力文書が旅行企画会社サーバ４で処理され、旅行企画会社サーバ４から旅行代理店サーバ３に返信されるときに検証サービスサーバ１０９に入力される入力文書を図１に示す。
【００８６】
図１の入力文書のsampenv:Header要素は、図５２の出力文書のsampenv:Header要素がコピーされたものである。また、図１の入力文書に対して図４６の文書分割処理を行い、ステップＳ７４の分割処理の結果得られる文書フラグメントおよび文書を図５３から図５５に示す。図５３はＣの共有ノードに対応する要素を頂点とする文書フラグメント、図５４はＤの共有ノードに対応する文書要素を頂点とする文書フラグメント、図５５はこれらの文書フラグメントを検証対象の文書から分割した残りの文書（判定除外対象）をそれぞれ示している。図５３の文書フラグメントは図４８の文書フラグメントと、図５４の文書フラグメントは図４９の文書フラグメントと同一であるため、これらに対する検証処理はスキップされる。また、図５５の文書は判定除外対象であるため、この文書のダイジェスト値は算出されず、検証処理のみが実行される。これらにより、処理効率を向上できる。
【００８７】
なお、本実施例では、サービスインタフェース保持部９５に保持されるサービスインタフェースを、入力文書のルート文書要素名と出力文書のルート文書要素名の組として表現した(図３５参照)。また、これらのルート文書要素の定義は、文書スキーマ保持部９１中の文書スキーマに含まれているものとした。しかし、これ以外にも、サービスインタフェースをＷＳＤＬ文書として表現することも可能である。この場合、ＷＳＤＬ文書を入力された構造化文書とし、派生元文書の文書スキーマをＷＳＤＬ文書で定義されているリクエスト・レスポンス型Ｗｅｂサービスのリクエスト文書の文書スキーマとし、入力された構造化文書の文書スキーマをＷｅｂサービスのレスポンス文書の文書スキーマとする。
【００８８】
また、本実施例では、W3C XML Schemaの機能を利用して、再検証が不要な部分木を除いた文書を検証する手順を示した。しかし、これ以外の方法でも、検証処理手順を変更することで同等の効果を挙げることができる。具体的には、サービスインタフェースグラフの共有ノードに含まれるXPathロケーションパスで特定される検証対象文書中の文書要素を頂点とする部分木を検証しないように検証処理手順を変更すればよい。
【００８９】
また、将来マッチングされ得ない文書部分を特定する場合、文書分割部９３は、入力文書の文書スキーマのうち、入力文書の全部または一部を基に生成される派生先文書の文書スキーマと共有する共有文書スキーマフラグメントを特定する。そして、文書比較・検証部９４は、入力文書から共有文書スキーマフラグメントに対応する文書フラグメントを除いた残りを判定除外対象として特定してその後の処理を行うようにしてもよい。また、サービスインタフェースをＷＳＤＬ文書として表現することも可能である。この場合、ＷＳＤＬ文書を入力文書とし、入力文書の文書スキーマをＷＳＤＬ文書で定義されているリクエスト・レスポンス型Ｗｅｂサービスのリクエスト文書の文書スキーマとし、派生先文書の文書スキーマをＷｅｂサービスのレスポンス文書の文書スキーマとする。
【実施例３】
【００９０】
次に、実施例３について説明する。本実施例の文書検証サービスの処理は、文書フラグメントを除いた文書を検証するための文書スキーマ(部分検証用文書スキーマ)を、文書フラグメントを検証するための文書スキーマとは別に作成する点を除いて、実施例２の文書検証サービスの処理と同一である。本実施例の文書検証サービスの構成図は図３４に、処理の概要は図２６に、初期化処理の流れの概要は図３６に示したとおりである。
【００９１】
実施例３による検証サービスサーバ１０９のサービスインタフェース初期化処理の流れを図５６に示す。初期化処理部９２は、問合せ文書、応答文書の文書スキーマを文書スキーマ保持部９１から特定する（ステップＳ９１）。初期化処理部９２は、各文書スキーマの文書スキーマツリーを作成する（ステップＳ９２）。初期化処理部９２は、各文書スキーマの文書スキーマグラフを作成する（ステップＳ９３）。初期化処理部９２は、問い合わせ文書スキーマグラフと応答文書スキーマグラフを合成してサービスインタフェースグラフを作成する（ステップＳ９４）。
【００９２】
初期化処理部９２は、サービスインタフェースのコピーを作成し、各文書スキーマの部分検証用文書スキーマを作成し、文書スキーマ保持部９１に保存する（ステップＳ９５）。また、ステップＳ９５で作成される部分検証用文書スキーマを図５７および図５８に示す。また、これらの文書スキーマを含むサービスインタフェースグラフを図５７に示す。初期化処理部９２は、サービスインタフェースグラフ、文書スキーマ、部分検証用文書スキーマとサービスインタフェースを対応付け、サービスインタフェース保持部９５に保存する（ステップＳ９６）。
【００９３】
次に、実施例３の文書分割処理（ステップＳ１３）の流れを図６０に示す。文書分割部９３は、入力文書のHeader要素の属性から問い合わせ文書ルート文書要素名、応答文書ルート要素名を取得する（ステップＳ１０１）。文書分割部９３は、ルート文書要素名の組からサービスインタフェースを特定する（ステップＳ１０２）。文書分割部９３は、サービスインタフェースグラフから、共有フラグメントを入手する（ステップＳ１０３）。
【００９４】
文書分割部９３は、共有フラグメントのロケーションパスを用いて入力文書を分割する（ステップＳ１０４）。また、図４７の文書が検証サービスサーバ１０９に入力されたとき、ステップＳ１０４の分割処理の結果得られる文書フラグメントおよび文書を図６１から図６３に示す。図６１はＣの共有ノードに対応する文書要素を頂点とする文書フラグメント、図６２はＤの共有ノードに対応する文書要素を頂点とする文書フラグメント、図６３はこれらの文書フラグメントを検証対象の文書から分割した残りの文書（判定除外対象）をそれぞれ示している。
【００９５】
文書分割部９３は、各文書フラグメントの分割に用いたロケーションパス末尾の文書要素指定記述と同じ文書要素指定記述をロケーションパス末尾に持つ検証履歴をHeader要素直下から特定して対応付ける（ステップＳ１０５）。文書分割部９３は、文書フラグメントに文書スキーマを対応付け、文書フラグメントを分割して残った文書に部分検証用文書スキーマを対応付ける（ステップＳ１０６）。
【００９６】
文書比較・検証処理の流れは図５１に示したとおりである。図４７の文書が検証サービスサーバ１０９に入力されたとき、図６１および図６２の文書フラグメントのダイジェスト値は算出されるが、従来の手法で算出していた図６３の文書は判定除外対象であるため、この文書のダイジェスト値は算出されない。これにより、不要なダイジェスト値算出処理を実行せずに済み、処理効率を向上できる。
【００９７】
本実施例の検証サービスサーバ１０９が旅行企画会社サーバ４に出力する文書は図５２に示したとおりである。また、図５２の出力文書が旅行企画会社サーバ４で処理され、旅行企画会社サーバ４から旅行代理店サーバ３に返信されるときに検証サービスサーバ１０９に入力される入力文書は図１に示したとおりである。
【００９８】
図１の文書が検証サービスサーバ９に入力されたとき、ステップＳ１０４の分割処理の結果得られる文書フラグメントおよび文書を図６４から図６６に示す。図６４はＣの共有ノードに対応する要素を頂点とする文書フラグメント、図６５はＤの共有ノードに対応する文書要素を頂点とする文書フラグメント、図６６はこれらの文書フラグメントを検証対象の文書から分割した残りの文書（判定除外対象）をそれぞれ示している。図６４の文書フラグメントは図６１の文書フラグメントと、図６５の文書フラグメントは図６２の文書フラグメントと同一であるため、これらに対する検証処理はスキップされる。また、図６６の文書は判定除外対象であるため、この文書のダイジェスト値は算出されず、検証処理のみが実行される。これらにより、処理効率を向上できる。
【実施例４】
【００９９】
実施例４の検証サービスサーバ１０９の処理は、文書比較・検証部９４の処理を除いて実施例２と同一である。実施例４の文書比較・検証部９４の処理の流れを図６７に示す。図５１の処理の流れとの相違点は、ステップＳ１１０４が追加された点と、ステップＳ１１０７およびＳ１１０８で処理時間が記録されるよう変更された点である。
【０１００】
文書比較・検証部９４は、まず、処理対象を分割後の文書・文書フラグメントの先頭要素とし（ステップＳ１１０１）、処理対象に検証履歴が対応付けられている場合（ステップＳ１１０２で「ＹＥＳ」）、ステップＳ１１０４へ進む。処理対象に検証履歴が対応付けられていない場合（ステップＳ１１０２で「ＮＯ」）の場合、ステップＳ１１０３へ進む。文書比較・検証部９４は、処理対象が文書フラグメントの場合（ステップＳ１１０３「ＹＥＳ」）、ステップＳ１１０４へ進み、処理対象が文書フラグメントでない場合、判定処理をスキップするためステップＳ１１０８へ進む。
【０１０１】
次に、文書比較・検証部（特定手段）９４は、判定処理の対象にする場合の処理時間の期待値と出力処理の対象にする場合の処理時間の期待値の大小関係を判定し、入力文書から、判定処理の対象にする場合の処理時間の期待値よりも出力処理の対象にする場合の処理時間の期待値が小さい構造化文書または構造化文書の一部を判定除外対象として特定する。すなわち、文書比較・検証部９４は、ステップＳ１１０４で、ダイジェスト値算出時の処理時間期待値＜ダイジェスト値非算出時の処理時間期待値の関係にある場合、ステップＳ１１０５へ進み、処理対象のダイジェスト値を算出し、算出時間を記録する（ステップＳ１１０５）。一方、ダイジェスト値算出時の処理時間期待値＜ダイジェスト値非算出時の処理時間期待値の関係にない場合、判定処理をスキップするためステップＳ１１０８に進む。
【０１０２】
文書比較・検証部９４は、算出したダイジェスト値と同じダイジェスト値を持つ検証履歴がある場合（ステップＳ１１０６「ＹＥＳ」）、検証結果を算出したダイジェスト値と同じダイジェスト値を持つ検証履歴の検証結果真偽値とし（ステップＳ１１０７）、ステップＳ１１０９へ進む。文書比較・検証部９４は、算出したダイジェスト値と同じダイジェスト値を持つ検証履歴がない場合（ステップＳ１１０６で「ＮＯ」）、判定処理を行うことができないため、ステップＳ１１０８に進む。文書比較・検証部９４は、検証結果を処理対象に対応付けられた文書スキーマによる検証結果真偽値とし、検証処理時間を記録する（ステップＳ１１０８）。
【０１０３】
文書比較・検証部９４は、ダイジェスト値がまだ算出されていない場合（ステップＳ１１０９で「ＮＯ」）、ステップＳ１１１１へ進み、ダイジェスト値が算出済の場合（ステップＳ１１０９「ＹＥＳ」）、ダイジェスト値、ロケーションパス、検証結果真偽値を用いて検証履歴を作成し、出力文書のHeader要素直下に追加する（ステップＳ１１１０）。文書比較・検証部９４は、すべての処理対象が処理済の場合（ステップＳ１１１１で「ＹＥＳ」）、処理を終了し、すべての処理対象が処理されていない場合（ステップＳ１１１１で「ＮＯ」、処理対象を分割後の文書・文書フラグメントの次要素とし（ステップＳ１１１２）、ステップＳ１１０２へ戻る。
【０１０４】
上記ステップＳ１１０４における“ダイジェスト値算出時の処理時間期待値”と“ダイジェスト値非算出時の処理時間期待値”はそれぞれ以下の式で算出される。なお、“処理済み文書フラグメント”とは、“入力文書フラグメントに対応する文書スキーマと同じ文書スキーマフラグメントに対応する過去の入力文書フラグメント”を意味するものとする。
・(ダイジェスト値算出時の処理時間期待値) = (処理済み文書フラグメントに対するダイジェスト値算出時間の平均値) + (処理済み文書フラグメントに対する検証時間の平均値) × (処理済み文書フラグメントダイジェスト値算出時に検証処理を必要とした確率)
・(ダイジェスト非算出時の処理時間期待値) = (処理済み文書フラグメントに対する検証時間の平均値)
【０１０５】
本実施例において検証サービスサーバ１０９に図４７の入力文書が入力される前に、図４７の文書および図１の文書が順次入力されたものとする。このとき、両文書の文書フラグメントである文書要素samp:Dのダイジェスト値がそれぞれ算出されるが、両者は異なるので、図１の文書中の文書要素samp:Dに対して検証処理が実行される。文書要素samp:Dのダイジェスト算出時間の平均値が１ms、検証処理時間の平均値が５msとすると、(ダイジェスト値算出時の処理時間期待値) = １ms + ５ms × １ = ６ms (ダイジェスト非算出時の処理時間期待値) = ５ms  となり、ステップＳ１１０４の条件を満たさないので、文書要素samp:Dに対するダイジェスト算出処理は実行されず、検証処理のみが実行される。これにより、処理効率を向上できる。
【０１０６】
なお、本実施例の検証処理では、ステップＳ１１０４の条件を満たさないすべての文書フラグメントに対するダイジェスト値算出処理を実行しないよう構成した。しかし、ステップＳ１１０４の条件を満たす場合はダイジェスト値算出処理を実行する確率を上げ、満たさない場合はダイジェスト値算出処理を実行する確率を下げるように構成することも可能である。この場合、文書比較・検証部（特定手段）９４は、入力文書から、判定処理の対象にする場合の処理時間の期待値よりも出力処理の対象にする場合の処理時間の期待値が小さい文書の全部または一部を、出力処理の対象にする場合の処理時間の期待値よりも判定処理の対象にする場合の期待値が小さい文書の全部または一部よりも高い確率で判定除外対象として特定することにより実現できる。これにより、処理効率の低下を抑えながら、一旦ダイジェスト値算出処理を実行しないと判定した文書フラグメント群に対してダイジェスト値算出処理を再開することが可能になる。
【０１０７】
なお、上記において、文書比較・検証部９４は、入力文書の全部または一部を基に生成される派生先文書と入力文書がともに含み得る文書の全部または一部で、入力された構造化文書と派生先文書がともにこの文書の全部または一部を含む確率と、入力文書と派生先文書がともにこの文書の全部または一部を含まない確率の和が小さいものを判定除外対象として特定するようにしてもよい。また、文書比較・検証部９４は、入力文書から、判定処理の結果、出力処理による検証処理が必要となる確率が大きい構造化文書または構造化文書の一部を判定除外対象として特定するようにしてもよい。
【０１０８】
また、文書比較・検証部９４は、入力構造化文書の全部または一部が対応する文書スキーマに対応する過去の入力文書の全部または一部に対する判定処理の時間および出力処理の時間を測定し、また、過去の入力文書の全部または一部が判定処理の対象となった回数と出力処理の対象となった回数とを測定する。そして、文書比較・検証部９４は、判定処理の処理時間と出力処理の処理時間と判定処理対象となった回数と出力処理の処理対象となった回数に基づいて、上述した入力文書の全部または一部を判定処理の対象にする場合の処理時間の期待値と出力処理の処理対象にする場合の処理時間の期待値を算出する。
【実施例５】
【０１０９】
実施例５の検証サービスサーバ１０９の処理は、文書分割処理および文書比較・検証処理を除いて実施例２と同一である。実施例５による文書分割処理の流れを図６８に示す。図４６の処理の流れとの相違点は、ステップＳ１２０６が追加された点である。
【０１１０】
文書分割部９３は、入力文書のHeader要素の属性から問い合わせ文書ルート文書要素名、応答文書ルート要素名を取得する（ステップＳ１２０１）。文書分割部９３は、ルート文書要素名の組からサービスインタフェースを特定する（ステップＳ１２０２）。文書分割部９３は、サービスインタフェースグラフから、共有フラグメントを入手する（ステップＳ１２０３）。文書分割部９３は、共有フラグメントのロケーションパスを用いて入力文書を分割し、分割した文書フラグメントのルート文書要素のコピーを作成してnil属性(値はtrue)を設定し、ルート文書要素があった位置に追加する（ステップＳ１２０４）。
【０１１１】
文書分割部９３は、各文書フラグメントの分割に用いたロケーションパス末尾の文書要素指定記述と同じ文書要素指定記述をロケーションパス末尾に持つ検証履歴をHeader要素直下から特定して対応付ける（ステップＳ１２０５）。文書分割部９３は、文書フラグメントに対応付けられたか否かに応じて、各検証履歴に対応する文書要素名の利用履歴を更新する（ステップＳ１２０６）。本実施例の文書分割処理では、ステップＳ１２０６において、入力文書に対応付けられた検証履歴が文書フラグメントまたは文書フラグメントを除いた残りの文書に対応付けられたか否かの利用履歴を更新する。この利用履歴は、文書要素名ごとに保持されるものとする。
【０１１２】
実施例５による文書検証処理の流れを図６９に示す。図５１の処理の流れとの相違点は、ステップＳ１３０４が追加された点である。文書比較・検証部９４は、処理対象を分割後の文書・文書フラグメントの先頭要素とする（ステップＳ１３０１）。文書比較・検証部９４は、処理対象に検証履歴が対応付けられている場合（ステップＳ１３０２「ＹＥＳ」）、ステップＳ１３０５へ進む。
【０１１３】
文書比較・検証部９４は、処理対象に検証履歴が対応付けられていない場合（ステップＳ１３０２「ＮＯ」）、ステップＳ１３０３へ進む。文書比較・検証部９４は、処理対象が文書フラグメントであり（ステップＳ１３０３で「ＹＥＳ」）、文書フラグメントに対応付けられた利用履歴から得られる利用度が閾値より大きい場合（ステップＳ１３０４で「ＹＥＳ」）、ステップＳ１３０４へ進む。文書比較・検証部９４は、処理対象が文書フラグメントでない場合（ステップＳ１３０３で「ＮＯ」）、又は文書フラグメントに対応付けられた利用履歴から得られる利用度が閾値より大きくない場合（ステップＳ１３０４で「ＮＯ」）、ステップＳ１３０８へ進む。文書比較・検証部９４は、処理対象のダイジェスト値を算出する（ステップＳ１３０５）。文書比較・検証部９４は、算出したダイジェスト値と同じダイジェスト値を持つ検証履歴がある場合（ステップＳ１３０６「ＹＥＳ」）、検証結果を算出したダイジェスト値と同じダイジェスト値を持つ検証履歴の検証結果真偽値とし（ステップＳ１３０７）、ステップＳ１３０９へ進む。
【０１１４】
文書比較・検証部９４は、ステップ１３０６で算出したダイジェスト値と同じダイジェスト値を持つ検証履歴がない場合、ステップＳ１３０８へ進む。ステップ１３０８で、文書比較・検証部９４は、検証結果を処理対象に対応付けられた文書スキーマによる検証結果真偽値とし、ステップＳ１３０９へ進む。
【０１１５】
文書比較・検証部９４は、ダイジェスト値がまだ算出されていない場合（ステップＳ１３０９で「ＮＯ」）、ステップＳ１３１１へ進む。文書比較・検証部９４は、ダイジェスト値を算出済の場合（ステップＳ１３０９「ＹＥＳ」）、ダイジェスト値、ロケーションパス、検証結果真偽値を用いて検証履歴を作成し、出力文書のHeader要素直下に追加する（ステップＳ１３１０）。文書比較・検証部９４は、すべての処理対象が処理済の場合（ステップＳ１３１１で「ＹＥＳ」）、処理を終了する。文書比較・検証部９４は、すべての処理対象が処理済でない場合（ステップＳ１３１１で「ＮＯ」）、処理対象を分割後の文書・文書フラグメントの次要素とし（ステップＳ１３１２）、ステップＳ１３０２へ戻る。
【０１１６】
実施例５の文書検証処理では、実施例２の文書検証処理のようにすべての文書フラグメントに対して無条件にダイジェスト値を算出するのではなく、文書フラグメントに対応する利用履歴を参照して、利用される可能性が高いと判断した場合にのみダイジェスト値を算出する。これにより、不要なダイジェスト値算出処理を軽減できる。
【０１１７】
例えば、検証サービスサーバ１０９のステップＳ１３０４の閾値が０．５に設定されているものとする。また、検証サービスサーバ１０９初期化後、図４７および図７０の文書が順次入力される前に、図４７の文書および図７０の文書が順次入力されたものとする。なお、図７０の文書は、図１の文書の文書要素“samp:D”（１５行目)を除いたものである。図４７の文書および図７０の文書を検証した結果、文書要素“Samp:C”に対する利用履歴は(検証履歴が再利用された回数／検証履歴が入力された回数) = (１／１)となるが、文書要素“samp:D”に対する利用履歴は(０／１)となる。
【０１１８】
この結果、図４７の文書が再度入力されたときには、ステップＳ１３０４で閾値０．５よりも文書要素“samp:D”に対する利用履歴の利用度０が小さいので、文書要素“samp:D”に対するダイジェスト値算出処理は実行されない。これにより、このあとに再度図７０の文書が入力されたときには無駄になるダイジェスト算出処理を回避できるので、処理効率を向上できる。なお、本実施例では、ステップＳ１３０４の閾値をあらかじめ設定された定数としたが、本実施例の処理の流れと実施例４の処理の流れを組み合わせることにより、閾値を動的に設定することも可能である。
【０１１９】
なお、本発明による構造化文書検証方法は、検証サービスサーバ９、１０９により実現される。サービス利用端末３、旅行代理店サーバ３、旅行企画会社サーバ４、宿泊施設サーバ５、６、７、企画会社サーバ８、検証サービスサーバ９、１０９は、例えば、ＣＰＵ（Central Processing Unit）、ＲＯＭ(Read Only Memory)、ＲＡＭ(Random Access Memory)等を用いて構成される。ＣＰＵが所定のプログラムを実行することにより構造化文書検証装置の機能や構造化文書検証方法の各ステップが実現される。
【０１２０】
以上本発明の好ましい実施例について詳述したが、本発明は係る特定の実施例に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形、変更が可能である。
【図面の簡単な説明】
【０１２１】
【図１】構造化文書を示す図である。
【図２】文書スキーマを示す図である。
【図３】文書スキーマを示す図である。
【図４】文書スキーマの一部を示す図である。
【図５】文書スキーマの一部を示す図である。
【図６】文書スキーマの一部を示す図である。
【図７】文書スキーマの一部を示す図である。
【図８】文書スキーマの一部を示す図である。
【図９】文書スキーマの一部を示す図である。
【図１０】文書スキーマの一部を示す図である。
【図１１】文書スキーマの一部を示す図である。
【図１２】文書スキーマの一部を示す図である。
【図１３】文書スキーマの一部を示す図である。
【図１４】文書スキーマの一部を示す図である。
【図１５】文書スキーマの一部を示す図である。
【図１６】文書スキーマの一部を示す図である。
【図１７】文書スキーマの一部を示す図である。
【図１８】文書スキーマの一部を示す図である。
【図１９】文書スキーマの一部を示す図である。
【図２０】構造化文書を示す図である。
【図２１】構造化文書を示す図である。
【図２２】分割された文書フラグメントの一覧と各文書フラグメントに一方向関数を適用したときの処理時間の実例の一覧を示す図である。
【図２３】本実施例で用いる予約サービスシステムの構成図である。
【図２４】予約サービスシステムの一連の処理を記載したシーケンス図である。
【図２５】実施例１の検証サービスサーバの構成図を示す図である。
【図２６】検証サービスサーバの処理の流れの概要を示す図である。
【図２７】検証サービスサーバの初期化処理の流れを示す図である。
【図２８】図３の文書スキーマに対して初期化処理を実行した結果得られる文書スキーマを示す図である。
【図２９】検証サービスサーバ９の分割処理の流れを示す図である。
【図３０】分割処理の結果得られる文書フラグメントを示す図である。
【図３１】分割処理の結果得られる文書フラグメントを示す図である。
【図３２】分割処理の結果得られる文書を示す図である。
【図３３】文書比較・検証処理の流れを示す図である。
【図３４】実施例２における検証サービスサーバの構成図である。
【図３５】サービスインタフェース保持部に保持されているサービスインタフェースを示す図である。
【図３６】第２実施例による初期化処理の流れの概要を示す図である。
【図３７】サービスインタフェース初期化処理の流れを示す図である。
【図３８】図２の商品予約依頼スキーマから作成された文書スキーマツリーを示す図である。
【図３９】図３の予約完了通知スキーマから作成された文書スキーマツリーを示す図である。
【図４０】図２の商品予約依頼スキーマから作成された問合せ文書スキーマグラフを示す図である。
【図４１】図３の予約完了通知スキーマから作成された応答文書スキーマグラフを示す図である。
【図４２】ステップＳ６４で作成されるサービスインタフェースグラフを示す図である。
【図４３】ステップＳ６５で作成される文書スキーマを示す図である。
【図４４】ステップＳ６５で作成される文書スキーマを示す図である。
【図４５】図４３と図４４に対応する文書スキーマグラフを含むサービスインタフェースグラフを示す図である。
【図４６】第２実施例による文書分割処理の流れを示す図である。
【図４７】構造化文書を示す図である。
【図４８】Ｃの共有ノードに対応する文書要素を頂点とする文書フラグメントを示す図である。
【図４９】Ｄの共有ノードに対応する文書要素を頂点とする文書フラグメントを示す図である。
【図５０】文書フラグメントを検証対象の文書から分割した残りの文書を示す図である。
【図５１】文書比較・検証処理の流れを示す図である。
【図５２】図４７の文書に対して文書比較・検証処理を実行した結果得られる出力文書を示す図である。
【図５３】Ｃの共有ノードに対応する要素を頂点とする文書フラグメントを示す図である。
【図５４】Ｄの共有ノードに対応する文書要素を頂点とする文書フラグメントを示す図である。
【図５５】文書フラグメントを検証対象の文書から分割した残りの文書を示す図である。
【図５６】実施例３による検証サービスサーバ１０９のサービスインタフェース初期化処理の流れを示す図である。
【図５７】ステップＳ９５で作成される部分検証用文書スキーマを示す図である。
【図５８】ステップＳ９５で作成される部分検証用文書スキーマを示す図である。
【図５９】文書スキーマを含むサービスインタフェースグラフを示す図である。
【図６０】実施例３の文書分割処理の流れを示す図である。
【図６１】ステップＳ１０４の分割処理の結果得られる文書フラグメントを示す図である。
【図６２】ステップＳ１０４の分割処理の結果得られる文書フラグメントを示す図である。
【図６３】ステップＳ１０４の分割処理の結果得られる文書を示す図である。
【図６４】ステップＳ１０４の分割処理の結果得られる文書フラグメントを示す図である。
【図６５】ステップＳ１０４の分割処理の結果得られる文書フラグメントを示す図である。
【図６６】ステップＳ１０４の分割処理の結果得られる文書を示す図である。
【図６７】実施例４の文書比較・検証４の処理の流れを示す図である。
【図６８】実施例５による文書分割処理の流れを示す図である。
【図６９】実施例５による文書検証処理の流れを示す図である。
【図７０】構造化文書を示す図である。
【符号の説明】
【０１２２】
１  予約サービスシステム
２  サービス利用者端末
３  旅行代理店サーバ
４  旅行企画会社サーバ
５、６、７  宿泊施設サーバ
８  企画会社サーバ
９、１０９  検証サービスサーバ
９１  文書スキーマ保持部
９２  初期化処理部
９３  文書分割部
９４  文書比較・検証部
９５  サービスインタフェース保持部
【図１】
2008117015.tif 000003
【図２】
2008117015.tif 000004
【図３】
2008117015.tif 000005
【図４】
2008117015.tif 000006
【図５】
2008117015.tif 000007
【図６】
2008117015.tif 000008
【図７】
2008117015.tif 000009
【図８】
2008117015.tif 000010
【図９】
2008117015.tif 000011
【図１０】
2008117015.tif 000012
【図１１】
2008117015.tif 000013
【図１２】
2008117015.tif 000014
【図１３】
2008117015.tif 000015
【図１４】
2008117015.tif 000016
【図１５】
2008117015.tif 000017
【図１６】
2008117015.tif 000018
【図１７】
2008117015.tif 000019
【図１８】
2008117015.tif 000020
【図１９】
2008117015.tif 000021
【図２０】
2008117015.tif 000022
【図２１】
2008117015.tif 000023
【図２２】
2008117015.tif 000024
【図２３】
2008117015.tif 000025
【図２４】
2008117015.tif 000026
【図２５】
2008117015.tif 000027
【図２６】
2008117015.tif 000028
【図２７】
2008117015.tif 000029
【図２８】
2008117015.tif 000030
【図２９】
2008117015.tif 000031
【図３０】
2008117015.tif 000032
【図３１】
2008117015.tif 000033
【図３２】
2008117015.tif 000034
【図３３】
2008117015.tif 000035
【図３４】
2008117015.tif 000036
【図３５】
2008117015.tif 000037
【図３６】
2008117015.tif 000038
【図３７】
2008117015.tif 000039
【図３８】
2008117015.tif 000040
【図３９】
2008117015.tif 000041
【図４０】
2008117015.tif 000042
【図４１】
2008117015.tif 000043
【図４２】
2008117015.tif 000044
【図４３】
2008117015.tif 000045
【図４４】
2008117015.tif 000046
【図４５】
2008117015.tif 000047
【図４６】
2008117015.tif 000048
【図４７】
2008117015.tif 000049
【図４８】
2008117015.tif 000050
【図４９】
2008117015.tif 000051
【図５０】
2008117015.tif 000052
【図５１】
2008117015.tif 000053
【図５２】
2008117015.tif 000054
【図５３】
2008117015.tif 000055
【図５４】
2008117015.tif 000056
【図５５】
2008117015.tif 000057
【図５６】
2008117015.tif 000058
【図５７】
2008117015.tif 000059
【図５８】
2008117015.tif 000060
【図５９】
2008117015.tif 000061
【図６０】
2008117015.tif 000062
【図６１】
2008117015.tif 000063
【図６２】
2008117015.tif 000064
【図６３】
2008117015.tif 000065
【図６４】
2008117015.tif 000066
【図６５】
2008117015.tif 000067
【図６６】
2008117015.tif 000068
【図６７】
2008117015.tif 000069
【図６８】
2008117015.tif 000070
【図６９】
2008117015.tif 000071
【図７０】
2008117015.tif 000072