(57)【要約】【課題】  複数の文書要素を含む構造化文書同士の同一性判定において、文書要素群の並び順の差異によらずして同一性を判定可能な技術を提供する。【解決手段】  前処理部１１が、入力されたSOAPエンベロープのSOAPヘッダから旧ハッシュ値を取得しておく。そして、正規化対象特定部１３がSOAPボディ中の処理対象の文書要素群を特定し、文書構造正規化処理部１４が所定の基準に従って文書要素群を並べ替え処理し、ハッシュ値算出部１５が当該並べ替え後の文書要素群からハッシュ値を算出する。その後、ハッシュ値比較部１６がSOAPヘッダから取得した旧ハッシュ値と前記算出したハッシュ値とを比較して、一致する場合には構造化文書の改変がなされていないと判定する。【選択図】  図２
2008134719.tif 000002
【特許請求の範囲】
【請求項１】
複数の文書要素を含む構造化文書に対して各文書要素に係る情報を所定の基準に従った並べ替え処理を行って正規化構造情報を取得する正規化手段と、
一方の構造化文書に基づいて取得した正規化構造情報と他方の構造化文書に基づいて取得した正規化構造情報とが一致する場合に、それぞれの構造化文書が同一であると判定する判定手段と、
を備えたことを特徴とする構造化文書同一性判定装置。
【請求項２】
文書要素に係る情報は、文書要素自体であり、
前記正規化手段は、構造化文書が含む複数の文書要素を所定の基準に従って並べ替え、当該並べ替えた複数の文書要素を正規化構造情報として取得することを特徴とする請求項１に記載の構造化文書同一性判定装置。
【請求項３】
構造化文書が含む複数の文書要素に所定の演算を行って当該構造化文書の文書ハッシュ値を算出する文書ハッシュ値算出手段を更に備え、
文書要素に係る情報は、文書要素自体であり、
前記正規化手段は、構造化文書が含む複数の文書要素を所定の基準に従って並べ替え、当該並べ替えた複数の文書要素に基づいて前記文書ハッシュ値算出手段により算出された文書ハッシュ値を正規化構造情報として取得することを特徴とする請求項１に記載の構造化文書同一性判定装置。
【請求項４】
文書要素に所定の演算を行って当該文書要素の要素ハッシュ値を算出する要素ハッシュ値算出手段を更に備え、
文書要素に係る情報は、要素ハッシュ値であり、
前記正規化手段は、構造化文書が含む複数の文書要素に基づいて前記要素ハッシュ値算出手段によりそれぞれ算出された複数の要素ハッシュ値を所定の基準に従って並べ替え、当該並べ替えた複数の要素ハッシュ値を正規化構造情報として取得することを特徴とする請求項１に記載の構造化文書同一性判定装置。
【請求項５】
文書要素に所定の演算を行って当該文書要素の要素ハッシュ値を算出する要素ハッシュ値算出手段と、
構造化文書が含む複数の文書要素からそれぞれ算出される複数の要素ハッシュ値に所定の演算を行って当該構造化文書の文書ハッシュ値を算出する文書ハッシュ値算出手段と、を更に備え、
文書要素に係る情報は、要素ハッシュ値であり、
前記正規化手段は、構造化文書が含む複数の文書要素に基づいて前記要素ハッシュ値算出手段によりそれぞれ算出された複数の要素ハッシュ値を所定の基準に従って並べ替え、当該並べ替えた複数の要素ハッシュ値に基づいて前記文書ハッシュ値算出手段により算出された文書ハッシュ値を正規化構造情報として取得することを特徴とする請求項１に記載の構造化文書同一性判定装置。
【請求項６】
構造化文書に基づいて取得した正規化構造情報を当該構造化文書に付加する付加手段を更に備え、
前記判定手段は、構造化文書に基づいて取得した正規化構造情報と当該構造化文書に既に付加されていた正規化構造情報とが一致する場合に、既に付加されていた正規化構造情報を取得した時点から当該構造化文書が変更されていないと判定することを特徴とする請求項１乃至請求項５のいずれか１項に記載の構造化文書同一性判定装置。
【請求項７】
構造化文書が予め定義された所定の制約を満たしているかを検証する構造化文書検証装置に検証処理の実行を指示する検証指示手段を更に備え、
前記判定手段により構造化文書が変更されていないと判定された場合には、前記検証指示手段による検証処理の実行指示を行わないことを特徴とする請求項６に記載の構造化文書同一性判定装置。
【請求項８】
並びに制約がない文書要素を定義した情報を含む文書構造定義情報に基づいて、構造化文書が含む複数の文書要素のうちの並びに制約がない文書要素を判別する判別手段を更に備え、
前記正規化手段は、前記判別された文書要素に係る情報を並べ替えることを特徴とする請求項１乃至請求項７のいずれか１項に記載の構造化文書同一性判定装置。
【請求項９】
構造化文書は、付加的な情報に係る文書要素を格納する第１領域と文書内容に係る文書要素を格納する第２領域とを有しており、
前記正規化手段は、構造化文書中の第２領域に格納された文書要素に基づいて正規化構造情報を取得することを特徴とする請求項１乃至請求項８のいずれか１項に記載の構造化文書同一性判定装置。
【請求項１０】
構造化文書中の第２領域に格納された文書要素に基づいて取得した正規化構造情報を暗号化して署名値を生成し、当該生成した署名値を当該構造化文書の第１領域に格納する署名算出手段と、
構造化文書の第１領域に格納された署名値を復号化して正規化構造情報を取得する署名復号化手段と、を更に備え、
前記判定手段は、構造化文書中の第２領域に格納された文書要素に基づいて取得した正規化構造情報と当該構造化文書の第１領域に既に格納されていた署名値を復号化して取得した正規化構造情報とが一致する場合に、既に格納されていた署名値を取得した時点から当該構造化文書が変更されていないと判定することを特徴とする請求項９に記載の構造化文書同一性判定装置。
【請求項１１】
コンピュータを、
複数の文書要素を含む構造化文書に対して各文書要素に係る情報を所定の基準に従った並べ替え処理を行って正規化構造情報を取得する正規化手段、
一方の構造化文書に基づいて取得した正規化構造情報と他方の構造化文書に基づいて取得した正規化構造情報とが一致する場合に、それぞれの構造化文書が同一であると判定する判定手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、構造化文書同一性判定装置およびプログラムに関する。
【背景技術】
【０００２】
インターネット等のネットワーク上を流通するXML（Extensible Markup Language）文書等の構造化文書に対して種々の処理が行われている。
例えば、構造化文書の全部又は一部に対して有意な変更がなされたか否かを判定する処理（同一性判定処理）や、構造化文書に対する文書処理を開始する前にその構造化文書が所定の条件を満たしているか否かを判定する処理（検証処理）を実行することが広く行われている。
【０００３】
ここで、文書処理を実行するプログラムは、前記所定の条件を満たす構造化文書を対象に記述されていることが多いので、文書処理を実行する前に検証処理を行い、検証処理の結果、所定の条件を満たしていないと判定された構造化文書は文書処理の対象とならないのが一般的である。
【０００４】
XML文書を対象とした検証処理としては、XML文書が整形式であるか否かを判定する処理や、XML文書が文書型定義や「W3C XML Schema」（http://www.w3.org/TR/xmlschema-0/）などの文書スキーマに定義された制約に適合しているか否かを判定する処理（妥当性検証処理）等がある。なお、或るXML文書が対応する文書スキーマに定義された条件を満たしているとき、そのXML文書は文書スキーマに適合しているという。
XMLについては「XML標準仕様」（http://www.w3.org/TR/REC-xml/）や、その日本語訳（http://www.fxis.co.jp/xmlcafe/tmp/wrapper-xml-19980210.html）が開示されている。
【０００５】
構造化文書に対する処理としては、検証処理と同一性判定処理とを組み合わせた構成もあり、例えば、構造化文書を直前に検証した時点と再検証する時点との間で構造化文書が変更されたかを同一性判定処理し、変更されていないと判定された場合に不要な検証処理をスキップすることで処理効率を改善することが行われている。また、例えば、或るサイト上で電子署名が付与された電子文書が別のサイトで利用されるときに実行される電子署名の検証処理で、署名付与時点での電子文書と検証時点での電子文書とが同一とみなせるか否かを判定する同一性判定処理を実行すること等も行われている。
【０００６】
ここで、構造化文書に対する同一性判定処理では、表記のばらつきを吸収するために、基準となる時点での構造化文書に対して予め正規化処理を実行し、正規化処理の結果得られる構造化文書からハッシュ値（ダイジェスト値）を算出して当該構造化文書に対応付けておくことが行われている。そして、同一性判定時に、構造化文書に対して基準となる時点と同一の正規化処理およびハッシュ値算出処理を実行し、その結果として得られたハッシュ値と構造化文書に事前に対応付けられているハッシュ値とを比較して、両者が同一であれば基準となる時点の構造化文書と判定時点の構造化文書は同一と判定している。
【０００７】
XML文書に対する正規化処理としては、これまで以下のような標準が開示されている。
（１）Canonical XML標準（http://www.w3.org/TR/xml-c14n/）
（２）XML Exclusive Canonicalization標準（http://www.w3.org/TR/xml-exc-c14n/）
（３）DOMHASH標準（http://www.w3.org/DOM/）
前者の２つは、文字列として表現されたXML文書に対する正規化処理の仕様を定めている。「DOMHASH標準」は、「DOM標準」（http://www.ietf.org/rfc/rfc2803/）に準拠するオブジェクトツリー（DOMツリー）を対象とした正規化処理の仕様を定めている。なお、DOM（Document Object Model）とは、XML文書のためのアプリケーション・プログラミング・インターフェース（API）であり、W3Cで標準化されている。また、DOMツリーは、DOMで規定されたDOMオブジェクト（文書要素や文書要素属性など、文書を構成する要素のオブジェクト表現）をノードとする木構造である。
【０００８】
特許文献１に開示された「電子署名装置および署名検証装置」では、文書処理アプリケーションによって構造化文書の文書要素の間に追加される空白文字がアプリケーション毎に異なり得る点に着目し、この差異を吸収するために空白文字を除外してから構造化文書のハッシュ値を算出することにより、文書要素の間に追加される空白文字が異なっていても同一の文書とみなすようにしている。
【０００９】
また、特許文献２に開示された「構造を持った文書に対する電子署名方法および装置」では、前記「電子署名装置および署名検証装置」による空白文字を除外してハッシュ値を算出する手法に加えて、DOMツリーのルートノードから一定の深さまでのノードからなる木構造を対象としたハッシュ値を算出することにより、ネストの深さの大きいノードの内容が変更されたとしても同一の文書とみなすようにしている。
【００１０】
【特許文献１】特開２００５−３３３２３３号公報
【特許文献２】特開２００２−２２９４４８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
ところで、構造化文書中の文書要素の直下に出現する複数の文書要素について、各文書要素の出現順序に関する取り決めが含まれない場合がある。例えば、電子文書の属性群をXML文書で表現し、各文書属性をXML文書の文書要素として表現することを考える。このような文書属性について定めた仕様のうち、例えば、「OpenDocument標準」（http://www.oasis-open.org/committees/download.php/12572/OpenDocument-v1.0-os.pdf）の文書属性の仕様には、文書属性の出現順序に関する取り決めは含まれない。
このように順序の取り決めがない文書要素を含む構造化文書を対象とする文書処理プログラムでは、この文書要素直下の文書要素群の順序関係を保存せずに処理を実行し、処理結果として文書要素群の順序関係が変化した構造化文書を出力する可能性がある。
【００１２】
具体的には、例えば、電子文書の属性群を表現するXM L文書を入力とし、必要に応じて文書属性に対する操作を実行して結果をXML文書として出力する文書処理プログラムでは、文書属性を表現するXML文書要素群を、順序関係付きのリストではなく単なる集合として内部的に保持するかもしれない。この場合、入力XML文書での文書要素の順序と出力XML文書での文書要素の順序とが同一になるとは限らないが、本来は、入力XML文書の文書要素群と出力XML文書の文書要素群とが同一であれば、その順序に関わらず両者は同一のXML文書とみなされるべきである。しかしながら、前述の同一性判定手法では、文書処理プログラムによって文書要素の順序が変更された場合、入力XML文書と出力XML文書とを異なるXML文書と判定してしまうという問題があった。
【００１３】
また、近年では、文書構造変換、検索、暗号化・復号化、署名付与、検証など、汎用性の高い機能を提供する文書処理モジュールを動的に組み合わせることにより、利用者向けの文書処理アプリケーションを実現することが広く行われるようになってきている。このような文書処理アプリケーションや文書処理サービスは、Webサービス（Web Service）として実現されることが多い。なお、Webサービスの基盤になる仕様群の標準化は、「World Wide Web Consortium(W3C) Web Service Activity」（http://www.w3.org/2002/ws/）や「OASIS」（http://www.oasis-open.org/）といった国際標準化団体で進められている。
文書処理アプリケーションや文書処理サービスがWebサービスとして実現されているとき、各文書処理サービスが処理対象の構造化文書を送受信する相手は動的に決定されることが一般的である。このとき、署名検証処理や妥当性検証処理などの一部として同一性判定処理を実行する場合、同一とみなすべき構造化文書を異なるものとして判定してしまう問題があった。
【００１４】
本発明は、上記従来の事情に鑑みてなされたものであり、複数の文書要素を含む構造化文書同士の同一性判定において、文書要素群の並び順の差異によらずして同一性を判定可能な技術を提供することを目的としている。
【課題を解決するための手段】
【００１５】
請求項１に記載の本発明は、複数の文書要素を含む構造化文書に対して各文書要素に係る情報を所定の基準に従った並べ替え処理を行って正規化構造情報を取得する正規化手段と、一方の構造化文書に基づいて取得した正規化構造情報と他方の構造化文書に基づいて取得した正規化構造情報とが一致する場合に、それぞれの構造化文書が同一であると判定する判定手段と、を備えたことを特徴とする構造化文書同一性判定装置である。
【００１６】
請求項２に記載の本発明は、請求項１に記載の構造化文書同一性判定装置において、文書要素に係る情報は、文書要素自体であり、前記正規化手段は、構造化文書が含む複数の文書要素を所定の基準に従って並べ替え、当該並べ替えた複数の文書要素を正規化構造情報として取得することを特徴とする構造化文書同一性判定装置である。すなわち、複数の文書要素を所定基準で並べ替えた結果が一致する構造化文書同士を同一と判定する。
【００１７】
請求項３に記載の本発明は、請求項１に記載の構造化文書同一性判定装置において、構造化文書が含む複数の文書要素に所定の演算を行って当該構造化文書の文書ハッシュ値を算出する文書ハッシュ値算出手段を更に備え、文書要素に係る情報は、文書要素自体であり、前記正規化手段は、構造化文書が含む複数の文書要素を所定の基準に従って並べ替え、当該並べ替えた複数の文書要素に基づいて前記文書ハッシュ値算出手段により算出された文書ハッシュ値を正規化構造情報として取得することを特徴とする構造化文書同一性判定装置である。すなわち、複数の文書要素を所定基準で並べ替えた結果から算出した文書ハッシュ値が一致する構造化文書同士を同一と判定する。
【００１８】
請求項４に記載の本発明は、請求項１に記載の構造化文書同一性判定装置において、文書要素に所定の演算を行って当該文書要素の要素ハッシュ値を算出する要素ハッシュ値算出手段を更に備え、文書要素に係る情報は、要素ハッシュ値であり、前記正規化手段は、構造化文書が含む複数の文書要素に基づいて前記要素ハッシュ値算出手段によりそれぞれ算出された複数の要素ハッシュ値を所定の基準に従って並べ替え、当該並べ替えた複数の要素ハッシュ値を正規化構造情報として取得することを特徴とする構造化文書同一性判定装置である。すなわち、複数の文書要素から算出した複数の要素ハッシュ値を所定基準で並べ替えた結果が一致する構造化文書同士を同一と判定する。
【００１９】
請求項５に記載の本発明は、請求項１に記載の構造化文書同一性判定装置において、文書要素に所定の演算を行って当該文書要素の要素ハッシュ値を算出する要素ハッシュ値算出手段と、構造化文書が含む複数の文書要素からそれぞれ算出される複数の要素ハッシュ値に所定の演算を行って当該構造化文書の文書ハッシュ値を算出する文書ハッシュ値算出手段と、を更に備え、文書要素に係る情報は、要素ハッシュ値であり、前記正規化手段は、構造化文書が含む複数の文書要素に基づいて前記要素ハッシュ値算出手段によりそれぞれ算出された複数の要素ハッシュ値を所定の基準に従って並べ替え、当該並べ替えた複数の要素ハッシュ値に基づいて前記文書ハッシュ値算出手段により算出された文書ハッシュ値を正規化構造情報として取得することを特徴とする構造化文書同一性判定装置である。すなわち、複数の文書要素から算出した複数の要素ハッシュ値を所定基準で並べ替えた結果から算出した文書ハッシュ値が一致する構造化文書同士を同一と判定する。
【００２０】
請求項６に記載の本発明は、請求項１乃至請求項５のいずれか１項に記載の構造化文書同一性判定装置において、構造化文書に基づいて取得した正規化構造情報を当該構造化文書に付加する付加手段を更に備え、前記判定手段は、構造化文書に基づいて取得した正規化構造情報と当該構造化文書に既に付加されていた正規化構造情報とが一致する場合に、既に付加されていた正規化構造情報を取得した時点から当該構造化文書が変更されていないと判定することを特徴とする構造化文書同一性判定装置である。
【００２１】
請求項７に記載の本発明は、請求項６に記載の構造化文書同一性判定装置において、構造化文書が予め定義された所定の制約を満たしているかを検証する構造化文書検証装置に検証処理の実行を指示する検証指示手段を更に備え、前記判定手段により構造化文書が変更されていないと判定された場合には、前記検証指示手段による検証処理の実行指示を行わないことを特徴とする構造化文書同一性判定装置である。
【００２２】
請求項８に記載の本発明は、請求項１乃至請求項７のいずれか１項に記載の構造化文書同一性判定装置において、並びに制約がない文書要素を定義した情報を含む文書構造定義情報に基づいて、構造化文書が含む複数の文書要素のうちの並びに制約がない文書要素を判別する判別手段を更に備え、前記正規化手段は、前記判別された文書要素に係る情報を並べ替えることを特徴とする構造化文書同一性判定装置である。
【００２３】
請求項９に記載の本発明は、請求項１乃至請求項８のいずれか１項に記載の構造化文書同一性判定装置において、構造化文書は、構造化文書は、付加的な情報に係る文書要素を格納する第１領域と文書内容に係る文書要素を格納する第２領域とを有しており、前記正規化手段は、構造化文書中の第２領域に格納された文書要素に基づいて正規化構造情報を取得することを特徴とする構造化文書同一性判定装置である。
【００２４】
請求項１０に記載の本発明は、請求項９に記載の構造化文書同一性判定装置において、構造化文書中の第２領域に格納された文書要素に基づいて取得した正規化構造情報を暗号化して署名値を生成し、当該生成した署名値を当該構造化文書の第１領域に格納する署名算出手段と、構造化文書の第１領域に格納された署名値を復号化して正規化構造情報を取得する署名復号化手段と、を更に備え、前記判定手段は、構造化文書中の第２領域に格納された文書要素に基づいて取得した正規化構造情報と当該構造化文書の第１領域に既に格納されていた署名値を復号化して取得した正規化構造情報とが一致する場合に、既に格納されていた署名値を取得した時点から当該構造化文書が変更されていないと判定することを特徴とする構造化文書同一性判定装置である。
【００２５】
請求項１１に記載の本発明は、コンピュータを、複数の文書要素を含む構造化文書に対して各文書要素に係る情報を所定の基準に従った並べ替え処理を行って正規化構造情報を取得する正規化手段、一方の構造化文書に基づいて取得した正規化構造情報と他方の構造化文書に基づいて取得した正規化構造情報とが一致する場合に、それぞれの構造化文書が同一であると判定する判定手段、として機能させるためのプログラムである。
【発明の効果】
【００２６】
請求項１に記載の本発明に係る構造化文書同一性判定装置によると、複数の文書要素を含む構造化文書同士の同一性判定において、構造化文書中の各文書要素に係る情報を所定の基準に従った並べ替え処理を行って取得した正規化構造情報を比較するため、文書要素群の並び順の差異によらずして同一性を判定することができる。
【００２７】
請求項２に記載の本発明に係る構造化文書同一性判定装置によると、複数の文書要素を含む構造化文書同士の同一性判定において、構造化文書中の各文書要素に係る情報である各文書要素自体を所定の基準に従って並べ替えた結果を正規化構造情報として取得して比較するため、文書要素群の並び順の差異によらずして同一性を判定することができる。
【００２８】
請求項３に記載の本発明に係る構造化文書同一性判定装置によると、複数の文書要素を含む構造化文書同士の同一性判定において、構造化文書中の各文書要素に係る情報である各文書要素自体を所定の基準に従って並べ替えた結果から算出した文書ハッシュ値を正規化構造情報として取得して比較するため、文書要素群の並び順の差異によらずして同一性を判定することができる。
【００２９】
請求項４に記載の本発明に係る構造化文書同一性判定装置によると、複数の文書要素を含む構造化文書同士の同一性判定において、構造化文書中の各文書要素に係る情報である各文書要素のハッシュ値を所定の基準に従って並べ替えた結果を正規化構造情報として取得して比較するため、文書要素群の並び順の差異によらずして同一性を判定することができる。
【００３０】
請求項５に記載の本発明に係る構造化文書同一性判定装置によると、複数の文書要素を含む構造化文書同士の同一性判定において、構造化文書中の各文書要素に係る情報である各文書要素のハッシュ値を所定の基準に従って並べ替えた結果から算出した文書ハッシュ値を正規化構造情報として取得して比較するため、文書要素群の並び順の差異によらずして同一性を判定することができる。
【００３１】
請求項６に記載の本発明に係る構造化文書同一性判定装置によると、構造化文書に基づいて取得した正規化構造情報と当該構造化文書に既に付加されていた正規化構造情報との比較により、当該構造化文書の変更の有無を判定することができる。
【００３２】
請求項７に記載の本発明に係る構造化文書同一性判定装置によると、構造化文書が変更されていない場合には検証処理の実行指示を行わないため、不要な検証処理の実行を抑制できる。
【００３３】
請求項８に記載の本発明に係る構造化文書同一性判定装置によると、構造化文書中の並びに制約がない文書要素を文書構造定義情報に基づいて判別できるため、並びに制約のある文書要素に係る情報はそのままにしつつ、並びに制約のない文書要素に係る情報のみを並べ替えることができる。
【００３４】
請求項９に記載の本発明に係る構造化文書同一性判定装置によると、第１領域に格納された文書要素は正規化構造情報の取得に用いないため、付加的な情報を第１領域に格納したとしても判定結果に影響を与えることない。
【００３５】
請求項１０に記載の本発明に係る構造化文書同一性判定装置によると、正規化構造情報を暗号化した署名値を用いて同一性を判定することができ、第三者によって構造化文書が改変されたか否かを判定することができる。
【００３６】
請求項１１に記載の本発明に係るプログラムによると、当該プログラムの実行によりコンピュータに機能させた各手段により、複数の文書要素を含む構造化文書同士の同一性判定において、構造化文書中の各文書要素に係る情報を所定の基準に従った並べ替え処理を行って取得した正規化構造情報を比較するため、文書要素群の並び順の差異によらずして同一性を判定することができる。
【発明を実施するための最良の形態】
【００３７】
本発明を実施例に基づいて具体的に説明する。
図１は、第１の実施例として、本発明に係る構造化文書同一性判定装置を用いて構成した構造化文書複合サービス（以下、複合サービスと記す。）の構成図である。図１に示すように、本例の複合サービスは、Ａ社により運営される構造化文書リポジトリＳＡ、Ｂ社により運営される構造化文書処理サービス（２）ＳＢ、Ｃ社により運営される構造化文書処理サービス（１）ＳＣ、Ｄ社により運営される構造化文書検証サービスＳＤ、がネットワークＮを介して接続して構成されている。
【００３８】
本例の複合サービスでは、構造化文書リポジトリＳＡから処理対象の構造化文書が取り出され、構造化文書処理サービス（１）ＳＣに出力される。構造化文書処理サービス（１）ＳＣは、入力された構造化文書に対して所定の処理を実行した後、処理済の構造化文書を構造化文書処理サービス（２）ＳＢに出力する。構造化文書処理サービス（２）ＳＢは、入力された構造化文書に対して所定の処理を実行し、複合サービスの処理が終了する。
【００３９】
このとき、構造化文書処理サービス（１）ＳＣおよび構造化文書処理サービス（２）ＳＢは、入力された構造化文書が所定の構造及び内容に関する制約を満たしているか否かを検証するため、構造化文書検証サービスＳＤに妥当性検証処理を依頼する。構造化文書検証サービスＳＤは、入力された構造化文書が、その構造化文書に対応付けられた文書スキーマ（文書構造定義情報）に定義された制約に適合しているか否かを検証し、妥当性検証処理の依頼元のサービスに検証結果を返却する。
【００４０】
図２は、構造化文書検証サービスＳＤの構成図である。同図に示すとおり、構造化文書検証サービスＳＤは、所定の前処理を行う前処理部１１、構造化文書が前回入力時と同一性を有するかを判定する同一性判定処理を行う構造化文書同一性判定部１２、構造化文書が文書スキーマに適合しているかを検証する妥当性検証処理を行う構造化文書検証部１７を備えている。また、構造化文書同一性判定部１２は、正規化対象特定部１３、文書構造正規化処理部１４、ハッシュ値算出部１５、ハッシュ値比較部１６を備えており、これらの具体的な処理内容については後述する。
この構造化文書検証サービスＳＤの特徴は、構造化文書同一性判定部１２で構造化文書が同一性ありと判定されると、構造化文書検証部１７による妥当性検証処理を実行せずに構造化文書が文書スキーマに適合していることを示す情報の出力を行う点にあり、不要な妥当性検証処理を実行しないことで処理効率を改善している。
【００４１】
本例の複合サービスでは、SOAPエンベロープを用いて各サービス間で情報を送受しており、その一例を図３に示す。SOAPエンベロープとは、「SOAP標準」（http://www.w3.org/TR/soap/）に準拠したXML文書であり、図３に示すように、付加的な情報に係る文書要素を格納する領域であるSOAPヘッダ（3行目）と、文書内容に係る文書要素を格納する領域であるSOAPボディ（4行目から13行目）と、を有している。なお、同図のSOAPヘッダには何も格納されておらず、SOAPボディには複数の文書要素を含む処理対象の構造化文書（5行目から12行目）が格納されている。
【００４２】
図４には、図３のSOAPエンベロープから作成されるDOMツリーのうち、処理対象の構造化文書に対応する部分が示してある。なお、XML文書からDOMツリーを生成するプログラムは、Java言語やC++言語等によるものが公開されている。
本例では、文書要素の名前（修飾名）を、“{名前空間URI}ローカル名”のように名前空間URIとローカル名との組で表現している。ルートノードｎ１を例に説明すると、“{h ttp://xxx /schema/attributeSet}attributeSet”と記載されていることから、名前空間URIが“http://xxx /schema/attributeSet”、ローカル名が“attributeSet”の文書要素ノードであることがわかる。
【００４３】
図４によると、ルートノードｎ１の直下には、５つの属性ノード（ｎ２、ｎ３、ｎ４、ｎ５、ｎ６）と、３つの文書要素ノード（ｎ７、ｎ９、ｎ１１）とが保持されている。ここで、属性ノードは属性名（修飾名またはローカル名）と属性値との組であり、DOM標準では、属性ノードは文書要素ノードの親子関係で構成されるDOMツリーとは別に保持されることになっているが、本例では説明の簡単化のために属性ノードと要素ノードとを同等に扱っている。また、文書要素ノードが保持する情報はその子ノードとして表現しており、例えば、文書要素ノードｎ７は文字列“文書タイトル”を保持するテキストノードを子ノードとして有している。
【００４４】
ここで、構造化文書リポジトリＳＡから構造化文書処理サービス（１）ＳＣに図３のSOAPエンベロープが出力され、構造化文書処理サービス（１）ＳＣが、このSOAPエンベロープを対象とした妥当性検証処理を構造化文書検証サービスＳＤに依頼した場合の処理動作について、図５及び図６に示す処理フローを参照しつつ説明する。
【００４５】
図５には、前処理部１１および構造化文書同一性判定部１２を構成する各部の処理の流れが示してある。
前処理部１１は、まず、入力されたSOAPエンベロープからDOMツリーを作成する（ステップＳ１０１）。次に、SOAPヘッダが旧ハッシュ値を含むか否かを判定し（ステップＳ１０２）、SOAPヘッダが旧ハッシュ値を含む場合は、旧ハッシュ値を取得して変数Ｘに代入し（ステップＳ１０３）、SOAPヘッダに保持されているXPathアプリケーションパスを取得する（ステップＳ１０４）。一方、SOAPヘッダが旧ハッシュ値を含まない場合は、SOAPエンベロープに対応する文書スキーマを参照してXPathロケーションパス出力処理を行い、その結果出力されるXPathロケーションパスのSOAPヘッダへの書き込むを行う（ステップＳ１０５）。
なお、XPathとは、XML文書やDOMツリーの構造や内容に関する条件を満たす文書要素、文書属性、文字列などの文書構成要素などを特定するための記述であり、「XPath標準」（http://www.w3.org/TR/xpath/）において規定されている。
【００４６】
XPathロケーションパス出力処理（ステップＳ１０５）を、図６を参照して具体的に説明する。
まず、XML文書向けのDOMツリー生成プログラム等を利用して、文書スキーマのDOMツリーを生成する（ステップＳ２０１）。次に、DOMツリー中の文書要素ノードから“{http://www.w3.org/2001/XMLSchema}element”要素を特定し、集合Ｘに代入する（ステップＳ２０２）。なお、当該処理を実行するプログラムはJava言語やC++言語等によるものが公開されている。そして、集合Ｘの先頭要素を変数Ｙに代入し（ステップＳ２０３）、当該要素の孫要素として、“{http://www.w3.org/2001/XMLSchema}all”要素か“{http://www.w3.org/2001/XMLSchema}choice”要素のいずれかの特定要素を含むか否かを判定する（ステップＳ２０４）。
【００４７】
上記特定要素のいずれかを含むと判定された場合には、XPathロケーションパスの文字列である“//*[local-name()=''' + 変数Ｙのelement要素のローカル変数名+ ''' and namespace-uri()=''' + 変数Ｙのelement要素の名前空間URI  + ''']/* ”を集合Ｚに追加し（ステップＳ２０５）、いずれも含まないと判定された場合には、XPathロケーションパスの集合Ｚへの追加（ステップＳ２０５）は行わない。なお、XPathロケーションパスにおける“+”は文字列の結合を表している。
次いで、変数Ｙの値は集合Ｘの末尾要素か否かを判定し（ステップＳ２０６）、末尾要素でない場合は、変数Ｙに集合Ｘの次要素を代入し（ステップＳ２０７）、ステップＳ２０４の判定処理に戻る。一方、末尾要素である場合は、集合Ｚを出力して（ステップＳ２０８）、処理を終了する。
【００４８】
具体的には、図３に示すSOAPエンベロープに対応する文書スキーマとして、図７に示す文書スキーマが用意されているとした場合には、当該文書スキーマから、“{http://www.w3.org/2001/XMLSchema}element”要素として、例えば、4行目から17行目の“{http://xxx /schema/attributeSet}attributeSet”要素、18行目から29行目の“{http://xxx /schema/attributeSet}title”要素が特定され、孫要素として上記特定要素のいずれかを含むか否かが順番に判定される。
【００４９】
本例の場合は、“{http://xxx /schema/attributeSet}attributeSet”のみが、特定要素である“{http://www.w3.org/2001/XMLSchema}all”要素を孫要素として含んでいるため（9行目から14行目）、“//*[local-name()=''attributeSet'' and namespace-uri()=''http://xxx/schema/attributeSet'']/* ”というXPathロケーションパスのみが集合Ｚに追加されて、出力されることになる。
つまり、構造化文書検証サービスＳＤに図３のSOAPエンベロープが入力されると、XPathロケーションパス出力処理の結果として上記XPathロケーションパスが出力され、SOAPヘッダに追加して書き込まれる。
【００５０】
前処理部１１が、XPathロケーションパス取得処理（ステップＳ１０４）、又は、XPathロケーションパス生成処理（ステップＳ１０５）を行って、XPathロケーションパスを取得・作成すると、正規化対象特定部１３が、当該XPathロケーションパスをSOAPボディの構造化文書（DOMツリー）に適用して、ソート処理の対象の文書要素群を特定する（ステップＳ１０６）。なお、XPathロケーションパスをDOMツリーに適用するプログラムは、Java言語やC++言語等によるものが公開されている。
本例では、図３に示すSOAPエンベロープが入力された結果、図４のDOMツリーに含まれる文書要素ノードｎ７（{http://xxx/schema/attributeSet}title）、ｎ９（{http://xxx/schema/attributeSet}description）、ｎ１１（{http://xxx/schema/attributeSet}author）がソート処理の対象として特定される。
【００５１】
次いで、文書構造正規化処理部１４が、上記特定された文書要素群ｎ７、ｎ９、ｎ１１をソート処理する（ステップＳ１０７）。本例では、DOMHASHアルゴリズムに基づいて各要素ノードをバイト列に変換し、そのバイト列をコード順に従ってソートしているが、或る一定の基準に従ってソートするものであればソート方法は問わない。図８には、上記特定された各要素ノードの並びと共にそれぞれの要素ノードから算出されるバイト列を簡略化して示しており、図９には、各要素ノードをそれぞれのバイト列のコード順に従ってソート処理した結果を示している。
【００５２】
そして、ハッシュ値算出部１５が、ソート結果の文書要素群から当該文書要素群のハッシュ値を算出して変数Ｙに代入しておき（ステップＳ１０８）、また、当該ハッシュ値をSOAPヘッダに書き込む（ステップＳ１０９）。本例では、各要素ノードのバイト列のソート結果を順番に並べて結合した結合バイト列のハッシュ値を、「SHA-1」アルゴリズムに基づいて算出しているが、例えば「MD5」、「SHA-256」等の他のアルゴリズムを用いてもよく、これらのハッシュ値を算出するプログラムは、Java言語やC++言語等によるものが公開されている。
【００５３】
図１０は、図３のSOAPエンベロープのSOAPヘッダにハッシュ値を書き込んだ結果を示しており、“{http://xxx /schema/attributeSet}hashValue”要素が追加され、その内容としてハッシュ値「LmnYZFmiB1mjG8dFDYNg4US01sM=」が書き込まれている。また、ロケーションパス出力処理の結果として出力されたXPathロケーションパスがtarget属性の値として代入されている。
【００５４】
その後、ハッシュ値比較部１６が、変数Ｘの値（SOAPヘッダから取得した旧ハッシュ値）と変数Ｙの値（ソート結果から算出したハッシュ値）とが同一か否か判定し（ステップＳ１１０）、同一の場合は“真（同一性あり）”を示す情報を出力し（ステップＳ１１１）、異なる場合は処理を“偽（同一性なし）”を示す情報を出力して（ステップＳ１１２）、処理を終了する。
図３のSOAPエンベロープのSOAPヘッダには旧ハッシュ値を含んでいないことから、変数Ｘに値が代入されないため、変数Ｙの値と一致せずに“偽（同一性なし）”を示す情報が出力される。
【００５５】
構造化文書検証部１７では、構造化文書同一性判定部１２のハッシュ値比較部１６から“真（同一性あり）”を示す情報が出力された場合には、SOAPエンベロープのSOAPボディに格納された構造化文書の妥当性検証処理を実行せずに、当該構造化文書が対応する文書スキーマに適合していることを示す情報を妥当性検証処理の依頼元のサービスに検証結果として返却する。一方、ハッシュ値比較部１６から“偽（同一性なし）”を示す情報が出力された場合には、構造化文書検証部１７は、検証処理の実行が指示されたとして、SOAPボディに格納された構造化文書が対応する文書スキーマに定義された制約に適合しているか否かを検証し、検証結果の情報を妥当性検証処理の依頼元サービスに返却する。なお、検証結果の返却に対応して、上記ハッシュ値等を埋め込んだSOAPエンベロープも返却される。
【００５６】
図３のSOAPエンベロープを対象とした処理では、構造化文書同一性判定部１２のハッシュ値比較部１６から“偽（同一性なし）”を示す情報が出力されるので、構造化文書検証部１６は、図４のDOMツリーが図７の文書スキーマ等に定義された制約に適合しているか否かを判定し、本例では適合していることを示す情報と上記ハッシュ値等を埋め込んだSOAPエンベロープとを依頼元の構造化文書処理サービス（１）ＳＣに返却する。
【００５７】
さて、構造化文書処理サービス（１）ＳＣは、構造化文書検証サービスＳＤからSOAPエンベロープ中の構造化文書が文書スキーマに適合していることを示す情報とハッシュ値等を埋め込んだSOAPエンベロープとが返却されたので、当該SOAPエンベロープ中の構造化文書に対して所定の処理を実行し、結果として得られる構造化文書を含むSOAPエンベロープを構造化文書処理サービス（２）ＳＢに出力する。
【００５８】
ここで、構造化文書処理サービス（１）ＳＣでは、SOAPエンベロープ中の構造化文書をサービス内部のセット構造に変換してから再度構造化文書として出力しており、構造化文書が含む各文書要素の順序関係が維持されていない。図１１には、構造化文書処理サービス（１）ＳＣから出力されたSOAPエンベロープが示してあり、構造化文書検証サービスＳＤから返却されて構造化文書処理サービス（１）ＳＣに入力された図１０のSOAPエンベロープと比較すると、“{http://xxx /schema/attributeSet}author”要素と“{http://xxx /schema/attributeSet}description”要素とが入れ替わっている。
【００５９】
構造化文書処理サービス（２）ＳＢは、構造化文書処理サービス（１）ＳＣから出力されたSOAPエンベロープが入力されると、当該SOAPエンベロープを構造化検証サービスＳＤに出力して妥当性検証処理を依頼する。図１２は、構造化検証サービスＳＤが正規化対象特定部１３で文書要素群を特定した時点で得られる文書要素群（DOMの要素ノード群）の並びを示しており、図８に示した並びとは異なっている。しかしながら、構造化文書検証サービスＳＤでは、文書要素群を所定の基準に従ってソート処理するため、ソート後の文書要素群は図９と同一となる。この結果、SOAPエンベロープのSOAPヘッダから取得した旧ハッシュ値（変数Ｘの値）と、ソート後の文書要素群から取得したハッシュ値（変数Ｙの値）とが一致し、ハッシュ値比較部１６から“真（同一性あり）”を示す情報が出力される。したがって、構造化文書検証部１６は、妥当性検証処理を実行することなく、SOAPエンベロープ中の構造化文書が文書スキーマに適合していることを示す情報を構造化文書処理サービス（２）ＳＢに返却する。
【００６０】
このように、本例の構造化文書検証サービスＳＤは、構造化文書処理サービス（１）ＳＣによって文書要素が入れ替えられても、所定の基準に従って文書要素を並べ替え処理を行った結果、構造化文書処理サービス（１）ＳＣによる処理前後の構造化文書中の各文書要素の並びが一致する。このため、並べ替え処理後の各文書要素に基づいて取得するそれぞれの構造化文書のハッシュ値が一致して、構造化文書処理サービス（１）ＳＣによる処理前後の構造化文書が同一性を有すると判定されて、不要な妥当性検証処理を実行せずに済む。
【００６１】
なお、本例の構造化文書検証サービスＳＤは、文書構造正規化処理部１４で並び替えた文書要素群をハッシュ値算出部１５での処理の対象としているが、処理対象の構造化文書中の文書要素を並べ替えた結果得られる構造化文書全体をハッシュ値算出部１５での処理の対象とするように構成することも可能である。
【００６２】
また、本例の構造化文書検証サービスＳＤの前処理部１１では、処理対象の構造化文書に対応付けられている文書スキーマを利用して、正規化対象特定部１３で用いるXPathロケーションパスを作成しているが、例えば、構造化文書検証サービスＳＤが、検証処理を依頼するサービス側からXPathロケーションパスを予め入手しておき、必要に応じて正規化対象特定部１３で利用するように構成することも可能である。
【００６３】
また、XPathロケーションパスを利用せずに正規化文書構造を特定することも可能であり、例えば、処理対象の構造化文書が単一の文書要素（ルート要素）の直下に多数の文書要素が並ぶ構造で、それらの文書要素の間に順序関係が定義されていないことが既知である場合には、そのルート要素の名前を予め保持しておき、当該保持しておいた名前をルート要素の名前としてもつ構造化文書が処理対象として入力されたときには、ルート要素直下の文書要素群を正規化対象特定部１４の出力として利用するように構成することも可能である。
【００６４】
なお、本例の構造化文書検証サービスＳＤは、外部の記憶媒体に対するデータアクセスを行う媒体アクセス部、ＨＤＤ（Hard Disk Drive）、ＲＡＭ（Random Access Memory）、ＣＰＵ（Central Processing Unit）等のハードウェア資源を有するコンピュータが、本発明に係るプログラムを記憶保持した外部記憶媒体やＨＤＤから当該プログラムを読み出し、ＲＡＭ上に展開してＣＰＵで演算処理することにより、正規化対象特定部１３（判別手段）、文書構造正規化処理部１４（正規化手段）、ハッシュ値算出部１５（文書ハッシュ値算出手段、付加手段）、ハッシュ値比較部１６（判定手段、検証指示手段）、を構成しているが、これらをハードウェアにより構成するようにしてもよい。
また、本例の構造化文書検証サービスＳＤは、１台のコンピュータに上記各機能を構成しているが、ネットワークＮにより接続された複数台のコンピュータに上記各機能を分散して構成してもよい。
【００６５】
ここで、本例では、構造化文書中の複数の文書要素を所定基準で並べ替えた結果から算出したハッシュ値を正規化構造情報として取得し、各構造化文書から得た正規化構造情報を比較して構造化文書の同一性を判定しているが、比較対象の正規化構造情報としては構造化文書のハッシュ値に限られない。
例えば、構造化文書中の複数の文書要素を所定基準で並べ替えた結果を正規化構造情報として用いてもよく、この場合はハッシュ値算出部１５が不要となる。
【００６６】
また、例えば、構造化文書中の複数の文書要素から算出した複数の要素ハッシュ値を所定基準で並べ替えた結果から算出した文書ハッシュ値を正規化構造情報として用いてもよい。
具体的には、ハッシュ値算出部１５を、文書要素に所定の演算を行って当該文書要素の要素ハッシュ値を算出する要素ハッシュ値算出手段、および、構造化文書が含む複数の文書要素からそれぞれ算出される複数の要素ハッシュ値に所定の演算を行って当該構造化文書の文書ハッシュ値を算出する文書ハッシュ値算出手段として構成する。そして、ハッシュ値算出部１５が正規化対象特定部１３により特定された文書要素群から各要素ハッシュ値を算出し、文書構造正規化処理部１４が各要素ハッシュ値を所定基準に従って並べ替え処理し、ハッシュ値算出部１５が当該並べ替えられた各要素ハッシュ値に基づいて文書ハッシュ値を算出し、ハッシュ値比較部１６が当該文書ハッシュ値を正規化構造情報として用いて比較する。
【００６７】
このように、各文書要素自体のソートではなく、各文書要素から算出したハッシュ値をソートすることにより処理効率が改善される。一般には、データ量が大きく、類似する多数の文書要素をソートする場合の処理コストは高いが、ハッシュ値のサイズはデータ量に関わらず一定（例えば「SHA-1」アルゴリズムのハッシュ値のサイズは20バイト）であり、また、データが類似していてもそのハッシュ値は大きく異なるため、各文書要素をハッシュ値に置き換えて処理することにより、データ量を削減でき、データの相違性を高めることができるので、ソート処理に要する時間が短縮される。
【００６８】
正規化構造情報の算出に要する時間の一例として、80バイトの文字列を内容にもつ10000個の文書要素（DOMの文書要素ノード）からハッシュ値を算出するのに要する時間を、各文書要素をソートする場合と各文書要素のハッシュ値をソートする場合とで比較した結果を図１３に示す。同図に示すとおり、処理の繰り返し回数（１０回、２０回、５０回、１００回）によらず、各文書要素のハッシュ値をソートする場合の処理時間の方が、各文書要素をソートする場合の処理時間より２０％程度短くなっている。
【００６９】
また、例えば、構造化文書中の複数の文書要素から算出した複数の要素ハッシュ値を所定基準で並べ替えた結果を正規化構造情報として用いてもよい。
具体的には、ハッシュ値算出部１５を、文書要素に所定の演算を行って当該文書要素の要素ハッシュ値を算出する要素ハッシュ値算出手段として構成する。そして、ハッシュ値算出部１５が正規化対象特定部１３により特定された文書要素群から各要素ハッシュ値を算出し、文書構造正規化処理部１４が各要素ハッシュ値を所定基準に従って並べ替え処理し、ハッシュ値比較部１６が各要素ハッシュ値を正規化構造情報として用いて比較する。
【００７０】
この場合には、図１４に示すように、SOAPエンベロープには、単一のXPathロケーションパスに対して複数の要素ハッシュ値が対応付けられる。同図によると、図１０の“{http://xxx /schema/attributeSet}hashValue”要素（4行目）の代わりに、“{http://xxx /schema/attributeSet}hashValueList”要素（4行目から8行目）が記述され、その子要素として３つの要素ハッシュ値（5行目から7行目）が保持されている。これらSOAPエンベロープ中の各要素ハッシュ値は、ハッシュ値算出部１５で新たに取得した各要素ハッシュ値とそれぞれ一致するか比較される。
【００７１】
次に、本発明の第２の実施例について説明する。
図１５は、第２の実施例として、本発明に係る構造化文書同一性判定装置を用いて構成した構造化文書複合サービス（以下、複合サービスと記す。）の構成図である。図１５に示すように、本例の複合サービスは、Ｅ社により運営される構造化文書処理サービス（１）ＳＥ１および構造化文書処理サービス（３）ＳＥ２、Ｆ社により運営される構造化文書処理サービス（２）ＳＦ、Ｇ社により運営される署名付与・検証サービスＳＧ、がネットワークＮを介して接続して構成されている。
【００７２】
本例の複合サービスでは、構造化文書処理サービス（１）ＳＥ１から処理対象の構造化文書が構造化文書処理サービス（２）ＳＦに出力される。構造化文書処理サービス（２）ＳＦは構造化文書に対する所定の処理を実行した後、構造化文書を構造化文書処理サービス（３）ＳＥ２に出力する。構造化文書処理サービス（３）ＳＥ２は構造化文書に対する所定の処理を実行し、複合サービスの処理が終了する。
【００７３】
このとき、構造化文書処理サービス（１）ＳＥ１は、出力した構造化文書が社外の構造化文書処理サービス（２）ＳＦによって改変されないことを確認できるようにするため、署名付与・検証サービスＳＧに対して構造化文書の署名付与を依頼する。また、構造化文書処理サービス（３）ＳＥ２は、構造化文書処理サービス（２）ＳＦから得た構造化文書が改変されていないことを確認するため、署名付与・検証サービスＳＧに対して構造化文書の署名検証を依頼する。なお、複合サービスで利用される署名の形式および署名付与・検証手順は、「XML署名標準」（http://www.ietf.org/rfc/rfc3075.txt）に準拠している。
【００７４】
図１６は、署名付与・検証サービスＳＧの構成図である。同図に示すとおり、署名付与・検証サービスＳＧは、所定の前処理を行う前処理部２１と構造化文書に署名を付与する本処理部２２とを有する署名付与部２０、所定の前処理を行う前処理部３１と構造化文書に付与された署名を検証する文書同一性判定部３２とを有する署名検証部３０を具備している。
署名付与部２０の本処理部２２は、正規化対象特定部２３、文書構造正規化部２４、ハッシュ値算出部２５、署名値算出部２６を備えており、署名検証部３０の文書同一性判定部３２は、正規化対象特定部３３、文書構造正規化部３４、ハッシュ値算出部３５、署名値復号化処理部３５、ハッシュ値比較部３６を備えている。
【００７５】
まず、署名付与部２０の処理の流れを図１７を参照して説明する。なお、前処理部２１、正規化対象特定部２３、文書構造正規化処理部２４、ハッシュ値算出部２５の処理（ステップＳ３０１からステップＳ３０９まで）は、第１の実施例に係る前処理部１１、正規化対象特定部１３、文書構造正規化処理部１４、ハッシュ値算出部１５の処理（ステップＳ１０１からＳ１０９まで）と同じため、説明を割愛する。
【００７６】
署名値算出部２６は、ハッシュ値算出部２５で算出されたハッシュ値を受信者の公開鍵で暗号化することにより署名値を算出し（ステップＳ３１０）、当該署名値をSOAPヘッダに書き込んで（ステップＳ３１１）、処理を終了する。
【００７７】
構造化文書処理サービス（１）ＳＥ１から図３のSOAPエンベロープが署名付与・検証サービスＳＧに出力された場合に、署名付与・検証サービスＳＧから構造化文書処理サービス（１）ＳＥ１に返却されるSOAPエンベロープを図１８に示す。
同図によると、XML署名標準に準拠した署名関連情報や処理対象の構造化文書は、SOAPヘッダ（3行目から28行目）に保持されている。また、正規化処理手順を識別するためのURIは、“{http://www.w3.org/2000/09/xmldsig#}C anonicalizationMethod”要素（6行目）のAlgorithm属性の値として保持されている。また、処理対象の文書要素群を特定するためのXPathロケーションパスは、“{http://www.w3.org/2000/09/xmldsig#}Reference”要素（8行目）のURI属性の値として保持されている。また、構造化文書のハッシュ値は、“{http://www.w3.org/2000/09/xmldsig#}DigestValue”要素（13行目）の内容として保持され、署名値は、“{ht tp://www.w3.org/2000/09/xmldsig#}SignatureValue”要素（16行目）の内容として保持されている。また、処理対象の構造化文書は、“{http://www.w3.org/2000/09/xmldsig#}Object”要素（17行目から26行目）の内容として保持されている。なお、オプションの鍵情報や署名対象構造化文書URIは省略されている。
【００７８】
次に、署名検証部３０の処理の流れを図１９を参照して説明する。なお、前処理部３１、正規化対象特定部３３、文書構造正規化処理部３４、ハッシュ値算出部３５の処理（ステップＳ４０１からＳ３０６まで）は、署名付与部２０の前処理部２１、正規化対象特定部２３、文書構造正規化処理部２４、ハッシュ値算出部２５の処理（ステップＳ３０１からＳ３０９まで）と同じため、説明を割愛する。ただし、署名検証部３０の前処理部３１は、SOAPヘッダが旧ハッシュ値を含むことが前提であるため、署名付与部２０の前処理部１１が行う一部処理（ステップＳ３０２、Ｓ３０３、Ｓ３０５）は、署名検証部３０の前処理部３１では行わない。
【００７９】
署名値復号化処理部３６は、SOAPヘッダに書き込まれている署名値を受信者の秘密鍵で復号化することによりハッシュ値を取得して変数Ｘに代入し（ステップＳ４０７）、ハッシュ値比較部３７が、ソート処理後の文書要素群からハッシュ値算出部３５により算出されたハッシュ値が格納された変数Ｙと比較し（ステップＳ４０８）、変数Ｘと変数Ｙが同一の場合は“真（同一性あり）”を示す情報を出力し（ステップＳ４０９）、変数Ｘと変数Ｙが異なる場合には“偽（同一性なし）”を示す情報を出力して（ステップＳ４１０）、処理を終了する。
【００８０】
この結果、例えば、構造化文書処理サービス（２）ＳＦによって図１８のSOAPエンベロープの“{http://xxx /schema/attributeSet}description”要素（20行目）と“{http://xxx /schema/attributeSet}author”要素（21行目から24行目）が置き換えられて図２０のように変更されても、図１８のSOAPエンベロープ中の構造化文書と図２０のSOAPエンベロープ中の構造化文書とは同一性を有しており、改変がなされていないと判定される。
【００８１】
なお、本例の署名付与・検証サービスＳＧは、外部の記憶媒体に対するデータアクセスを行う媒体アクセス部、ＨＤＤ（Hard Disk Drive）、ＲＡＭ（Random Access Memory）、ＣＰＵ（Central Processing Unit）等のハードウェア資源を有するコンピュータが、本発明に係るプログラムを記憶保持した外部記憶媒体やＨＤＤから当該プログラムを読み出し、ＲＡＭ上に展開してＣＰＵで演算処理することにより、正規化対象特定部２３、３３（判別手段）、文書構造正規化処理部２４、３４（正規化手段）、ハッシュ値算出部２５、３５（文書ハッシュ値算出手段）、署名値算出部２６（署名算出手段）、署名値復号化処理部３６（署名復号化手段）、ハッシュ値比較部３７（判定手段）、を構成しているが、これらをハードウェアにより構成するようにしてもよい。
また、本例の署名付与・検証サービスＳＧは、１台のコンピュータに上記各機能を構成しているが、ネットワークＮにより接続された複数台のコンピュータに上記各機能を分散して構成してもよい。
【００８２】
以上の説明から明らかなように、本発明の構造化文書同一性判定装置によれば、所定の条件を満たす文書要素群の並び替え操作に関わらず操作前後の構造化文書を同一と判定でき、特に、文書処理サービスが動的に組み合わされて文書処理アプリケーションが作成される環境において大きな効果を発揮する。
【００８３】
上記各実施例では、過去に取得した正規化構造情報（ハッシュ値）を、構造化文書を格納したSOAPエンベロープのSOAPヘッダに保持する構成としているが、構造化文書に対応する過去の正規化構造情報が取得できる構成であればよく、例えば、正規化構造情報を別ファイルに格納して当該格納先を示す情報を構造化文書に含めるような構成とする等、種々な態様で実現できる。
また、上記各実施例では、１つの構造化文書が過去の或る時点と現時点とで同一性を有するかを判定するものであるが、２つの構造化文書が同一性を有するかの判定に用いることも当然可能である。
また、上記各実施例では、共通の文書要素を親とした兄弟関係にある各文書要素について並べ替え処理しているが、親子関係にあたる文書要素同士での並び順に制約がないような場合には、親子関係にある各文書要素について並べ替え処理を行ってもよい。
【図面の簡単な説明】
【００８４】
【図１】本発明の第１の実施例に係る構造化文書複合サービスの構成図である。
【図２】本発明の第１の実施例に係る構造化文書検証サービスの構成図である。
【図３】本発明の第１の実施例に係るSOAPエンベロープの一例を示す図である。
【図４】本発明の第１の実施例に係るDOMツリーの一部を示す図である。
【図５】本発明の第１の実施例に係る前処理部および構造化文書同一性判定部の処理の流れを示す図である。
【図６】本発明の第１の実施例に係るXPathロケーションパス出力処理の流れを示す図である。
【図７】本発明の第１の実施例に係る文書スキーマの一例を示す図である。
【図８】本発明の第１の実施例に係る各要素ノードの並び順を示す図である。
【図９】本発明の第１の実施例に係る各要素ノードの並び順を示す図である。
【図１０】本発明の第１の実施例に係るSOAPエンベロープの一例を示す図である。
【図１１】本発明の第１の実施例に係るSOAPエンベロープの一例を示す図である。
【図１２】本発明の第１の実施例に係る各要素ノードの並び順を示す図である。
【図１３】本発明の第１の実施例に係る処理の平均実行時間を示す図である。
【図１４】本発明の第１の実施例に係るSOAPエンベロープの一例を示す図である。
【図１５】本発明の第２の実施例に係る構造化文書複合サービスの構成図である。
【図１６】本発明の第２の実施例に係る署名付与・検証サービスの構成図である。
【図１７】本発明の第２の実施例に係る署名付与部の処理の流れを示す図である。
【図１８】本発明の第２の実施例に係るSOAPエンベロープの一例を示す図である。
【図１９】本発明の第２の実施例に係る署名検証部の処理の流れを示す図である。
【図２０】本発明の第２の実施例に係るSOAPエンベロープの一例を示す図である。
【符号の説明】
【００８５】
１１、２１、３１：前処理部、
１３、２３、３３：正規化対象特定部、
１４、２４、３４：文書構造正規化処理部、
１５、２５、３５：ハッシュ値算出部、
１６：ハッシュ値比較部、
１７：構造化文書検証部、
２６：署名値算出部、
３６：署名値復号化処理部、
３７：ハッシュ値比較部
【図１】
2008134719.tif 000003
【図２】
2008134719.tif 000004
【図３】
2008134719.tif 000005
【図４】
2008134719.tif 000006
【図５】
2008134719.tif 000007
【図６】
2008134719.tif 000008
【図７】
2008134719.tif 000009
【図８】
2008134719.tif 000010
【図９】
2008134719.tif 000011
【図１０】
2008134719.tif 000012
【図１１】
2008134719.tif 000013
【図１２】
2008134719.tif 000014
【図１３】
2008134719.tif 000015
【図１４】
2008134719.tif 000016
【図１５】
2008134719.tif 000017
【図１６】
2008134719.tif 000018
【図１７】
2008134719.tif 000019
【図１８】
2008134719.tif 000020
【図１９】
2008134719.tif 000021
【図２０】
2008134719.tif 000022