(57)【要約】【課題】プログラミングにおいて、処理の繰り返しを容易に記述できるようにする。【解決手段】ジョブを定義するジョブテンプレート１００は、そのジョブの中で実行するコマンドを定義する１以上のコマンドテンプレート１１０を含む。コマンドテンプレート１１０は、コマンドの種別を表すキー１０１と、コマンドの適用対象の種別を示すタイプ１０２と、コマンド内容１０３を含む。コマンド内容１０３は、コマンド名と引数が含み、引数の値は変数となっている。ジョブテンプレート１００と、ジョブの実行対象となる文書のリストとを受け取ったテンプレート実行部は、コマンドテンプレート１１０のタイプ１０２に該当する文書をそのリストから求め、コマンドテンプレート１１０からそれら文書の数だけコマンドを作成する。コマンドの引数には、対応する文書の属性を設定する。こうして作成されたコマンドの列をコマンド実行部が実行する。【選択図】図１
2007156863.tif 000002
【特許請求の範囲】
【請求項１】
(a) コマンド内容と該コマンド内容の適用対象のタイプの情報を含んだコマンドテンプレートの列を取得し、
(b) 前記コマンドテンプレートの列が適用される対象のリストを取得し、
(c) 前記コマンドテンプレートの列に含まれるコマンドテンプレートごとに、
(c1)そのコマンドテンプレートの適用対象のタイプに合致するタイプの対象を前記リストから抽出し、
(c2)抽出した対象の数だけそのコマンドテンプレートのコピーを生成し、
(c3)抽出した各対象をそれら各コピーの適用対象として設定することにより、それら対象ごとのコマンドを生成し、
(d) 処理(c) で生成されたコマンドの列を実行する、
処理をコンピュータシステムに実行させるためのプログラム。
【請求項２】
請求項１記載のプログラムであって、
前記コマンドテンプレートの列には、第１のコマンドテンプレートと、当該第１のコマンドテンプレートのコマンド内容を実行するためには実行が成功していることが必要な１以上の他のコマンドテンプレートのリストと、の対応関係である成功依存関係を定義することができ、
前記処理(d) では、成功依存関係に示された前記第１のコマンドテンプレートから生成されたコマンドの実行は、当該成功依存関係における前記リストに示される各コマンドテンプレートに対応するコマンド群の実行が成功した場合に行う、
ことを特徴とするプログラム。
【請求項３】
請求項２記載のプログラムであって、
前記処理(d) では、ある第１のコマンドについての成功依存関係における前記リストの各コマンドテンプレートに対応するコマンド群のうちいずれかの実行が失敗した場合、前記第１のコマンドの実行の結果を失敗とする、
ことを特徴とするプログラム。
【請求項４】
請求項１記載のプログラムであって、
前記コマンドテンプレートの列には、第１のコマンドテンプレートと、当該第１のコマンドテンプレートのコマンド内容を実行するためには実行が失敗していることが必要な１以上の他のコマンドテンプレートのリストと、の対応関係である失敗依存関係を定義することができ、
前記処理(d) では、失敗依存関係に示された前記第１のコマンドテンプレートから生成されたコマンドの実行は、当該失敗依存関係における前記リストに示される各コマンドテンプレートに対応するコマンドのうちのいずれかの実行が失敗した場合に行う、
ことを特徴とするプログラム。
【請求項５】
請求項４記載のプログラムであって、
前記処理(d) では、前記失敗依存関係に示された前記第１のコマンドテンプレートから生成されたコマンドを除いた残りのすべてのコマンドの実行が成功した場合に呼び出される終了コマンドを前記コマンドの列に追加して実行する、
ことを特徴とするプログラム。
【請求項６】
請求項５記載のプログラムであって、
前記終了コマンドは、前記コマンドの列に含まれるコマンドの実行により更新された当該コマンドの適用対象のデータを、当該適用対象を管理するデータベースに書き戻す処理を指示するものである、
ことを特徴とするプログラム。
【請求項７】
(a) コマンド内容と該コマンド内容の適用対象のタイプの情報を含んだコマンドテンプレートの列を取得し、
(b) 前記コマンドテンプレートの列が適用される対象のリストを取得し、
(c) 前記コマンドテンプレートの列に含まれるコマンドテンプレートごとに、
(c1)そのコマンドテンプレートの適用対象のタイプに合致するタイプの対象を前記リストから抽出し、
(c2)抽出した対象の数だけそのコマンドテンプレートのコピーを生成し、
(c3)抽出した各対象をそれら各コピーの適用対象として設定することにより、それら対象ごとのコマンドを生成し、
(d) 処理(c) で生成されたコマンドの列を実行する、
情報処理方法。
【請求項８】
コマンド内容と該コマンド内容の適用対象のタイプの情報を含んだコマンドテンプレートの列と、前記コマンドテンプレートの列が適用される対象のリストとを取得する取得部と、
前記コマンドテンプレートの列に含まれるコマンドテンプレートごとに、そのコマンドテンプレートの適用対象のタイプに合致するタイプの対象を前記リストから抽出し、抽出した対象の数だけそのコマンドテンプレートのコピーを生成し、抽出した各対象をそれら各コピーの適用対象として設定することにより、それら対象ごとのコマンドを生成するテンプレート実行部と、
テンプレート実行部により生成されたコマンドの列を実行するコマンド実行部と、
とを備える情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理方法及びシステムに関し、特に文書等の対象データ群に対する処理のための技術に関する。
【背景技術】
【０００２】
例えば、文書アーカイブに保存してある電子文書に対する一連の処理では、同一内容の処理を各文書に対して繰り返し行うことが多い。また、処理の結果に応じてその後の処理が条件分岐するなどの場合もある。このような一連の処理内容は、従来、個々の処理同士の依存関係や繰り返しなどの制御構造を構文的な定義記述で記述している。また、プログラミングを容易にするために、各処理同士の関係や繰り返しを図式的に指定できるグラフエディタも用いられている（例えば特許文献１参照）。いずれにしても、従来は、文書群に対する処理のためのプログラムやスクリプトを作成するプログラマは、繰り返しや条件分岐などの制御構造をfor文やif文などを用いて記述する必要があった。文書処理は、広く様々な業務分野で行われるので、プログラムの制御構造についての知識が余りなくても処理定義が組み立てられることが望ましいが、従来の文書処理用のプログラミング言語やスクリプト言語などは必ずしもそのようにはなっていなかった。また例えば繰り返しの場合、繰り返しの開始と終了を規定する条件を記述する必要があるが、検索した文書群に含まれる文書に対して同じ処理を繰り返し行う場合、いくつの文書に対して繰り返すのかなどは検索前には分からないので、適切な処理定義が作成できない場合もあった。
【０００３】
また特許文献２には、ＨＴＭＬ(Hypertext Markup language) 等の記述言語で記述された文書を処理するにあたり、文書中の繰り返し変数に値を設定し、該変数について繰り返し処理を実行する方法が示される。この方法では、類似した内容を繰り返し表示する場合でも、文書中に類似の内容を繰り返し記述しなくても済む。
【０００４】
この特許文献２では、記述言語の文書中のタグを利用して、for文などと同等の制御構造を記述しており、結局上述と同様の問題を有する。
【０００５】
【特許文献１】特開平０６−０５２１８０号公報
【特許文献２】特開２００３−１５０３８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明は、文書等の複数の対象を処理するためのプログラムやスクリプト等の処理定義をユーザが作成する場合に、複数の対象に対する処理の繰り返しをユーザが意識しなくても済むようにするためのシステムを提供する。
【課題を解決するための手段】
【０００７】
本発明では、(a) コマンド内容と該コマンド内容の適用対象のタイプの情報を含んだコマンドテンプレートの列を取得し、(b) 前記コマンドテンプレートの列が適用される対象のリストを取得し、(c) 前記コマンドテンプレートの列に含まれるコマンドテンプレートごとに、(c1)そのコマンドテンプレートの適用対象のタイプに合致するタイプの対象を前記リストから抽出し、(c2)抽出した対象の数だけそのコマンドテンプレートのコピーを生成し、(c3)抽出した各対象をそれら各コピーの適用対象として設定することにより、それら対象ごとのコマンドを生成し、(d) 処理(c) で生成されたコマンドの列を実行する。
【発明を実施するための最良の形態】
【０００８】
以下、図面を参照して、本発明の実施の形態（以下「実施形態」とも呼ぶ）について説明する。
【０００９】
以下では、電子文書（以下単に文書と呼ぶ）群の処理に対して本発明を適用した例を説明する。しかしながら、当業者ならば理解できるように、以下に示すシステム及び処理内容は、電子文書以外の様々な対象データに対して適用可能である。
【００１０】
本実施形態では、プログラマは、対象データ群に対して適用するジョブ内容を記述するジョブ定義を、図１に示すようなジョブテンプレート１００として作成する。このジョブテンプレート１００は、与えられた文書群のメニューと索引を作成する処理を示している。
【００１１】
図１に示される表の１行が１つのコマンドテンプレート１１０を示す。ジョブテンプレート１００は、１以上のコマンドテンプレート１１０−１〜１１０−６を配列したものである。コマンドテンプレート１１０の配列順序は、おおよそ実行順に従っている方が人間にとっては分かりやすいが、これは必須ではない。コマンドの実行順序は、後述する成功依存関係又は失敗依存関係にあるコマンド同士の間では定まるが、そのような関係のないコマンド同士の実行順序は、論理的には並列的でよい。
【００１２】
個々のコマンドテンプレート１１０は、キー１０１，タイプ１０２，コマンド内容１０３，成功依存リスト１０４及び失敗依存リスト１０５を含む。
【００１３】
キー１０１は、当該コマンドテンプレート１１０の識別情報（あるいは名前）である。コマンドテンプレート１１０は、同じ処理内容を実行する（ただし処理の対象は様々に代わり得る）コマンドのひな形なので、その識別情報であるキーは、コマンドの種類を示すものと捉えることもできる。
【００１４】
タイプ１０２は、当該コマンドテンプレート１１０のコマンド内容が適用される対象の種類を示す情報である。図示例では、タイプ１０２として、"task"、"document"、"edition"の３種が示される。
【００１５】
"task"は、１つのジョブを指し示すタイプである。１つのジョブの中では、対象となる文書群に対してジョブテンプレート１００に規定されるコマンド群が実行されるわけであるが、例えばそれら文書群全体の索引を作成しようとした場合、ジョブ中で扱う文書群全体の情報を集め、集まった情報に対して索引生成コマンドを適用する必要がある。タイプ"task"は、このように、当該ジョブが取り扱うそれら文書群全体に由来する情報を指し示すタイプである。
【００１６】
"document"は、１つの文書（ファイル）を指し示すタイプである。文書は、例えばＸＭＬ文書やＨＴＭＬ文書などの構造化文書がその代表例であるが、これに限られるものではない。
【００１７】
"edition"は、"document"タイプの文書からの抽出・編集により作成される文書の版である。版であるので文書の一種ではあるが、目的や公開の場などの条件に応じて１つの"document"から様々な"edition"を作成することができる。
【００１８】
以上に例示したコマンド実行対象のタイプは一例に過ぎず、必須のものではない。このほかにも様々なタイプを定めることができる。例えば、複数の"document"や"edition"を有するフォルダを示すタイプ"folder"なども用いることができる。
【００１９】
タイプ１０２の欄に複数のタイプが列挙されている場合は、それら複数のタイプのいずれかに該当する対象に対して当該コマンドテンプレート１１０が適用される。例えば、コマンドテンプレート１１０−１は、タイプが"document"又は"edition"である対象に対して適用される。
【００２０】
コマンド内容１０３は、当該コマンドテンプレートに対応するコマンドの内容を示す情報であり、コマンド名と、１以上の引数情報から構成される。例えばコマンドテンプレート１１０−１のコマンド内容１０３、すなわち、
analysis -editionpath $filepath -jobid $jobid -releasedir "$releasedir" -exfiledir "$exfiledir"
を例にとると、先頭の"analysis"がコマンド名であり、その後に４つの引数情報が示される。１つの引数情報は、引数名と引数値のペアである。引数名は、例えば"-editionpath"のように"-"から始まる文字列で表される。引数値は、その引数名の後にスペースを挟んで示される。コマンドテンプレートでは、引数値としての具体的な値は未定なので、引数値は変数（例えば"$filepath"）となっている。この例では変数名を"$"から始まる文字列で表している。変数名は、後述する文書リストにおける文書の属性名と対応している。後のテンプレート実行処理（詳細は後述）によりコマンドテンプレートが適用される文書が決定された段階では、その変数にその文書の対応する属性値が設定されることで、引数の値が決まる。
【００２１】
具体的なコマンドをいくつか例にとって説明する。例えば、文書解析コマンド"analysis"は、対象となる文書を解析して、参照先のテーブルを作成するコマンドである。対象の文書に対してこのコマンドを実行すると、その文書を構成する編・章・節・条などのタイトルのリストが生成される。その引数"-editionpath”は、当該コマンドの処理対象となる文書のパス名である。また、引数"-jobid"は、当該コマンドテンプレート１１０が適用されるジョブの識別情報である。また引数"-releasedir"は、ジョブの処理結果のファイルを格納するフォルダ（「リリース先フォルダ」と呼ぶ）のパス名である。また引数"-exfiledir"は、処理対象の文書に組み込まれる添付ファイルや図などの外部コンテンツファイルが格納されるフォルダのパス名である。
【００２２】
また、例えば、メニュー生成コマンド"foldermenu"は、リリース先フォルダに格納された各文書のタイトルリストをマージして、そのフォルダ全体に対するファイルリストを作成するためのコマンドである。引数"-jobid"と"-releasedir"とで特定されるリリース先フォルダが、このコマンドの処理対象となる。
【００２３】
以上、コマンド内容１０３について説明した。次に、成功依存リスト１０４について説明する。成功依存リスト１０４は、当該コマンドを実行するためには実行が成功していることを必要とする他のコマンドのキーのリストである。すなわち、当該コマンドテンプレート１１０から生成されたコマンドは、このリスト１０４に示されるコマンドキーに該当するコマンドが全て成功した場合でないと、実行されない。このような関係を成功依存関係と呼ぶ。
【００２４】
図２を用いて成功依存関係を図式的に説明する。この例では、コマンドＣは、成功依存リストにあるコマンドキーに該当するコマンドＡ及びコマンドＢの両方の実行が成功した場合に限り、実行が許可される。すなわち、成功依存関係では、依存する側（コマンドＣ）のコマンドを実行するかどうかの条件は、依存される側（コマンドＡ，Ｂ）の各コマンドの実行結果のＡＮＤ条件でとなる。実行が成功したときの状態を例えば「１」で表し、失敗した時の状態を例えば「０」で表すと、依存される側のコマンド群の実行状態のＡＮＤ（論理積）が「１」になれば、依存する側のコマンドが実行される。なお、コマンドの実行状態には、「成功」及び「失敗」の他に、「未定」がある。コマンドの実行が終了していない場合、その状態は「未定」となる。「未定」状態を、「未実行」と「実行中」などといった２以上の状態に細分化してもよい。
【００２５】
図１の例に戻ると、例えば、コマンドテンプレート１１０−１の成功依存リスト１０４は空なので、このテンプレート１１０−１から作成される文書解析コマンドは、他のコマンドの如何に依らず実行される。これに対し、コマンドテンプレート１１０−２には、成功依存リスト１０４に「文書解析」というコマンド種類（キー）が示されているので、このテンプレート１１０−２から生成される具体的なメニュー生成コマンドは、テンプレート１１０−１から生成されたすべての文書解析コマンドの実行が成功した場合に限り、実行されることとなる。なお、成功依存リスト１０４に複数のコマンドキーが含まれる場合は、それら各コマンドキーに対応するコマンドテンプレート１１０から作成されたコマンド全てが成功した場合に、当該リスト１０４を持つコマンドが実行される。
【００２６】
失敗依存リスト１０５は、当該コマンドを実行するためには実行が失敗していることを必要とする他のコマンドのキーのリストである。すなわち、当該コマンドテンプレート１１０から生成されたコマンドは、このリスト１０５に示されるコマンドキーに該当するコマンドのうち１つ以上が失敗した場合でないと、実行されない。このような関係を失敗依存関係と呼ぶ。
【００２７】
図３を用いて失敗依存関係を図式的に説明する。この例では、コマンドＤは、失敗依存リストにあるコマンドキーに該当するコマンドＡ又はコマンドＢのうち少なくとも一方の実行が失敗した場合に限り、実行が許可される。すなわち、失敗依存関係では、依存する側（コマンドＤ）のコマンドを実行するかどうかの条件は、依存される側（コマンドＡ，Ｂ）の各コマンドの実行結果のＯＲ条件でとなる。すなわち、依存される側のコマンド実行結果のＯＲ（論理積）が「０」となった場合に、依存する側のコマンドが実行される。
【００２８】
図１の例では、コマンドテンプレート１１０−６には、「コミット」というコマンドキーが示されているので、このテンプレート１１０−６から生成されるmail（メールによる結果報告）コマンドは、テンプレート１１０−５から生成されたコマンドのうちのいずれかの実行が失敗した場合に限り（この例ではコミットコマンドは１つしか生成されないので、その１つのコマンドが失敗した場合に）、実行されることとなる。すなわち、コミットコマンドの実行が失敗した場合、mailコマンドが実行され、"administrator@example.com"というメールアドレス宛に所定の情報を示した結果報告の電子メールが送信されることになる。
【００２９】
以上、ジョブテンプレート１００について説明した。ジョブテンプレート１００は、例えばｃｓｖ（comma separated value）形式の表として表現できる。
【００３０】
本実施形態では、このようなジョブテンプレート１００を、文書の集合に適用することで、それら文書の集合に対してジョブテンプレート１００に示された各コマンドが、それら文書群に適用されることとなる。ここで、ジョブテンプレート１００内のコマンドテンプレート１１０に該当するタイプの文書がその文書の集合の中に複数あれば、それら該当する文書の数だけのコマンドがそのコマンドテンプレート１１０から生成される。すなわち、生成された各コマンドがそれぞれ個別の文書に対応したものとなる。
【００３１】
ジョブテンプレート１００は、プログラマが、テキストエディタや表作成ソフトウエアなどのツールを用いて作成することができる。上述のように、本実施形態では、コマンドテンプレート１１０の適用対象のタイプ１０２に該当する文書の数だけコマンドが自動生成されるので、プログラマは、コマンドの繰り返し指示を明示的に記述しなくても、対象となる文書の数だけコマンドが繰り返し実行されることになる。このように、本実施形態では、同じコマンドを異なる複数の対象に対して繰り返す処理を、for文などといった制御文を用いることなく、宣言的に記述することができる。
【００３２】
このジョブテンプレート１００を用いた文書処理システムの構成を図4に示す。このシステムは、文書ＤＢ（データベース）１０と、文書検索部１２と、テンプレート実行部１４と、コマンド実行部１６と、ＵＩ（ユーザインタフェース）部１８を備える。
【００３３】
文書ＤＢ１０には、文書群が登録されている。文書検索部１２は、ＵＩ部１８を介してユーザが指示した検索条件に合致する文書を文書ＤＢ１０から検索し、検索された文書の属性情報のリスト（「文書リスト」と呼ぶ）を出力する。この文書リストが、ジョブテンプレート１００が示すジョブの対象となる文書の集合を示す。テンプレート実行部１４は、この文書リスト２００に対し、ユーザから指定されたジョブテンプレート１００を適用することで、実際に実行すべきコマンド列を生成する。コマンド実行部１６は、そのコマンド列を実行する。これにより、検索された文書群に対してユーザの指定したジョブ処理が適用され、処理結果が生成される。ＵＩ部１８は、この文書処理システムに対するユーザインタフェース機能を提供する手段であり、例えば文書検索部１２に対する検索条件の入力画面や、テンプレート実行部１４で実行すべきジョブテンプレート１００の指定画面などをユーザに提供する。以下、これら各部について更に詳しく説明する。
【００３４】
まず、文書検索部１２の検索により生成される文書リスト２００の一例を、図５を参照して説明する。
【００３５】
文書リスト２００には、検索された各文書の属性レコード２１０−１〜２１０−３が含まれる。また当該ジョブについての属性レコード２２０も含まれる。文書の属性レコード２１０は文書ＤＢ１０にある各文書のデータから取得できる。また、ジョブについての属性レコード２２０は、文書検索部１２が作成する。
【００３６】
１つの対象（文書又はジョブ）についての属性レコードは、当該対象の識別情報２０１，タイプ２０２，当該対象を処理するジョブの識別情報２０３，当該対象のファイル名２０４，当該対象のパス名２０５，外部コンテンツフォルダのパス名２０６，リリース先ファイルのパス名２０７の各属性項目が含まれる。
【００３７】
このうち、対象の識別情報２０１は、文書処理システム（或いは文書検索部１２）が、他の対象と重複しないように付与する。この例では、ジョブの識別情報とそのジョブの中での当該対象の通し番号との組をパス形式で表現している。
【００３８】
対象のタイプ２０２は、当該対象のデータ自体が持つタイプ情報（例えばファイル名や属性にタイプが明示されるなど）や文書ＤＢ１０内で当該対象が格納されているフォルダの情報などから求めることができる（例えば、"document"のフォルダの下位に"edition"のフォルダを設ける規則にしておけば、どのフォルダのファイルかで"document"か"edition"かを判別できる）。文書検索部１２が生成したジョブの属性レコード２２０のタイプは、ジョブを示す"task"となる。
【００３９】
ジョブの識別情報２０３は、文書処理システム（或いは文書検索部１２）が、他のジョブと重複しないように割り当てる。文書リスト２００中に含まれる対象は同じジョブに属するので、ジョブの識別情報２０３は同じ値となる。
【００４０】
対象のファイル名２０４及びパス名２０５は、対象が文書である場合、文書ＤＢ１０中でのその文書のファイル名とパス名である。対象がジョブである場合は、ファイル名２０４及びパス名２０５は、文書処理システムがそのジョブの処理のために作成する共用ファイルのファイル名及びパス名を示す。この共用ファイルは、文書群の索引作成などのために、ジョブ中のコマンド群に共用される。
【００４１】
外部コンテンツフォルダのパス名２０６は、添付ファイルや図などの外部コンテンツファイルが格納されるフォルダのパス名である。このフォルダは、文書処理システムが生成する。
【００４２】
リリース先ファイルのパス名２０７は、ジョブの処理により生成されるファイルを格納するフォルダのパス名である。このフォルダは、文書処理システムが生成する。
【００４３】
これら各属性項目の名前は、前述のジョブテンプレート１００で用いられる変数名に対応している。文書リスト２００は、例えばｃｓｖ形式の表として表現できる。
【００４４】
以上、文書リスト２００について説明した。この文書リスト２００は、ジョブの対象としてテンプレート実行部１４に渡される。テンプレート実行部１４は、この文書リスト２００に対し、ＵＩ部１８からユーザが指定したジョブテンプレート１００を適用することで、実際に実行すべきコマンド列を生成する。すなわち、ジョブテンプレート１００に含まれるコマンドテンプレート１１０では、コマンド内容１０３内の引数が変数となっているが、テンプレート実行部１４は、そのコマンドテンプレートが適用される文書を文書リスト２００から求め、求めた文書の属性をそれら変数にセットしていくことで、各文書に対して適用される具体的なコマンドを作成する。このテンプレート実行部１４の処理手順を、図６を参照して説明する。
【００４５】
まずテンプレート実行部１４は、実行すべきジョブテンプレート１００の指定をユーザから受け取ると共に、文書検索部１２から文書リスト２００を受け取る（Ｓ１）。そして、ジョブテンプレート１００に含まれる各コマンドテンプレート１１０についてそれぞれ、以下に示すステップＳ２〜Ｓ４の処理を実行する。
【００４６】
１つのコマンドテンプレート１１０についての処理では、まずそのテンプレート１１０のタイプ１０２に適合するタイプ２０２を持つ対象を文書リスト２００から抽出する（Ｓ２）。そして、抽出した各対象ごとにステップＳ３及びＳ４の処理を繰り返す。
【００４７】
対象ごとの処理では、当該対象のためにコマンドテンプレート１１０をコピーし（Ｓ３）、そのコピーの各引数に対し、当該対象の属性値を設定することで、当該対象に対する具体的なコマンドを生成する（Ｓ４）。コマンドテンプレート１１０の各引数には、値として変数名が示されているので、対象の属性レコードのうち引数の変数名に対応する属性項目の値をその引数の値として設定すればよい。例えば、図１のコマンドテンプレート１１０−１のコマンド内容１０３の引数"-editionpath"の値には変数"$filepath"が設定されているので、図５の文書リスト２００に示される当該対象の属性レコードのうち、対応する属性名"filepath"を持つ属性値（例えば"/test/c02/b01/bookA01.xml"）がその変数に代入される。ステップＳ３及びＳ４の処理を抽出した対象ごとに繰り返すことで、コマンドテンプレート１１０の適用対象の数だけ具体的なコマンドが生成される。すなわち、テンプレート実行部１４によれば、宣言的に表現されたコマンドテンプレート１１０から、繰り返し実行の処理のためのコマンド列を生成することができる。
【００４８】
ジョブテンプレート１００中の全てのコマンドテンプレート１１０についてステップＳ２〜Ｓ４の実行を完了すると、図７に示すようなコマンド列３００が生成される。このコマンド列３００は、図１のジョブテンプレート１００を図５の文書リスト２００に適用した場合に得られるものである。
【００４９】
図７に示されるように、コマンド列３００は、複数のコマンド３１０からなる列であり、各コマンド３１０は図１に示したコマンドテンプレート１１０と同じ項目のデータを持つ。ただし、コマンド３１０は、コマンド内容３０３の引数の値に具体的な対象のパス名などの属性値が設定されている点で、コマンドテンプレート１１０とは異なる。コマンド列３００には、同じコマンドテンプレート１１０から生成された複数のコマンド３１０が含まれ得る。例えば、図５の文書リスト２００中には、図１のコマンドテンプレート１１０−１の適用対象のタイプ１０２"document"又は"edition"に該当する対象が３つ含まれているので、コマンド列３００には文書解析コマンドがそれら３つの対象についてそれぞれ１つずつ含まれることになる。
【００５０】
そしてテンプレート実行部１４は、そのように生成されたコマンド列３００に対し、終了コマンドを追加する（Ｓ５）。終了コマンドは、当該ジョブの終了処理を行うコマンドである。終了コマンドは、他のコマンドの失敗の結果呼び出されるコマンド（すなわち失敗依存リストを持つコマンド）を除く各コマンドを成功依存リストに含む。すなわち、終了コマンドは、失敗の結果呼び出されるエラー処理等のコマンドを除いた、実際にジョブにおいて実行されるべき全てにコマンドの実行が成功した場合に限り実行される。
【００５１】
例えば、コマンド列が図２及び図３に示すような成功依存関係及び失敗依存関係のあるコマンドＡ，Ｂ，Ｃ，Ｄからなるものであった場合、図８に示すように、失敗により実行されるコマンドＤ以外のコマンドＡ，Ｂ，Ｃのすべてが成功した場合に実行される終了コマンドＸが生成されることになる。また、図７のコマンド列３００の例では、最下段の結果報告コマンドを除くすべてのコマンドが成功した場合に、終了コマンドが実行されることになる。
【００５２】
終了コマンドの処理では、例えば、ジョブの処理結果を文書ＤＢ１０に登録する。また、コマンドによっては、対象となる文書の属性や内容に変更を加えるものもあり得る。本実施形態では、そのような変更の結果は、個々のコマンドの実行時に文書ＤＢ１０に書き戻すことはせず、終了コマンドの実行により一括して書き戻す。すなわち、文書ＤＢ１０に対して変更を加えるような処理は、ジョブ全体が成功した場合にしか実行されないようにしている。
【００５３】
このような終了コマンドが追加されたコマンド列は、コマンド実行部１６に渡される。
【００５４】
コマンド実行部１６は、このコマンド列に含まれる各コマンドを、成功依存関係及び失敗依存関係の制約条件の下で実行する。コマンド列内の各コマンドの実行順序は、成功依存関係及び失敗依存関係がないもの同士の間では、論理的には並列でよい。以下、図９及び図１０を参照してコマンド実行部１６の処理手順を説明する。
【００５５】
この手順では、まずコマンド実行部１６は、実行すべきコマンド列をテンプレート実行部１４から受け取る（Ｓ１１）。そして、そのコマンド列に含まれるコマンドごとに、以下のステップＳ１２〜Ｓ２１を実行する。
【００５６】
まずステップＳ１２では、実行するコマンドに失敗依存リストがある（すなわち失敗依存リストの内容が空でない）か否かを判定する。失敗依存リストがあれば、その失敗依存リストにあるコマンドキーに該当する各コマンドのうちのいずれかの実行が失敗したか否かを判定する（Ｓ１３）。コマンド実行部１６は、各コマンドの実行状態を管理しており、この管理している情報を参照することで、各コマンドが未実行なのか、実行中なのか、成功したのか、失敗したのかを判定することができる。失敗依存リストに該当する少なくとも１つのコマンドの実行結果が失敗であれば、ステップＳ１３の判定結果は肯定（Ｙ）となり、処理はステップＳ１８に進む。ステップＳ１８では、当該コマンドのコマンド内容３０３を実行する。すなわち、この場合、当該コマンドの失敗依存リストに該当するコマンドが失敗したので、当該コマンドが実行されるのである。そして、実行の結果を判定し（Ｓ１９）、成功であれば当該コマンドの実行状態を実行成功を示す値に設定し（Ｓ２０）、失敗であれば実行失敗を示す値に設定する（Ｓ２１）。
【００５７】
失敗依存リストに該当するコマンドの中に実行が失敗したものがなければ、次にそのリスト中の全てのコマンドが実行に成功したかどうかを判定する（Ｓ１４）。この判定の結果が肯定（Ｙ）となると、当該コマンドは実行せず、ステップＳ２１に進み、当該コマンドの実行状態を実行失敗とする。
【００５８】
ステップＳ１４の判定結果が否定の場合、失敗依存リストに該当するコマンドの中に実行が未完了のものがあるということなので、コマンド実行部１６は、ステップＳ１３に戻り、定期的に失敗依存リストに含まれる各コマンドの実行状態を判定する。
【００５９】
ステップＳ１２の判定結果が否定（Ｎ）の場合、コマンド実行部１６は、当該コマンドに成功依存リストがあるかどうかを判定する（Ｓ１５）。成功依存リストがあれば、そのリストに該当する全てのコマンドの状態が実行成功であるかどうかを判定する（Ｓ１６）。この判定結果が肯定（Ｙ）であれば、ステップＳ１８に進んで当該コマンドを実行し、その実行結果を記録する（Ｓ２０又はＳ２１）。そうでなければ、成功依存リストに該当するコマンドのうちの少なくとも１つが失敗したかどうかを判定する（Ｓ１７）。この判定結果が肯定（Ｙ）の場合は、当該コマンドは実行せずに、その状態を実行失敗とする（Ｓ２１）。
【００６０】
また、ステップＳ１７の判定結果が否定（Ｎ）の場合、成功依存リストに該当するコマンドの中に実行が未完了のものがあるということなので、コマンド実行部１６は、ステップＳ１６に戻り、定期的に成功依存リストに含まれる各コマンドの実行状態を判定する。
【００６１】
また、ステップＳ１５の判定で当該コマンドに成功依存リストがないと判定された場合は、当該コマンドは他のどのコマンドの実行結果にも依存しないということなので、ステップＳ１８にてそのコマンドを実行し、その実行結果を記録する（Ｓ２０又はＳ２１）。
【００６２】
以上の処理手順で、終了コマンドが実行され、それが成功すれば、ジョブ全体の実行結果が成功となる。終了コマンドの成功依存リストのコマンドのうちどれか１つでも失敗すれば、終了コマンドは実行されず、ジョブ全体の実行結果は失敗となる。この場合、文書ＤＢ１０には変更が加えられない。
【００６３】
以上のような処理によれば、失敗依存リストのあるコマンドはそのリストに該当する少なくとも１つのコマンドの実行が失敗した場合に限り実行され、成功依存リストのあるコマンドはそのリストに該当する全てのコマンドの実行が成功した場合に限り実行されるようにすることができる。
【００６４】
図９及び図１０の処理において、失敗依存リストについてのステップＳ１２〜Ｓ１４と、成功依存リストについてのステップＳ１５〜Ｓ１７とは、論理的には並列関係であり、どちらを先に実行してもよい。
【００６５】
以上に説明したように、本実施形態の文書処理システムによれば、ジョブの内容を定義乃至プログラミングするプログラマは、ジョブにおいて実行する個々の処理をコマンドテンプレート１１０として宣言的に記述するだけで、個々の対象に対するコマンドの繰り返しや、成功依存関係又は失敗依存関係に基づく処理の条件分岐を実現することができる。
【００６６】
以上の例では、成功依存関係及び失敗依存関係は、依存する側（図２の例ではコマンドＣ）のコマンドに成功依存リスト又は失敗依存リストを持たせることで表現したが、実装方式はこれに限らない。例えば、依存される側（図２の例ではコマンドＡ及びＢ）のコマンドに対し依存する側のコマンドのキーなどを持たせることによっても、同様の関係は表現できる。また、成功依存関係及び失敗依存関係を示す情報を、ジョブテンプレートとは別に作成して利用してもよい。
【００６７】
また、以上では、電子文書の処理を例にとって説明したが、上記実施形態の方式は、文書に限らず、様々な対象データに対する処理にも適用可能である。
【００６８】
以上に説明した文書処理システムは、典型的には、汎用のコンピュータシステムにて上記の文書検索部１２，テンプレート実行部１４，コマンド実行部１６及びＵＩ部１８の機能を記述したプログラムを実行することにより実現される。コンピュータシステムは、図１１に示すようにハードウエアとして、ＣＰＵ（中央演算装置）２０、メモリ（一次記憶）２２、各種Ｉ／Ｏ（入出力）インタフェース２４等がバス２６を介して接続された回路構成を有する。また、そのバス２６に対し、例えばＩ／Ｏインタフェース２４経由で、ＨＤＤ（ハードディスクドライブ）２８やＣＤやＤＶＤ、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体を読み取るためのディスクドライブ３０が接続される。このようなドライブ２８又は３０は、メモリに対する外部記憶装置として機能する。上述した実施の形態の処理内容が記述されたプログラムが、そのような外部記憶装置に保存され、コンピュータシステムにインストールされる。外部記憶装置に記憶されたプログラムがメモリに読み出されＣＰＵにより実行されることにより、上述の実施の形態の処理が実現される。
【図面の簡単な説明】
【００６９】
【図１】ジョブテンプレートのデータ内容の例を示す図である。
【図２】成功依存関係を説明するための図である。
【図３】失敗依存関係を説明するための図である。
【図４】文書処理システムのシステム構成例を示す図である。
【図５】文書リストのデータ内容の例を示す図である。
【図６】テンプレート実行部の処理手順を示すフローチャートである。
【図７】ジョブテンプレートから生成されたコマンド列の例を示す図である。
【図８】終了コマンドを説明するための図である。
【図９】コマンド実行部の処理手順の一部を示すフローチャートである。
【図１０】コマンド実行部の処理手順の残りの一部を示すフローチャートである。
【図１１】文書処理システムが実装されるコンピュータのハードウエア構成の一例を示す図である。
【符号の説明】
【００７０】
１０  文書ＤＢ、１２  文書検索部、１４  テンプレート実行部、１６  コマンド実行部、１８  ＵＩ部、１００  ジョブテンプレート、１０１  キー、１０２  タイプ、１０３  コマンド内容、１０４  成功依存リスト、１０５  失敗依存リスト。
【図１】
2007156863.tif 000003
【図２】
2007156863.tif 000004
【図３】
2007156863.tif 000005
【図４】
2007156863.tif 000006
【図５】
2007156863.tif 000007
【図６】
2007156863.tif 000008
【図７】
2007156863.tif 000009
【図８】
2007156863.tif 000010
【図９】
2007156863.tif 000011
【図１０】
2007156863.tif 000012
【図１１】
2007156863.tif 000013