(57)【特許請求の範囲】
【請求項１】
第１の文書タイプに従った文書構造を第２の文書タイプに従った文書構造に変換する文書構造変換装置において、
前記第１の文書タイプに従った文書構造中のどのノードに適用されるのかを示す適用条件と、前記適用条件を満たしたノードがどういう木構造の列によって表される部分構造に変換されるかを示す変換パターンと、の組からなる規則要素を有する変換規則を管理する変換規則管理手段と、
前記第１の文書タイプに従った第１の文書構造が入力されると、前記第１の文書構造中のノードを所定の順番で選択し、選択したノードを前記変換規則中の適用条件と対比することにより、前記選択したノードに適用すべき規則要素を決定する規則要素決定手段と、
前記規則要素決定手段により決定された規則要素の変換パターンに従って、選択されたノードの部分構造を作成する部分構造作成手段と、
作成過程の文書構造の中から、前記部分構造作成手段で作成された部分構造の接続位置を決定する接続位置決定手段と、
前記接続位置決定手段で決定された作成過程の文書構造上の接続位置に、前記部分構造作成手段で作成された部分構造を接続する部分構造接続手段と、
を有することを特徴とする文書構造変換装置。
【請求項２】
前記変換規則管理手段は、規則要素の中に、変換後の部分構造を既生成文書構造のどの位置に接続すべきかを示す接続条件をさらに含み、
前記接続位置決定手段は、前記規則要素決定手段により決定された規則要素の接続条件に従って、部分構造の接続位置を決定する、
ことを特徴とする請求項１記載の文書構造変換装置。
【請求項３】
前記規則要素決定手段は、前記所定の順番として、最初に前記第１の文書構造のルートノードを選択し、兄弟のノードの間では兄のノードを優先的に選択し、兄のノードの子孫のノードが全て選択された後に弟のノードを選択する、
ことを特徴とする請求項１記載の文書構造変換装置。
【請求項４】
第１の文書タイプに従った文書構造を第２の文書タイプに従った文書構造に変換する文書構造変換方法であって、
前記第１の文書タイプに従った第１の文書構造が入力されると、前記第１の文書構造中のノードを所定の順番で規則要素決定手段により選択し、
どういう木構造の列によって表される部分構造に変換されるかを示す変換パターンを、前記第１の文書タイプに従った文書構造中のどのノードに適用されるのかを示す適用条件と、選択したノードとを対比することにより、前記選択したノードに適用すべき変換パターンを前記規則要素決定手段により決定し、
決定した変換パターンに従って、前記第１の文書構造中の各ノードの部分構造を部分構造作成手段により作成し、
作成過程の文書構造上の所定の定義に従った接続位置に、作成された部分構造を接続する、
ことを特徴とする分文書構造変換方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、文書構造を作成する文書構造変換装置及び文書構造変換方法に関し、特に所定の文書クラスの構造制約を満たした文書構造を作成する文書構造変換装置及び文書構造変換方法に関する。
【０００２】
【従来の技術】
構成要素として章、節、項などに代表される論理的な構造を持つ文書を構造化文書と呼ぶが、この文書の構造の統一を図ることで、文書の共有や変換が容易となることが知られている。ＳＧＭＬ（Ｓｔａｎｄａｒｄ  Ｇｅｎｅｒａｌｉｚｅｄ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）や、ＯＤＡ（Ｏｆｆｉｃｅ  Ｄｏｃｕｍｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ）などの国際規格の普及もあり、構造化文書は電子的な文書の主流となりつつある。
【０００３】
この構造化文書は通常、文書の構造及び構成要素を定義した文書クラスと呼ばれる分類に従って構造化されている。ＯＤＡでは共通論理構造が文書クラスに該当し、ＳＧＭＬではＤＴＤ（Ｄａｔａ  Ｔｙｐｅ  Ｄｅｆｉｎｉｔｉｏｎ）が文書クラスの役割を担っている。
【０００４】
構造化文書において文書構造が文書クラスの制約に従っていることには、重要な意味がある。例えば、構造化文書をレイアウトするための規則は、文書構造やその構成要素が特定の文書クラスの制約を満たしていることを前提に決められることが多い。そのため、文書構造が文書クラスの制約から逸脱している場合には正しいレイアウトでの出力ができない。
【０００５】
また、報告書群からの抄録リスト作成のような、多くの構造化文書を処理するためのプログラムには、対象となる文書が特定の文書クラスに従って作成されていることを利用したものが多い。このようなプログラムを利用する際、所定の文書クラスに従わない文書の存在は、プログラム実行の障害となり得る。さらに、構造化文書を対象にしたデータベースでは文書クラスをスキーマとして利用することが多く、スキーマから逸脱したデータの存在はデータベースの信頼性を大きく損なうこととなる。
【０００６】
したがって、ある文書クラスＢにしたがっている文書向けに用意された各種処理プログラムを、別の文書クラスＡの文書に対して適用するためには、文書クラスＡにしたがった文書構造を別の文書クラスＢにしたがった文書構造に変換しなければならない。
【０００７】
上記の問題を解決するために、文書クラスＡ中のタイプａのノードが、変換によって文書クラスＢ中のタイプｂのノードに変換されるといった、ノードの１：１の関係を定義した規則を用意しておき、文書構造の変換時に前記規則を利用して、文書クラスＡに従った文書構造中の各ノードが、文書クラスＢ中でどのタイプのノードになるかを決定することによって、文書構造変換を行うものがある。
【０００８】
例えば、Ｆｒｅｄ  Ｃｏｌｅ，  Ｈｅａｔｈｅｒ  Ｂｒｏｗｎ著のＥｄｉｔｉｎｇ  Ｓｔｒｕｃｔｕｒｅｄ  Ｄｏｃｕｍｅｎｔｓ  −  Ｐｒｏｂｌｅｍ  ａｎｄ  ｓｏｌｕｔｉｏｎｓ  （Ｅｌｅｃｔｒｏｎｉｃ  Ｐｕｂｌｉｓｈｉｎｇ  ，  ｖｏｌ．５，  Ｎｏ．４，  ｐｐ．  ２０９−２１６）  に記載されている「ｆａｌｌ  ｂａｃｋ  ｃｌａｓｓ」の概念を応用して、文書クラスＡ中で規定されたノードのタイプに対して、そのタイプのノードが変換後に、文書クラスＢで規定されたどのタイプのノードになるかを規則として定義しておき、文書クラスＡにしたがった文書構造の各ノードを、予め定義された規則にしたがって変換する方法は容易に考えられる。
【０００９】
また、特開平７−２８８１７号公報には、文書クラスＡにしたがった文書構造を別の文書クラスＢにしたがった文書構造に変換する場合に、文書クラスを構成するタイプ間の１対１の対応関係をユーザが定義し、その対応関係を使って文書の構造変換を行う文書変換方法が開示されている。
【００１０】
【発明が解決しようとする課題】
しかし、変換後の文書クラスに必要なノードや部分木に対応するノードが、変換前の文書クラスの構造制約に含まれていない場合がある。この場合、従来の技術では、不足分を補った文書構造変換を行うことが困難であるという問題点があった。
【００１１】
すなわち、作成された文書構造中のノードは、変換前の文書構造中に対応するノードが存在するものだけであり、対応するもののないノードは不足したままである。このようにして作成された文書構造は、文書クラスＢの制約を完全に満たすことはできない。
【００１２】
本発明はこのような点に鑑みてなされたものであり、第１の文書クラスの文書構造を第２の文書クラスに適合するように変換する場合に、必要なノードを容易に補うことができる文書構造作成装置を提供することを目的とする。
【００１３】
また、本発明の他の目的は、第１の文書クラスの文書構造を第２の文書クラスに適合するように変換する場合に、必要なノードを容易に補うことができる文書構造作成方法を提供することである。
【００１４】
【課題を解決するための手段】
本発明では上記課題を解決するために、第１の文書タイプに従った文書構造を第２の文書タイプに従った文書構造に変換する文書構造変換装置において、前記第１の文書タイプに従った文書構造中のどのノードに適用されるのかを示す適用条件と、前記適用条件を満たしたノードがどういう木構造の列によって表される部分構造に変換されるかを示す変換パターンと、の組からなる規則要素を有する変換規則を管理する変換規則管理手段と、前記第１の文書タイプに従った第１の文書構造が入力されると、前記第１の文書構造中のノードを所定の順番で選択し、選択したノードを前記変換規則中の適用条件と対比することにより、前記選択したノードに適用すべき規則要素を決定する規則要素決定手段と、前記規則要素決定手段により決定された規則要素の変換パターンに従って、選択されたノードの部分構造を作成する部分構造作成手段と、作成過程の文書構造の中から、前記部分構造作成手段で作成された部分構造の接続位置を決定する接続位置決定手段と、前記接続位置決定手段で決定された作成過程の文書構造上の接続位置に、前記部分構造作成手段で作成された部分構造を接続する部分構造接続手段と、を有することを特徴とする文書構造変換装置が提供される。
【００１５】
このような文書構造変換装置によれば、第１の文書構造が入力されると、規則要素決定手段により、各ノードの規則要素が決定される。この規則要素の変換パターンに従って、部分構造作成手段により、各ノードの部分構造が作成される。すると、接続位置決定手段により、各部分構造の接続位置が決定され、部分構造接続手段が、該当する部分構造を決定された位置に接続する。これにより、変換パターンとして、複数のノードが生成されるように定義しておけば、第１の文書構造に不足しているノードを補って、第２の文書構造を作成することができる。
【００１６】
また、第１の文書タイプに従った文書構造を第２の文書タイプに従った文書構造に変換する文書構造変換方法であって、前記第１の文書タイプに従った第１の文書構造が入力されると、前記第１の文書構造中のノードを所定の順番で規則要素決定手段により選択し、どういう木構造の列によって表される部分構造に変換されるかを示す変換パターンを、前記第１の文書タイプに従った文書構造中のどのノードに適用されるのかを示す適用条件と、選択したノードとを対比することにより、前記選択したノードに適用すべき変換パターンを規則要素決定手段により決定し、決定した変換パターンに従って、前記第１の文書構造中の各ノードの部分構造を部分構造作成手段により作成し、作成過程の文書構造上の所定の定義に従った接続位置に、作成された部分構造を接続する、ことを特徴とする分文書構造変換方法が提供される。
【００１７】
この文書構造変換方法によれば、変換パターンとして、複数のノードが生成されるように定義しておくことにより、入力された第１の文書構造に不足しているノードを補った第２の文書構造が生成される。
【００１８】
【発明の実施の形態】
以下、本発明の実施の形態を図面に基づいて説明する。
図１は本発明の原理構成図である。これは、第１の文書タイプに従った文書構造を第２の文書タイプに従った文書構造に変換するための原理構成を示している。
【００１９】
変換規則管理手段１は、第１の文書タイプに従った文書構造を第２の文書タイプに従った文書構造に変換する際の変換規則１ａを管理している。この変換規則１ａは、規則要素の集合である。各規則要素は、その規則要素を第１の文書タイプに従った文書構造中のどのノードに適用するかを示す適用条件、文書構造中の該当するノードをどういう部分構造に変換するかを示す変換パターン、及びその変換パターンをどの位置に接続するのかを示す接続条件を含んでいる。なお、変換パターンは、部分構造中に複数のノードが生成される場合には、第１の文書構造２のノードが持っている内容を引き継ぐべき、部分構造中のノードの指定も含んでいる。また、一つのノードから複数の部分構造を生成するような、変換パターンもある。接続条件は、省略時の解釈は予め定義されており、それ以外の位置に接続する場合にのみ、条件が指定されている。
【００２０】
規則要素決定手段３は、第１の文書タイプに従った第１の文書構造２が入力されると、第１の文書構造２中のノードを一つずつ所定の順序で選択する。そして、選択したノードと規則要素中の適用条件とを照合し、そのノードに適用可能な規則要素を決定する。部分構造生成手段４は、規則要素決定手段３が決定した規則要素の変換パターンに従い、第１の文書構造２の各ノードの変換後の部分構造４ａを作成する。
【００２１】
接続位置決定手段５は、部分構造作成手段４で作成された部分構造の接続位置を決定する。以前に作成されている部分構造は、互いに接続されており、作成過程の文書構造６ａが作られている。この作成過程の文書構造６ａ上の位置から、新たに作成された部分構造の接続位置を決定する。部分構造接続手段６は、接続位置決定手段５で決定された接続位置に、部分構造作成手段４で作成された部分構造を接続する。
【００２２】
このようにして、第１の文書構造２の全てのノードに対応して作成された部分構造を互いに接続することにより、第２の文書構造７が生成される。各ノードに対応して作成される部分構造は複数であってもよく、各部分構造が複数のノードを有していてもよい。そのため、第１の文書クラスには存在しないが第２の文書クラスには存在すべきノードや部分木を補った、第２の文書構造を生成することが可能となる。
【００２３】
図１では、すでに第１の文書構造が認識されている状態での文書構造の変換機能を示しているが、一般に取り扱われるのは文書データである。文書データは、その文書データが属する文書クラスの定義によって解析しなければ、その文書構造を認識できない。そこで、文書データの文書構造の解析機能を含めた文書構造変換装置について、以下に説明する。
【００２４】
図２は、本発明を適用する文書構造変換装置の概略構成を示すブロック図である。この実施の形態は、ある文書クラスの制約に従って作成された文書データの文書構造（入力文書構造）を、別の文書クラスによって制約されている文書構造（出力文書構造）に変換するものを示している。また、この実施の形態で取り扱う文書構造は木構造である。
【００２５】
文書構造変換装置１０には、入出力ｕ／ｉ２１と変換規則管理ｕ／ｉ２２とが接続されている。入出力ｕ／ｉ２１は、文書構造変換装置に対して、ユーザが変換する文書データを入力したり、変換結果を参照したりするためのユーザインタフェースである。変換規則管理ｕ／ｉ２２は、文書構造変換装置１０内の変換規則管理部１２に対して、ユーザが変換規則の登録や更新、削除を行うためのユーザインタフェースである。
【００２６】
文書構造変換装置１０は、文書構造の変換に必要な情報を管理する機能として、変換の対象となる文書クラスの構造制約を管理している文書クラス管理部１１と、入力する文書構造の各要素が、変換後にどういう部分構造になるかを決める規則（変換規則）を管理している変換規則管理部１２とを有している。さらに、文書構造変換装置１０は、構造変換処理機能部として、入力された文書データの文書構造を解析する文書パーサ１３、得られた文書構造の各ノードに対して適応すべき規則要素を決定する規則要素決定部１４、決定された規則要素に基づき部分構造を作成する部分構造作成部１５、作成された部分構造の接続位置を決定する接続位置決定部１６、決定された接続位置に部分構造を接続する部分構造接続部１７、及び全ての部分構造が接続された文書構造から文書データを作成する文書ジェネレータ１８を有している。
【００２７】
これらの文書構造変換装置１０内の各構成要素の機能を、以下に詳しく説明する。
文書クラス管理部１１は、変換の対象となる文書クラスの定義を複数管理しており、具体的には、文書クラスの定義をその文書クラスの名前（名前は、文書クラス管理部内で一意である）とペアで記憶している。そして、文書パーサ１３から文書クラスの名前とともにその文書クラスの定義が要求されると、指定された名前をもつ文書クラス定義を文書パーサ１３へ渡す。
【００２８】
文書クラスの定義は、文書構造を構成するノードのタイプ定義と、定義されたタイプのノード間の接続関係を規定した構造制約とからなる。以下の説明においては、ある文書クラスのタイプの定義と構造制約とを満たした文書構造を、その文書クラスの文書構造と呼び、ある文書クラスの文書構造を持つ文書データを、その文書クラスの文書データと呼ぶこととする。
【００２９】
ノードのタイプ定義は、「タイプ名」と「内容型指定」とからなる。
「タイプ名」は、ノードのタイプを識別するための文字列である（以降、タイプ名が「Ａ」であるタイプは「Ａタイプ」とよび、「Ａタイプ」のノードは「Ａノード」とよぶものとする）。
【００３０】
「内容型指定」は、このタイプのノードが内容を持つのか持たないのか、持つならどの種類の内容を持つのかを示す。この実施の形態では、可能な内容型は、文字列型、幾何図形型のどちらかであるものとする。
【００３１】
構造制約は、以下の構造制約子と上記のタイプ定義とで作られた木構造によって定義される。構造制約子には、「ＳＥＱ」と「ＲＥＰ」とがある。
「ＳＥＱ」は、複数の下位構造をとり、その下位構造で規定された構造が、規定された順序で出現することを示す。
【００３２】
「ＲＥＰ」は、単一の下位構造をとり、その下位構造で規定された構造が、１回以上繰り返し出現することを示す。
「ＯＰＴ」は、単一の下位構造をとり、その下位構造で規定された構造が、出現しないか、１回出現するかのどちらかであることを示す。
【００３３】
変換規則管理部１２の中には、複数の変換規則が、その規則が適用されて変換が施される文書の文書クラスの文書クラス名（入力文書クラス名）と、その規則を適用した結果生成される文書の文書クラス名（出力文書クラス名）とともに格納されている。
【００３４】
変換規則は、規則要素のリストである。規則要素は、入力文書構造中のノード（入力ノード）が出力文書中でどのような部分構造（出力部分構造）になるかを規定したものであり、対応元の条件、接続位置の条件、及び対応先のパターンの三つのフィールドから構成される。以下に、各フィールドの内容について説明する。
【００３５】
対応元の条件は、規則要素が適用される入力文書構造中のノードについての条件である。対応元の条件には、その条件を持つ規則要素が適用されるノードのタイプや、そのノードが持つ内容についての条件が規定される。
【００３６】
接続位置の条件は、規則要素が適用された結果生成される出力部分構造が、変換途中の出力文書構造のどの位置に接続するかの条件である。接続位置の条件には、その条件を持つ規則要素が適用された結果生成された出力部分構造の親ノードとなるノードのタイプや、そのノードの廻りのノード（親、祖父、兄弟ノードなど）についての条件が規定される。
【００３７】
対応先のパターンには、そのパターンを持つ規則要素が適用された結果生成される、出力部分構造のパターンが規定される。このパターンは、出力文書クラス中に出現し得るノードによって構成される木構造の列である。
【００３８】
対応先のパターンは、「＜」と「＞」とで囲んだノードのタイプ名のリストで表現する。例えば対応先のパターンが、
＜．．．，  Ａ＜Ｂ，Ｃ，Ｄ＊＞，  ．．．＞
の場合は、ノードＡがノードＢ，Ｃ，Ｄの子ノードを持つパターンであることを示している。
【００３９】
また、パターン中には、対応ノードと呼ぶノードが必ず一つだけ存在する。入力ノードが内容を持てば、その内容がコピーされて対応ノードの内容になる。入力ノードが下位構造を持てば、その下位構造の変換結果である部分構造は、対応ノードの下位構造になる。この例では、タイプ名の直後に「＊」を付けることにより、対応ノードであることを表現する。
【００４０】
変換規則管理部１２内のこれらの情報は、変換規則管理ｕ／ｉ２２を用いて、ユーザが設定する。即ち、文書構造の変換を行うためには、変換前の文書クラスと変換後の文書クラスとに応じた変換規則を、予め設定しておく必要がある。
【００４１】
以上のような情報が、文書クラス管理部１１と変換規則管理部１２で管理されている状態で、ユーザは、入出力ｕ／ｉ２１を用いて、文書構造を変換すべき文書データを入力する。これにより、変換処理が開始される。以下に、各処理機能部の処理内容をフローチャートを用いて説明する。
【００４２】
図３は文書構造変換装置１０で行われる処理全体の手順を示したフローチャートである。これは、ユーザが入出力ｕ／ｉ２１を用いて、文書データの変換の指示とともに、入力文書クラス名、出力文書クラス名、及び変換対象となる入力文書データを入力した際に開始される。
〔Ｓ１〕文書パーサ１３が、入力文書データから文書構造を抽出する。具体的には、文書パーサ１３は、まず、入力文書クラス名を持つ文書クラスの定義を文書クラス管理部１１から取り出す。そして、取り出した定義にしたがって、入力文書データを解析して、入力文書データの文書構造を取り出す。この文書構造が、変換の対象となる入力文書構造となる。
〔Ｓ２〕規則要素決定部１４が、ユーザから入力された入力文書クラス名、出力文書クラス名とともに変換規則管理部１２に格納されている変換規則を取り出す。
〔Ｓ３〕規則要素決定部１４が、ルートノードをｃｕｒｒｅｎｔ  ノードとする。構造の変換処理では、入力文書構造のどれかのノードに着目し、そのノードがどういう部分構造に変換されるかを決定することを再帰的に実行することによって行われる。このとき着目するノードがｃｕｒｒｅｎｔ  ノードである。
〔Ｓ４〕取り出した変換規則に基づいて、規則要素決定部１４、部分構造作成部１５、接続位置決定部１６、及び部分構造接続部１７が連動して、文書構造の変換を行う。この処理の詳細は、図４および図５において説明する。
〔Ｓ５〕変換の終了後、文書ジェネレータ１８が、生成された文書構造をもとに出力文書クラスに適合した文書データを生成する。ユーザは、入出力ｕ／ｉ２１を用いて、この文書データを参照できる。
【００４３】
図４は文書構造の変換処理（図３のステップＳ４）の手順を示したフローチャートの前半である。この処理は、図３のステップＳ４、またはこのフローチャートの後半（図５）で示すステップＳ２１において呼び出された際に実行される。即ち、処理が開始された後は、変換の途中でこの文書構造変換の処理が、違うノードをｃｕｒｒｅｎｔ  ノードとして再帰的に呼び出される。
【００４４】
この処理が開始されるには、ｃｕｒｒｅｎｔ  ノードが特定されている必要がある。ステップＳ４から呼び出された際には、入力側の文書構造のルートノードがｃｕｒｒｅｎｔ  ノードである。また、ステップＳ２１から呼び出された際には、ステップＳ２０、またはステップＳ２３で指定されたノードがｃｕｒｒｅｎｔ  ノードである。
〔Ｓ１１〕規則要素決定部１４が、ｃｕｒｒｅｎｔ  ノードに適応できる規則要素を変換規則から見つけ出し、それをｃｕｒｒｅｎｔ  規則要素にする。この処理の詳細は、図６において説明する。
〔Ｓ１２〕部分構造作成部１５が、ｃｕｒｒｅｎｔ  規則要素の対応先のパターンにしたがって、対応先の部分構造（出力部分構造）を作成する。このときｃｕｒｒｅｎｔ  ノードが内容を持てば、その内容のコピーを作成し、出力部分構造中の対応ノードの内容とする。なお、対応ノード以外に、内容を持つべきノードが生成された場合には、そのノードには、内容を格納するための空の領域が作成される。
〔Ｓ１３〕部分構造作成部１５が、ｃｕｒｒｅｎｔ  ノードから対応ノードへのポインタを作成する。このポインタは、部分構造の接続位置の決定の際に利用される。
〔Ｓ１４〕部分構造作成部１５が、ｃｕｒｒｅｎｔ  ノードがルートノードか否かを判断する。ルートノードであればステップＳ１９（図５に示す）に進み、ルートノードでなければステップＳ１５に進む。
〔Ｓ１５〕ルートノードでないと判断された場合、作成された部分構造の接続位置を決定する。この処理の詳細は、図７において説明する。なお、この処理からステップＳ１７までの処理は、接続位置決定部１６が行う。
〔Ｓ１６〕ｃｕｒｒｅｎｔ  規則要素に接続位置の条件が定義されているか否かを判断する。接続位置の条件が定義されていなければステップＳ１８に進み、接続位置の条件が定義されていればステップＳ１７に進む。
〔Ｓ１７〕接続位置の条件が定義されていれば、接続位置の条件を満たす接続位置を決定する。この処理の詳細は、図８において説明する。
〔Ｓ１８〕部分構造接続部１７が、決定された接続位置に部分構造を接続する。この処理の詳細は、図９において説明する。
【００４５】
図５は文書構造の変換処理（図３のステップＳ４）の手順を示したフローチャートの後半である。
〔Ｓ１９〕ｃｕｒｒｅｎｔ  ノードが子ノードを持つか否かを調べる。子ノードを持たない場合、処理は終了する。このとき、この処理を呼び出した上位の構造変換プロセスがあればそこに処理が戻る。上位の構造変換プロセスがなければ、構造変換処理全体が終了する。なお、この処理からステップＳ２３までの処理は、規則要素決定部１４が行う。
〔Ｓ２０〕ｃｕｒｒｅｎｔ  ノードが子ノードを持つ場合、ｃｕｒｒｅｎｔ  ノードの長男ノードを選択する。
〔Ｓ２１〕選択したノードに対して図４、図５に示したフローチャートと同じ処理を再帰的に実行する。
〔Ｓ２２〕呼び出した処理が終了した後、選択されたｃｕｒｒｅｎｔ  ノードが弟を持つか否かを判断する。弟のノードを持たなければ、処理は終了する。このとき、この処理を呼び出した上位の構造変換プロセスがあればそこに処理が戻る。上位の構造変換プロセスがなければ、構造変換処理全体が終了する。
〔Ｓ２３〕現在のｃｕｒｒｅｎｔ  ノードが弟のノードを持つ場合には、選択されたノードの直後の弟のノードを選択し、ステップＳ２１に進む。ステップＳ２１では、このステップで選択したノードをｃｕｒｒｅｎｔ  ノードとして、構造変換プロセスが再帰的に呼び出される。
【００４６】
図６は、規則要素決定部１４で行われるｃｕｒｒｅｎｔ  規則要素決定処理（図４のステップＳ１１）の手順を示したフローチャートである。
〔Ｓ３１〕変換規則の最初の規則要素を選択する。
〔Ｓ３２〕選択した規則要素の対応元の条件に、ｃｕｒｒｅｎｔ  ノードがマッチするか否かを判断する。マッチする場合にはステップＳ３３に進み、マッチしない場合にはステップＳ３４に進む。
〔Ｓ３３〕対応元の条件にマッチしたら、マッチした規則要素をｃｕｒｒｅｎｔ  規則要素としてこの処理を終了する。
〔Ｓ３４〕対応元の条件にマッチしない場合には、次の規則要素が変換規則中に存在するか否かを判断する。次の規則要素が存在すればステップＳ３５に進み、次の規則要素が存在しなければ、エラー終了となる。
〔Ｓ３５〕次の規則要素が存在する場合には、その規則要素を選択し、ｃｕｒｒｅｎｔ  ノードが選択した規則要素の対応元の条件にマッチするか否かの判断のステップＳ３２に戻る。
【００４７】
次に、接続位置の決定処理の詳細を説明する。この例では、ｃｕｒｒｅｎｔ  規則要素に接続位置の条件が定義されていない場合には、以下のような条件に従って、接続位置を決定する。
【００４８】
ｃｕｒｒｅｎｔ  ノードが兄をもたなければ、ｃｕｒｒｅｎｔ  ノードの親ノードの対応ノードを接続位置とする。一方、ｃｕｒｒｅｎｔ  ノードが兄を持つ場合には、兄に対応する部分構造の論理順序順で最後尾のノードの親ノードを接続位置とする。ここで、論理順序順で最後尾とは、部分構造の最後尾の木のルートの末子の末子の．．．と選んでいった場合の最後のノードである。
【００４９】
なお、接続位置の条件が定義されている場合には、ここで決めた接続位置が、接続位置の探索の起点として使用される。
図７は、接続位置決定部１６で行われる部分構造の接続位置の決定処理（図４のステップＳ１５）の手順を示したフローチャートである。
〔Ｓ４１〕ｃｕｒｒｅｎｔ  ノードの親ノードの対応ノードを接続位置にする。なお、親ノードの対応ノードは、その親ノードに対して作成されたポインタによって示されている。
〔Ｓ４２〕ｃｕｒｒｅｎｔ  ノードが兄を持つか否かを判断する。兄を持っていればステップＳ４３に進み、兄をもたなければ接続位置の決定を終了する。
【００５０】
兄を持つ場合以下のステップＳ４３〜ステップＳ４５の処理により、直接の兄に対応して作成された部分構造の論理順序順で最後尾のノードを求める。図４、図５の手順から、直接の兄に対応する部分構造は、ｃｕｒｒｅｎｔ  ノードの親ノードの対応ノードの下位に接続済みである。従って、直接の兄に対応して作成された部分構造の論理順序順で最後尾のノードは、ｃｕｒｒｅｎｔ  ノードの親ノードの対応ノードから辿ることができる。
〔Ｓ４３〕接続位置の末子が子ノードを持つかどうかを判断する。末子が子ノードを持てばステップＳ４４に進み、末子が子ノードを持たなければ、接続位置の決定は終了する。
〔Ｓ４４〕末子が子ノードを持つならば、その末子がｃｕｒｒｅｎｔ  ノードの直接の兄の対応ノードか否かを判断する。末子がｃｕｒｒｅｎｔ  ノードの直接の兄の対応ノードであれば、接続位置の決定は終了する（ｃｕｒｒｅｎｔ  ノードの直接の兄の対応ノード以下のノードが接続位置になることはない）。末子がｃｕｒｒｅｎｔ  ノードの直接の兄の対応ノードでなければ、ステップＳ４５に進む。
〔Ｓ４５〕末子がｃｕｒｒｅｎｔ  ノードの直接の兄の対応ノードでなければ、その末子を接続位置とし、接続位置の末子が子ノードを持つかどうかのチェックに戻る。
【００５１】
図７の処理によりｃｕｒｒｅｎｔ  規則要素中に接続位置の条件が規定されていない場合の接続位置が決定する。
ｃｕｒｒｅｎｔ  規則要素中に接続位置の条件が規定されている場合、部分構造の接続位置は、図７の手順で決まった接続位置と、ｃｕｒｒｅｎｔ  ノードの親ノードの対応ノードを結ぶパス上のどこかである。つまり、ｃｕｒｒｅｎｔ  ノードの親ノードの対応ノードより上位のノードに接続することはない。なぜなら、これより上位に接続すると、入力文書構造で規定されていたノードの包含関係を満たさなくなるからである。
【００５２】
図８はｃｕｒｒｅｎｔ  規則要素中に接続位置の条件が規定されている場合の、部分構造の接続位置の決定処理（図４のステップＳ１７）の手順を示したフローチャートである。この処理は、接続位置決定部１６が行う。
〔Ｓ５１〕現在の接続位置がｃｕｒｒｅｎｔ  規則要素中の接続位置の条件を満たすか否かを判断する。接続位置の条件を満たす場合には処理を終了し、接続位置の条件を満たさない場合にはステップＳ５２に進む。
〔Ｓ５２〕接続位置の条件を満たさない場合、接続位置がｃｕｒｒｅｎｔ  ノードの親ノードの対応ノードか否かを判断する。接続位置がｃｕｒｒｅｎｔ  ノードの親ノードの対応ノードである場合、接続位置の条件を満たす接続位置が見つからなかったのでエラー終了となる。接続位置がｃｕｒｒｅｎｔ  ノードの親ノードの対応ノードでなければ、ステップＳ５３に進む。
〔Ｓ５３〕接続位置の親ノードを接続位置にし、接続位置の条件を満たすかどうかのチェックに戻る。
【００５３】
図７、図８の処理により、部分構造の接続位置が決定する。そして、決定した接続位置にｃｕｒｒｅｎｔ  ノードに対応して作成された部分構造が接続される。この際、木の列である部分構造は、その木の列のルートノード同士が、同じノードの兄弟ノードになるように接続される。その兄弟ノードの親ノードが部分構造の接続位置である。
【００５４】
図９は、部分構造の接続処理（図４のステップＳ１８）の手順を示したフローチャートである。
〔Ｓ６１〕部分構造が空列か否かを判断する。空列であれば処理を終了し、空列でなければステップＳ６２に進む。
〔Ｓ６２〕空列でなければ、部分構造の先頭の木を選択する。
〔Ｓ６３〕選択した木のルートノードを接続位置の末子として接続する。
〔Ｓ６４〕部分構造中に次の木が存在するかどうかが調べられる。存在しなけれ、処理は終了する。
〔Ｓ６５〕次の木が存在すれば、その木を選択し、選択した木の接続に戻る。
【００５５】
以上のような処理を図２に示した文書構造変換装置１０が行うことにより、文書構造変換装置に入力された文書データの構造が、他の文書タイプに従った文書構造に変換される。しかも、新たな文書構造には、変換前の文書構造に含まれないノードを付加することができる。
【００５６】
次に、上記のような文書構造変換装置を用いた文書構造の変換を、具体例を用いて説明する。以下の例では、「技術メモ」という名の文書クラスの文書データの構造を、「Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ」という文書クラス名の文書クラスに変換する場合である。
【００５７】
文書クラス管理部１１は、「技術メモ」という文書クラス名の文書クラスと、「Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ」という文書クラス名の文書クラスの文書クラス定義を記憶している。
【００５８】
「技術メモ」という文書クラスは、以下のようなタイプ定義を含んでいる。
タイプ名：技術メモ  内容型：内容を持たない
タイプ名：文頭      内容型：内容を持たない
タイプ名：表題      内容型：文字列
タイプ名：著者      内容型：文字列
タイプ名：見出し    内容型：文字列
タイプ名：段落      内容型：文字列
図１０は「技術メモ」の構造制約を示す図である。この構造制約３１によると、ルートノードのタイプ名は「技術メモ」である。「技術メモ」のノードには、構造制約子「ＳＥＱ」により二つの枝が設けられている。一方の枝には「文頭」のノードが接続されている。他方の枝には、構造制約子「ＲＥＰ」及び「ＳＥＱ」により、「見出し」と「段落」のノードが接続されている。「文頭」のノードには、構造制約子「ＳＥＱ」により二つの枝が設けられている。それぞれの枝には、「表題」のノードと「著者」のノードとが接続されている。
【００５９】
一方、「Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ」という文書クラスは、以下のようなタイプ定義を含んでいる。
タイプ名：Ｒｅｐｏｒｔ            内容型：内容を持たない
タイプ名：Ｈｅａｄｅｒ            内容型：内容を持たない
タイプ名：Ｒｅｐｏｒｔ−Ｔｉｔｌｅ      内容型：文字列
タイプ名：Ａｕｔｈｏｒ            内容型：文字列
タイプ名：Ｒｅｖｉｓｉｏｎ−Ｄａｔｅｓ  内容型：内容を持たない
タイプ名：Ｄａｔｅ              内容型：文字列
タイプ名：Ｓｅｃｔｉｏｎ                  内容型：内容を持たない
タイプ名：Ｔｉｔｌｅ                      内容型：文字列
タイプ名：Ｐａｒａｇｒａｐｈ              内容型：文字列
図１１は「Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ」の構造制約を示す図である。この構造制約３２によると、ルートノードのタイプ名は「Ｒｅｐｏｒｔ」である。「Ｒｅｐｏｒｔ」のノードには、構造制約子「ＳＥＱ」により二つの枝が設けられている。一方の枝には「Ｈｅａｄｅｒ」のノードが接続されている。他方の枝には、「Ｓｅｃｔｉｏｎ  」のノードが接続さされている。
【００６０】
「Ｈｅａｄｅｒ」のノードには、構造制約子「ＳＥＱ」により三つの枝が設けられており、それぞれの枝には、「Ｒｅｐｏｒｔ−Ｔｉｔｌｅ」、「Ａｕｔｈｏｒ」、「Ｒｅｖｉｓｉｏｎ−ｄａｔｅ  」のノードが接続されている。「Ｒｅｖｉｓｉｏｎ−ｄａｔｅ  」のノードには、さらに構造制約子「ＲＥＰ」により「Ｄａｔｅ」のノードが接続されている。
【００６１】
「Ｓｅｃｔｉｏｎ  」のノードには、構造制約子「ＳＥＱ」により三つの枝が設けられている。最初の枝には「Ｔｉｔｌｅ  」のノードが接続されている。次の枝には構造制約子「ＲＥＰ」により「Ｐａｒａｇｒａｐｈ  」のノードが接続されている。３つめの枝は、構造制約子「ＯＰＴ」および「ＲＥＰ」により、自己のノード（「Ｓｅｃｔｉｏｎ  」のノード）に接続されている。
【００６２】
図１０と図１１とを比較すると、図１１の方が構成要素として存在するノードが数が多い。従って、「技術メモ」の文書クラスの文書を、「Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ」の文書クラスの文書に変換する際に、各ノード間の１対１の関係のみを定義しても、「Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ」の文書クラスの文書を正しく作成することができないことが分かる。そこで、次のような変換規則を変換規則管理部１２に格納する。
【００６３】
図１２は、変換規則管理部に格納されている変換規則の例である。この変換規則３３は、「技術メモ」の文書クラスの文書を、「Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ」の文書クラスの文書に変換するためのものであり、入力文書クラス名：「技術メモ」、出力文書クラス名：「Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ」とともに格納されている。
【００６４】
この変換規則３３には、以下のような規則が定義されている。
”タイプが「技術メモ」”の対応元の条件に対しては、接続位置の条件は”なし”であり、対応先のパターンは”＜Ｒｅｐｏｒｔ＊＞  ”である。
【００６５】
”タイプが「文頭」”の対応元の条件に対しては、接続位置の条件は”なし”であり、対応先のパターンは”＜Ｈｅａｄｅｒ＊＞  ”である。
”タイプが「表題」”の対応元の条件に対しては、接続位置の条件は”なし”であり、対応先のパターンは”＜Ｒｅｐｏｒｔ−Ｔｉｔｌｅ＊＞  ”である。
【００６６】
”タイプが「著者」”の対応元の条件に対しては、接続位置の条件は”なし”であり、対応先のパターンは”＜Ａｕｔｈｏｒ＊，Ｒｅｖｉｓｉｏｎ−Ｄａｔｅｓ＜Ｄａｔｅ＞＞”である。
”タイプが「見出し」で内容に「第＊章」のパターンの文字列を持つもの”の対応元の条件に対しては、接続位置の条件は”タイプ名が「Ｒｅｐｏｒｔ」”であり、対応先のパターンは”＜Ｓｅｃｔｉｏｎ＜Ｔｉｔｌｅ＊＞＞  ”である。
【００６７】
”タイプが「見出し」で内容に「第＊節」のパターンの文字列を持つもの”の対応元の条件に対しては、接続位置の条件は”タイプ名が「Ｓｅｃｔｉｏｎ  」であり親ノードのタイプが「Ｒｅｐｏｒｔ」であるもの”であり、対応先のパターンは”＜Ｓｅｃｔｉｏｎ＜Ｔｉｔｌｅ＊＞＞  ”である。
【００６８】
”タイプが「見出し」で内容に「第＊項」のパターンの文字列を持つもの”の対応元の条件に対しては、接続位置の条件は”タイプ名が「Ｓｅｃｔｉｏｎ  」であり祖父ノードのタイプが「Ｒｅｐｏｒｔ」であるもの”であり、対応先のパターンは”＜Ｓｅｃｔｉｏｎ＜Ｔｉｔｌｅ＊＞＞  ”である。
【００６９】
“タイプが「段落」”の対応元の条件に対しては、接続位置の条件は“なし”であり、対応先のパターンは“＜Ｐａｒａｇｒａｐｈ＊＞”である。”
以上    のような定義と変換規則が設定されている状態で、ユーザは、入出力ｕ／ｉ２１を用いて「技術メモ」の文書クラスの文書データを入力する。そのデータは、文書パーサ１３で構造が解析される。
【００７０】
図１３は文書パーサ１３によって抽出された文書構造４０の例である。図１３において、楕円で囲まれているのがノードであり、楕円中の文字列はノードのタイプを示している。また、ノードに接続された長方形の中の文字列が、そのノードの持つ内容である。
【００７１】
この図は、「技術メモ」の文書クラスの文書構造４０である。この文書構造は、「技術メモ」のノードがルートノードである。このルートノードの子は、「文頭１」、「見出し１」、「段落１」、「段落２」、「見出し２」、「段落３」、「見出し３」、及び「段落４」のノードである。ルートノードの子の中で「文頭１」のノード以外のノードは内容を持っている。「文頭１」のノードの子は、「表題１」と「著者１」のノードである。「表題１」と「著者１」とのノードは内容を持っている。
【００７２】
このような文書構造が抽出されると、規則要素決定部１４において、各ノードに適用すべき規則要素が決定される。規則要素が決定すると、その規則要素に示されている対応先のパターンに従って、部分構造が作成される。
【００７３】
例えば、図１３の「著者１」のノードの規則要素は、図１２の４行目に示された”タイプが「著者」”の対応元条件に合致する。従って、”＜Ａｕｔｈｏｒ＊，Ｒｅｖｉｓｉｏｎ−Ｄａｔｅｓ＜Ｄａｔｅ＞＞”で示された対応先パターンに従って、部分構造が作成される。
【００７４】
図１４は「著者１」のノードから作成される部分構造である。「著者１」のノードからは、二つの部分構造４１，４２が作成される。作成された部分構造４１，４２は、列を成しており、この例では部分構造４１が先頭である。
【００７５】
部分構造４１は、「Ａｕｔｈｏｒ１  」のノードである。「Ａｕｔｈｏｒ１  」のノードは対応ノードであるため、「著者１」の持っていた内容を引き継いでいる。部分構造４２は、「Ｒｅｖｉｓｉｏｎ−Ｄａｔｅｓ１  」のノードと、そのノードの子である「Ｄａｔｅ１  」のノードで構成されている。「Ｄａｔｅ１  」は、内容を持つノードであるため、内容を格納するための領域が設けられている。
【００７６】
また、図１３の「見出し１」のノードの規則要素は、図１２の５行目に示された”タイプが「見出し」で内容に「第＊章」のパターンの文字列を持つもの”の対応元条件に合致する。従って、”＜Ｓｅｃｔｉｏｎ＜Ｔｉｔｌｅ＊＞＞  ”で示された対応先のパターンに従って部分構造が作成される。
【００７７】
図１５は「見出し１」のノードから作成される部分構造である。「見出し１」のノードからは、部分構造４３が作成される。この部分構造４３は、「Ｓｅｃｔｉｏｎ１」のノードと、そのノードの子である「Ｔｉｔｌｅ１」のノードで構成されている。「Ｔｉｔｌｅ１」のノードは対応ノードであるため、「見出し１」が持っていた内容を引き継いでいる。
【００７８】
同様にして、図１３に示した文書構造内の全てのノードに対応する部分構造が作成される。そして、部分構造が作成される度に、それ以前に作成されている部分構造に対する接続位置が決定され、その位置に接続される。
【００７９】
図１６は、部分構造の接続位置の探索状況を示す図である。この例は、図１３の「見出し３」のノードから作成された部分構造４５の接続位置の探索状況である。部分構造４５が作成される前に、既に、「技術メモ」のノード、「見出し３」のノードの兄にあたるノード、及び兄にあたるノードの子のノードから作成された部分構造は接続されている。従って、既に接続されている部分構造によって、文書構造４４が形成されている。この文書構造４４の所定の位置に接続位置が決定される。
【００８０】
「見出し３」のノードは、図１２の変換規則の５行目に示された規則要素が適用される。この規則要素には、接続位置の条件が”タイプが「Ｒｅｐｏｒｔ」”と示されている。この場合、まず接続位置の条件が”なし”の場合の接続位置が探索される。すると、「Ｓｅｃｔｉｏｎ２」のノードが接続位置となる。従って、「Ｒｅｐｏｒｔ１  」のノード（「見出し３」のノードの親のノードの対応ノード）から「Ｓｅｃｔｉｏｎ２」のノードまでの経路のどこかに、接続位置の条件を満たす接続位置がなければならない。
【００８１】
そこで、接続位置の条件にマッチするノードを現在の接続位置から上に向かって調べていく。即ち、「Ｓｅｃｔｉｏｎ２」のノード、「Ｓｅｃｔｉｏｎ１」のノード、「Ｒｅｐｏｒｔ１  」のノードの順で、接続位置の条件を満たすか否かが検討される。その結果、「Ｒｅｐｏｒｔ１  」のノードが接続位置の条件を満たしていることが分かり、その位置が接続位置として決定される。そして、決定された接続位置であるノードの下位構造として、部分構造４５が接続される。
【００８２】
図１７は変換後の文書構造を示す図である。変換後の文書構造５０は、「Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ」の文書クラスの定義に従った文書構造となっている。この文書構造から、文書ジェネレータ１８が、変換結果の文書データを作成する。その文書データを、ユーザは入出力ｕ／ｉ２１を用いて参照することができる。
【００８３】
【発明の効果】
以上説明したように本発明の文書構造変換装置では、変換規則管理手段に管理されている木構造の列によって表される部分構造に変換されるかを示す変換パターンに従って、部分構造作成手段が第１の文書構造の各ノードの部分構造を作成し、部分構造接続手段が作成された部分構造を接続することにより、第２の文書構造を生成するようにしたため、変換パターンとして、ノードが第２の文書構造中でどのようなノードに変換されるかだけでなく、その近傍で補われなければならないノードについても変換規則に記述することにより、第２の文書クラスの制約上必要なノードや部分木を補った文書構造の変換が可能となる。従って、ノードや部分木を容易に補うことができる。
【００８４】
また、本発明の文書構造変換方法では、木構造の列によって表される部分構造に変換されるかを示す変換パターンに従って、部分構造作成手段が第１の文書構造の各ノードの部分構造を作成し、作成された部分構造を接続することにより第２の文書構造を生成するようにしたため、変換パターンとして、ノードが第２の文書構造中でどのようなノードに変換されるかだけでなく、その近傍で補われなければならないノードについても変換規則に記述することにより、第２の文書クラスの制約上必要なノードや部分木を補った文書構造の変換が容易となる。
【図面の簡単な説明】
【図１】本発明の原理構成図である。
【図２】本発明を適用する文書構造変換装置の概略構成を示すブロック図である。
【図３】文書構造変換装置で行われる処理全体の手順を示したフローチャートである。
【図４】文書構造の変換処理の手順を示したフローチャートの前半である。
【図５】文書構造の変換処理の手順を示したフローチャートの後半である。
【図６】規則要素決定部で行われるｃｕｒｒｅｎｔ  規則要素決定処理の手順を示したフローチャートである。
【図７】接続位置決定部で行われる部分構造の接続位置の決定処理の手順を示したフローチャートである。
【図８】ｃｕｒｒｅｎｔ  規則要素中に接続位置の条件が規定されている場合の、部分構造の接続位置の決定処理の手順を示したフローチャートである。
【図９】部分構造の接続処理の手順を示したフローチャートである。
【図１０】「技術メモ」の構造制約を示す図である。
【図１１】「Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ」の構造制約を示す図である。
【図１２】変換規則管理部に格納されている変換規則の例である。
【図１３】文書パーサによって抽出された文書構造の例である。
【図１４】「著者１」のノードから作成される部分構造である。
【図１５】「見出し１」のノードから作成される部分構造である。
【図１６】部分構造の接続位置の探索状況を示す図である。
【図１７】変換後の文書構造を示す図である。
【符号の説明】
１  変換規則管理手段
１ａ  変換規則
２  第１の文書構造
３  規則要素決定手段
４  部分構造作成手段
４ａ  部分構造
５  接続位置決定手段
６  部分構造接続手段
６ａ  作成過程の文書構造
７  第２の文書構造
【図１】
0003617192.tif 000002
【図２】
0003617192.tif 000003
【図３】
0003617192.tif 000004
【図４】
0003617192.tif 000005
【図５】
0003617192.tif 000006
【図６】
0003617192.tif 000007
【図７】
0003617192.tif 000008
【図８】
0003617192.tif 000009
【図９】
0003617192.tif 000010
【図１０】
0003617192.tif 000011
【図１１】
0003617192.tif 000012
【図１２】
0003617192.tif 000013
【図１３】
0003617192.tif 000014
【図１４】
0003617192.tif 000015
【図１５】
0003617192.tif 000016
【図１６】
0003617192.tif 000017
【図１７】
0003617192.tif 000018