以下、本発明の実施の形態を図面を参照して説明する。
本発明を実施するためのコンピュータシステム、すなわちXMLデータ用ボタンシステムのハードウェアは、図1に示すように、中央処理装置10、記憶装置12、表示装置14及び入力装置16から主に構成されている。表示装置14が出力用のユーザインターフェイスとなり、入力装置16が入力用のユーザインターフェイスとなる。ユーザは、表示装置14及び入力装置16を使用して、後述するアプリケーション(XMLデータボタン処理プログラム)を通してXMLデータ用ボタンシステムに指令を送る。
XMLデータ用ボタンシステムのソフトウェアは、XML形式で記載されたデータ(XMLデータ)を基に、操作ボタン(以降、XMLボタンという)を自動生成するために、図2に示すように、XML文書を、内容の参照や更新といった活用をしやすい形で記憶装置に展開し、外部の機能に対してそのXMLが持つ情報に問い合わせる能力を有するXMLパース機能20と、入力されたXML(入力XML)の内容をXMLパース機能20の能力を使って把握してスキーマを自動判断し、かつ入力XMLをどのように操作ボタン化するかを設定し、それらをXMLデータ構造定義テーブルとして保存する能力を有する構造管理機能22と、XMLデータ構造定義テーブルが持つ情報を基に入力XMLから操作ボタンを生成するためのデータを抽出しボタン生成用ソースデータテーブルに保存する能力を有するボタン生成用ソースデータ生成機能24と、ボタン生成用ソースデータテーブルからボタンクラスと個別ボタンから成る操作ボタン(以降、XMLボタンという)を表示するボタン生成機能26と、表示されたXMLボタンをユーザに選択させるだけで入力XMLが持つ情報を取り出すことができる能力を有するボタン機能28の5つの機能から構成される。
XMLパース機能20、構造管理機能22、ボタン生成用ソースデータ生成機能24、ボタン生成機能26、及びボタン機能28を持つ情報処理装置及びプログラムを、総称してXMLデータ用ボタンシステムと呼ぶ。
XMLデータ用ボタンシステムは、各機能を利用するための外部インターフェイスを公開し、アプリケーション(XMLデータボタン処理プログラム)30は、そのインターフェイスを使用して、各機能と連携することにより、XMLデータを基にXMLボタンを自動生成し、ユーザがボタン選択によってXMLデータを分析したり活用したりする処理環境を提供する。
アプリケーション30は、XMLデータ用ボタンシステムとユーザとの間に立ち、ユーザの要求をXMLデータ用ボタンシステムの各機能に伝えたり、各機能の処理状況をユーザに示したり、XMLボタンのボタン操作の結果ユーザにとって特定の用途に向けた有効な処理を行ったりするプログラムである。以降、処理環境を提供するアプリケーション(XMLデータボタン処理プログラム)30を単にアプリケーションと呼ぶ。
図2では、ある機能から別な機能への矢印が示されている。実線による矢印は、根もとの機能が先の機能を直接使用することを表す。破線による矢印は、根もとの機能が先の機能によって作成されるデータを参照する等、先の機能に間接的に依存することを表す。以下、各機能の概要を先ず説明する。
XMLパース機能20は、入力されたXMLデータ(入力XML)を解析し、その内容をXMLデータテーブルに展開し、XMLデータテーブルを参照しながら他の機能からの入力XMLの内容に対する問い合わせに応える。ここで、XMLデータテーブルは、XMLを構成する任意の要素や属性、任意の要素や属性の相互関係等を保持し、XMLパース機能はこのデータテーブルに対するアクセス能力を他の機能に提供する。
構造管理機能22とボタン生成用ソースデータ生成機能24は、操作ボタンを生成するまでの過程において、入力XMLを参照するためにXMLパース機能20の能力を利用するので、本発明を構成する不可欠の機能であるが、XMLパース機能20自身は、本発明の主体ではない。このような能力を有するのであれば、普及しているXMLパーサによって代替できる。
構造管理機能22は、「XMLデータ構造定義テーブル」の生成と管理を行う。XMLデータ構造定義テーブルは、スキーマ言語が記述された「スキーマ定義部」と、入力XMLを操作ボタンにする際の情報(以降、XMLボタン化条件と呼ぶ)が記述された「ボタン情報部」に分かれる。構造管理機能22は、XMLパース機能20を利用して入力XMLのスキーマを自動的に判断し、結果をスキーマ定義部に保存する。また、アプリケーション30を介して自動決定されたスキーマをユーザに示し、必要に応じてユーザにスキーマの調整をさせてスキーマ定義部を更新する能力を持つ。更に、アプリケーション30を介してスキーマ定義部に保存されているスキーマをユーザに示し、操作ボタン化する際の「データ単位」となる要素をユーザに指定させ、結果をボタン情報部に保存する能力を持つ。
ボタン生成用ソースデータ生成機能24は、入力XMLを特定の構造を持つデータの集合と見なして処理を行うが、データ単位は、前記特定の構造を示し、データ単位の実体1件を「対象インスタンス」と呼ぶ。データ単位を決定することにより、入力XMLは、対象インスタンスの集合と見なすことができる。構造管理機能22は、入力XML中でXMLボタン化したくないものを対象インスタンスから除くために、ユーザにアプリケーションを介して「除外インスタンス」を指定させ、結果をボタン情報部に保存する能力を持つ。
入力XMLに関係するどのデータ値をボタン生成用ソースデータテーブルに出力するかを指定するものが「抽出対象」であるが、構造管理機能22は、更に、抽出対象をユーザにアプリケーション30を介して指定させ、結果をボタン情報部に保存する能力を持つ。データ単位の子孫要素または祖先要素のうち、ボタン生成用ソースデータテーブルに出力したいデータ値を持つもの、または前記要素に属して出力したいデータ値を持つ属性が抽出対象となることができる。抽出対象は、ボタン生成用ソースデータテーブルに出力すると同時にXMLボタン化したい「ボタン化対象」と、ボタン生成用ソースデータテーブルに出力するだけでXMLボタン化したくない「参照対象」の2種類がある。
ボタン生成用ソースデータ生成機能24は、「ボタン生成用ソースデータテーブル」の生成を行う。ボタン生成用ソースデータテーブルは、ボタン生成機能26に渡すためのデータ構造で、フィールドから構成されるレコードの集合から成るテーブルで実現される。
ボタン生成用ソースデータ生成機能24は、XMLデータ構造定義テーブルに含まれるボタン情報部に記述された内容に従って、入力XMLからボタン生成用ソースデータテーブルを生成する処理を開始するが、まずボタン情報部で定義されているデータ単位の実体である対象インスタンスの候補を入力XMLから全て取り出す。続いて、ボタン情報部に定義されている除外インスタンスに該当するものを前記対象インスタンス候補から除き、最終的な対象インスタンスを決定する。
次に、ボタン生成用ソースデータ生成機能24は、ボタン生成用ソースデータテーブルの実データであるレコードの生成を開始するが、ボタン情報部で指定されている抽出対象1個が前記テーブルのフィールド1個に対応する。ボタン情報部で指定されている抽出対象が複数あれば、前記抽出対象の入力XMLにおける親子関係を保持しつつ、データを取り出してレコードを生成し、各レコードのフィールド値を決定する。全ての対象インスタンスに関連する抽出対象を取り出し、レコードを生成してフィールド値を決定すると、ボタン生成用ソースデータ生成機能24は、ボタン生成用ソースデータテーブルの生成を完了する。
ボタン生成機能26は、XMLボタンを生成して表示する。XMLボタンは、ボタン生成用ソースデータ生成機能24によって生成されたボタン生成用ソースデータテーブルを基にボタン生成機能26によって自動生成される操作ボタンであり、前記操作ボタンは、「ボタンクラス」と「個別ボタン」から構成される。ボタンクラスは、ボタンクラス名称を持ち、ボタン生成用ソースデータテーブルのフィールドのうちボタン化対象として生成されたものが、ボタンクラスに対応する。「個別ボタン」は、ボタンクラスに属し、ボタン生成用ソースデータテーブルの当該ボタンクラスに対応するフィールドに現れるユニークな値が個別ボタンとなり、前記値が個別ボタン名称となる。各個別ボタンは、ボタン生成用ソースデータテーブルのどのレコードから生成されたかを記憶している。ボタンクラスは、当該ボタンクラスに属する個別ボタンをグループ化した形でボタン生成機能によって表示される。
ボタン機能28は、表示している個別ボタンをユーザが選択するだけで、選択状況に応じて入力XML内のデータを抽出する能力を提供する。選択された個別ボタンは、ボタン生成用ソースデータテーブルのどのレコードから生成されたかを記憶しているので、ボタン機能28は、ユーザが必要とするデータをボタン生成用ソースデータテーブルから取り出すことができる。取り出されたデータは、アプリケーション30が自由に利用することができる。個別ボタン選択によってボタン生成用ソースデータテーブルのレコードが特定されるが、ボタン生成用ソースデータテーブルにはボタン化されていない参照対象から生成されたフィールドも存在するので、アプリケーション30は、これらの参照も行うことが可能である。
つまり、XMLパース機能20は、図3(a)に示すように、ボタン化したいXMLデータを入力XML32として受け取り、この入力XML32を解析して、その内容をXMLデータテーブル34に展開する。そして、XMLパース機能20は、入力XML32を一度XMLデータテーブル34に展開すると、図3(b)に示すように、XMLデータテーブル34を参照しながら、随時、外部機能36からの入力XML32の内容に対する問い合わせに応えたり、内容の更新を行ったりすることができる。
構造管理機能22は、入力XMLを受け取り、入力XMLの構造を自動的に識別した情報を保持するスキーマ定義部と、XMLボタン化条件を保持するボタン情報部から成るXMLデータ構造定義テーブルを生成する。XMLデータ用ボタンシステムにおいて、構造管理機能22は、入力XMLの内容を参照するために、図2に示すように、XMLパース機能20を使用する。
ボタン生成用ソースデータ生成機能24は、入力XMLとXMLデータ構造定義テーブルを受け取り、当該入力XMLを当該XMLデータ構造定義テーブルの内容に従って、XMLボタンにするために必要なデータであるボタン生成用ソースデータテーブルを生成するための機能であり、フィールドから構成されるレコードの集合データであるボタン生成用ソースデータテーブルを生成する。XMLデータ用ボタンシステムにおいて、ボタン生成用ソースデータ生成機能24は、入力XMLの内容を参照し、構造管理機能22が生成するXMLデータ構造定義テーブルを必要とするので、図2に示すように、XMLパース機能20を使用し、また構造管理機能22に依存する。
ボタン生成機能26は、入力としてボタン生成用ソースデータテーブルを受け取り、その内容を基にXMLボタンを生成し表示装置に表示する。XMLデータ用ボタンシステムにおいて、ボタン生成機能26は、ボタン生成用ソースデータ生成機能24が生成するボタン生成用ソースデータテーブルを必要とするので、図2に示すように、ボタン生成用ソースデータ生成機能24に依存する。
ボタン機能28は、入力として、ユーザによるボタン選択情報を受け取り、その内容に従ってXMLボタンの表示を更新したり、ボタン生成用ソースデータテーブルの情報を取り出したりする。XMLデータ用ボタンシステムにおいて、ボタン機能28は、ボタン生成機能26が生成するXMLボタンを必要とし、またボタン生成用ソースデータ生成機能24が生成するボタン生成用ソースデータテーブルを参照するので、図2に示すように、ボタン生成機能26及びボタン生成用ソースデータ生成機能24に依存する。
入力XMLの内容は、1個の電子ファイルに書かれて記憶装置に保存されている。表1に、本発明の実施の形態で使用する入力XMLの一例を示す。以下、この入力XMLを参照して説明する。
表1に示す例は、ある食品会社の営業員の営業成績を記録したものである。以降、この表1に示す入力XMLを「営業成績.xml」とし、コンピュータの記憶装置に保存されているものとする。尚、この例では、XML宣言を省略してある。また、以降でXML中の特定の部分を指定する際には、XPathの表記法に準じた表記を行う。
表1に示す入力XML「営業成績.xml」で最初に現れる「社員」要素から、当該社員の情報が以下のように読み取れる。名前が“中村 里沙”、社員番号が“43001”の実績は、「地域=“神奈川”、期間=“2006年4月”、金額=“2,500,000”」、同様に、「地域=“埼玉”、期間=“2006年4月”、金額=“5,800,000”」、更に、「地域=“埼玉”、期間=“2006年5月”、金額=“6,100,000”」である。また、「社員」要素の祖先階層の要素とその属性を見ると、“食品事業部”(組織階層1)の“菓子販売部”(組織階層2)に所属していることがわかる。
同様に、表1に示す入力XML「営業成績.xml」の最後に現れる「社員」要素から、当該社員の情報が以下のように読み取れる。名前が“横山 美雪”、社員番号が“41294”の実績は、「地域=“神奈川”、期間=“2006年5月”、金額=“3,900,000”」で、“食品事業部”(組織階層1)の直属である。
表1に示す入力XML「営業成績.xml」は、図4で示すような構造を持つ。図4での記法は、以下の通りである。四角形のうち、左側が黒く塗りつぶされていないものは要素を表し、左側が黒く塗りつぶされているものは属性を表す。実線による矢印は、要素と要素を連結し、矢印の根もとにある要素は、その矢印の先にある要素を子として持つことを表す。実線による矢印には、数字またはアスタリスク(*)が付属されている。数字が付属されている場合、親要素は、矢印の先の子要素をその数字に示された個数持つことを表す。アスタリスクが付属されている場合、親要素は、矢印の先の子要素を0個以上の任意の個数持つことを表す。破線による矢印は、要素と属性を連結し、矢印の根もとにある要素は、その矢印の先にある属性を持つことを表す。斜体字で名称が書かれた要素は、文字内容を持つ。
図4に示すように、トップレベル要素「営業成績」は、子要素として「組織階層<n>」を任意個持つ。要素「組織階層<n>」は、再帰的構造を成し、子要素として任意個の「組織階層<n>」と1個の「社員リスト」を持ち、属性として「名前」を持つ。ここで「<n>」は、現れる階層の深さに応じて決まる変数と見なす。「営業成績」要素の子要素として現れる「組織階層<n>」は「組織階層1」となり、「組織階層1」の子要素として現れる「組織階層<n>」は「組織階層2」となることを表す。要素「社員リスト」は、子要素として「社員」を任意個持つ。要素「社員」は、子要素として「名前」、「社員番号」、及び「実績リスト」をそれぞれ1個ずつ持つ。要素「実績リスト」は、子要素として「実績」を任意個持つ。要素「実績」は、子要素として「期間」及び「金額」をそれぞれ1個ずつ持ち、属性として「地域」を持つ。
図4に示していないが、次のような制約があるものとする。「//組織階層<n>/@名前」における属性、及び「//社員/名前」における要素の値は、任意の文字列である。「//社員番号」における要素の値、及び「//金額」における要素の値は、整数である。「//実績/@地域」における属性は、売上が発生した地域名を値として取る。「//期間」における要素の値は、年月を表す日付文字列である。
以降の説明において、入力XML、XMLデータ構造定義テーブル、及びボタン生成用ソースデータテーブルを図示する場合、それぞれ図5に示した凡例に則る。すなわち、図5(a)は入力XML32を、図5(b)はXMLデータ構造定義テーブル40を、図5(c)はボタン生成用ソースデータテーブル42をそれぞれ示す。
入力XMLからXMLボタンを生成し表示するまでの基本シーケンスを図6に示す。図6では、ユーザがアプリケーション30を起動した後のシーケンスを表現している。図6での記法は、以下の通りである。
縦の破線は、当該破線の頂上に位置する機能(またはユーザ)が生存している区間を示す。また、破線の上から下に時間が進行するものとする。破線に載る縦長の四角形は、当該機能が実際に動作している区間(以降、活性区間と呼ぶ)を表す。ある機能の活性区間から別の機能の活性区間に延びる矢印は、根もとの機能が先の機能を使用することを表し、どのように使用するかを矢印の下に記述する。矢印に、図5で示すデータの凡例図が付加している場合は、機能の使用に際して当該データを必要とすることを表す。上に現れる矢印ほど、時間的に先に起こる事象であることを示す。各機能の詳細は後述するが、ここではXMLボタンを生成し表示するまでの基本シーケンスを図6に従って説明する。
(1)ユーザは、アプリケーション30に対して、まずXMLデータ構造定義テーブルを作成するために入力XML32を渡す。
(2)アプリケーション30は、入力XML32をユーザから受けると、XMLデータ構造定義テーブルのスキーマ定義部の自動生成を構造管理機能22に要求する。その際、ユーザから受け取った入力XML32を構造管理機能22に渡す。構造管理機能22は、受け取った入力XML32からXMLデータ構造定義テーブルのスキーマ定義部を自動的に生成する。この際、入力XML32の内容を参照するため、随時、XMLパース機能20を使用するが、図6では省略している。構造管理機能22によってスキーマ定義部が自動生成されると、アプリケーション30は、その定義情報を表示装置に表示する。
(3)ユーザは、表示装置に表示された情報を基に、必要に応じて、スキーマ定義部の調整を入力装置によってアプリケーション30に指示する。また、ユーザは、ここでボタン化条件の指定も入力装置によってアプリケーション30に指示する。
(4)アプリケーション30は、ユーザから受けた指示を構造管理機能22に伝え、構造管理機能22は、調整要求に従ってスキーマ定義部を更新する。また、構造管理機能22は、ユーザから伝えられた内容をXMLデータ構造定義テーブルのボタン情報部に保存し、XMLデータ構造定義テーブルが完成する。XMLデータ構造定義テーブルが完成すると、XMLボタン生成のために必要なユーザ設定が完了したことになる。
(5)ユーザは、入力XML32とこれに対応するXMLデータ構造定義テーブル40をアプリケーション30に渡し、ボタン表示を要求する。
(6)アプリケーション30は、ボタン表示に必要となるボタン生成用ソースデータテーブルを作成するために、ユーザから受け取った入力XML32とXMLデータ構造定義テーブル40をボタン生成用ソースデータ生成機能24に渡し、ボタン生成用ソースデータテーブルの生成を要求する。ボタン生成用ソースデータ生成機能24は、受け取った入力XML32とXMLデータ構造定義テーブル40からボタン生成用ソースデータテーブルを自動的に生成する。この際、入力XML32の内容を参照するため、随時、XMLパース機能20を使用するが、図6では省略している。
(7)ボタン生成用ソースデータテーブルが完成すると、アプリケーション30は、次に、ボタン生成用ソースデータテーブル42をボタン生成機能26に渡し、ボタン生成を要求する。ボタン生成機能26は、受け取ったボタン生成用ソースデータテーブル42から、XMLボタンを自動的に生成して表示装置に表示する。
(8)XMLボタンの生成と表示が完了すると、ユーザは、表示されたXMLボタンを入力装置で操作する。
(9)アプリケーション30は、ボタン機能28を使いながら、ユーザによるボタン操作に応じて、XMLボタンの再表示を行う。
アプリケーション30は、XMLボタン操作に応じて、2次的な効果をもたらす環境をユーザに提供するが、本発明の範囲外となるので、これ以上言及しない。
図6では、ユーザがアプリケーション30を使用してXMLデータ用ボタンシステムの各機能に処理を要求する場合の基本シーケンスを示したが、各機能について、以下に詳細に説明する。
1.XMLパース機能
XMLパース機能20は、図3(a)に示すように、ボタン化したいXMLを入力XML32として受け取ると、入力XML32を解析し、その内容をXMLデータテーブル34に展開する。図3(b)に示すように、XMLパース機能20が外部機能36からの入力XML32の内容に対する問い合わせに応えるため、XMLデータテーブル34には、入力XML32を構成する全ての要素や属性の相互関係や位置関係等の情報が格納される。XMLパース機能20は、任意要素の子要素数、任意要素の子要素リスト、任意要素に属する属性リスト、任意要素に属する任意属性の値、任意の名称を持つ要素のリスト等の情報を、XMLデータテーブル34を参照することによって得ることができ、また他の機能からの同様の問い合わせに応えることができる。
XMLパース機能20は、図3(b)に示すように、XMLデータテーブル34を参照することによって、入力XML32内の任意の要素や属性の値を変更したり、任意の要素や属性に新規の要素や属性を追加したりするといった編集能力を持ち、また、他の機能がこれらの能力を駆使して自由に既存のXMLを編集したり、新規のXMLを作成したりすることもできる。
以上の能力を有するのであれば、普及しているXMLパーサによってXMLパース機能20を代用することも可能である。本発明では、XMLボタン生成に用途を絞ってXMLデータテーブル34の構成(要素)を特定している点が、通常のXMLパーサとは異なる。
次に、XMLデータテーブルの実現方法について、図7〜図9を参照して説明する。XMLは、要素をノードとし、文書要素をルートとするツリー(木構造)と見なすことができる。また、属性は、要素を表すノードに依存するが、木構造から独立したノードと見なすことができる。
例えば、表1に示す入力XML「営業成績.xml」は、図7に示すようなツリーで表現できる。ただし、図7では、文書要素を含めて上位3階層までの要素に絞って表示し、残りは省略している。図7に示す四角形がノードであり、要素ノードは、子要素ノードに実線で連結している。また要素が属性を持つ場合、破線で当該属性ノードに連結している。図7の最上部のノード「営業成績」は、「営業成績.xml」の文書要素を表す。「営業成績」要素は、「組織階層1」の1個の子要素を持ち、図7では、それぞれを表すノードに実線で連結することによりその関係が示されている。「組織階層1」要素は、「名前」属性を持つので、当該属性を表すノードに破線で連結することによりその関係が示されている。また、「名前」属性は“食品事業部”の値を持つことも図示してある。更に、「組織階層1」要素は、「名前」属性として“菓子販売部”の値を持つ「組織要素2」、「名前」属性として“健康食品販売部”の値を持つ「組織要素2」、及び「社員リスト」の3個の子要素に実線で連結している。
入力XMLをツリー構造で管理するためのデータ構造として、図8(a)に示すノード構造と、図8(b)に示すノードリスト構造が考えられる。ノード構造は、ツリーのノードを表すデータ構造で、図示の例では、(1)タイプ(要素か属性か)、(2)ノードの名称を表す文字列、(3)ノードの値を表す文字列、(4)子要素リストを表すノードリスト構造、(5)属性リストを表すノードリスト構造、及び(6)親要素を表すノード構造への参照の6つのエリアを持つ。ノードリスト構造は、複数のノードへの参照を表す可変長のデータ構造で、図示の例では、参照するノードの個数を表す整数と、ノードへの参照をノードの個数分持つ。
例えば、図7に示す「営業成績.xml」の文書要素「営業成績」を、図8(a)に示すノード構造で表すと、図9(a)に示すようになる。すなわち、文書要素は要素なので、タイプは「要素」となる。ノードの名称は、要素名称である「営業成績」となる。文字内容を持たないので、値は空となる。1個の子要素を表すノードリスト構造を持ち、0個の属性を表すノードリスト構造を持つ。ルートなので親要素ノード構造への参照は空となる。
文書要素の子要素を表すノードリスト構造は、図9(b)に示すように、文書要素の子要素が1個なので、個数は1となり、1個の子要素を表すノード構造への参照を持つ。唯一のノード構造への参照は、文書要素の唯一の子要素(「名前」属性が“食品事業部”の「組織階層1」要素)を表すノード(ノード1)を示す。属性の子要素を示すノードリスト構造は、図9(c)に示すように、個数が0となり、ノード構造への参照を持たない。
文書要素の唯一の子要素を表すノード構造は、図9(d)に示すように、タイプが「要素」で、ノードの名称が「組織階層1」で、値が空で、3個の子要素を表すノードリスト構造を持ち、1個の属性を表すノードリスト構造を持つ。親要素は文書要素なので、当該要素を表すノード構造への参照を持つ。
XMLデータテーブルを、以上のようなノード構造とノードリスト構造の集合から構成されるデータとして実現すると、入力XMLに含まれるあらゆる情報を得ることができる。また、ノード構造とノードリスト構造の値を変更したり、前記構造を新たに生成したりすることによって、XMLの内容の変更や新規XMLの作成を行うことができる。
2.構造管理機能
構造管理機能22は、XMLデータ構造定義テーブルの生成や更新を行う。XMLデータ構造定義テーブルは、入力XMLの構造及びXMLボタン化条件を記述したデータである。構造管理機能22は、入力XMLを読み込んでその構造を解析して、自動的にXMLデータ構造定義テーブルのスキーマ定義部を生成する。XMLデータ構造定義テーブルは、例えば、それ自体をXMLによって記述するようにしてもよい。この例の場合、入力XMLを読むのに加え、XMLデータ構造定義テーブルを生成するため、XMLパース機能20を必要とする。スキーマ定義部の自動生成方法については後述する。
以下、構造管理機能22が、入力XMLとして「営業成績.xml」を受け取った場合、自動生成するXMLデータ構造定義テーブルを、記憶装置にファイル「営業成績.xdst」として保存し、また、XMLデータ構造定義テーブルをXMLで記述した場合を例にとって説明する。表2は、XML構造定義テーブルの構成を示す。
表2に示すように、文書要素に「XMLデータ構造定義テーブル」がある。その子要素として、スキーマ定義に関する情報が子孫要素または属性に記述される「スキーマ定義部」と、ボタン情報に関する情報が子孫要素または属性に記述される「ボタン情報部」が配置される。「スキーマ定義部」要素、及び「ボタン情報部」要素についての詳細は後述する。
スキーマ定義部は、入力XMLの構造を定義するための、XMLのスキーマ言語としての役割を持つ。すなわち、入力XMLに現れる各要素がどのような要素を子に持つか、どのような値を取るか、どのような属性を持つか、前記属性はどのような値を取るか、といった情報がスキーマ定義部に記述される。XMLデータ用ボタンシステムは、スキーマ定義部に記述された構文に従ったXMLであれば、異なる入力XMLでも同一の構造を持つと判断する。
構造管理機能22が、表1に示す入力XML「営業成績.xml」を基に、その構造を解析し、XMLのスキーマを自動生成していくプロセスを、図10〜図15を参照して段階的に説明する。
構造管理機能22は、スキーマ自動生成の最初の段階として、要素構造の連続性の判断を行う。要素構造の連続性の判断とは、共通の親要素を持つ2個以上の要素(兄弟要素)同士が、互いに構造が同一かどうかを見極め、同一ならば、前記親要素の子としては当該構造の要素が任意個連続して現れる可能性があると判断することである。ここでは、2個以上の要素がそれぞれ同じ要素名称を持ち、同じ名称の属性を持ち、子孫要素を持つならば同じ順序で同じ名称の子孫要素とそれに属する属性を同じ名称で持つ場合、前記2個以上の要素を同一構造と見なす。構造が同一かどうかの判断は、XMLデータテーブルのツリー表現におけるリーフに近い要素から順に行う。
この例では、表1に示す入力XML「営業成績.xml」は、図3(a)に示すように、XMLパース機能20によって、XMLデータテーブル34に展開される。XMLデータテーブルのうち、「営業成績.xml」に現れる最初の「社員」要素の部分は、図10に示すように展開される。尚、以降の解説で参照しやすいように、図10では「社員/実績リスト/実績」要素には、XPathの述部を表す文字列(角括弧とその中身)を記述している。
図10において、「社員/実績リスト/実績[1]/期間」と「社員/実績リスト/実績[1]/金額」は、互いに兄弟要素だが、要素名称が異なるので、同じ構造ではない。「社員/実績リスト/実績[2]」の子要素2個も同様に同じ構造ではない。「社員/実績リスト/実績[3]」の子要素2個も同様に同じ構造ではない。「社員/実績リスト/実績[1]」、「社員/実績リスト/実績[2]」及び「社員/実績リスト/実績[3]」は、互いに兄弟要素であり、同じ要素名称「実績」を持ち、同じ名称の属性「地域」を持ち、同じ名称の子要素「期間」と「金額」を同じ順序で持つので、同じ構造である。よって、「社員/実績リスト」の子として、「実績」要素が任意個連続して現れる可能性があると判断される。「社員/名前」と「社員/社員番号」と「社員/実績リスト」は、互いに兄弟要素だが、要素名称が異なるので、同じ構造ではない。
このように、「営業成績.xml」の全てに対して要素構造の連続性判断を行った結果を、図11に示す。図11は、スキーマを表し、この時点でのスキーマは、例えば次のような性質を持つ。文書要素「営業成績(/営業成績)」の子要素として「組織階層1(/営業成績/組織階層1)」が1個出現し、「営業成績」は他に子要素を持たない。「組織階層1」は「名前」属性を持ち、子要素として「組織階層2(/営業成績/組織階層1/組織階層2)」が任意個連続して現れる可能性がある。「組織階層2」要素は、「名前」属性を持つ。
図11に示すスキーマは、一般的なツリー(木構造)に見立てることができるが、このツリーを要素構造ツリーと呼ぶ。要素構造ツリーでは、ツリーを構成する各要素をノードとし、属性はノードと見なさない。最も左上(先頭)のノードをルートとする。また、子ノードを持たないノードをリーフと呼ぶ。具体的には、図11において、ルートは「/営業成績」要素である。「//組織階層1/@名前」や「//組織階層2/実績/@地域」等は属性なので、要素構造ツリーにおいてノードではない。「//組織階層1/社員リスト/社員/名前」や「//組織階層2//期間」等はリーフである。
以降のスキーマ自動生成は、XMLデータテーブルのツリーではなく、要素構造ツリーを参照しながら行う。
構造管理機能22は、スキーマ自動生成の第2段階として、異なる要素下に出現する要素間での構造同一性の判断を行う。異なる要素下に出現する要素間での構造同一性の判断とは、互いに兄弟ではない要素同士の構造が同一かどうかを見極め、同一ならば要素構造ツリーから同一な部分の冗長性を省いていくことである。ここでは、着目対象の2個以上の要素がそれぞれ同じ要素名称を持ち、同じ名称の属性を持ち、子要素を持つならば同じ順序で同じ名称の子孫要素とそれに属する属性を同じ名称で持つ場合、前記2個以上の要素を同一構造と見なす。構造が同一かどうかの判断は、図11に示す要素構造ツリーのツリー表現におけるリーフに近い要素から順に行い、リーフでかつ属性を持たない要素は判断対象から外す。
例えば、図11に示す要素構造ツリーにおいて、「//組織階層1/社員リスト//期間」や「//組織階層2//社員/名前」等は、リーフでかつ属性を持たない要素なので、判断対象から外す。最初の判断対象要素は、「//組織階層1/社員リスト//実績」と「//組織階層2//実績」である。どちらも要素名称が「実績」で、いずれの「実績」要素も「期間」と「金額」という同じ名称の2個の子要素を持ち、いずれの「実績」要素も「地域」という同じ名称の属性を持つ。よって構造管理機能22は、「//組織階層1/社員リスト//実績」と「//組織階層2//実績」が互いに同一構造を持つと判断する。
図12は、「//組織階層1/社員リスト//実績」と「//組織階層2//実績」において、「実績」要素以下の構造を同一と判断した結果を図示したものである。図12(a)において、両「実績」要素の部分が、枠が破線となって「実績:[構造1]」と表記されているが、これは、「[構造1]」という外部の構造を参照し、要素名が「実績」であるという意味である。どちらも同じく「実績:[構造1]」となっているので、同一構造かつ同一名称であることを示している。[構造1]は、図12(b)に示すように、「[構造1]」と表記された二重線四角形をルートノードとする別に設定したツリーによって、図12(a)に示す、ルートが文書要素「営業成績」の要素構造ツリーとは独立して保持される。このように、別に設定したツリーを要素構造サブツリーと呼ぶ。また、要素構造ツリーから要素構造サブツリーを取り出すことを正規化と呼ぶ。
以下、図12(a)で示す「実績:[構造1]」のような要素構造サブツリーを参照するノードを、属性を持たないリーフ要素と見なして、異なる要素下に出現する要素間での構造同一性の判断を進めていく。従って、前記「実績:[構造1]」は、構造同一性の判断対象から除外されることになって、最もリーフに近いものに着目すると、「//組織階層1/社員リスト//実績リスト」と「//組織階層2//実績リスト」となる。これらは、要素名が「実績リスト」で同一名称であり、子要素として同一構造の「実績:[構造1]」を持ち、属性を持たない。よって構造管理機能22は、「//組織階層1/社員リスト//実績リスト」と「//組織階層2//実績リスト」が互いに同一構造を持つと判断する。
図13は、「//組織階層1/社員リスト//実績リスト」と「//組織階層2//実績リスト」において、「実績リスト」要素以下の構造を同一と判断した結果を図示したものである。つまり、図13(a)に示す文書要素「営業成績」の要素構造ツリーは、図13(b)に示す、ルートノード[構造2]の要素構造サブツリーを参照し、ルートノード[構造2]の要素構造サブツリーは、図13(c)に示す、[構造1]の要素構造サブツリーを参照する。構造管理機能22は、図11〜図13で示す、異なる要素下に出現する要素間での構造同一性の判断に関する処理を、以降も同一構造が発見できなくなるまで続ける。最終的に、構造管理機能22は、入力XML「営業成績.xml」のデータ構造を、前記同一構造を要素構造サブツリーとその参照に置き換えながら、図14に示す状態まで正規化する。
正規化の最後の過程として、要素構造ツリーのノードのうち、属性を持つもの、またはリーフでないものに着目し、リーフに近いものから順に全て要素構造サブツリー参照に変換する。更に、構造管理機能22は、要素構造ツリーのルートノード(文書要素)も要素構造サブツリー参照に変換し、XMLのスキーマ自動生成のプロセスを完了する。
具体的には、図14では、同一構造を要素構造サブツリー参照に置き換える処理が完了した状態を示しており、ここでは、図14(a)に示す、「組織階層2」と「組織階層1」がこの順で正規化の最後の着目対象の要素となる。つまり、これらの要素は、図14(b)に示す、ルートノード[構造4]の要素構造サブツリーを参照し、ルートノード[構造4]の要素構造サブツリーは、図14(c)に示す、[構造3]の要素構造サブツリーを参照する。ルートノード[構造3]の要素構造サブツリーは、図14(d)に示す、[構造2]の要素構造サブツリーを参照し、ルートノード[構造2]の要素構造サブツリーは、図14(e)に示す、[構造1]の要素構造サブツリーを参照する。
更に、要素構造ツリーのルートノードである「営業成績」も要素構造サブツリー参照とすると、図15に示すようになり、これでXMLのスキーマ定義部を自動生成するための一連の処理が完了する。つまり、図15(a)に示す「営業成績」は、図15(a)〜図15(h)に示す、合計7個の要素構造サブツリー参照に順次変換される。
表3は、データ構造の正規化を完了した図15に示す状態から自動生成したXMLデータ構造定義テーブルのスキーマ定義部の例(XML形式で保存したもの)を示す。尚、この実施の形態では、スキーマ定義部をXML Schema 1.0に似た文法で表現し、XML Schema 1.0の文法と異なる部分については、その都度説明する。
表3に示す「スキーマ定義部」要素の下では、「element」、「complexType」、「sequence」及び「attribute」の要素が現れているが、これらの4種類の要素は、それらの属性も含め、XML Schema 1.0のものと同じ構造と意味を持つ。ただし、「element」、「complexType」及び「attribute」の要素の属性として現れる「id」は、本発明独自のものである。前記「id」属性は、XMLデータ構造定義テーブルのボタン情報部からスキーマ定義部の内容を参照する際に使われ、その値はスキーマ定義部中でユニークである。具体的には、入力XML「営業成績.xml」から自動生成したXMLデータ構造定義テーブルの「スキーマ定義部」要素の子で最初に現れているのが「element」要素であるが、これは、図15(a)における要素構造ツリーに対応する。
また、「スキーマ定義部」要素の子として現れている要素は、前記「element」以外の全てが「complexType」であるが、これらは、図15(b)〜図15(h)に示す7個の要素構造サブツリーにそれぞれ対応する。7個の要素構造サブツリーのうち、図15(b)に示すルートノード「[構造7]」の要素構造サブツリーは、「スキーマ定義部」の子要素で「name="構造7"」という属性を持つ「complexType」に対応する。他の要素構造サブツリーと「スキーマ定義部」の子要素である「complexType」との対応関係も同様である。
「complexType」要素は、「name」属性で示される構造の定義を行う。「element」要素は、「name」属性で示される名称の要素が「type」属性で示される構造で現れることを指定する。「type」属性の値には、「complexType」要素の「name」属性を指定することにより、当該「complexType」の構造を参照することができる。更に、「type」属性の値には、XML Schema 1.0に組み込みの単純型(“string”(文字列)や“decimal”(数)等)を指定することができる。「complexType」要素は、子として「sequence」要素を持つ。更にその子として「element」要素を持つが、これは前述の「element」と同じである。すなわち、当該「complexType」を表す構造の子として、「name」属性で示される名称の要素が「type」属性で示される構造で現れることを指定する。「sequence」は、現れる要素の順序を制限するために指定する。「complexType」は、子として「attribute」要素を更に持つことがあるが、これは、当該「complexType」が「name」属性で示される名称の属性が「type」属性で示される構造で現れることを表す。「type」属性の値には、XML Schema 1.0に組み込みの単純型を指定することができる。
具体的には、「id」属性に“ct1”を持つ「complexType」要素とその属性は、「“構造7”の構造をここで定義する」ということを表している。「id」属性に“el1”を持つ「element」要素とその属性は、「“構造7”の構造を持つ“営業成績”という名称の要素が現れる」ということを表していて、ここでの“構造7”は、前記「complexType」の構造を参照することを示す。これは、図15(a)において、要素構造ツリーのルートノード「営業成績:[構造7]」が、要素構造サブツリー「[構造7]」を参照していることに対応する。また、前記「complexType」の子孫として現れる「sequence」要素と「element」要素とその属性は、「当該complexType(“構造7”)には、“構造6”を持つ“組織階層1”という名称の要素が現れる」ということを表す。これは、図15(b)において、ルートノードとして「[構造7]」を持つ要素構造サブツリーの子ノード「組織階層1:[構造6]」が、別の要素構造サブツリー「[構造6]」を参照していることに対応する。更に、「id」属性に“ct7”を持つ「complexType」は、「当該complexType(“構造1”)には、string(文字列)値を持つ“期間”という名前の要素とdecimal(数)値を持つ“金額”という名前の要素が、この順序で現れ、更に当該complexTypeには、string値を持つ“地域”という名前の属性が付加される」ということを表す。
スキーマ定義部に現れる「element」要素のうち、「id」属性に“el3”を持つもののように、「minOccurs」属性と「maxOccurs」属性を持つものがある。それぞれ、入力XMLにおいて、当該「element」が定義する要素の出現数の下限と上限を指定するものである。値に数を指定するとその数を下限また上限の値として指定する。「maxOccurs」の値に“unbounded”を指定すると、出現数上限を指定しない。すなわち、「minOccurs="0" maxOccurs="unbounded"」の属性を持つ「element」は、「任意回数出現する」ことを表す。
構造管理機能22によるスキーマ定義部の自動生成が完了すると、アプリケーションは、生成されたスキーマの構造を表示装置に表示する。ユーザは、表示されたスキーマの構造を見ながら、必要に応じて自動生成されたスキーマに調整を加えることができる。ここでいう調整とは、任意の要素や属性に対する、省略可能性の指定、出現数の上限及び下限の指定、及び出現順の指定等であり、ユーザは、スキーマを調整することによって、より柔軟なスキーマを定義することができる。構造管理機能22は、アプリケーションを介してユーザからのスキーマ調整要求を受けると、XMLデータ構造定義テーブルのスキーマ定義部に適用する。前記の調整事項について、上限及び下限は、スキーマ定義部における前述の「element」要素の「minOccurs」属性及び「maxOccurs」属性によって表現可能である。また、省略可能性や出現順の指定もXML
Schema 1.0の書式によって表現できる。
構造管理機能22が自動生成したスキーマ定義部では、図15(a)に依れば、[構造7]の子要素は、1個の組織階層1:[構造6]である。ここで、ユーザは、表示装置を見て、[構造7]の子要素として「組織階層1」要素を任意数個許容するようにアプリケーションを介して構造管理機能22に指示したとする。また、構造管理機能22が自動生成したスキーマ定義部では、XML表現でid属性値に「el8」を持つ「社員番号」要素の型として、数値を表す「decimal」が指定されている。ここで、ユーザは、表示装置を見て、「社員番号」要素の型を文字列に変更するようにアプリケーションを介して構造管理機能22に指示したとする。すると、構造管理機能22は、スキーマ定義部のXML表現における当該「complexType」要素2個を表4のように更新し、アプリケーションは表示装置の内容を最新に更新する。
以上で、XMLデータ構造定義テーブルのスキーマ定義部の自動生成及びユーザによる調整が完了する。
表2に示すXML構造定義テーブルのボタン情報部は、入力XMLのXMLボタン化条件を保持する。ボタン化条件には、「データ単位」、「除外インスタンス」及び「抽出対象」があり、アプリケーションを介してユーザに指定させる。ボタン化条件のうち、データ単位と抽出対象はスキーマ定義の内容から、除外インスタンスは入力XMLの内容から指定される。以下、「データ単位」、「除外インスタンス」及び「抽出対象」について説明する。
2.1 データ単位
後述するボタン生成用ソースデータ生成機能24は、入力XMLを特定の構造を持つデータの集合と見なして処理を行うが、データ単位は、この特定の構造を示す。データ単位となることができるのは、スキーマ定義部における「complexType」または「element」である。入力XMLにおいて、データ単位に対応する実際の要素を、「対象インスタンス」と呼ぶ。例えば、入力XML「営業成績.xml」から生成したスキーマ定義部において、「id」属性に“ct3”を持つ構造をデータ単位として指定すると、前記入力XMLの対象インスタンスは、「//組織階層2[@名前='菓子販売部']」と「//組織階層2[@名前='健康食品販売部']」の2個の要素である。
以下、入力XML「営業成績.xml」から生成したスキーマ定義部のXML表現において、「id」属性に“ct5”を持つ構造が、ユーザによってデータ単位として指定されたものとして説明する。すると、対象インスタンスは、「//社員[名前='中村 里沙']」と「//社員[名前='山本 弘']」と「//社員[名前='中田 隆史']」と「//社員[名前='高橋 雅人']」と「//社員[名前='横山 美雪']」の5個の要素である。
データ単位は、XMLボタン化条件の中で最も基本的なものであり、後述するように他のXMLボタン化条件に深く関わるので、他のXMLボタン化条件より先に指定される必要がある。
2.2 除外インスタンス
データ単位として指定した構造に該当する対象インスタンスは、この段階で入力XMLに現れるもの全てである。しかし、一部の対象インスタンスを、XMLボタンによる分析対象から除外したいニーズも考えられる。このような場合に、除外インスタンスを指定することによって対応する。除外インスタンスは、入力XMLに対するXPathで指定し、前記XPathに該当する要素は、対象インスタンスから除かれる。
例えば、前述の例では、「id」の値に“ct5”を持つ構造をユーザがデータ単位と指定することにより、「営業成績.xml」に出現する全「社員」要素が対象インスタンスとなる。しかし、食品事業部直属の社員のデータは対象インスタンスとしたくないとする。そのような場合、除外インスタンスをXPath「//組織階層1/社員リスト/社員」として指定する。前記XPathに該当する要素は、「//社員[名前='高橋 雅人']」と「//社員[名前='横山 美雪']」の2個であり、これらはボタン生成用ソースデータテーブル生成時に対象インスタンスから除かれる。
2.3 抽出対象
入力XMLに含まれる情報のうち、どれをボタン生成用ソースデータテーブルに出力するかを指定するものが抽出対象である。抽出対象のうち、ボタン生成用ソースデータテーブルに出力すると同時にXMLボタン化したいものを「ボタン化対象」と呼び、ボタン生成用ソースデータテーブルに出力するだけでXMLボタン化したくないものを「参照対象」と呼ぶ。抽出対象は、スキーマ定義部で定義されている要素または属性で指定する。
抽出対象として、データ単位の祖先要素とその属性、子孫要素とその属性、及びデータ単位自身の要素とその属性のいずれかを指定することができる。ただし、要素はそれ自身が値を持つものでなければ抽出対象として指定できない。
例えば、“ct5”をデータ単位とした場合、データ単位は、図15(f)に示す[構造3]に対応する。[構造3]の子孫要素のうち、値を持つ、[構造3]の子要素の「名前」と「社員番号」、及び[構造1]の子要素の「期間」と「金額」が抽出対象となることができる。[構造3]の祖先要素には、値を持つものがないので、祖先要素は抽出対象になることができない。また、[構造3]の祖先要素の属性または子孫要素の属性である、[構造6]の「名前」、[構造5]の「名前」、及び[構造1]の「地域」が抽出対象となることができる。
抽出対象1個は、ボタン生成用ソースデータテーブルのフィールド1個に対応する。ボタン生成用ソースデータテーブルに出力する際のフィールド名称も同時に指定できる。抽出対象をどのようにボタン生成用ソースデータテーブルに出力するかは、ボタン生成用ソースデータ生成機能で説明する。
ユーザは、ここでアプリケーションを介して、例えば、「営業成績.xml」から生成されたスキーマ定義部のXML表現における「id」属性の値として“at2”、“el7”、“at3”、及び“el11”を持つ要素及び属性をボタン化対象とし、同じく「id」属性の値として“el12”を持つ要素を参照対象として指定したとする。同時に、指定したそれぞれの抽出対象のボタン生成用ソースデータテーブルのフィールド名として「所属」、「社員名」、「地域」、「実績月」、及び「金額」を指定したとする。
XMLボタン化条件を、アプリケーションを介してユーザに指定させると、構造管理機能22は、このXMLボタン化条件をXMLデータ構造定義テーブルのボタン情報部に保存する。表5は、入力XML「営業成績.xml」のデータに対して指定したXMLデータ構造定義テーブルのボタン情報部の例(XML形式で保存したもの)である。
表5に示す「ボタン情報部」要素の子として、まず「データ単位」要素が現れる。この要素の属性「id」にスキーマ定義部の「element」及び「complexType」の各要素が持つ「id」属性の値を指定することにより、当該構造をデータ単位とすることを定義する。ここでは、“ct5” を指定しているので、図15(f)に示す[構造3]をデータ単位として定義したことになる。
「データ単位」要素は、子要素「除外インスタンスリスト」を持ち、これは除外インスタンス条件の指定を複数まとめる役割を果たす。この要素の子として、除外インスタンスの定義を表す「除外インスタンス」要素が0個以上配置される。除外インスタンス条件は、「除外インスタンス」要素が持つ「Xpath」属性に指定する。この例では、除外インスタンス条件として“//組織階層1/社員リスト/社員”を指定している。
「ボタン情報部」要素の子として、「データ単位」の次に「抽出対象リスト」要素が現れるが、これは抽出対象の指定を複数まとめる役割を果たす。この要素の子として、抽出対象の定義を表す「抽出対象」要素が1個以上配置される。「抽出対象」要素は、この例では、「type」、「id」及び「fieldName」の3個の属性を持つ。「type」属性には、当該抽出対象がボタン化対象か参照対象かを指定する。ボタン化対象の場合は“ボタン”を、参照対象の場合は“参照”を指定する。「id」属性には、スキーマ定義部のXML表現で現れる構造のうち、当該抽出対象を表す要素または属性を指定するが、その際、スキーマ定義部のXML表現において対応する要素または属性の「id」属性によって行う。「fieldName」属性には、当該抽出対象をボタン生成用ソースデータテーブルに出力する際のフィールド名を指定する。ここでは、1個目の「抽出対象」要素で「type」属性が“ボタン”、「id」属性が“at2”、「fieldName」属性が“所属”となっているので、ボタン化対象として、図15(d)に示す「構造5」の「名前」属性が選択され、ボタン生成用ソースデータテーブルに出力する際のフィールド名として「所属」であることが指定されたことになる。他の「抽出対象」要素についても同様であり、ボタン化対象として4個、参照対象として1個の抽出対象が定義されている。
以上のように、ユーザはアプリケーションを介して構造管理機能22によって、XMLデータ構造定義テーブルの生成を行うことができる。
3.ボタン生成用ソースデータ生成機能
図6に示すように、ボタン生成用ソースデータ生成機能24は、入力XML32とそれに対応するXMLデータ構造定義テーブル40を受け取ると、ボタン生成用ソースデータテーブルの生成を開始する。以下、ユーザによって、アプリケーション30を介し、入力XML32として「営業成績.xml」が、それに対応するXMLデータ構造定義テーブル40として「営業成績.xdst」が渡されたとする。ボタン生成用ソースデータ生成機能24は、XMLデータ構造定義テーブルのボタン情報部で定義されているデータ単位に該当する要素を、XMLパース機能20を使って入力XMLから全て取り出し、前記要素を対象インスタンス候補とする。
この例において、「営業成績.xdst」のボタン情報部では、表5に示すように、“ct5”、すなわち図15(f)に示す[構造3]
をデータ単位として指定しているので、「営業成績.xml」で前記指定された構造を持つ、以下のXPathで示される要素を取り出す。
//組織階層2/社員リスト/社員[名前='中村 里沙']
//組織階層2/社員リスト/社員[名前='山本 弘']
//組織階層2/社員リスト/社員[名前='中田 隆史']
//組織階層1/社員リスト/社員[名前='高橋 雅人']
//組織階層1/社員リスト/社員[名前='横山 美雪']
これら5個の要素がデータ単位の対象インスタンス候補となる。
次にボタン生成用ソースデータ生成機能24は、ボタン情報部の除外インスタンスで指定されたものを対象インスタンス候補から除き、残ったものを対象インスタンスとして決定する。この例では、「営業成績.xdst」の「除外インスタンスリスト」の子である「除外インスタンス」要素における「Xpath」属性値“//組織階層1/社員リスト/社員”に当てはまる要素を、「営業成績.xml」から取り出された5個の対象インスタンス候補から除く。5個の対象インスタンス候補のうち、除外インスタンス条件であるXPathに当てはまるのは、以下の要素である。
//組織階層1/社員リスト/社員[名前='高橋 雅人']
//組織階層1/社員リスト/社員[名前='横山 美雪']
これら2個の要素がデータ単位の対象インスタンス候補から除かれ、最終的に以下の3個の要素が対象インスタンスとなる。
//組織階層2/社員リスト/社員[名前='中村 里沙']
//組織階層2/社員リスト/社員[名前='山本 弘']
//組織階層2/社員リスト/社員[名前='中田 隆史']
対象インスタンスが決定すると、ボタン生成用ソースデータ生成機能24は、これらの対象インスタンスを基に、ボタン生成用ソースデータテーブルの生成を行う。ボタン生成用ソースデータテーブルは、フィールドから構成されるデータレコードの集合を記憶したものである。
XMLデータ構造定義テーブルのボタン情報部で、「抽出対象リスト」要素下で定義された「抽出対象」要素1個が、ボタン生成用ソースデータテーブルのフィールド1個に対応し、前記フィールドの名称は、対応する前記「抽出対象」要素の属性「fieldName」の値となる。また、「抽出対象リスト」要素下に現れる「抽出対象」要素の順が、そのままボタン生成用ソースデータテーブルに出力されるフィールドの順となる。更に、抽出対象のうち、参照対象に対応するフィールドには、出力時に目印が付けられてボタン生成機能がボタン化対象とは区別できるようになっている。ボタン生成用ソースデータテーブルにおいて、ボタン化対象に対応するフィールドを「ボタン化フィールド」と呼び、参照対象に対応するフィールドを「参照フィールド」と呼ぶ。
具体的には、「営業成績.xdst」において「抽出対象リスト」要素の最初の子要素「抽出対象」は、「fieldName」属性の値に“所属”が指定されているので、当該抽出対象に対応するボタン生成用ソースデータテーブルのフィールド名称は“所属”となる。同様に、続いて4個の「抽出対象」要素が現れていて、ボタン生成用ソースデータテーブルのフィールド名称は、「社員名」、「地域」、「実績月」及び「金額」となって、表6に示す1行目のようにフィールドが決定される。
表6において、最後に現れる「抽出対象」は参照対象なので、ボタン化対象と区別できるように、対応する「金額」フィールド名称の先頭に「*」が付加されている。すなわち、表6に示すように出力されるボタン生成用ソースデータテーブルのフィールドのうち、「所属」、「社員名」、「地域」及び「実績月」はボタン化フィールドであり、「金額」は参照フィールドである。
ボタン生成用ソースデータテーブルのフィールドが出力されると、次にボタン生成用ソースデータ生成機能は、ボタン生成用ソースデータテーブルの実データであるレコードを生成するが、それに先立ち、入力XMLにおける各抽出対象同士の関係を前記テーブルのレコードに反映させるため、抽出対象の上下関係を、各抽出対象に対応するスキーマ定義部の構造を基に決定する。
図11に示す、正規化されていない要素構造ツリーにおいて、スキーマ定義部の自動生成時は、属性をノードと見なさなかったが、ここでは属性を該属性が現れる要素ノードの子ノードと見なして、ルートノードから、各抽出対象に対応するノードまでの距離を測定する。距離は、図11において、ルートノードから当該抽出対象に対応するノードに至るまでいくつの矢印(実線矢印及び破線矢印)を経るかによって決定される。出現場所が不特定の抽出対象の場合、最も長い距離のものを採用する。具体的には、ボタン情報部における1個目の抽出対象“at2”は、図11に示す要素構造ツリーでは、「組織階層2」要素の「名前」属性のノードとして表現されているが、ルートノードから矢印3個(実線矢印2個と破線矢印1個)を経るので、距離が3となる。また、2個目の抽出対象“el7”は、「//組織階層1/社員リスト/社員」の子ノード(距離5)と「//組織階層2/社員リスト/社員」の子ノード(距離4)の2つで出現するが、距離が長い方を採用するので、距離は5となる。同様に3個目の抽出対象“at3”は距離が7、4個目の抽出対象“el11”は距離が7で、5個目の抽出対象“el12”は距離が7となる。
前記のようにして、各抽出対象までの距離を測定したら、相対的に距離が短いものを「上位」、距離が長いものを「下位」、同じものを「同位」として、上下関係を決定する。具体的には、図16に示すように上下関係が決まる。図16では、左に現れるものを上位、右に現れるものを下位として表現した。図16に示すように、抽出対象“at2”は、他の抽出対象全てに対して上位である。抽出対象“el7”は、抽出対象“at2”に対して下位であり、抽出対象“at3”、“el11”及び“el12”に対して上位である。抽出対象“at3”、“el11”及び“el12”は、互いに同位であり、抽出対象“at2”と“el7”に対して下位である。
ボタン生成用ソースデータ生成機能は抽出対象の上下関係を決定すると、ボタン生成用ソースデータテーブルのレコード生成を開始する。
まず、既に決定している対象インスタンスのうち、1個目に現れるものを取り出す。具体的には、「営業成績.xml」で1個目に現れる対象インスタンスは「//組織階層1/組織階層2/社員リスト/社員[名前=‘中村 里沙’]」のXPathで表される要素である。以降、この要素を「社員「中村
里沙」の対象インスタンス」と呼ぶ。次に、最下位に現れる抽出対象に着目する。最下位に同位で抽出対象が現れた場合は、同位同士を直列に組み合わせて取り出す。直列に取り出す順序は、ボタン情報部で指定されている抽出対象の順序に準ずる。
この例では、「営業成績.xml」の社員「中村 里沙」の対象インスタンスにおいて、最下位に現れる抽出対象は、図16で示すように、3個の同位抽出対象である“at3”、“el11”及び“el12”である。同位同士は関係を直列とするので、[“神奈川”,“2006年4月”, “2,500,000”]の組み合わせと、[“埼玉”,“2006年4月”,“5,800,000”]の組み合わせと、[“埼玉”,“2006年5月”,“6,100,000”]の3つの組み合わせが取り出せる。次に、取り出した最下位の抽出対象に対して、入力XMLにおける関係を保つように、上位の抽出対象を取り出して、抽出対象の組み合わせに直列に加える。
具体的には、社員「中村 里沙」の対象インスタンスの最下位の3個の抽出対象に対する上位は、図16に示すように、“at2”と“el7”なので、最下位の抽出対象を取り出した組み合わせに直列に加えて、[“菓子販売部”,“中村 里沙”,“神奈川”,“2006年4月”,“2,500,000”]、[“菓子販売部”,“中村 里沙”,“埼玉”,“2006年4月”,“ 5,800,000”]、及び[“菓子販売部”,“中村 里沙”,“埼玉”,“2006年5月”,“6,100,000”]のようになる。これらの組み合わせ1個を、ボタン生成用ソースデータテーブルのレコード1件に対応させる。すなわち、前述の表6に示すように、社員「中村
里沙」の対象インスタンスから、3件のレコードが生成される。
入力XMLが対象インスタンスを複数持つ場合、2個目以降の全ての対象インスタンスに対し、1個目の対象インスタンスの場合と同様の方法で、ボタン生成用ソースデータテーブルのレコードを生成する。具体的には、「営業成績.xml」の社員「山本 弘」の対象インスタンスからは4件のレコードが、社員「中田 隆史」の対象インスタンスからは1件のレコードが生成され、表7に示すようにボタン生成用ソースデータテーブルに記憶される。
以上の方法で、ボタン生成用ソースデータ生成機能によるボタン生成用ソースデータテーブルの生成が完了し、表7に示すボタン生成用ソースデータテーブルを「営業成績.table」として記憶装置に保存する。
4.ボタン生成機能とボタン機能
図6に示すように、アプリケーション30は、ボタン生成用ソースデータ生成機能24によってボタン生成用ソースデータテーブルの生成が完了すると、生成されたボタン生成用ソースデータテーブルをボタン生成機能24に渡してXMLボタンの生成を要求する。尚、XMLボタンは、少なくとも「ボタンクラス」と「個別ボタン」を構成要素とする。 以下、XMLボタンが自動生成される過程及び当該ボタンの操作手順を説明する。
「ボタンクラス」は、ボタン生成用ソースデータテーブルの各レコードを構成するフィールドの内、ボタン化フィールドに対応し、そのフィールドの名称をボタンクラス名称とする。具体的には、表7に示すボタン生成用ソースデータテーブル「営業成績.table」を基にXMLボタンを生成する際は、4個のボタン化フィールド「所属」、「社員名」、「地域」、及び「実績月」が順番にそれぞれのボタンクラスに対応し、それらのボタンクラス名称はそれぞれ「所属」、「社員名」、「地域」、及び「実績月」となる。表7に示すボタン生成用ソースデータテーブル「営業成績.table」から生成されるXMLボタンのイメージを図17に示す。図17では、縦に4個の区画に分かれていて、それぞれがボタンクラスに対応する。ボタンクラスの上部に二重枠で囲まれた文字列があるが、これがボタンクラス名称を表す。
「個別ボタン」は、ボタンクラスに属し、ボタン生成用ソースデータテーブルの各レコードの当該ボタン化フィールドに出現するユニークなデータ値に対応する。あるボタンクラスに属する個別ボタンは、ボタン生成機能によって次のように決定される。ボタン生成用ソースデータテーブルにおいて、前記ボタンクラスに対応するボタン化フィールドに着目する。着目した前記フィールドに出現するデータのうち、ユニークな値を全て取り出す。取り出した値をキャプションとした個別ボタンを生成し、当該ボタンクラスに関連付けて従属させる。
具体的には、表7に示すボタン生成用ソースデータテーブル「営業成績.table」からボタン化フィールド「所属」に対応するボタンクラスに属する個別ボタンは、当該フィールドに出現するデータが、順に「菓子販売部」、「菓子販売部」、「菓子販売部」、「健康食品販売部」、「健康食品販売部」、「健康食品販売部」、「健康食品販売部」、及び「健康食品販売部」なので、これらからユニークな値を取り出して、「菓子販売部」と「健康食品販売部」の2個となる。ボタン生成機能は、これらをキャプションとする個別ボタンを2個生成し、「所属」ボタンクラスに関連付けて従属させる。以上により、「所属」ボタンクラスに属する個別ボタン生成が完了する。図17に示すXMLボタンのイメージでは、一番左のボタンクラスで、ボタンクラス名の下にこれら2個の個別ボタンがそれぞれ一重線で囲まれて文字列として表現している。ボタン生成用ソースデータテーブルを基に、各レコードの全てのボタン化フィールドに対して、同様に当該ボタンクラスに属する個別ボタンを生成できる。
個別ボタン生成時、各個別ボタンがボタン生成用ソースデータテーブルのどのレコードから生成されたかを後で検索可能とするために、ここでは図示していないが、当該レコード番号を、別途領域を確保して個別ボタンと関連付けて記憶させておくことが好ましい。
具体的には、表7に示すボタン生成用ソースデータテーブル「営業成績.table」から生成されたボタンクラス「地域」に属する個別ボタン「神奈川」は、表7に示すボタン生成用ソースデータテーブルの上から1番目、4番目及び6番目のレコードから生成されるので、それらのレコード番号を記憶する。同様に、ボタンクラス「実績月」に属する個別ボタン「2006年5月」は、表7に示すボタン生成用ソースデータテーブルの上から3番目、6番目及び7番目のレコードから生成されるので、それらのレコード番号を記憶する。以上の方法で生成されたXMLボタンは、ボタンクラス毎に並べて表示装置に表示される。以上で、ボタン生成機能によるXMLボタン生成が完了する。
ボタン生成機能によってXMLボタンの生成と表示が完了すると、アプリケーションは表示しているXMLボタンに対するユーザの選択指示を待つ。ユーザが入力装置によって個別ボタンを選択すると、アプリケーションはその選択情報をボタン機能28に伝える。ボタン機能28は個別ボタンの選択情報を受け取ると、当該個別ボタンが記憶しているボタン生成用ソースデータテーブル内で当該番号が一致するレコードをマークする。
具体的には、「営業成績.table」から生成されたXMLボタンにおいて、ボタンクラス「社員名」に属する個別ボタン「山本 弘」が選択された場合、ボタン機能28は、当該個別ボタンと関連付けて記憶されているレコード番号4、5、6及び7と一致するレコードをマークする。ボタン機能がマークしたレコードは、いつでも取り出すことが可能である。
すなわち、ユーザは、個別ボタン「山本 弘」を選択することにより、「営業成績.xml」が保持しているデータのうち、「山本 弘」に関するものを特定して取り出すことができる。ボタン選択によってマークされたレコードをどのように活用するかはアプリケーション次第であるが、ここでは言及しない。
XMLは、階層化(構造化)されたデータを保持するが、XMLボタンを生成する際、この階層情報を有効活用することも考えられる。
XMLデータ構造定義テーブルのボタン情報部の抽出対象を階層化してボタン化することを指定し、ボタン生成用ソースデータテーブルに階層情報を付加して、XMLボタンを自動生成し、表示装置に階層付きのXMLボタンを表示すれば、これは、階層データを直観的に操作できるアプリケーションのフロントエンドとして便利である。
例えば「営業成績.xdst」で、フィールド名「所属」に対応する抽出対象とフィールド名「社員名」に対応する抽出対象の階層化ボタン生成を指定したとすると、図18に示すような階層付きのXMLボタン表示が考えられる。この例のように、「所属 > 社員」という階層化された2個のボタンクラスをまとめて表示すると、階層化されたデータを扱うアプリケーションのフロントエンドとして便利である。