(57)【要約】【課題】  暗号化要素向けの文書スキーマフラグメントを事前に用意する必要がなく、暗号化要素が複数の要素型に対応する場合にも検証処理を実行できる文書検証装置を提供する。【解決手段】  発明構造化文書が文書スキーマの制約を満たしているか否か検証する文書検証サービス６は、前記構造化文書が前記文書スキーマの制約を満たしているか否か検証するときに、前記構造化文書に含まれる暗号化された文書要素を、該文書要素の位置に出現し得る文書要素のいずれかに置き換えた場合に検証処理が成功するとき、検証処理が成功したと判定する記号列検証部６６を備える。このとき、記号列検証部６６は、前記暗号化された文書要素ごとに、前記検証処理を成功させるために前記文書要素に置き換え可能なすべての文書要素を検証結果とともに出力する。【選択図】          図１
2007094747.tif 000002
【特許請求の範囲】
【請求項１】
文書要素中に暗号化された暗号化文書要素を含む構造化文書が所定の制約情報を記述した文書スキーマの制約を満たしているか否か検証する文書検証装置であって、
前記構造化文書が前記文書スキーマの制約を満たしているか否か検証するときに、前記構造化文書中の暗号化文書要素を前記文書スキーマにより制約された文書要素のうち前記暗号化文書要素の位置に出現し得る文書要素のいずれかに置き換えた場合に検証処理が成功するとき、該検証処理が成功したと判定する検証部を備えることを特徴とする、文書検証装置。
【請求項２】
前記検証部は、前記検証処理を成功させるために前記置き換え可能な文書要素を前記検証結果とともに出力することを特徴とする、請求項１記載の文書検証装置。
【請求項３】
前記検証部は、前記暗号化文書要素ごとに前記検証処理を成功させるために前記置き換え可能な文書要素を前記検証結果とともに出力することを特徴とする、請求項１記載の文書検証装置。
【請求項４】
前記検証部は、前記構造化文書の検証処理を成功させるために前記暗号化文書要素と前記置き換え可能な文書要素と、前記構造化文書を変更して得られる第二の構造化文書中の暗号化文書要素と置き換え可能な文書要素が同一か否かを判定することを特徴とする、請求項２又は請求項３に記載の文書検証装置。
【請求項５】
前記検証部は、前記文書スキーマから終端状態に到達可能な状態および状態遷移からなるオートマトンを生成して前記構造化文書を検証するとき、前記暗号化文書要素に対応する記号を前記オートマトンに入力する時点での前記オートマトンの状態を開始端とする状態遷移に対応付けられた記号に対応する文書要素を前記暗号化文書要素の位置に出現し得る文書要素とみなすことを特徴とする、請求項１から請求項４のいずれか一項に記載の文書検証装置。
【請求項６】
前記構造化文書を保持する文書保持部と、
前記文書保持部中の構造化文書を木構造に変換する記号列生成部と、
前記文書保持部中の構造化文書に対応する文書スキーマを保持する文書スキーマ保持部と、
前記文書スキーマ保持部中の文書スキーマから文法を生成する文法生成部と、
前記文法生成部で生成された文法に含まれる生成規則ごとに、オートマトンを生成するオートマトン生成部とをさらに備えることを特徴とする、請求項５に記載の文書検証装置。
【請求項７】
前記検証部は、前記文書スキーマが表す文法によって前記暗号化文書要素と同じ親要素を持つ文書要素列のうち前記暗号化文書要素直前の文書要素までの文書要素列を導出し、その次に出現可能な文書要素を前記暗号化文書要素の位置に出現し得る文書要素とみなすことを特徴とする、請求項１から請求項４のいずれか一項に記載の文書検証装置。
【請求項８】
前記構造化文書を保持する文書保持部と、
前記文書保持部中の構造化文書を木構造に変換する記号列生成部と、
前記文書保持部中の構造化文書に対応する文書スキーマを保持する文書スキーマ保持部と、
前記文書スキーマ保持部中の文書スキーマから文法を生成する文法生成部とをさらに備えることを特徴とする、請求項７に記載の文書検証装置。
【請求項９】
前記構造化文書はＸＭＬ文書であり、
前記暗号化文書要素はＸＭＬ暗号標準のEncryptedData文書要素であることを特徴とする、請求項１から請求項８のいずれか一項に記載の文書検証装置。
【請求項１０】
文書要素中に暗号化された暗号化文書要素を含む構造化文書が所定の制約情報を記述した文書スキーマの制約を満たしているか否か検証する文書検証方法であって、
前記構造化文書が前記文書スキーマの制約を満たしているか否か検証するときに、前記構造化文書中の暗号化文書要素を前記文書スキーマにより制約された文書要素のうち前記暗号化文書要素の位置に出現し得る文書要素のいずれかに置き換えた場合に検証処理が成功するとき、該検証処理が成功したと判定することを特徴とする、文書検証方法。
【請求項１１】
前記検証処理を成功させるために前記置き換え可能な文書要素を前記検証結果とともに出力することを特徴とする、請求項１０記載の文書検証方法。
【請求項１２】
前記構造化文書の検証処理を成功させるために前記暗号化文書要素と前記置き換え可能な文書要素と、前記構造化文書を変更して得られる第二の構造化文書中の暗号化文書要素と置き換え可能な文書要素が同一か否かを判定する工程を含む請求項１０又は請求項１１に記載の文書検証方法。
【請求項１３】
前記文書スキーマから終端状態に到達可能な状態および状態遷移からなるオートマトンを生成して前記構造化文書を検証するとき、前記暗号化文書要素に対応する記号を前記オートマトンに入力する時点での前記オートマトンの状態を開始端とする状態遷移に対応付けられた記号に対応する文書要素を前記暗号化文書要素の位置に出現し得る文書要素とみなすことを特徴とする、請求項１０から請求項１２のいずれか一項に記載の文書検証方法。
【請求項１４】
前記文書スキーマが表す文法によって前記暗号化文書要素と同じ親要素を持つ文書要素列のうち前記暗号化文書要素直前の文書要素までの文書要素列を導出し、その次に出現可能な文書要素を前記暗号化文書要素の位置に出現し得る文書要素とみなすことを特徴とする、請求項１０から請求項１２のいずれか一項に記載の文書検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文書検証装置および文書検証方法に関する。
【背景技術】
【０００２】
ＸＭＬ（eXtensible Markup Language）に代表される構造化文書がインターネットで広く用いられるようになっている。以下、構造化文書が所定の制約条件を満たすかチェックする処理を妥当性検証処理と呼び、所定の制約条件を記述したものを文書スキーマと呼ぶ。たとえばＸＭＬ文書を対象とした文書スキーマには、ＸＭＬ標準の一部として定義されている文書型定義（ＤＴＤ：Document Type Definition）や、W3C XML Schemaがある。
【０００３】
構造化文書の作成者と利用者の間で文書スキーマを共有しておき、作成者は文書スキーマに適合する文書を作成する一方、利用者は文書スキーマに適合する文書を想定した処理プログラムを作成・実行できる。これにより、利用者は個別の文書ごとに処理プログラムを作成せずに済むので、大量文書の効率的な処理が可能となる。この処理の前提として、作成者から利用者に渡される構造化文書の妥当性検証処理が不可欠となる。
【０００４】
一方、構造化文書の一部を特定の利用者のみが参照・利用できるようにするため、文書の部分構造を暗号化する手順を定めたＸＭＬ暗号標準が制定されている。しかし上記のＸＭＬ暗号標準では、部分構造が暗号化された構造化文書の妥当性を検証する手順は示されていない。また、この構造化文書に対応する文書スキーマから、暗号化された部分構造に関する情報が公知化されることがＸＭＬ暗号への要求ノートで指摘されているが、それがどのような情報なのかも明らかにされていない。
【０００５】
また、暗号化対象のデータと暗号化方式など文書構造を変化させる処理の内容をすべて事前に取り決めておき、文書構造検査時に利用される文書スキーマを検査前に暗号化後の形式に変換し、該変換後の文書スキーマを利用して文書構造検査を実施することにより、構造化文書の全部または一部が暗号化され文書構造が変化する場合でも、文書全体の構造検査を実施する技術が提案されている（特許文献１参照）。
【特許文献１】特開２００４−３４２０２０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記特許文献１の手法では、暗号化対象のデータと暗号化方式など文書構造を変化させる処理の内容をすべて事前に取り決めているが、このような取り決めを常に事前に決定できるとは限らない。たとえば、一部の段落に社外秘情報を含む報告書の翻訳を社外のサービスに委託する場合には、社外秘情報が報告書のどの箇所に出現するかを事前にすべて取り決めるのは困難である。
【０００７】
そこで、本発明は、上記問題点に鑑みなされたものであり、文書構造を変化させる処理の内容を事前に取り決める必要がなくても検証処理を実行できる文書検証装置および文書検証方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明は、文書要素中に暗号化された暗号化文書要素を含む構造化文書が所定の制約情報を記述した文書スキーマの制約を満たしているか否か検証する文書検証装置であって、前記構造化文書が前記文書スキーマの制約を満たしているか否か検証するときに、前記構造化文書中の暗号化文書要素を前記文書スキーマにより制約された文書要素のうち前記暗号化文書要素の位置に出現し得る文書要素のいずれかに置き換えた場合に検証処理が成功するとき、該検証処理が成功したと判定する検証部を備える。
【０００９】
本発明によれば、構造化文書中の暗号化文書要素を、文書スキーマにより制約された文書要素のうち暗号化文書要素の位置に出現し得る文書要素のいずれかに置き換えて検証処理を行なうことにより、文書構造を変化させる処理の内容を事前に取り決めることなく、検証処理を実行できる。また、暗号化要素が複数の要素型(文書スキーマに記載される文書要素の定義)に対応する場合にも検証処理を実行できる。この点、特許文献１の技術では、暗号化要素が複数の要素型に対応し得る場合の処理手順は示されていない。
【００１０】
前記検証部は、前記検証処理を成功させるために前記置き換え可能な文書要素を前記検証結果とともに出力するとよい。本発明によれば、利用者は、検証結果と置き換え可能な文書要素を用いて以後の必要な対処を実行できる。前記検証部は、前記暗号化文書要素ごとに前記検証処理を成功させるために前記置き換え可能な文書要素を前記検証結果とともに出力するとよい。本発明によれば、利用者は、暗号化文書要素ごとに、必要な対処を実行できる。
【００１１】
前記検証部は、前記構造化文書の検証処理を成功させるために前記暗号化文書要素と前記置き換え可能な文書要素と、前記構造化文書を変更して得られる第二の構造化文書中の暗号化文書要素と置き換え可能な文書要素が同一か否かを判定するとよい。本発明によれば、文書の変更に伴って文書中の暗号化要素に対応する記号と置き換え可能な記号が変更されたかを判定し、変更後の置き換え可能な記号の集合が変更前の置き換え可能な記号の集合を包含しない場合にその旨を利用者に通知できるので、利用者はこの通知によって文書に対する変更が文書の妥当性に影響を及ぼした可能性があると判断し、必要な対処を実行できる。
【００１２】
前記検証部は、前記文書スキーマから終端状態に到達可能な状態および状態遷移からなるオートマトンを生成して前記構造化文書を検証するとき、前記暗号化文書要素に対応する記号を前記オートマトンに入力する時点での前記オートマトンの状態を開始端とする状態遷移に対応付けられた記号に対応する文書要素を前記暗号化文書要素の位置に出現し得る文書要素とみなすとよい。本発明によれば、文書スキーマから生成したオートマトンを用いて暗号化文書要素の位置に出現し得る文書要素を探すことができる。
【００１３】
本発明は、前記構造化文書を保持する文書保持部と、前記文書保持部中の構造化文書を木構造に変換する記号列生成部と、前記文書保持部中の構造化文書に対応する文書スキーマを保持する文書スキーマ保持部と、前記文書スキーマ保持部中の文書スキーマから文法を生成する文法生成部と、前記文法生成部で生成された文法に含まれる生成規則ごとに、オートマトンを生成するオートマトン生成部とをさらに備える。本発明によれば、オートマトンを用いて暗号化文書要素を含む文書の妥当性を検証できる。
【００１４】
前記検証部は、前記文書スキーマが表す文法によって前記暗号化文書要素と同じ親要素を持つ文書要素列のうち前記暗号化文書要素直前の文書要素までの文書要素列を導出し、その次に出現可能な文書要素を前記暗号化文書要素の位置に出現し得る文書要素とみなすとよい。本発明によれば、オートマトンとは別の手法により暗号化文書要素を含む文書の妥当性を検証できる。
【００１５】
本発明は、前記構造化文書を保持する文書保持部と、前記文書保持部中の構造化文書を木構造に変換する記号列生成部と、前記文書保持部中の構造化文書に対応する文書スキーマを保持する文書スキーマ保持部と、前記文書スキーマ保持部中の文書スキーマから文法を生成する文法生成部とをさらに備える。本発明によれば、オートマトンとは別の手法により暗号化文書要素を含む文書の妥当性を検証できる。前記構造化文書は、例えばＸＭＬ文書であり、前記暗号化文書要素は、ＸＭＬ暗号標準のEncryptedData文書要素である。
【００１６】
本発明は、文書要素中に暗号化された暗号化文書要素を含む構造化文書が所定の制約情報を記述した文書スキーマの制約を満たしているか否か検証する文書検証方法であって、前記構造化文書が前記文書スキーマの制約を満たしているか否か検証するときに、前記構造化文書中の暗号化文書要素を前記文書スキーマにより制約された文書要素のうち前記暗号化文書要素の位置に出現し得る文書要素のいずれかに置き換えた場合に検証処理が成功するとき、該検証処理が成功したと判定する。
【００１７】
本発明によれば、構造化文書中の暗号化文書要素を、文書スキーマにより制約された文書要素のうち暗号化文書要素の位置に出現し得る文書要素のいずれかに置き換えて検証処理を行なうことにより、文書構造を変化させる処理の内容を事前に取り決めることなく、検証処理を実行できる。また、暗号化要素が複数の要素型に対応する場合にも検証処理を実行できる。この点、特許文献１の技術では、暗号化要素が複数の要素型に対応し得る場合の処理手順は示されていない。
【００１８】
本発明の文書検証方法は、前記検証処理を成功させるために前記置き換え可能な文書要素を前記検証結果とともに出力するとよい。本発明によれば、利用者は、検証結果と置き換え可能な文書要素を用いて以後の必要な対処を実行できる。
【００１９】
本発明の文書検証方法は、前記構造化文書の検証処理を成功させるために前記暗号化文書要素と前記置き換え可能な文書要素と、前記構造化文書を変更して得られる第二の構造化文書中の暗号化文書要素と置き換え可能な文書要素が同一か否かを判定する工程を含む。本発明によれば、文書の変更に伴って文書中の暗号化要素に対応する記号と置き換え可能な記号が変更されたかを判定し、変更後の置き換え可能な記号の集合が変更前の置き換え可能な記号の集合を包含しない場合にその旨を利用者に通知できるので、利用者はこの通知によって文書に対する変更が文書の妥当性に影響を及ぼした可能性があると判断し、必要な対処を実行できる。
【００２０】
本発明の文書検証方法は、前記文書スキーマから終端状態に到達可能な状態および状態遷移からなるオートマトンを生成して前記構造化文書を検証するとき、前記暗号化文書要素に対応する記号を前記オートマトンに入力する時点での前記オートマトンの状態を開始端とする状態遷移に対応付けられた記号に対応する文書要素を前記暗号化文書要素の位置に出現し得る文書要素とみなすとよい。本発明によれば、文書スキーマから生成したオートマトンを用いて暗号化文書要素の位置に出現し得る文書要素を探すことができる。
【００２１】
本発明の文書検証方法は、前記文書スキーマが表す文法によって前記暗号化文書要素と同じ親要素を持つ文書要素列のうち前記暗号化文書要素直前の文書要素までの文書要素列を導出し、その次に出現可能な文書要素を前記暗号化文書要素の位置に出現し得る文書要素とみなすとよい。本発明によれば、オートマトンとは別の手法により暗号化文書要素を含む文書の妥当性を検証できる。
【発明の効果】
【００２２】
本発明によれば、文書構造を変化させる処理の内容を事前に取り決める必要がなくても検証処理を実行できる文書検証装置および文書検証方法を提供することができる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明を実施するための最良の形態について説明する。
【実施例１】
【００２４】
図１は、本発明の第一の実施例に係るシステムの構成図である。図１に示すように、システム１は、報告書参照サービス２、報告書ＤＢ管理サービス３、報告書ＤＢ４、文書翻訳サービス５および文書検証装置としての文書検証サービス６を備えている。報告書参照サービス２に対して利用者が報告書の参照を依頼すると、報告書参照サービス２は社内のイントラネットを介して報告書ＤＢ管理サービス３にアクセスし、利用者が求める報告書を検索する。検索された報告書はそのまま報告書参照サービス２に送信されず、インターネットで接続された社外の文書翻訳サービス５で利用者の所望の言語に翻訳されてから報告書参照サービス２に送信され、利用者に示されるものとする。
【００２５】
社外秘情報を含む報告書が文書翻訳サービス５に送信されるとき、報告書ＤＢ管理サービス３は社外秘情報を含む文書要素を暗号化してから送信するものとする。また、他社からの報告書を受信する文書翻訳サービス５は、報告書に対する処理を開始する前に、報告書が所定の文書スキーマに適合しているか否かを判定するための妥当性検証処理を文書検証サービス６に依頼する。文書翻訳サービス５と同様、文書検証サービス６も他のサービスとインターネットで接続されているものとする。
【００２６】
図２は、本実施例で報告書ＤＢ管理サービス３から文書翻訳サービス５に出力される部分暗号化前の報告書の例を示す図である。また、図３はこの報告書に対応する文書スキーマを示す図である。図３の文書スキーマは、ＸＭＬ標準で定義されている文書型定義(ＤＴＤ)である。図４は、報告書ＤＢサービス３から文書翻訳サービス５に出力される部分暗号化前の報告書の別の例を示す図である。また、図５はこの報告書に対応する文書スキーマを示す図である。図５の文書スキーマは、W3C XML Schema標準に準拠している。
【００２７】
図５の文書スキーマは図３の文書スキーマといくつかの点で異なっている。まず、ＤＴＤでは日付型を利用できないので文字列として表現するしかないが、W3C XML Schemaでは日付型を利用できる。これを利用し、図３の文書スキーマでは文字列として定義されていたdate要素を図５の文書スキーマでは日付型データとして定義している(１４行目)。また、W3C XML Schemaでは特定文書要素の繰り返し回数の下限値と上限値として任意の整数を設定できる。これを利用し、図３の文書スキーマではsection要素の直下にsection要素が０回以上任意の回数繰り返し出現することが許されていたが、section（図５）の文書スキーマではsection要素が０回以上２回まで繰り返し出現することが許されるように変更されている(２１行目)。
【００２８】
また、図６は、図２の報告書を部分暗号化した報告書の例を示す図である。図２の１６行目から２０行目に記載されていたsection要素が暗号化され、EncryptedData要素(１６行目から２０行目)に変換されている。また、図２の２４行目と２５行目に記載されていたparagraph要素がそれぞれ暗号化され、２つのEncryptedData要素(２４行目から２８行目、２９行目から３３行目)に変換されている。部分暗号化の手順とEncryptedData要素の仕様は、XML Encryption標準を参照されたい。なお、XML Encryption標準ではEncryptedData要素およびその下位要素の要素名および属性名に名前空間を用いているが、本発明の各実施例のように要素名および属性名に名前空間を用いていない場合でも、名前空間を用いた場合と同様の処理が可能である。
【００２９】
文書検証サービス６は、構造化文書が文書スキーマの制約を満たしているか否か検証するものである。この文書検証サービス６は、構造化文書が文書スキーマの制約を満たしているか否か検証するときに、構造化文書に含まれる暗号化文書要素を、文書スキーマにより制約された文書要素のうち暗号化文書要素の位置に出現し得る文書要素のいずれかに置き換えた場合に検証処理が成功するとき、検証処理が成功したと判定する。そして、文書検証サービス６は、暗号化文書要素ごとに、検証処理を成功させるために置き換え可能なすべての文書要素を検証結果とともに出力する。
【００３０】
また、第１の実施例では、文書検証サービス６は、文書スキーマから、終端状態に到達可能な状態および状態遷移のみからなるオートマトンを生成して構造化文書を検証するとき、暗号化文書要素に対応する記号をオートマトンに入力する時点でのオートマトンの状態を開始端とする状態遷移に対応付けられた記号に対応する文書要素を、暗号化文書要素の位置に出現し得る文書要素とみなしている。これら文書検証サービス６の処理は主に後述する記号列検証部６６により行われる。以下、文書検証サービス６について具体的に説明する。
【００３１】
この文書検証サービス６は、文書保持部６１、記号列生成部６２、文書スキーマ保持部６３、文法生成部６４、オートマトン生成部６５および検証部としての記号列検証部６６を備えている。文書保持部６１は、外部サービスから送信された検証対象の文書を保持する。本実施例では、文書保持部６１には図６の文書が保持されるものとする。文書スキーマ保持部６３では、文書保持部６１中の文書に対応する文書スキーマを保持する。本実施例では、文書スキーマ保持部６３は、図３の文書スキーマが保持されるものとする。文法生成部６４は、文書スキーマ保持部６３中の文書スキーマから文法を生成する。
【００３２】
生成される文法は、以下の要素から構成される。
・非終端記号(内容を持つ文書要素)の集合
・終端記号(内容を持たない文書要素、文字データ)の集合
・開始記号(文書のルート要素)
・生成規則(各生成規則の左辺は非終端記号、右辺は非終端記号および終端記号からなる正規表現)の集合
【００３３】
文法生成部６４の処理は、Java（登録商標）やperlなど、XML文書を含む文字列データを操作できるプログラミング言語を利用したプログラムとして実現できる。
【００３４】
図７は、図３の文書スキーマが文書スキーマ保持部６３に保持され、図６の文書が文書保持部６１に保持されるときに文法生成部６４が出力する文法の生成規則のリストを示す図である。なお、図７の正規表現中、空白は記号の区切り文字として用いられる。また、記号”,”は前後の記号の連接を表し、記号”|”は前後の記号の和を表し、記号”*”は直前の記号の０回以上任意回数の繰り返しを表す。また、図７の５行目の生成規則右辺に記号”ε”が含まれているが、この記号は空の記号を意味するものとする。
【００３５】
オートマトン生成部６５は、文法生成部６４で生成された文法に含まれる生成規則ごとに、生成規則右辺の正規表現から決定性有限オートマトンを生成する。オートマン生成部６５が正規表現から決定性有限オートマトンを生成する手順は、たとえば以下の文献を参照されたい。
(正規表現から非決定性有限オートマトンを生成する手順)
・エフィーム・キンバー、カール・スミス著、計算論への入門、ピアソン・エデュケーション、３３ページ記載のアルゴリズムA
(非決定性有限オートマトンから決定性オートマトンを生成する手順)
・同文献２０ページ記載の定理2.3.1の証明
【００３６】
図８から図１０は、図７の生成規則からなる文法からオートマトン生成部６５が出力する決定性有限オートマトンを示す図である。図８が図７の１行目の生成規則から生成され、図９が図７の５行目の生成規則から生成され、図１０が図７のそれ以外の生成規則から生成される。これらの図では、状態を節、状態遷移を辺とするグラフとしてオートマトンを表現している。開始端を持たない辺の終了端に位置する状態が初期状態であり、黒字に白抜き文字で表記されている状態が受理状態である。
【００３７】
また、破線で表記されている状態がトラップ状態(受理状態に遷移できない状態)である。状態中の数字は状態の識別子を意味する。また、状態遷移の添え字は遷移時に消費する記号のリストを表す。ある状態遷移を遷移して終了端の状態に移動するためには、状態遷移に対応するリスト中のいずれかの記号を消費する必要がある。なお、表記をわかりやすくするため、図８と図９のオートマトンの状態遷移の添え字には、記号の先頭文字のリストを記載している。たとえば、図８の状態１から状態７への状態遷移に添えられている文字列”a, s, d”は、”author, section, date”を略記したものである。
【００３８】
記号列生成部６２は、文書保持部６１中の文書を木構造に変換する。このとき、記号列生成部６２は、各ノードのラベルとして、対応する文書要素の名前を付与する。そして、記号列生成部６２は、葉でないノードごとに、そのノードのラベル(非終端記号)と、ノードの直下に位置するノードのラベル(記号)の列を対応付ける。記号列生成部６２の処理は、Java（登録商標）やperlなど、ＸＭＬ文書を含む文字列データを操作できるプログラミング言語を利用したプログラムとして実現できる。
【００３９】
なお、本実施例では、暗号化要素(EncryptedData要素)を頂点とする部分構造はXML Encryption標準に準拠して正しく生成されていると仮定し、暗号化要素の下位構造にある文書要素を記号列生成部６２の処理対象から除外する。これらの文書要素を除外せずに処理を進める場合でも、暗号化要素および暗号化要素の下位に出現する文書要素に対応する生成規則をあらかじめ記号列生成部６２に保持しておけば、本実施例の処理と同様の処理の流れによって同じ結果を得ることができる。
【００４０】
図１１は、暗号化要素および暗号化要素の下位に出現する文書要素に対応する生成規則の例を示す図である。図１１の生成規則は、XML Encryption標準で規定された、暗号化要素を頂点とする部分構造に対応する文書スキーマを簡略化のため一部変更したものから生成している。なお、図１１の正規表現中、記号”+”は直前の記号の１回以上任意回数の繰り返しを表す。図１２は、図６の文書から記号列生成部６２が生成する木構造を示す図である。図８および図９同様、図１２でもノードのラベルには対応する記号の先頭文字のみを記載している。図１２では、暗号化された文書要素(EncryptedData要素)に対応するノードのラベルは”E”である。
【００４１】
記号列検証部６６は、記号列生成部６２で生成した非終端記号と記号列の組ごとに、非終端記号に対応付けられたオートマトン生成部６５中のオートマトンが記号列を受理するか判定する。そして、記号列検証部６６は、すべての組の記号列が受理された場合に真を出力し、それ以外の場合に偽を出力する。また、記号列検証部６６は、すべての非終端記号に対応付けられたオートマトンがオートマトン生成部６５に無い場合、偽を出力する。
【００４２】
図１３は、記号列検証部６６が行う記号列検証処理のフローチャートである。記号列検証部６６は、図１３に示した処理から受理状態と記号列が１つ以上出力された場合に、オートマトン生成部６５中のオートマトンが記号列生成部６２中の記号列を受理すると判定する。図１３の状態リストＸは、入力された記号列が途中まで読み込まれた時点で到達可能な状態と記号列の組を要素とするリストである。記号列が暗号化要素に対応する記号(本実施例では”E”)を含まない場合、状態リストＸの要素数は常に１である。記号列が暗号化要素に対応する記号を含む場合、サブルーチンUPDATE_STATUSで暗号化要素に対応する記号が複数の記号に置き換えられることがある。この場合、状態リストＸの要素数は複数になる。
【００４３】
ステップＳ１０１１で、記号列検証部６６は、状態リストＸに{(オートマトン初期状態, 空の記号列)}を代入する。次に、ステップＳ１０１２で、記号列検証部６６は、記号Ｙに記号列の先頭記号を代入する。次に、ステップＳ１０１３で、記号列検証部６６は、状態リストＸに サブルーチンUPDATE_STATUS(記号Ｙ, 状態リストＸ)の返り値を代入する。次に、ステップＳ１０１４で、記号列検証部６６は、記号Ｙに記号列の末尾記号が代入されている場合、ステップＳ１０１６へ進み、そうでない場合、ステップＳ１０１５へ進む。ステップＳ１０１５で、記号列検証部６６は、記号Ｙに記号列の次記号を代入しステップＳ１０１３へ戻る。ステップＳ１０１６で、記号列検証部６６は、状態リストＸの要素のうち、受理状態を含むもののみを出力する。
【００４４】
図１４は、図１３のサブルーチンUPDATE_STATUSの処理の流れを示す図である。ステップＳ１０２１で、記号列検証部６６は、記号Ｙに暗号化要素に対応する記号が代入されている場合、ステップＳ１０２３へ進み、そうでない場合はステップＳ１０２２へ進む。ステップＳ１０２２で、記号列検証部６６は、状態リストＸにサブルーチンUPDATE_STATUS_NORMAL(記号Ｙ, 状態リストＸ)の返り値を代入する。ステップＳ１０２３で、記号列検証部６６は、状態リストＸにサブルーチンUPDATE_STATUS_ENCRYPTED(記号Ｙ, 状態リストＸ)の返り値を代入する。
【００４５】
図１５は、サブルーチンUPDATE_STATUS_NORMALの処理の流れを示す図である。ステップＳ１０３１で、記号列検証部６６は、状態リストＺを空にする。ステップＳ１０３２で、記号列検証部６６は、Ａ(状態Ｂ, 記号列Ｃ)に状態リストＸの先頭要素を代入する。ステップＳ１０３３で、記号列検証部６６は、状態Ｂを開始端とし、記号Ｙに対応する状態遷移の終了端の状態を状態Ｂ‘に代入する。ステップＳ１０３４で、記号列検証部６６は、Ａ'(状態Ｂ', 記号列Ｃ)を状態リストＺの要素として追加する。ステップＳ１０３５で、記号列検証部６６は、Ａが状態リストＸの末尾要素の場合はステップＳ１０３７へ進み、そうでない場合はステップＳ１０３６へ進む。ステップＳ１０３６で、記号列検証部６６は、Ａ(状態Ｂ, 記号列Ｃ)に状態リストＸの次要素を代入し、ステップＳ１０３３へ戻る。ステップＳ１０３７で、記号列検証部６６は、状態リストＺを出力する。
【００４６】
図１６は、サブルーチンUPDATE_STATUS_ENCRYPTEDの処理の流れを示す図である。図１６の処理の流れは図１５の処理の流れのうちステップＳ１０３３とステップＳ１０３４をステップＳ１０４３からＳ１０４９に置き換えたものである。この置き換えにより、暗号化要素に対応する記号が入力されたとき、その記号を、その時点で到達している（１つ以上の）状態を開始端とする状態遷移に対応付けられた記号のいずれかに置き換えたものとみなして処理を続行できる。
【００４７】
ステップＳ１０４１で、記号列検証部６６は、状態リストＺを空にする。ステップＳ１０４２で、記号列検証部６６は、Ａ(状態Ｂ, 記号列Ｃ)に状態リストＸの先頭要素を代入する。ステップＳ１０４３で、記号列検証部６６は、記号リストＳに状態Ｂを開始端とする状態遷移に対応付けられた記号のリストを代入する。ステップＳ１０４４で、記号列検証部６６は、記号Ｙ'に記号リストＳの先頭要素を代入する。ステップＳ１０４５で、記号列検証部６６は、状態Ｂ'に状態Ｂを開始端とし、記号Ｙ'に対応する状態遷移の終了端の状態を代入する。ステップＳ１０４６で、記号列検証部６６は、記号列Ｃ'に記号列Ｃの末尾に記号Ｙ'を追加したものを代入する。
【００４８】
ステップＳ１０４７で、記号列検証部６６は、Ａ'(状態Ｂ', 記号列Ｃ')を状態リストＺの要素として追加する。ステップＳ１０４８で、記号列検証部６６は、Ｙ'は記号リストＳの末尾要素の場合はステップＳ１０４１０へ進み、そうでない場合はステップＳ１０４９へ進む。ステップＳ１０４９で、記号列検証部６６は、記号Ｙ'に記号リストＳの次要素を代入し、ステップＳ１０４５へ戻る。ステップＳ１０４１０で、記号列検証部６６は、Ａは状態リストＸの末尾要素の場合、ステップＳ１０４１２へ進み、そうでない場合はステップＳ１０４１１へ進む。ステップＳ１０４１１で、記号列検証部６６は、Ａ(状態Ｂ, 記号列Ｃ)に状態リストＸの次要素を代入し、ステップＳ１０４２へ戻る。ステップＳ１０４１２で、記号列検証部６６は、状態リストＺを出力する。
【００４９】
図１７は、図１２の記号列（１）が図９のオートマトンに入力されたときに、記号列の各要素が消費された時点で到達する状態と、その時点までに暗号化要素に対応する記号が入力された場合にその記号と置き換えられた記号の一覧を示す図である。図１７の第１列のセルは入力された記号、第２列以降のセルには、第１列の同じ行に記載された記号を消費した時点での到達状態と置き換え記号の組を表す。たとえば第２列第５行のセルには、第１列第５行の記号”Ｘ”(暗号化要素に対応する記号)までを消費した時点で到達可能な状態の一つ”７”と、暗号化要素に対応する記号と置き換えられた記号”a”の組が示されている。また、第２列第１行のセルは初期状態を表す。
【００５０】
さらに、最後の行(第６行)の第２列以降のセルのうち、黒字に白抜きで記載されているセルの状態が受理状態を示す。図１３の処理では、これらのセルの情報が出力される。図１７からは、記号列（１）に含まれる暗号化要素に対応する記号が記号”s”または記号”p”に置き換えられたとき受理状態”６”に到達できる、という情報が出力されることになる。
【００５１】
図１８は、図１２の記号列（２）が図９のオートマトンに入力されたときに、記号列の各要素が消費された時点で到達する状態と、その時点までに暗号化要素に対応する記号が入力された場合にその記号と置き換えられた記号の一覧を示す図である。記号列（２）には暗号化要素に対応する記号が２つ含まれているが、暗号化要素に対応する記号が１つだけ含まれていた記号列（１）と同様に処理できる。
【００５２】
なお、図１５および図１６のステップＳ１０３４およびＳ１０４７では、状態Ｂ’と記号列Ｃ’の組を無条件に状態リストＺに追加しているが、状態Ｂ’がトラップ状態である場合には状態リストＺに追加しないように処理することも可能である。トラップ状態から受理状態への遷移は不可能なので、このように処理することで、受理状態へ遷移する見込みの無い選択肢に対する処理を除外し、処理を効率化できる。記号列（１）および記号列（２）を含め、図１２の木構造に含まれるすべての記号列は図８から図１０のオートマトンで受理されるので、記号列検証部６６は真を出力する。文書検証サービス６は記号列検証部６６の出力である真を文書翻訳サービス５に対して出力し、処理を終了する。
【００５３】
以上述べたように、本実施例の文書検証サービス６により、暗号化された文書要素を含む文書の妥当性を検証できる。これまでは、図２の報告書と図３の文書スキーマを対象にして文書検証サービス６の処理の流れを説明したが、同じ処理の流れにより、図４の報告書と図５の文書スキーマを対象にすることも可能である。
【００５４】
図１９は、図４の報告書を部分暗号化した文書を示す図である。この文書を文書保持部６１から記号列生成部６２に入力して得られる木構造は図１２の木構造と同一である。また、図５の文書スキーマからは図２０に示す文法が得られ、section要素の生成規則に対応する決定性有限オートマトンとして図２１のオートマトンが得られる。report要素およびその他の文書要素に対応するオートマトンは図８および図１０に示したものと同一である。
【００５５】
図２２は、図１２の記号列（２）が図２１のオートマトンに入力されたときに、記号列の各要素が消費された時点で到達する状態と、その時点までに暗号化要素に対応する記号が入力された場合にその記号と置き換えられた記号の一覧を示す図である。この処理の結果、第４列、第５列、第７列に記載されたセルの情報が出力される。この結果、図１２の木構造に含まれるすべての記号列は図８、図１０、図２１のオートマトンで受理されるので、記号列検証部６６は真を出力する。文書検証サービス６は、記号列検証部６６の出力である真を文書翻訳サービス５に対して出力し、処理を終了する。
【実施例２】
【００５６】
次に、本発明の第２実施例について説明する。本実施例では図１で示した報告書参照サービス２で文書検証サービス６から検証結果を得た文書翻訳サービス５が、図６の報告書の内容を翻訳し、文書要素を追加して報告書参照サービス２に出力する前に文書検証サービス６に翻訳結果の妥当性検証を依頼する局面を想定する。本実施例の文書検証サービス６は、暗号化要素を含む文書の妥当性検証機能だけでなく、暗号化要素を含む文書の変更に伴って文書中の暗号化要素に対応する記号と置き換え可能な記号が変更されたか否か判定し、変更された場合に依頼者のサービスにそれを通知する機能を備える。上記の機能追加に対応し、図１の文書検証サービス６の各構成要素の機能は以下のように変更される。
【００５７】
まず、文書保持部６１は変更前の構造化文書とこの構造化文書を変更して得られる第二の構造化文書の２つの文書を保持する。記号列生成部６２は文書保持部６１に保持される２つの文書それぞれについて非終端記号と記号列の組の集合を生成する。文書スキーマ保持部６３、文法生成部６４、オートマトン生成部６５の機能および処理の流れは第一の実施例と同一である。
【００５８】
記号列検証部６６は、変更前後の文書に対応する非終端記号と記号列の組の集合ごとに、暗号化要素に対応する記号と置き換え可能な記号を特定する。具体的には、記号列検証部６６は、終端記号に対応するオートマトンをオートマトン生成部６５から特定し、そのオートマトンと記号列を入力として図１３の処理を実行し、記号列中に含まれる暗号化要素に対応する(１つ以上の)記号と置き換え可能な(１つ以上の)記号のパターンを得る。
【００５９】
そして、記号列検証部６６は、構造化文書の検証処理を成功させるために構造化文書中の暗号化文書要素と置き換え可能な文書要素を、第二の構造化文書中の暗号化文書要素と置き換え可能な文書要素が包含しているか否かを判定する。すなわち、記号列検証部６６は、変更前の文書から得られる置き換え可能な記号のパターンを、変更後の文書から得られる置き換え可能な記号のパターンが包含しているか否か判定する。そして、記号列検証部６６は、その判定結果を依頼者のサービスに出力する。
【００６０】
変更後の文書から得られる置き換え可能な記号のパターンが、変更前の文書から得られる置き換え可能な記号のパターンを包含しないとき、変更が文書の妥当性に影響を及ぼした可能性がある。変更前の文書から得られる置き換え可能な記号のパターンのうち、変更前の文書から得られる置き換え可能な記号のパターンに含まれないものに、暗号化要素を復号化して得られる文書要素に対応する記号が含まれるとする。このとき、変更前の文書を復号化して得られる文書は妥当性検証の結果として真を返すが、変更後の文書を復号化して得られる文書は妥当性検証の結果として偽を返すので、変更によって文書の妥当性が真から偽に変更されたことになる。
【００６１】
図２３は、本実施例で文書翻訳サービス５によって翻訳された報告書を示す図である。図２４は、コメントを追加して報告書参照サービス２に出力する前に文書検証サービス６に妥当性検証を依頼する対象の報告書を示す図である。図２４の報告書は図２３の報告書に対して文書翻訳サービス５からのコメント文が２１行目に追加されたものである。本実施例では、変更前の文書として図６の報告書が、変更後の文書として図２４の報告書が、文書スキーマとして図３の文書スキーマが文書検証サービス６に入力されるものとする。
【００６２】
図２５は、図２４の報告書から記号列生成部６２が生成する木構造を示す図である。コメント文の追加に伴い、図１２の木構造の記号列（１）が図２５では記号列(1’)に変更されている。他の非終端記号と記号列の組は図１２と図２５とで同一である。図２６は、記号列(1’)を図９のオートマトンを入力として図１３の処理を実行したときに、記号列の各要素が消費された時点で到達する状態と、その時点までに暗号化要素に対応する記号が入力された場合にその記号と置き換えられた記号の一覧を示す図である。図２６に示すとおり、記号列(1’)に含まれる暗号化要素に対応する記号が記号”ｐ”に置き換えられたときのみ受理状態”６”に到達できる、という情報が出力されることになる。一方、図１７で示したとおり、変更前の報告書から得られる記号列（１）(図１２参照)に含まれる暗号化要素に対応する記号が記号”ｐ”または記号”ｓ”に置き換えられたとき受理状態”６”に到達できることがわかる。
【００６３】
記号列検証部６６は、変更後の文書中の暗号化要素に対応する記号と置き換え可能な記号(記号”ｐ”)が変更前の文書中の暗号化要素に対応する記号と置き換え可能な記号(記号”ｐ”と記号”ｓ”)を包含しないと判定するので、その旨が文書翻訳サービス５に出力され、文書検証サービス６の処理が終了する。文書翻訳サービス５は、文書検証サービス６からの出力を得て、コメント文の追加が報告書の妥当性に影響を及ぼした可能性があると判断し、コメント文の追加箇所を変更するなどの対処を実行する。
【００６４】
このように、本実施例の文書検証サービス６では、文書の変更に伴って文書中の暗号化要素に対応する記号と置き換え可能な記号が変更されたかを判定し、変更後の置き換え可能な記号の集合が変更前の置き換え可能な記号の集合を包含しない場合にその旨を依頼者のサービスに通知できるので、依頼者のサービスはこの通知によって文書に対する変更が文書の妥当性に影響を及ぼした可能性があると判断し、必要な対処を実行できる。
【実施例３】
【００６５】
次に、本発明の第３実施例について説明する。本実施例の文書検証サービスは、第一の実施例の文書検証サービスと同じく、暗号化要素を含む文書の妥当性検証を実行する。図２７は、本発明の第３の実施例に係るシステム１０１の構成図である。
【００６６】
文書検証サービス１０６は、第１実施例の文書検証サービス６と同様に、構造化文書が文書スキーマの制約を満たしているか否か検証するときに、構造化文書に含まれる暗号化文書要素を、文書スキーマにより制約された文書要素のうち暗号化文書要素の位置に出現し得る文書要素のいずれかに置き換えた場合に検証処理が成功するとき、検証処理が成功したと判定する。そして、文書検証サービス１０６は、暗号化文書要素ごとに、検証処理を成功させるために文書要素に置き換え可能なすべての文書要素を検証結果とともに出力する。
【００６７】
また、第３の実施例では、第１の実施例と異なり、文書検証サービス１０６は、文書スキーマが表す文法によって、暗号化された文書要素と同じ親要素を持つ文書要素列のうち暗号化された文書要素直前の文書要素までの文書要素列を導出し、その次に出現可能な文書要素を、暗号化された文書要素の位置に出現し得る文書要素とみなしている。これら文書検証サービス１０６の処理は、主に後述する記号列導出部１６５により行われる。以下、文書検証サービス１０６について詳細に説明する。
【００６８】
図２７に示すとおり、文書検証サービス１０６は、文書保持部６１、記号列生成部６２、文書スキーマ保持部６３、文法生成部１６４および検証部としての記号列導出部１６５を備えている。これらのうち、文書保持部６１、記号列生成部６２、文書スキーマ保持部６３は第一の実施例記載のものと同一である。
【００６９】
また、本実施例の文書検証サービス１０６には、図６の文書と図３の文書スキーマが入力されるものとする。この結果、記号列生成部６２では図１２の木構造が生成され、非終端記号と記号列の組の集合が生成される。以下、本実施例では、図１２の記号列（１）”tapEs”に対する処理に着目し、本実施例の文書検証サービス１０６が第一の実施例の文書検証サービス６と同じ結果(暗号化要素に対応する記号が記号”ｓ”または記号”ｐ”に置き換えられたときに真)を得られることを示す。
【００７０】
文法生成部１６４は、文書スキーマ保持部６３中の文書スキーマから文法を生成する。生成される文法は第一の実施例と同様、非終端記号の集合、終端記号の集合、開始記号、生成規則の集合から構成されるが、各生成規則右辺の正規表現には、記号”,”、記号”|”、記号”*”のいずれか一種類のみが含まれるものとする。
【００７１】
図２８は、図３の文書スキーマから文法生成部１６４によって生成される文法を示す図である。記号”title”、”author”、”date”、”paragraph”を左辺に持つ生成規則は図７の文法にも含まれるが、記号”report”、”section”を左辺に持つ生成規則は、右辺の正規表現に記号”|”や記号”*”を含まないよう、これらの記号を含む記号群が新たに定義された非終端記号(“section1”、”author1”、”paragraph1”)に置き換えられている。そして、これらの非終端記号を左辺に持つ生成規則が追加されている。第一の実施例の文法生成部６４の処理と同様、本実施例の文法生成部１６４の処理も、Java（登録商標）やperlなどXML文書を含む文字列データを操作できるプログラミング言語を利用したプログラムとして実現できる。なお、本実施例では、各生成規則右辺の正規表現には、記号”,”、記号”|”、記号”*”のいずれか一種類のみが含まれるという制限を追加したが、この制限を加えずに文法を生成しても、同様の結果を得ることが可能である。
【００７２】
記号列導出部１６５は、記号列生成部６２が生成した非終端記号と記号列の組ごとに、文法生成部１６４が生成した文法中の生成規則から左辺にその非終端記号を持つものを特定し、生成規則から記号列を導出することを試みる。
【００７３】
図２９は、生成規則から記号列を導出する処理の流れの一例を示す図である。図２９の処理の流れは、状態リストが導出木リスト(導出木と記号列の組を要素とするリスト)に置き換わった点と、ステップＳ１０６６で導出木リストの各要素に含まれる導出木を完成させ、ステップＳ１０６７で導出木リストの要素のうち完成したもののみを出力する点を除いて図１３の流れと同一である。導出木の完成処理とは、導出木のすべての親子関係について、親ノードの非終端記号を左辺に持つ生成規則右辺の正規表現に子ノードからなる記号列がマッチする条件を満足させるために、導出木に対して終端記号”ε”を葉ノードとする部分木を追加する処理である。
【００７４】
ステップＳ１０６１で、記号列導出部１６５は、導出木リストＸに{(記号列に対応する非終端記号のみからなる導出木, 空の記号列)}を代入する。ステップＳ１０６２で、記号列導出部１６５は、記号Ｙに記号列の先頭記号を代入する。ステップＳ１０６３で、記号列導出部１６５は、導出木リストＸにサブルーチンUPDATE_TREE(記号Ｙ, 導出木リストＸ)の返り値を代入する。ステップＳ１０６４で、記号列導出部１６５は、記号Ｙが記号列の末尾記号の場合はステップＳ１０６６へ進み、そうでない場合はステップＳ１０６５に進む。ステップＳ１０６５で、記号列導出部１６５は、記号Ｙに記号列の次記号を代入し、ステップＳ１０６３へ進む。ステップＳ１０６６で、記号列導出部１６５は、導出木リストＸの要素を完成させる。ステップＳ１０６７で、記号列導出部１６５は、導出木リストＸの要素のうち完成したものを出力する。
【００７５】
図３０は、図２９のサブルーチンUPDATE_TREEの処理の流れを示す図である。図３０の処理の流れは状態リストと導出木リストの違いを除いて図１４と同一である。ステップＳ１０７１で、記号列導出部１６５は、記号Ｙに暗号化要素に対応する記号が代入されている場合はステップＳ１０７３へ進み、そうでない場合はステップＳ１０７２へ進む。ステップＳ１０７２で、記号列導出部１６５は、導出木リストＸにサブルーチンUPDATE_TREE_NORMAL(記号Ｙ, 導出木リストＸ)の返り値を代入する。ステップＳ１０７３で、記号列導出部１６５は、導出木リストＸにUPDATE_TREE_ENCRYPTED(記号Ｙ, 導出木リストＸ)を代入する。
【００７６】
図３１は、図２９のサブルーチンUPDATE_TREE_NORMALの処理の流れを示す図である。図３１では、図１５のステップＳ１０３３での状態遷移に対応する処理として、ステップＳ１０８３およびステップＳ１０８４で導出木の末尾の葉ノードとして記号を追加する処理を実行する。ステップＳ１０８１で、記号列導出部１６５は、導出木リストＺを空にする。ステップＳ１０８２で、記号列導出部１６５は、Ａ(導出木Ｂ, 記号列Ｃ)に導出木リストＸの先頭要素を代入する。ステップＳ１０８３で、記号列導出部１６５は、導出木Ｂに記号Ｙを追加可能な場合、ステップＳ１０８４へ進み、そうでない場合はステップＳ１０８６へ進む。
【００７７】
ステップＳ１０８４で、記号列導出部１６５は、導出木Ｂ'に、導出木Ｂに記号Ｙを追加して得られる導出木を代入する。ステップＳ１０８５で、記号列導出部１６５は、Ａ'(導出木Ｂ', 記号列Ｃ)を状態リストＺの要素として追加する。ステップＳ１０８６で、記号列導出部１６５は、Ａは導出木リストＸの末尾要素の場合、ステップＳ１０８８へ進み、そうでない場合はステップＳ１０８７へ進む。ステップＳ１０８７で、記号列導出部１６５は、Ａ(導出木Ｂ, 記号列Ｃ)に導出木リストＸの次要素を代入する。ステップＳ１０８８で、記号列導出部１６５は、導出木リストＺを出力する。
【００７８】
図３２は、図２９のサブルーチンUPDATE_TREE_ENCRYPTEDの処理の流れを示す図である。ステップＳ１０９１で、記号列導出部１６５は、導出木リストＺを空にする。ステップＳ１０９２で、記号列導出部１６５は、Ａ(導出木Ｂ, 記号列Ｃ)に導出木リストＸの先頭要素を代入する。ステップＳ１０９３で、記号列導出部１６５は、記号リストＳに導出木Ｂに追加可能な記号のリストを代入する。ステップＳ１０９４で、記号列導出部１６５は、記号Ｙ'に記号リストＳの先頭要素を代入する。ステップＳ１０９５で、記号列導出部１６５は、導出木Ｂに記号Ｙ'を追加して得られる導出木を導出木Ｂ’に代入する。ステップＳ１０９６で、記号列導出部１６５は、記号列Ｃの末尾に記号Ｙ'を追加したものを記号列Ｃ’に代入する。
【００７９】
ステップＳ１０９７で、記号列導出部１６５は、Ａ'(導出木Ｂ', 記号列Ｃ')を導出木リストＺの要素として追加する。ステップＳ１０９８で、記号列導出部１６５は、Ｙ'は記号リストＳの末尾要素の場合はステップＳ１０９１０へ進み、そうでない場合はステップＳ１０９９へ進む。ステップＳ１０９９で、記号列導出部１６５は、記号Ｙ'に記号リストＳの次要素を代入し、ステップＳ１０９５へ戻る。ステップＳ１０９１０で、Ａが導出木リストＸの末尾要素でない場合、ステップＳ１０９１１で、Ａ(導出木Ｂ, 記号列Ｃ)に導出木リストＸの次要素を代入し、ステップＳ１０９３へ戻り、Ａが導出木リストＸの末尾要素の場合、ステップＳ１０９１２で、導出木リストＺを出力する。
【００８０】
図３３は、記号列”tapEs”のうち”ta”まで読み込んだ時点で生成される導出木を示す図である。この導出木は、非終端記号”s (section)”を左辺に持つ生成規則(図２８の５行目)と、この生成規則右辺に出現する非終端記号”a1(author1)”を左辺に持つ生成規則を利用している。記号”t”を読み込むときは、”s”を左辺に持つ生成規則右辺の正規表現の先頭要素が”t”なので、新たに生成規則を利用する必要はない。しかし次に記号”a”を読み込むときは、正規表現で次に出現できる記号が”a1”なので、”a1”を左辺に持つ生成規則も利用して図３３の導出木を生成する。図３４は、同様に、”tapEs”のうち”tap”まで読み込んだ時点で生成される導出木を示す図である。
【００８１】
図３２では、図１６のステップＳ１０４３に対応する処理として、ステップＳ１０９３で、導出木の末尾の葉ノードとして追加可能な記号のリストを生成する処理を実行している。そして、各記号を追加した導出木と、記号を末尾要素に追加した記号列の組を導出木リストに追加していく。図３５及び図３６は、非終端記号に対応する記号列”tapEs”のうち”tapE”まで読み込んだ時点で生成される導出木を示す図である。図３５の導出木には記号”E“に対して記号”s”が、図３６の導出木には記号”p”が対応付けられる。
【００８２】
図３７及び図３８は、図３５および図３６の導出木にさらに記号”s”を読み込ませ、ステップＳ１０６６で完成処理を実行した結果得られる導出木を示す図である。図３８の導出木の生成処理では、記号”s”を読み込ませた時点では、導出木のルートノード”s”の末子であるノード”s1”は追加されていない。しかし、ルートノード”s”を左辺に持つ生成規則右辺の正規表現では、末尾に記号”s1”が出現することが求められている。
【００８３】
また、記号”s1”を左辺に持つ生成規則右辺の正規表現は記号列”ε”にマッチする。そこでＳ１０６６で、ルートノード”s”の末子としてノード”s1”を追加し、ノード”s1”の子としてノード”ε”を追加して図３７の導出木を得る。図３７の導出木には記号列”s”が、図３８の導出木には記号列”p”が対応付けられているので、記号列導出部１６５は、暗号化要素に対応する記号が記号”s”または記号”p”に置き換えられたとき真という結果を得ることができる。
【００８４】
以上示したとおり、文書検証サービス１０６は、文書スキーマが表す文法によって、暗号化された文書要素Ｅと同じ親要素ｓを持つ文書要素列“ｔａｐＥｓ”のうち暗号化された文書要素Ｅ直前の文書要素までの文書要素列“ｔａｐ”を導出し、その次に出現可能な文書要素を、暗号化された文書要素Ｅの位置に出現し得る文書要素とみなすことにより、第一の実施例の文書検証サービス６と同様、暗号化要素を含む文書の妥当性検証処理を実行し、暗号化要素に対応する記号を置き換え可能な記号のパターンと検証結果を得ることができる。
【００８５】
なお、上記特許文献１の公報に記載の手法を用いて、図６のＸＭＬ文書が図３の文書スキーマの制約を満たすか否か検証するとしたとき、図６の１６行目から２０行目に記載された暗号化要素は、paragraph要素またはsection要素のいずれかを暗号化したものと考えられるが、この要素の次に出現する文書要素(２１行目以降のsection要素)に対する検証処理をどのように続行させるかは、示されていない。よって、特許文献１に記載の技術では、文書構造を変化させる処理の内容を事前に取り決める必要がなくても検証処理を実行することができるものではない。
【００８６】
なお、本発明による文書検証方法は、文書検証サービス６および１０６により実現される。また、図１および図２７の各種サービスは、例えば、ＣＰＵ（Central Processing Unit）、ＲＯＭ(Read Only Memory)、ＲＡＭ(Random Access Memory)等を用いて構成されるサーバにより実現される。
【００８７】
以上本発明の好ましい実施例について詳述したが、本発明は係る特定の実施例に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形、変更が可能である。
【図面の簡単な説明】
【００８８】
【図１】本発明の構造化文書検証装置の第一の実施例である文書検証サービスを利用した報告書参照サービスの構成図である。
【図２】第１実施例で報告書ＤＢ管理サービスから文書翻訳サービスに出力される部分暗号化前の報告書の例を示す図である。
【図３】この報告書に対応する文書スキーマを示す図である。
【図４】報告書ＤＢサービスから文書翻訳サービス５に出力される部分暗号化前の報告書の別の例を示す図である。
【図５】この報告書に対応する文書スキーマを示す図である。
【図６】図２の報告書を部分暗号化した報告書の例を示す図である。
【図７】図３の文書スキーマが文書スキーマ保持部に保持され、図６の文書が文書保持部に保持されるときに文法生成部が出力する文法の生成規則のリストを示す図である。
【図８】図７の生成規則からなる文法からオートマトン生成部が出力する決定性有限オートマトンを示す図である。
【図９】図７の生成規則からなる文法からオートマトン生成部が出力する決定性有限オートマトンを示す図である。
【図１０】図７の生成規則からなる文法からオートマトン生成部が出力する決定性有限オートマトンを示す図である。
【図１１】暗号化要素および暗号化要素の下位に出現する文書要素に対応する生成規則の例を示す図である。
【図１２】図６の文書から記号列生成部が生成する木構造を示す図である。
【図１３】本発明の第１実施例に係る記号列検証部の処理の流れを示す図である。
【図１４】図１３のサブルーチンUPDATE_STATUSの処理の流れを示す図である。
【図１５】サブルーチンUPDATE_STATUS_NORMALの処理の流れを示す図である。
【図１６】サブルーチンUPDATE_STATUS_ENCRYPTEDの処理の流れを示す図である。
【図１７】図１２の記号列（１）が図９のオートマトンに入力されたときに、記号列の各要素が消費された時点で到達する状態と、その時点までに暗号化要素に対応する記号が入力された場合にその記号と置き換えられた記号の一覧を示す図である。
【図１８】図１２の記号列（２）が図９のオートマトンに入力されたときに、記号列の各要素が消費された時点で到達する状態と、その時点までに暗号化要素に対応する記号が入力された場合にその記号と置き換えられた記号の一覧を示す図である。
【図１９】図４の報告書を部分暗号化した文書を示す図である。
【図２０】図５の文書スキーマから得られた文法を示す図である。
【図２１】図２０の生成規則からなる文法からオートマトン生成部が出力する決定性有限オートマトンを示す図である。
【図２２】図１２の記号列（２）が図２１のオートマトンに入力されたときに、記号列の各要素が消費された時点で到達する状態と、その時点までに暗号化要素に対応する記号が入力された場合にその記号と置き換えられた記号の一覧を示す図である。
【図２３】本実施例で文書翻訳サービスによって翻訳された報告書を示す図である。
【図２４】コメントを追加して報告書参照サービスに出力する前に文書検証サービス６に妥当性検証を依頼する対象の報告書を示す図である。
【図２５】図２４の報告書から記号列生成部が生成する木構造を示す図である。
【図２６】記号列(1’)が図９のオートマトンに入力されて図１３の処理を実行したときに、記号列の各要素が消費された時点で到達する状態と、その時点までに暗号化要素に対応する記号が入力された場合にその記号と置き換えられた記号の一覧を示す図である。
【図２７】本発明の第３の実施例に係るシステムの構成図である。
【図２８】図３の文書スキーマから文法生成部によって生成される文法を示す図である。
【図２９】生成規則から記号列を導出する処理の流れの一例を示す図である。
【図３０】図２９のサブルーチンUPDATE_TREEの処理の流れを示す図である。
【図３１】図２９のサブルーチンUPDATE_TREE_NORMALの処理の流れを示す図である。
【図３２】図２９のサブルーチンUPDATE_TREE_ENCRYPTEDの処理の流れを示す図である。
【図３３】記号列”tapEs”のうち”ta”まで読み込んだ時点で生成される導出木を示す図である。
【図３４】”tapEs”のうち”tap”まで読み込んだ時点で生成される導出木を示す図である。
【図３５】非終端記号に対応する記号列”tapEs”のうち”tapE”まで読み込んだ時点で生成される導出木を示す図である。
【図３６】非終端記号に対応する記号列”tapEs”のうち”tapE”まで読み込んだ時点で生成される導出木を示す図である。
【図３７】図３５の導出木にさらに記号”s”を読み込ませ、ステップS１０６６で完成処理を実行した結果得られる導出木を示す図である。
【図３８】図３６の導出木にさらに記号”s”を読み込ませ、ステップS１０６６で完成処理を実行した結果得られる導出木を示す図である。
【符号の説明】
【００８９】
１  システム
２  報告書参照サービス
３  報告書ＤＢ管理サービス
４  報告書データベース
５  文書翻訳サービス
６、１０６  文書検証サービス
６１  文書保持部
６２  記号列生成部
６３  文書スキーマ保持部
６４、１６４  文法生成部
６５  オートマン生成部
６６、１６５  記号列検証部
【図１】
2007094747.tif 000003
【図２】
2007094747.tif 000004
【図３】
2007094747.tif 000005
【図４】
2007094747.tif 000006
【図５】
2007094747.tif 000007
【図６】
2007094747.tif 000008
【図７】
2007094747.tif 000009
【図８】
2007094747.tif 000010
【図９】
2007094747.tif 000011
【図１０】
2007094747.tif 000012
【図１１】
2007094747.tif 000013
【図１２】
2007094747.tif 000014
【図１３】
2007094747.tif 000015
【図１４】
2007094747.tif 000016
【図１５】
2007094747.tif 000017
【図１６】
2007094747.tif 000018
【図１７】
2007094747.tif 000019
【図１８】
2007094747.tif 000020
【図１９】
2007094747.tif 000021
【図２０】
2007094747.tif 000022
【図２１】
2007094747.tif 000023
【図２２】
2007094747.tif 000024
【図２３】
2007094747.tif 000025
【図２４】
2007094747.tif 000026
【図２５】
2007094747.tif 000027
【図２６】
2007094747.tif 000028
【図２７】
2007094747.tif 000029
【図２８】
2007094747.tif 000030
【図２９】
2007094747.tif 000031
【図３０】
2007094747.tif 000032
【図３１】
2007094747.tif 000033
【図３２】
2007094747.tif 000034
【図３３】
2007094747.tif 000035
【図３４】
2007094747.tif 000036
【図３５】
2007094747.tif 000037
【図３６】
2007094747.tif 000038
【図３７】
2007094747.tif 000039
【図３８】
2007094747.tif 000040