まず、従来の探索手法を用いた場合における番号付与について説明する。図25は、業務フロー図の一例を示す図である。同図に示した業務フロー図11は、ノードへの番号付与が行われていない業務フロー図であり、開始ノード21と、終了ノード22と、業務プロセス23a〜23fと、分岐ノード24と、合流ノード25と、遷移31a〜31jとを有している。
開始ノード21は、業務の流れの起点を表すノードであり、終了ノード22は、業務の流れの終点を表すノードである。業務プロセス23a〜23fは、業務に含まれるプロセスを表すノードであり、それぞれ、「業務プロセスA」〜「業務プロセスF」という名前を与えられている。分岐ノード24は、所定の条件に従って業務の流れが分岐する箇所を示すノードであり、合流ノード25は、分岐した業務の流れが合流する箇所を示すノードである。
遷移31a〜31jは、業務の流れを示すために各ノード間を接続する矢印に相当する遷移オブジェクトである。具体的には、遷移31aは、開始ノード21から業務プロセス23aへ向かう流れを示す遷移オブジェクトであり、遷移31bは、業務プロセス23aから業務プロセス23bへ向かう流れを示す遷移オブジェクトであり、遷移31cは、業務プロセス23bから分岐ノード24へ向かう流れを示す遷移オブジェクトである。
また、遷移31dは、「条件a」が満たされるときに、分岐ノード24から業務プロセス23cへ向かう流れを示す遷移オブジェクトであり、遷移31eは、「条件b」が満たされるときに、分岐ノード24から業務プロセス23dへ向かう流れを示す遷移オブジェクトであり、遷移31gは、業務プロセス23dから業務プロセス23eへ向かう流れを示す遷移オブジェクトである。
また、遷移31fは、業務プロセス23cから合流ノード25へ向かう流れを示す遷移オブジェクトであり、遷移31hは、業務プロセス23eから合流ノード25へ向かう流れを示す遷移オブジェクトであり、遷移31iは、合流ノード25から業務プロセス23fへ向かう流れを示す遷移オブジェクトであり、遷移31jは、業務プロセス23fから終了ノード22へ向かう流れを示す遷移オブジェクトである。
図26は、従来の探索手法を用いて番号を付与した業務フロー図の一例を示す図である。同図に示した業務フロー図12は、既知の探索手法である深さ優先探索を用いて図25に示した業務フロー図11を探索しながらノードに番号を付与したものである。業務フロー図12においては、業務プロセス23a〜23f内の名前の前に、付与された番号が表示されている。
深さ優先探索は、どのノードを訪問したかを記録しながら、起点となるノードから深さ方向(起点から遠い方向)へ向けてノードを訪問していき、終端のノードに達した場合に、訪問済みのノードから分岐している未訪問のノードのうち最も近いノードから探索を再開するという探索手法である。この深さ優先探索を用いて、フローチャート内のノードを探索しながら、初めて訪問したノードに連番を付与していくことにより、フローチャート内の全てのノードに漏れなく番号を付与することができる。
しかしながら、深さ優先探索では、フローチャート中に分岐が存在した場合にどの経路を先に探索するかが無作為に決定されるため、必ずしもノードに適切な番号を付与することができない。例えば、図26に示した業務フロー図12では、左下の業務プロセス23cへ向かう経路と、右下の業務プロセス23dへ向かう経路とに分岐する分岐ノード24が存在しているが、たまたま後者の経路が先に探索されているため、業務プロセス23dの方が、業務プロセス23cよりも若い番号を付与されている。一般に、このような縦型のフローチャートにおいては、利用者が流れを理解し易いように、左側の経路に若い番号が付与されていることが好ましいが、業務フロー図12では逆になってしまっている。
また、深さ優先探索では、フローチャート中に分岐が存在し、ある経路が選択された場合、その経路の終端までの探索が完了するまで他の経路の探索は行われない。そのため、分岐の合流部分よりも先のノードに、分岐の手前のノードよりも若い番号が付与されてしまう。例えば、図26に示した業務フロー図12では、合流ノード25の先にある業務プロセス23fの方が、合流ノード25の手前の業務プロセス23cよりも若い番号を付与されている。一般に、このような縦型のフローチャートにおいては、利用者が流れを理解し易いように、同一系路上のノード間では起点に近いノードほど若い番号が付与されていることが好ましいが、業務プロセス23cと業務プロセス23fにおいては、番号の大小関係が逆になってしまっている。
このように、単純に深さ優先探索を用いてノードに番号を付与する手法では、利用者が流れを理解し易いように、適切な順序の番号をノードに付与することができない。
次に、本実施例に係る番号付与方法について説明する。本実施例に係る番号付与方法は、深さ優先探索を改善した方式でフローチャート内のノードを探索し、連番を付与していく。具体的には、本実施例に係る番号付与方法は、フローチャート中に分岐が存在した場合、分岐先の各ノードの表示位置を比較してどの経路を先に探索するかを決定する。また、本実施例に係る番号付与方法は、フローチャート中に合流箇所が存在した場合、その合流箇所へ到達する全ての経路が探索されるまで、合流箇所から先の探索を遅延させる。
図1は、本実施例に係る番号付与方法を用いて番号を付与した業務フロー図の一例を示す図である。同図に示した業務フロー図13は、本実施例に係る番号付与方法を用いて図25に示した業務フロー図11の各ノードに番号を付与したものである。業務フロー図13においては、業務プロセス23a〜23f内の名前の前に、付与された番号が表示されている。
業務フロー図13においては、分岐ノード24の左下の業務プロセス23cの方が、右下の業務プロセス23dよりも若い番号を付与されており、利用者が流れを理解し易くなっている。これは、分岐先のノードの表示位置を比較した結果に基づいて、ノードが左寄りに存在する経路が先に探索すべき経路として選択されているためである。
また、業務フロー図13においては、合流ノード25の手前に存在する業務プロセス23c〜23eの方が、合流ノード25の先に存在する業務プロセス23fよりも若い番号を付与されており、利用者が流れを理解し易くなっている。これは、合流ノード25へ到達する全ての経路の探索が完了するのを待ち合わせてから合流ノード25から先の探索が行われているためである。
なお、本実施例に係る番号付与方法は、フローチャート中に分岐が存在した場合に、分岐先の各ノードの表示位置をどのように比較して、その結果に基づいてどの経路を先に探索するかをフローチャートの向きによって変更する。具体的には、フローチャートの向きが縦向きの場合、図1に示したように、分岐先のノードの位置が左寄りである経路ほど先に探索される。また、フローチャートの向きが横向きの場合、図2に示したように、分岐先のノードの位置が上寄りである経路ほど先に探索される。なお、ここで説明したノードの位置と経路探索の優先順位の関係は一例であり、フローチャートの種類等に応じて変更することとしてもよい。
また、本実施例に係る番号付与方法は、ノードと関連する情報が他の文書においてどこに存在しているかを示す情報を番号とともに表示させることもできる。例えば、内部統制を目的として業務フロー図を作成する場合、業務フロー図に含まれる業務プロセスにおいて発生するリスクも業務フロー図に記載される。そして、業務フロー図に含まれる各業務プロセスとそこで発生するリスクの詳細を示すRCM(Risk Control Matrix)と呼ばれる一覧表が別途作成され、業務フロー図とRCMを対にして参照しながら監査等の作業が行われる。このため、業務フロー図に含まれる業務プロセスに関する情報がRCMのどこに存在しているかを容易に知ることができる手掛かりが業務フロー図中に表示されていることが好ましい。そこで、本実施例に係る番号付与方法は、例えば、ノードと関連する情報が他の文書においてどのページに存在しているかを示すページ番号を、ノードを識別するための番号とともに表示させることができる。
図3−1は、本実施例に係る番号付与方法を用いてページ番号付の番号を付した業務フロー図の一例を示す図であり、図3−2は、業務フロー図と関連する文書の一例を示す図である。図3−1に示した業務フロー図15は、本実施例に係る番号付与方法を用いて図25に示した業務フロー図11の各ノードにページ番号付の番号を付与したものである。業務フロー図15においては、業務プロセス23a〜23f内の名前の前に、図3−2に示した文書においてその業務プロセスの情報が表示されているページのページ番号と、その業務プロセスに付与された番号が表示されている。例えば、「業務プロセスD」という業務プロセス名の前に表示されている「02−04」という値は、その業務プロセスに対応する情報が、図3−2において示した文書において2ページ目に表示されており、その業務プロセスには4という番号が付与されていることを示している。
なお、図3−1の例では、ノードと関連する情報が他の文書においてどこに存在しているかを示す情報として、ページ番号を表示する例を示したが、他の文書の形式等に応じて、段落番号等を用いてノードと関連する情報が他の文書中に存在する位置を示すこととしてもよい。
次に、本実施例に係る番号付与方法を用いてフローチャートに番号を付与する番号付与装置100について説明する。図4は、番号付与装置100の構成を示す機能ブロック図である。同図に示すように、番号付与装置100は、記憶部110と、制御部120とを有する。記憶部110は、各種情報を記憶する記憶部であり、構成要素情報111と、図形情報112と、書式情報113と、フォント情報114等を記憶する。
構成要素情報111および図形情報112は、業務フロー図を実現するための情報であり、例えば、業務フロー図の編集装置によって編集され、記憶部110に格納される。構成要素情報111は、業務フロー図に含まれる各種要素の論理的な情報を含む。構成要素情報111のモデルを表すクラス図を図5に示す。同図に示すように、構成要素情報111のモデルの最上位には、の業務フロー図に対応する業務フロー41があり、業務フロー41には、ノード42と、遷移43とが含まれる。
ノード42は、業務フロー図に含まれる各種ノードに相当し、type、id、name、outgoing、incomoingといった属性を有する。typeは、そのノードの種別であり、idは、そのノードを識別するための識別番号である。nameは、そのノードの名称であり、ノードが業務プロセスの場合、この属性の値が業務フロー図においてその業務フローの名称として表示される。outgoingは、そのノードから先のノードへ続いている遷移のidのリストであり、incomoingは、そのノードへ続いている遷移のidのリストである。
遷移43は、ノード間の流れを示す矢印に相当し、type、id、source、targetといった属性を有する。typeは、その遷移の種別であり、idは、その遷移を識別するための識別番号である。sourceは、その遷移が接続しているノードのうち起点に近いノードのidであり、targetは、その遷移が接続しているノードのうち起点から遠いノードのidである。
ノード42は、サブフロー44と、制御ノード45と、業務プロセス46とに分類される。サブフロー44は、入れ子関係にある他の業務フロー図を示すノードである。業務フロー図が大規模になった場合、業務フロー図の一部を抜き出して別の業務フロー図とし、元の業務フロー図において抜き出された業務フローが存在していた箇所に、抜き出した別の業務フロー図へのリンクを示すノードを表示しておくことがあるが、サブフロー44は、そのリンクを示すノードに相当する。
制御ノード45は、業務フロー図において流れを制御するために配置されるノードであり、開始45aと、終了45bと、条件分岐45cと、並列分岐45dとにさらに分類される。開始45aは、業務フロー図の起点を表す情報であり、終了45bは、業務フロー図の終点を表す情報である。条件分岐45cは、条件分岐する箇所、もしくは、条件分岐した流れが合流する箇所を表す情報であり、並列分岐45dは、並列分岐する箇所、もしくは、並列分岐した流れが合流する箇所を表す情報である。
業務プロセス46は、業務を構成する個別のプロセスを表すノードである。業務プロセス46は、複数の属性46aを含むことができる。属性46aは、業務プロセス46の詳細を示す情報であり、情報の種別を示すidや、情報の内容を示すvalueといった属性を有する。
図6は、構成要素情報111の一例を示す図である。同図に示した情報は、図5に示したモデルに従って、図1に示した業務フロー図13の各要素をXML(Extensible Markup Language)形式で表現したものであり、flowEdgeタグが遷移43に相当し、flowNodeタグがノード42に相当する。また、タグ中のアトリビュートが、遷移43もしくはノード42の属性に相当する。
例えば、idのアトリビュートの値が「edge01」であるflowEdgeタグは、sourceのアトリビュートの値が「node00」、targetのアトリビュートの値が「node01」となっている。これは、このタグが表す遷移が、「node00」というidをもつノードから「node01」というidをもつノードへつながる流れを表すものであることを示している。
また、idのアトリビュートの値が「node101」であるflowNodeタグは、typeの値が「条件分岐」、incomingのアトリビュートの値が「edge03」、outgoingのアトリビュートの値が「edge04、edge05」となっている。これは、このタグが表すノードが、条件分岐45cに分類されるノードであり、「edge03」というidをもつ遷移によって直前のノードと接続され、「edge04」というidをもつ遷移と「edge05」というidをもつ遷移によって直後のノードと接続されていることを示している。
ノードを表すタグにおいてincomingとoutgoingに設定される遷移のidの数は、通常は1つであるが、上記の例のように、ノードの種別により異なることがある。例えば、開始45aに分類されるノードを表すタグでは、そのノード以前のノードが存在しないため、incomingは空になる。また、条件分岐45cに分類されるノードを表すタグの場合、そのノードが分岐を表すノードであれば、outgoingに複数のidが設定され、そのノードが合流を表すノードであれば、incomingに複数のidが設定される。
なお、図6に示した構成要素情報111の例では、業務プロセスを表す各タグに属性を表すタグが1つずつしか含まれていないが、業務プロセスを表すタグは、属性を表すタグを複数含むことができる。例えば、番号の付与が完了した後には、付与された番号を保持するための属性を表すタグが、業務プロセスを表す各タグに追加される。また、構成要素情報111は、必ずしもXML形式である必要はなく、業務フロー図を編集するツールが出力するのに適した形式であってよい。
構成要素情報111は、制御部120によって記憶部110から読み出され、メモリ(図示せず)上に展開された状態で番号付与処理が適用される。メモリ上に展開された構成要素情報111のイメージの一例を図7に示す。同図に示すように、メモリ上に展開された構成要素情報111は、ノードを表す要素や遷移を表す要素が業務フロー図単位でまとまった状態で管理される。なお、図7は、図6に示した構成要素情報111がメモリ上に展開された例を示しており、各要素に、図1に示した業務フロー図13中の対応する要素の符号を付している。
図形情報112は、業務フロー図に含まれる各種要素を図示するための情報を含む。図形情報112のモデルを表すクラス図を図8に示す。同図に示すように、図形情報112のモデルの最上位には、1つの業務フロー図に対応する業務フロー51があり、業務フロー51には、図形情報52が含まれる。
図形情報52は、業務フロー図に含まれるノードもしくは遷移と1対1で対応し、type、id、といった属性を有する。typeは、図示する図形の種別であり、idは、対応するノードもしくは遷移のidである。また、図形情報52は、複数の接続ポイント52aを含むことができる。接続ポイント52aは、ノードと遷移の接続箇所の座標を示す情報であり、接続箇所のX座標を示すRxや、Y座標を示すRyといった属性を有する。
図形情報52は、矩形情報53と線情報54に分類される。矩形情報53は、ノードを表す矩形等を図示するための情報であり、図形情報52が共通にもつ属性に加えて、PinXやPinYといった属性をさらに有する。PinXとPinYは、それぞれ、矩形等の中心のX座標とY座標を示す。線情報54は、遷移を表す矢印等を図示するための情報であり、図形情報52が共通にもつ属性に加えて、BeginX、BeginY、EndX、EndYといった属性をさらに有する。BeginXとBeginYは、それぞれ、矢印等の起点のX座標とY座標を示し、EndXとEndYは、それぞれ、矢印等の終点のX座標とY座標を示す。
図形情報52は、例えば、図6に示したようなXML形式のデータとして記憶部110に記憶される。そして、番号付与処理のために、制御部120によって記憶部110から読み出され、メモリ(図示せず)上に展開される。メモリ上に展開された図形情報52のイメージの一例を図9に示す。同図に示すように、メモリ上に展開された図形情報52は、ノードや遷移を図示するための要素が業務フロー図単位でまとまった状態で管理される。なお、図9は、図1に示した業務フロー図を図示するための図形情報52がメモリ上に展開された例を示しており、各要素に、図1に示した業務フロー図13中の対応する要素の符号を付している。
図4の説明に戻って、書式情報113は、業務フロー図と関連する他の文書の出力形式に関する情報を含む。書式情報113の一例を図10に示す。同図に示した書式情報113の例は、図3−2に示した一覧表を表示するためのものであり、属性名、出力カラム位置、カラム長、フォント名、フォントサイズといった項目を有し、一覧表のカラムごとに情報が予め登録される。
図3−2に示した一覧表は、業務プロセスごとに行が追加され、業務プロセスに含まれる属性が、対応するカラムに設定されるようになっており、属性名は、業務プロセスに含まれる属性のidに対応し、その他の項目は、属性のvalueの出力形式を示している。例えば、図10に示した例の4行目は、「業務内容」というidをもつ属性のvalueは、5番目のカラムが出力位置であり、そのカラムの幅は240であり、出力時には「ゴシック」という名のサイズ10のフォントを使用する必要があることを示している。
フォント情報114は、フォントの高さや幅といったメトリック情報をフォントの種類とサイズごとに保持する。フォント情報114の内容は、多くの情報処理システムで使用されているものと同様であるので、ここでは詳細な説明を省略する。
制御部120は、番号付与装置100を全体制御する制御部であり、方向判定部121と、フローチャート探索部122と、番号設定部123とを有する。方向判定部121は、フローチャートが縦向きであるのか横向きであるのかを判定する処理部である。具体的には、方向判定部121は、図形情報112を参照し、フローチャート中の各ノードから次のノードへ向かう遷移が縦向きに伸びているのか横向きに伸びているのかを判定し、縦向きに伸びている遷移の数が横向きに伸びている遷移の数よりも多ければフローチャートが縦向きであると判定し、さもなければ、フローチャートが横向きであると判定する。
フローチャート探索部122は、フローチャート中の各ノードを探索する処理部である。フローチャート探索部122は、基本的には、既知の探索手法である深さ優先探索に基づいてノードの探索を行うが、フローチャートの流れの理解を助けるようなナンバリングを実現するため、分岐部分では、図形情報112を参照して分岐先のノードの表示位置を比較し、その結果に基づいて先に探索すべき経路を選択する。また、分岐後の合流部分では、その合流部分へ到達する全ての経路の探索が完了するのを待ち合わせる。
図11〜17を参照しながら、図1に示した業務フロー図13中のノードを探索する場合を例にして、フローチャート探索部122の処理の詳細について説明する。フローチャート探索部122は、ノードの探索を行うためにスタック61と、訪問済みリスト62と、待合せマップ63とを用いる。スタック61は、深さ優先探索を実現するために、現在訪問中のノードの直後のノードのidがプッシュされるLIFO(Last In First Out)方式のバッファである。訪問済みリスト62は、既に訪問したノードを重複して訪問することがないように、訪問済みのノードのidを保持するリストである。待合せマップ63は、合流箇所での待ち合わせを実現するために、合流箇所に相当するノードのidと、そのノードの訪問回数が対で保持されるマップである。
深さ優先探索では、現在訪問中のノードの直後の未訪問のノードのidを全てスタックにプッシュした後、スタックからノードのidを1つポップし、そのidが示すノードを現在訪問中のノードとするという動作が、スタックが空になるまで繰り返し実行され、訪問されたノードのidが訪問リストに追加されていく。
業務フロー図13中のノードを探索する場合、まず、開始ノード21のidである「node00」がスタック61にプッシュされる。そして、スタック61から「node00」がポップされ、このidに対応する開始ノード21が現在訪問中のノードとなり、「node00」が訪問済みリスト62に追加される。
続いて、構成要素情報111を参照して、現在訪問中のノードの直後のノードのidが取得され、スタック61にプッシュされる。具体的には、idが「node00」であるノードのoutgoingに設定されている遷移のidは、「edge01」であり、この遷移のtargetに設定されているノードのidは、「node01」であるため、業務プロセス23aのidである「node01」が取得され、これがスタック61にプッシュされる。
同様の処理が繰り返され、idが「node02」である業務プロセス23bが訪問済みリストに追加された場面を図11に示す。同図に示すように、この場面では、業務プロセス23bの直後のノードである分岐ノード24のid「node101」がスタック61にプッシュされ、訪問済みリスト62には、「node00」、「node01」、「node02」が追加されている。
次の場面では、図12に示すように、スタック61から「node101」がポップされ、このidに対応する分岐ノード24が現在訪問中のノードとなり、「node101」が訪問済みリスト62に追加される。続いて、構成要素情報111を参照して、現在訪問中のノードの直後のノードのidが取得されるが、idが「node101」であるノードのoutgoingに設定されている遷移のidは、「edge04、edge05」の2つであるため、「node03」と「node04」という2つのidが直後のノードのidとして取得される。
このように分岐箇所のノードにおいては、複数のidが直後のノードのidとして取得される。この場合、フローチャート探索部122は、図形情報112を参照してそれらのidに対応するノードの表示位置に関する情報を取得し、その比較結果に基づいてidをスタック61へプッシュする順番を決定する。
具体的には、フローチャートが縦型のものであれば、フローチャート探索部122は、図13に示すように、取得されたidに対応する矩形情報の中心のX座標であるPinXを比較し、この値が大きいものを先にスタック61へプッシュする。もし、PinXの値が同一のものが複数あれば、PinYの値が小さいものを先にスタック61へプッシュする。これにより、相対的に左寄りに位置するノードが先に訪問され、番号設定部123によって若い番号を付与されるため、フローチャートの流れの理解を助けるようなナンバリングが実現される。
なお、フローチャートが横型のものであれば、フローチャート探索部122は、取得されたidに対応する矩形情報の中心のY座標であるPinYを比較し、この値が小さいものを先にスタック61へプッシュする。もし、PinYの値が同一のものが複数あれば、PinXの値が大きいものを先にスタック61へプッシュする。これにより、相対的に上寄りに位置するノードが先に訪問され、番号設定部123によって若い番号を付与されるため、フローチャートの流れの理解を助けるようなナンバリングが実現される。
図12に続く場面では、フローチャートが縦型であり、idが「node04」の矩形情報のPinXの方が、idが「node03」の矩形情報のPinXよりも大きいため、図14に示すように、「node04」が先にスタック61へプッシュされ、続いて「node03」がプッシュされる。これにより、idが「node03」のノードが先に訪問されることになる。
そして、idが「node03」のノードが訪問済みとなると、図15に示すように、「node04」と、idが「node03」のノードの直後のノードである合流ノード25のid「node102」がスタック61へプッシュされた状態となる。そして、図16に示すように、スタック61から「node102」がポップされる。
このとき、構成要素情報111をみると、idが「node102」であるノードのincomingに設定されている遷移のidは、「edge06、edge08」の2つであるため、idが「node102」であるノードは、分岐後の合流箇所であることがわかる。このように、ポップしたidが、合流ノードのidであった場合、フローチャート探索部122は、待合せマップ63を使って、その合流ノードへの経路が全て探索されるまで待ち合わせを行う。
図16の場面では、待合せマップ63には、id「node102」に関する情報が保持されていないため、フローチャート探索部122は、待合せマップ63にid「node102」と訪問回数「1」を登録し、スタック61から次のidをポップして、合流ノード25以前のノードの探索を継続する。
もし、待合せマップ63に、id「node102」に関する情報が保持されていれば、フローチャート探索部122は、id「node102」に対応する訪問回数に1を加算する。そして、加算後の訪問回数が、incomingに設定されている遷移のidの数未満であれば、スタック61から次のidをポップしてノードの探索を継続し、加算後の訪問回数が、incomingに設定されている遷移のidの数以上であれば、合流ノード25へ到達する経路が全て探索されたことになるので、待ち合わせを終了し、合流ノード25よりも先のノードの探索を開始する。
図16の場面の後、フローチャート探索部122は、業務プロセス23dと業務プロセス23eを訪問し、合流ノード25を再び訪問することになる。そして、図17のように、「node102」を2回目にポップした場面では、待合せマップ63に、id「node102」に関する情報が保持されているため、フローチャート探索部122は、id「node102」に対応する訪問回数に1を加算する。そして、加算後の訪問回数の値である2は、incomingに設定されている遷移のidの数以上であるため、フローチャート探索部122は、待ち合わせを終了し、合流ノード25よりも先のノードである業務プロセス23fを訪問する。
このように、待合せマップ63を用いて待ち合わせを行うことにより、合流箇所よりも先のノードが合流箇所よりも前のノードよりも先に訪問され、番号設定部123によって若い番号を付与されてしまうことを防止することができ、フローチャートの流れの理解を助けるようなナンバリングが実現される。
なお、上記の説明では、深さ優先探索に基づいてノードの探索を行うためにスタックを用いる例を示したが、関数の再帰を用いて深さ優先探索を実現する方式も知られており、上記の処理を、スタックではなく、関数の再帰を用いて実現するように変更することとしてもよい。
図4の説明に戻って、番号設定部123は、フローチャート探索部122において訪問済となった業務プロセスに連番を付与する処理部である。既に説明したように、フローチャート探索部122は、フローチャートの流れの理解を助けるようなナンバリングが実現されるように、分岐箇所や合流箇所で特殊な処理を行っているため、番号設定部123は、フローチャート探索部122において訪問済となった順に業務プロセスに連番を付与するだけで、業務プロセスに適切な番号を付与することができる。
次に、番号付与装置100の処理手順について説明する。図18は、番号付与装置100の処理手順を示すフローチャートである。同図に示すように、番号付与装置100が、まず、初期処理として、関連する文書においてノードに関する情報が含まれるページを示す変数であるページ番号を1に設定し、ノードに付与する番号を示す変数であるステップ番号を1に設定し、関連する文書におけるノードに関する情報の表示位置を示す変数であるページ内位置を0に設定し、訪問済みリスト62と待合せマップ63を初期化する(ステップS101)。
そして、方向判定部121が、後述する方向判定処理を実行して、フローチャートが縦向きであるか横向きであるかを判定し(ステップS102)、フローチャート探索部122が、構成要素情報111を参照して、探索対象のフローチャートの開始ノードをスタック61へプッシュする(ステップS103)。
続いて、フローチャート探索部122が、スタック61からノードをポップする(ステップS104)。ここで、ノードをポップすることができた場合、すなわち、スタック61が空でなかった場合は(ステップS105肯定)、フローチャート探索部122は、構成要素情報111を参照して、ポップしたノードのincomingの値を確認し、そのノードが合流ノードであるか否かを判定する。
そして、フローチャート探索部122は、incomingに設定されているidの数が1以下であれば合流ノードではないと判定し(ステップS106否定)、番号設定部123に後述する番号設定処理を行わせて、ポップしたノードに番号を付与させ(ステップS107)、ポップしたノードを訪問済みリスト62へ登録する(ステップS108)。
そして、構成要素情報111を参照して、ポップしたノードの直後に接続されている未訪問のノードを全て取得し(ステップS109)、複数のノードが取得された場合、すなわち、ポップしたノードが分岐ノードであった場合は(ステップS110肯定)、後述するノード並べ替え処理を行って取得されたノードを整列した後(ステップS111)、最後のノードからスタック61へプッシュしていく(ステップS112)。そして、プッシュが完了した後は、ステップS104以降の処理を再実行する。
一方、ステップS109において取得されたノードが1以下であった場合、ポップしたノードが分岐ノードでなかった場合は(ステップS110否定)、取得されたノードがあればそれをスタック61へプッシュし、ステップS104以降の処理を再実行する。
また、フローチャート探索部122は、ステップS104においてポップしたノードのincomingに設定されているidの数が複数であれば、ポップしたノードが合流ノードであると判定し(ステップS106肯定)、そのノードが待合せマップ63に登録済みであるか否かを確認する。ここで、登録されていなければ(ステップS113否定)、ノードを待合せマップ63に登録し(ステップS114)、ノードに対応する訪問回数を1回に設定する。
一方、待合せマップ63に登録済みであれば(ステップS113肯定)、ノードに対応する訪問回数に1を加算し(ステップS116)、加算後の訪問回数が遷移数、すなわち、ノードのincomingに設定されているidの数以上であれば(ステップS117肯定)、ステップS107以降の処理を実行して、当該の合流ノードに番号を付与させ、遠方のノードの探索を行う。一方、加算後の訪問回数が遷移数、すなわち、ノードのincomingに設定されているidの数未満であれば(ステップS117否定)、ステップS104に戻って、当該の合流ノードへ到達する他の経路の探索を行う。
こうして、フローチャート内の探索を進め、ステップS104においてノードをポップすることができなかった場合、すなわち、スタック61が空であった場合は(ステップS105否定)、フローチャート内の全てのノードを探索したことになるため、処理を終了する。なお、上記の説明においては、スタック61等にノードそのものを格納するものとしたが、スタック61等に格納するのは、ノードを識別することができるもの、例えば、idであってもよい。
図19は、方向判定処理の処理手順を示すフローチャートである。同図に示すように、方向判定部121は、まず、初期処理として、縦方向に伸びる遷移の数を示す変数である縦遷移数を0に設定し、横方向に伸びる遷移の数を示す変数である横遷移数を0に設定する(ステップS201)。
そして、方向判定部121は、構成要素情報111から処理対象のフローチャートに含まれるノードのうち未選択のものを1つ選択する(ステップS202)。ここで、ノードを選択することができた場合は(ステップS203肯定)、図形情報112を参照して、ノードと対応する矩形情報、すなわち、ノードと同一のidをもつ矩形情報を取得し(ステップS204)、その矩形情報に付随する接続ポイントを全て取得する(ステップS205)。
そして、方向判定部121は、取得した接続ポイントのうち未選択のものを1つ選択する(ステップS206)。ここで、接続ポイントを選択することができた場合は(ステップS207肯定)、選択した接続ポイントの座標を矩形情報の座標と比較する。具体的には、矩形情報が示す矩形等の中心のX座標であるPinXと、矩形情報が示す矩形等と遷移の矢印との交点である接続ポイントのX座標であるRxの差の絶対値が所定の閾値よりも大きければ(ステップS208肯定)、遷移が横向き(X軸方向)に伸びていると想定されるので、横遷移数に1を加算する(ステップS209)。また、矩形情報が示す矩形等の中心のY座標であるPinYと、矩形情報が示す矩形等と遷移の矢印との交点である接続ポイントのY座標であるRyの差の絶対値が所定の閾値よりも大きければ(ステップS210肯定)、遷移が縦向き(Y軸方向)に伸びていると想定されるので、縦遷移数に1を加算する(ステップS211)。
そして、接続ポイントの座標を矩形情報の座標と比較した後は、ステップS206に戻って、次の未選択の接続ポイントの選択を試みる。こうして、取得された全ての接続ポイントの座標を矩形情報の座標と比較し、ステップS206において全ての接続ポイントが選択済みであった場合は(ステップS207否定)、ステップS202へ戻って、構成要素情報111から処理対象のフローチャートに含まれるノードのうち未選択ものの選択を試みる。
こうして、処理対象のフローチャートに含まれる各ノードを対象として処理を進めていき、ステップS202において全てのノードを選択済みとなったならば(ステップS203否定)、縦遷移数の値と横遷移数の値を比較する。そして、縦遷移数の値が横遷移数の値よりも大きければ(ステップS212肯定)、フローチャートが縦向きであると判定し、さもなければ(ステップS212否定)、フローチャートが横向きであると判定する。
図20は、ノード並び替え処理の処理手順を示すフローチャートである。同図に示すように、フローチャート探索部122は、取得された各ノードに対応する矩形情報、すなわち、同一のidをもつ矩形情報を図形情報112から取得する(ステップS301)。
そして、方向判定部121によってフローチャートの向きが縦向きであると判定されていた場合は(ステップS302肯定)、相対的に左にあるノードが先になるように、矩形情報が示す矩形等の中心のX座標であるPinXが昇順となるように対応するノードをソートする。このとき、PinXの値が同一の矩形情報があれば、それらの矩形情報については、PinYが降順となるように対応するノードをソートする(ステップS303)。
また、方向判定部121によってフローチャートの向きが横向きであると判定されていた場合は(ステップS302否定)、相対的に上にあるノードが先になるように、矩形情報が示す矩形等の中心のY座標であるPinYが降順となるように対応するノードをソートする。このとき、PinYの値が同一の矩形情報があれば、それらの矩形情報については、PinXが昇順となるように対応するノードをソートする(ステップS304)。
図21は、番号設定処理の処理手順を示すフローチャートである。同図に示すように、番号設定部123は、現在処理対象になっているノードが業務プロセスであれば、すなわち、現在処理対象になっているノードのtypeの値を参照し、その値が「業務プロセス」であれば(ステップS401肯定)、ノードにステップ番号を設定し(ステップS402)、ステップ番号に1を加算する(ステップS403)。一方、現在処理対象になっているノードが業務プロセスでなければ(ステップS401否定)、特に処理を行わない。
図22は、ページ番号を付加する場合の番号設定処理の処理手順を示すフローチャートである。同図に示すように、番号設定部123は、現在処理対象になっているノードが業務プロセスであれば、すなわち、現在処理対象になっているノードのtypeの値を参照し、その値が「業務プロセス」であれば(ステップS501肯定)、構成要素情報111と、書式情報と113と、フォント情報114とを参照して、ノードに関する情報を関連する文書に出力する場合に、出力行の高さがどれだけの大きさになるかを算出する(ステップS502)。
例えば、図3−2に示したような一覧表にノードに関する情報を出力する場合であれば、各カラムの幅と使用するフォントの情報を取得し、ノードに設定されている属性を各カラムに出力した場合に、各カラムの高さがどれだけになるかをフォントのサイズと文字の折り返しを考慮して算出し、最も高さが必要なカラムの高さを出力行の高さとする。
そして、求めた高さをページ内位置に加算し(ステップS503)、ページ内位置が1ページ内に出力可能な高さの最大値を超過した場合は(ステップS504肯定)、ページ番号に1を加算し(ステップS505)、求めた高さをページ内位置に設定する(ステップS506)。ページ内位置が1ページ内に出力可能な高さの最大値を超過していなければ、ステップS505および506は実行しない。
そして、ノードにページ番号とステップ番号を設定し(ステップS507)、ステップ番号に1を加算する(ステップS508)。一方、現在処理対象になっているノードが業務プロセスでなければ(ステップS501否定)、特に処理を行わない。
図23は、ページ番号を付加し、サブフローの出現時に改ページを行う場合の番号設定処理の処理手順を示すフローチャートである。サブフローとは、既に説明したように、入れ子になっている他のフローチャートへのリンクを示すノードである。フローチャート中にこのようなノードがあった場合、フローチャートに関連する文書では、そのノードの部分でページを改めた方が見やすい文書となる場合がある。当該のフローチャートは、このように、サブフローの出現時に改ページを行う場合の処理手順を示すものである。
同図に示すように、番号設定部123は、現在処理対象になっているノードがサブフローでなければ、すなわち、現在処理対象になっているノードのtypeの値を参照し、その値が「サブフロー」でなければ(ステップS601否定)、図22に示したステップS501〜509と同様の処理であるステップS602〜609を実行する。
一方、ように、番号設定部123は、現在処理対象になっているノードがサブフローであれば(ステップS601肯定)、ページ番号に1を加算し(ステップS610)、ページ内位置に0を設定した後(ステップS611)、サブフローが示すフローチャートについて図18に示したステップS102以降を実行して番号付与処理を行う(ステップS612)。そして、サブフローが示すフローチャートについて番号付与処理を行った後は、ページ番号に1を加算し(ステップS613)、ページ内位置に0を設定して処理を終了する(ステップS614)。
なお、上記の処理手順では、サブフローが出現した場合には常に改ページをすることとしているが、改ページが多くなり余白が大きいページが多数できるのも不都合であるため、サブフローが出現した場合にページ内位置の値を確認し、この値が小さければ(例えば、1ページないに出力可能な高さの1/4以下であれば)、改ページを行わないこととしてもよい。
上述してきたように、本実施例では、分岐部分では分岐先のノードの表示位置に基づいてどの経路を先に探索するかを決定し、合流部分では、その合流部分へ到達する全ての経路が探索されるまで待ち合わせを行うこととしたので、利用者がフローチャートの流れの理解しやすいように、フローチャート中の各ノードに番号を付与することができる。
なお、図4に示した本実施例に係る番号付与装置100の構成は、本発明の要旨を逸脱しない範囲で種々に変更することができる。例えば、番号付与装置100の制御部120の機能をソフトウェアとして実装し、これをコンピュータで実行することにより、番号付与装置100と同等の機能を実現することもできる。以下に、制御部120の機能をソフトウェアとして実装した番号付与プログラム1071を実行するコンピュータの一例を示す。
図24は、番号付与プログラム1071を実行するコンピュータ1000を示す機能ブロック図である。このコンピュータ1000は、各種演算処理を実行するCPU(Central Processing Unit)1010と、ユーザからのデータの入力を受け付ける入力装置1020と、各種情報を表示するモニタ1030と、記録媒体からプログラム等を読み取る媒体読取り装置1040と、ネットワークを介して他のコンピュータとの間でデータの授受を行うネットワークインターフェース装置1050と、各種情報を一時記憶するRAM(Random Access Memory)1060と、ハードディスク装置1070とをバス1080で接続して構成される。
そして、ハードディスク装置1070には、図4に示した制御部120と同様の機能を有する番号付与プログラム1071と、図4に示した記憶部110に記憶される各種データに対応する番号付与用データ1072とが記憶される。なお、番号付与用データ1072を、適宜分散させ、ネットワークを介して接続された他のコンピュータに記憶させておくこともできる。
そして、CPU1010が番号付与プログラム1071をハードディスク装置1070から読み出してRAM1060に展開することにより、番号付与プログラム1071は、番号付与プロセス1061として機能するようになる。そして、番号付与プロセス1061は、番号付与用データ1072から読み出した情報等を適宜RAM1060上の自身に割り当てられた領域に展開し、この展開したデータ等に基づいて各種データ処理を実行する。
なお、上記の番号付与プログラム1071は、必ずしもハードディスク装置1070に格納されている必要はなく、CD−ROM等の記憶媒体に記憶されたこのプログラムを、コンピュータ1000が読み出して実行するようにしてもよい。また、公衆回線、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)等を介してコンピュータ1000に接続される他のコンピュータ(またはサーバ)等にこのプログラムを記憶させておき、コンピュータ1000がこれらからプログラムを読み出して実行するようにしてもよい。
(付記1)フローチャートに含まれるノードと遷移の各種属性情報を保持する構成要素情報と、ノードと遷移を図示するための位置と形状に関する情報を保持する図形情報とによって表現されるフローチャート中の各ノードに番号を付与する番号付与プログラムであって、
前記構成要素情報を参照して、フローチャートの開始ノードを起点として、遷移を辿りながらフローチャート内のノードを訪問していくフローチャート探索手順と、
前記フローチャート探索手順によって訪問された順にノードに番号を付与する番号設定手順とをコンピュータに実行させ、
前記フローチャート探索手順は、訪問しているノードから他のノードへ向かう経路が複数存在する場合に、それらの経路における直近のノードの表示位置を前記図形情報から取得し、表示位置の座標の大きさに基づいてそれらの経路を探索する順序を決定し、訪問しているノードへ他のノードから到達する経路が複数存在する場合に、それら全ての経路の探索が完了するまで、訪問しているノードよりも前方のノードの探索を行わないことを特徴とする番号付与プログラム。
(付記2)フローチャートの向きを判定する方向判定手順をさらにコンピュータに実行させ、
前記フローチャート探索手順は、訪問しているノードから他のノードへ向かう経路が複数存在する場合に、前記方向判定手順の判定結果によって、表示位置の座標の大きさに基づいてそれらの経路を探索する順序を変更することを特徴とする付記1に記載の番号付与プログラム。
(付記3)前記番号設定手順は、フローチャートに含まれるノードの属性情報が出力される文書の書式情報を参照して、各ノードが該文書のどのページに出力されるかを算出し、前記フローチャート探索手順によって訪問された順にノードに番号を付与する場合に、該ノードが該文書に出力されるページのページ番号をさらにノードに付与することを特徴とする付記1または2に記載の番号付与プログラム。
(付記4)前記番号設定手順は、フローチャートが階層的に作成されており、前記フローチャート探索手順によって探索される階層が変化した場合に、フローチャートに含まれるノードの属性情報が出力される文書が改ページされたものとみなして、各ノードが該文書のどのページに出力されるかを算出することを特徴とする付記3に記載の番号付与プログラム。
(付記5)フローチャートに含まれるノードと遷移の各種属性情報を保持する構成要素情報と、ノードと遷移を図示するための位置と形状に関する情報を保持する図形情報とによって表現されるフローチャート中の各ノードに番号を付与する番号付与装置であって、
前記構成要素情報を参照して、フローチャートの開始ノードを起点として、遷移を辿りながらフローチャート内のノードを訪問していくフローチャート探索手段と、
前記フローチャート探索手段によって訪問された順にノードに番号を付与する番号設定手段とを備え、
前記フローチャート探索手段は、訪問しているノードから他のノードへ向かう経路が複数存在する場合に、それらの経路における直近のノードの表示位置を前記図形情報から取得し、表示位置の座標の大きさに基づいてそれらの経路を探索する順序を決定し、訪問しているノードへ他のノードから到達する経路が複数存在する場合に、それら全ての経路の探索が完了するまで、訪問しているノードよりも前方のノードの探索を行わないことを特徴とする番号付与装置。
(付記6)フローチャートに含まれるノードと遷移の各種属性情報を保持する構成要素情報と、ノードと遷移を図示するための位置と形状に関する情報を保持する図形情報とによって表現されるフローチャート中の各ノードに番号を付与する番号付与方法であって、
前記構成要素情報を参照して、フローチャートの開始ノードを起点として、遷移を辿りながらフローチャート内のノードを訪問していくフローチャート探索ステップと、
前記フローチャート探索ステップによって訪問された順にノードに番号を付与する番号設定ステップとを含み、
前記フローチャート探索ステップは、訪問しているノードから他のノードへ向かう経路が複数存在する場合に、それらの経路における直近のノードの表示位置を前記図形情報から取得し、表示位置の座標の大きさに基づいてそれらの経路を探索する順序を決定し、訪問しているノードへ他のノードから到達する経路が複数存在する場合に、それら全ての経路の探索が完了するまで、訪問しているノードよりも前方のノードの探索を行わないことを特徴とする番号付与方法。