(57)【要約】【課題】ＸＭＬデータから他の形式のＸＭＬデータへのＸＭＬ変換方法において、当該ＸＭＬ変換処理を実行するためのＸＳＬプログラムの生産性の向上及び当該プログラムの変更の柔軟性の向上を図ることにある。【解決手段】ＸＭＬデータを他の形式のＸＭＬデータに変換するＸＭＬ変換処理部１０において、所定のＸＭＬ変換命令部品群に基づいて作成されたＸＭＬ変換命令を入力して、当該ＸＭＬ変換処理を実行するためのＸＳＬプログラムを生成するＸＳＬ翻訳部１００が開示されている。【選択図】　　図２
2004133786.tif 000002
【特許請求の範囲】
【請求項１】
ＸＭＬ変換処理を実行するＸＳＬプログラムを生成し、当該ＸＳＬプログラムによりＸＭＬデータを他の形式のＸＭＬデータに変換するＸＭＬ変換方法において、
所定のＸＭＬ変換命令部品群に基づいて作成されたＸＭＬ変換命令を取得するステップと、
前記ＸＭＬ変換命令に含まれる変換言語での基本表現の宣言内容に基づいて、前記ＸＳＬプログラムに翻訳するためのＸＳＬテンプレート宣言を出力するステップと
を具備したことを特徴とするＸＭＬ変換方法。
【請求項２】
前記ＸＳＬテンプレート宣言を出力するステップは、
要素型宣言に対応する要素テンプレート宣言を出力するステップと、
仮想要素型宣言に対応する仮想要素テンプレート宣言を出力するステップと、
属性リスト宣言に対応する属性テンプレート宣言を出力するステップとを含むことを特徴とする請求項１に記載のＸＭＬ変換方法。
【請求項３】
前記要素テンプレート宣言を出力するステップは、
定数要素テンプレート宣言を出力するステップと、
変数要素テンプレート宣言を出力するステップとを含むことを特徴とする請求項２に記載のＸＭＬ変換方法。
【請求項４】
前記変数要素テンプレート宣言を出力するステップは、
宣言された要素にＸＰａｔｈが指定されていない場合には、最上位変数テンプレート宣言を出力するステップと、
宣言された要素にＸＰａｔｈが指定されている場合には、子変数テンプレート宣言を出力するステップとを含むことを特徴とする請求項３に記載のＸＭＬ変換方法。
【請求項５】
前記変数要素テンプレート宣言を出力するステップは、
前記要素型宣言及び前記仮想要素型宣言に関連する内容モデルの種類に従って、当該書く種類毎の要素値を出力する処理を実行する内容モデル処理を行なうステップを含むことを特徴とする請求項３に記載のＸＭＬ変換方法。
【請求項６】
前記ＸＭＬ変換命令には前記基本表現の宣言内容が含まれていない場合には、前記ＸＳＬテンプレート宣言の代わってデフォルトテンプレート宣言を出力するステップをさらに有することを特徴とする請求項１に記載のＸＭＬ変換方法。
【請求項７】
ＸＭＬデータを他の形式のＸＭＬデータに変換するＸＭＬ変換処理において、当該変換処理を実行するＸＳＬプログラムを生成するためのＸＭＬ変換プログラムであって、
所定のＸＭＬ変換命令部品群に基づいて作成されたＸＭＬ変換命令を取得する手順と、
前記ＸＭＬ変換命令に含まれる変換言語での基本表現の宣言内容に基づいて、前記ＸＳＬプログラムに翻訳するためのＸＳＬテンプレート宣言を出力する手順と
をコンピュータに実行させるためのＸＭＬ変換プログラム。
【請求項８】
前記ＸＳＬテンプレート宣言を出力する手順は、
要素型宣言に対応する要素テンプレート宣言を出力する手順と、
仮想要素型宣言に対応する仮想要素テンプレート宣言を出力する手順と、
属性リスト宣言に対応する属性テンプレート宣言を出力する手順とを含むことを特徴とする請求項７に記載のＸＭＬ変換プログラム。
【請求項９】
前記要素テンプレート宣言を出力する手順は、
定数要素テンプレート宣言を出力する手順と、
変数要素テンプレート宣言を出力する手順とを含むことを特徴とする請求項８に記載のＸＭＬ変換プログラム。
【請求項１０】
前記変数要素テンプレート宣言を出力する手順は、
宣言された要素にＸＰａｔｈが指定されていない場合には、最上位変数テンプレート宣言を出力する手順と、
宣言された要素にＸＰａｔｈが指定されている場合には、子変数テンプレート宣言を出力する手順とを含むことを特徴とする請求項９に記載のＸＭＬ変換プログラム。
【請求項１１】
前記変数要素テンプレート宣言を出力する手順は、
前記要素型宣言及び前記仮想要素型宣言に関連する内容モデルの種類に従って、当該書く種類毎の要素値を出力する処理を実行する内容モデル処理を行なう手順を含むことを特徴とする請求項９に記載のＸＭＬ変換プログラム。
【請求項１２】
前記ＸＭＬ変換命令には前記基本表現の宣言内容が含まれていない場合には、前記ＸＳＬテンプレート宣言の代わってデフォルトテンプレート宣言を出力する手順をさらに有することを特徴とする請求項７に記載のＸＭＬ変換プログラム。
【請求項１３】
ＸＭＬデータを他の形式のＸＭＬデータに変換するＸＭＬ変換処理において、当該変換処理を実行するＸＳＬプログラムを生成するためのＸＭＬ変換プログラムを記録し、コンピュータにより読取り可能な記憶媒体であって、
所定のＸＭＬ変換命令部品群に基づいて作成されたＸＭＬ変換命令を取得する手順と、
前記ＸＭＬ変換命令に含まれる変換言語での基本表現の宣言内容に基づいて、前記ＸＳＬプログラムに翻訳するためのＸＳＬテンプレート宣言を出力する手順と
を有する前記ＸＭＬ変換プログラムを記録したことを特徴とする記憶媒体。
【請求項１４】
前記ＸＳＬテンプレート宣言を出力する手順は、
要素型宣言に対応する要素テンプレート宣言を出力する手順と、
仮想要素型宣言に対応する仮想要素テンプレート宣言を出力する手順と、
属性リスト宣言に対応する属性テンプレート宣言を出力する手順とを含むことを特徴とする請求項１３に記載の記憶媒体。
【請求項１５】
前記要素テンプレート宣言を出力する手順は、
定数要素テンプレート宣言を出力する手順と、
変数要素テンプレート宣言を出力する手順とを含むことを特徴とする請求項１４に記載の記憶媒体。
【請求項１６】
前記変数要素テンプレート宣言を出力する手順は、
宣言された要素にＸＰａｔｈが指定されていない場合には、最上位変数テンプレート宣言を出力する手順と、
宣言された要素にＸＰａｔｈが指定されている場合には、子変数テンプレート宣言を出力する手順とを含むことを特徴とする請求項１５に記載の記憶媒体。
【請求項１７】
前記変数要素テンプレート宣言を出力する手順は、
前記要素型宣言及び前記仮想要素型宣言に関連する内容モデルの種類に従って、当該書く種類毎の要素値を出力する処理を実行する内容モデル処理を行なう手順を含むことを特徴とする請求項１５に記載の記憶媒体。
【請求項１８】
前記ＸＭＬ変換命令には前記基本表現の宣言内容が含まれていない場合には、前記ＸＳＬテンプレート宣言の代わってデフォルトテンプレート宣言を出力する手順をさらに有することを特徴とする請求項１３に記載の記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般的にはインターネットでの情報交換に必要なデータ記述言語に関し、特に、ＸＭＬで表現されたデータを異なる形式のＸＭＬデータに変換するＸＭＬ変換技術に関する。
【０００２】
【従来の技術】
近年、インターネットに関するＷｅｂ技術分野の中で、データ記述言語としてＸＭＬ（ｅｘｔｅｎｓｉｂｌｅ　ｍａｒｋｕｐ　ｌａｎｇｕａｇｅ）が注目されている。このＸＭＬは、一般的な文書情報だけでなく、ＲＤＢ（ｒｅｌａｔｉｏｎａｌ　ｄａｔａｂａｓｅ）データや、Ｗｅｂページ（ホームページ）のデータなどの記述形式（データを表現又は格納するためのフォーマット）として、所謂業界標準として使用される言語である。
【０００３】
このＸＭＬを処理するためのＸＳＬ（ｅｘｔｅｎｓｉｂｌｅ　ｓｔｙｌｅｓｈｅｅｔｓ　ｌａｎｇｕａｇｅ）というスタイル言語が開発されている。このＸＳＬは、ある形式のＸＭＬデータを、他のＸＭＬデータに変換するための言語である。このＸＳＬの関連仕様として、ＸＳＬＴ（ｅｘｔｅｎｓｉｂｌｅ　ｓｔｙｌｅｓｈｅｅｔｓ　ｌａｎｇｕａｇｅ　ｔｒａｎｓｆｏｒｍａｔｉｏｎｓ）も開発されている。
【０００４】
このようなＸＳＬ及びＸＳＬＴの処理系（処理エンジン）は、既に広く普及している（例えば、非特許文献１及び非特許文献２を参照）。
【０００５】
【非特許文献１】
２００２年９月１７日検索、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｗ３．ｏｒｇ／ＴＲ／ｘｓｌｔ＞
【非特許文献２】
２００２年９月１７日検索、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｗ３．ｏｒｇ／ＴＲ／ｘｑｕｅｒｙ／＃ＵｓｅＣａｓｅｓ＞
【発明が解決しようとする課題】
ところで、ＸＳＬＴを使用して、ＸＭＬデータから他のデータ形式のＸＭＬへの変換を記述する場合、ＸＳＬＴの部品の粒度が小さいために、記述量が多くなるという問題がある。ＸＳＬＴでは、ＸＳＬＴテンプレートの集合で変換を記述するのであるが、テンプレート間の相互作用が分かりにくいため、変換結果の構造が不明瞭となる。
【０００６】
また、ＸＳＬ自身は複雑な記述となりがちであり、ＸＳＬで直接記述してＸＭＬから他のデータ形式のＸＭＬデータに変換するＸＭＬ変換プログラム（ＸＳＬプログラム）を記述すると、記述量が多大になり、かつ、その記述が複雑化するとの問題がある。この問題は、ＸＳＬを直接用いたのでは変換処理の粒度が細かいために、変換入力である一つのＸＭＬ記述の固まりから対応する変換出力である他のＸＭＬへの変換を記述するために多くの記述が必要になることにより起因する。
【０００７】
そこで、本発明の目的は、ＸＭＬデータから他の形式のＸＭＬデータへのＸＭＬ変換プログラムを記載する際の記載の簡略化を図ることにより、当該ＸＭＬ変換プログラムの生産性を向上することにある。また、言語仕様や対応関係の変更における柔軟性の向上を図ることにより、当該ＸＭＬ変換プログラムの柔軟性を向上することにある。
【０００８】
【課題を解決するための手段】
本発明の観点は、ＸＭＬデータを他の形式のＸＭＬデータに変換するＸＭＬ変換方法において、ＸＭＬ変換命令を入力としてＸＳＬプログラムを出力として生成し（ＸＳＬ翻訳プロセス）、当該出力であるＸＳＬプログラムをＸＳＬ処理部により実行するＸＭＬ変換方法に関する。
【０００９】
本発明の観点に従ったＸＭＬ変換方法は、ＸＭＬ変換処理を実行するＸＳＬプログラムを生成し、当該ＸＳＬプログラムによりＸＭＬデータを他の形式のＸＭＬデータに変換するＸＭＬ変換方法において、所定のＸＭＬ変換命令部品群に基づいて作成されたＸＭＬ変換命令を取得するステップと、前記ＸＭＬ変換命令に含まれる変換言語での基本表現の宣言内容に基づいて、前記ＸＳＬプログラムに翻訳するためのＸＳＬテンプレート宣言を出力するステップとを備えたものである。
【００１０】
ＸＭＬ変換命令は、予め用意されたＸＭＬ変換命令部品群から選択及び組み合わせにより作成される。本発明のＸＭＬ変換方法は、当該ＸＭＬ変換命令をＸＳＬプログラムに翻訳する構成である。
【００１１】
このような本発明の構成により、ＸＭＬデータから他の形式のＸＭＬデータへの変換プログラムにおける変換命令の記述を簡略化できるため、ＸＳＬプログラムの生産性を向上できる。また、言語仕様や対応関係の変更への対応の柔軟性を向上できるため、仕様変更などのＸＳＬプログラムの柔軟性を向上できる。換言すれば、本発明によれば、ＸＳＬＴプログラミングの記述量と変換結果構造の不明瞭さという問題を解決したＸＭＬ変換命令をＸＳＬプログラムに効率的に翻訳可能なシステムを提供できる。本ＸＭＬ変換命令では、ＸＭＬの変換事例に基づいてＸＭＬ変換に求められる部品の粒度を設定し、且つ変換結果の構造をＸＭＬのスキーマ定義言語であるＤＴＤを拡張して定義している。
【００１２】
【発明の実施の形態】
以下図面を参照して、本発明の実施の形態を説明する。
（ＸＭＬ変換システム）
図１は、本実施形態に関するＸＭＬ変換システムの要部を示すブロック図であり、図２は同システムのメイン要素であるＸＭＬ変換処理部の要部を示すブロック図である。
【００１３】
ＸＭＬ変換処理部１０は、図１に示すように、ネットワークを経由して送信されるＸＭＬストリーム２００、ＸＭＬファイル２０１、あるいはＸＭＬのデータベース２０２のいずれかのＸＭＬデータ２０を入力とし、所定のＸＭＬ変換プログラムを実行して、他の形式のＸＭＬデータ３０を変換結果として出力する。このＸＭＬデータ３０は、ＸＭＬストリーム３００、ＸＭＬファイル３０１、あるいはＸＭＬデータベース３０２として所定の記憶装置に格納される。
【００１４】
ＸＭＬ変換処理部１０は、後述するようなＸＭＬ変換命令４０を入力し、当該ＸＭＬ変換命令４０に基づいてＸＭＬ変換処理を実行する。
【００１５】
ＸＭＬ変換処理部１０は、図２に示すように、ＸＳＬ翻訳部１００と、ＸＳＬ処理部１０１とを有する。ＸＳＬ翻訳部１００は、ＸＭＬ変換命令４０を入力とし、ＸＭＬプログラムに変換（翻訳）して出力する。ＸＳＬ処理部１０１は、ＸＳＬ翻訳部１００から与えられるＸＭＬプログラムを実行してＸＭＬデータ２０からＸＭＬデータ３０への変換処理を行なう。ＸＳＬ処理部１０１は、周知のＸＳＬ処理系（処理エンジン）により実現される。
（ＸＭＬ変換命令）
図３は、ＸＭＬ変換命令の作成方法を説明するための図である。
【００１６】
ＸＭＬ変換命令作成者は、例えばパーソナルコンピュータ５０を操作して、ＸＭＬ変換命令部品群４００の中から必要な部品を組み合わせて所望するＸＭＬ変換命令４０を作成する。
【００１７】
ＸＭＬ変換命令部品群４００は、以下の３種類の命令４０１〜４０３に分類される。即ち、変数木抽出命令４０１（図４を参照）、変数木変換命令４０２（図５を参照）、及び結果木生成命令４０３（図６を参照）である。
【００１８】
変数木抽出命令４０１の機能は、図４（Ａ）に示すように、ＸＭＬ入力データが変換されたＤＯＭ（ｄｏｃｕｍｅｎｔ　ｏｂｊｅｃｔ　ｍｏｄｅｌ）木から、変数木を構築する。このとき、利用者の指定に応じて、個々の変数にＤＯＭ木の部分（ノード集合）を設定する。なお、同図（Ｂ）は、図４（Ａ）に示すＸＭＬ入力データと等価なＸＭＬ文書の一例を示す。
【００１９】
具体的には、図４に示すように、「−／ｂｉｂ　Ｘ　Ｐａｔｈ」を用いて、変数＄ｂｉｂに対しＤＯＭ木における１ノードを割り当ている。ここで、「Ｘ　Ｐａｔｈ」は、ＸＭＬ文書での任意の位置を指示するための表現言語であり、変数に設定するノード集合を抽出する。さらに、「−．／ｂｏｏｋ／ｔｉｔｌｅ　Ｘ　Ｐａｔｈ」を用いて、変数＄ｔｉｔｌｅに対しＤＯＭ木における３つのノードを割り当ている。また、「−．／ｔｅｘｔ（）Ｘ　Ｐａｔｈ」を用いて、変数＄ｐｃｄａｔａに対しＤＯＭ木における３つのノードを割り当ている。
【００２０】
変数木変換命令４０２の機能は、図５に示すように、構築済みの変数木を入力として、利用者の指定に応じて整列（ＳＯＲＴ）及び重複排除（ＤＩＳＴＩＮＣＴ）変換処理を実行する。
【００２１】
具体的には、図５に示すように、＄ｔｉｔｌｅ変数に割り当てられているノード群について、ｔｅｘｔ（）により得られる値（タイトル名）をキー値として重複排除を行なう。この後、同様にｔｅｘｔ（）により得られる値（タイトル名）をキー値としてソートを実行し、その結果として右側の変数木が得られる。
【００２２】
結果木生成命令４０３の機能は、図６（Ａ）に示すように、構築済みの変数木を入力として利用者の指定に応じて結果木を生成する。なお、同図（Ｂ）は、図６（Ａ）に示す結果木と等価なＸＭＬ文書の一例を示す。
【００２３】
具体的には、図６では、＄ｂｉｂに割り当てられているノード群は結果として出力せず、＄ｔｉｔｌｅ変数に割り当てられているノード群については要素名をｔｉｔｌｅとして出力し、＄ｐｃｄａｔａに割り当てられているノード群（テキストノード）については値を出力する。こうして得られた結果木から変換結果として、同図（Ｂ）に示すＸＭＬ文書を生成する。
【００２４】
要するに、結果木生成命令４０３の機能は、要素名、属性名、値を決定する。要素名、属性名としては、入力と同じか、固定値を付与する。値としては、入力（ｔｅｘｔ（））を用いるか、変数木内の指定のノード集合に対するＸＰａｔｈ関数（ｃｏｎｃａｔなどの文字列に対する関数、ｍａｘ，　ｍｉｎ，　ａｖｇ，　ｃｏｕｎｔ等の統計関数）結果を用いるか、固定値を付与する。
【００２５】
図７から図１０は、前述のＸＭＬ変換命令部品の表現例を示す。換言すれば、ＸＭＬ変換モデルを実現する変換言語の具体例である。
【００２６】
図７は、ＤＴＤ（ｄｏｃｕｍｅｎｔ　ｔｙｐｅ　ｄｅｆｉｎｉｔｉｏｎ）に基づくＸＭＬ変換命令部品の具体例を示す図である。ＤＴＤは、文書型定義で、ＸＭＬ文書内のタグを定義する。換言すれば、変換言語における基本表現である、要素型宣言、仮想要素型宣言、属性リスト宣言の具体例を示す。
【００２７】
要素型宣言及び仮想要素型宣言は、要素間の親子関係と兄弟関係、及び要素とその値を表現する。属性リスト宣言は、要素と属性の関係と、属性とその値の関係とを表現する。また、ＸＰａｔｈを用いて、要素や属性に割り当てるノード集合を指定する。
【００２８】
変数木は、前記の３つの宣言において要素名と属性名による木構造によって表現される。結果木は、前記の要素型宣言と属性リスト宣言における要素名と属性名による木構造によって表現される。
【００２９】
図８は、要素型宣言と仮想要素型宣言の内容モデルの種類に関する詳細な４つのケースを示す図である。
【００３０】
まず「＃ＰＣＤＡＴＡ　ＡＳ　Ｘ　Ｐａｔｈ」は、ＸＰａｔｈにより指定されたノードのテキスト値、もしくはＸＰａｔｈの関数の実行結果を、要素型宣言された要素の値とする。
【００３１】
「＃ＰＣＤＡＴＡ“固定値”」は、ユーザが指定した固定値を要素型宣言された要素の値とする。
【００３２】
「ＡＮＹ」は、ＸＰａｔｈにより要素に対応付けられたノード以下の部分木全体を要素型宣言された要素の内容として出力する。但し、その部分木に関して他の要素型宣言により別の変換方法が陽に指定されている場合は、その要素型宣言により指定される変換方法に従って変換される。
【００３３】
「要素内容」は、要素、変数要素もしくは要素内容の集まりをｓｅｑｕｅｎｃｅもしくはｃｈｏｉｃｅで列挙し、要素型宣言で宣言された要素の子要素として指定する。
【００３４】
また個々の要素、変数要素毎にＡＳ　ＸＰａｔｈによってノード集合を割り当てる。更にこうして割り当てられたノード集合に対し、整列変換、重複排除変換を指定することができる。
【００３５】
図９は、要素内容の詳細説明を示す図である。即ち、表現する際に使用されるｓｅｑｕｅｎｃｅ，ｃｈｏｉｃｅ，整列変換，重複排除変換について説明する。
【００３６】
下記の基数とはＤＴＤにおいて定義される“？”，“＊”，“＋”もしくは“指定なし”のことである。
【００３７】
「ｓｅｑｕｅｎｃｅの表記」は、（要素内容，要素内容，…，要素内容）基数であるＡＳＸ　Ｐａｔｈを意味する。個々の要素内容でのＸＰａｔｈで割り当てられた結果を、要素内容の順序で出力する。ＸＰａｔｈは全ての要素内容に対するコンテキストノードを指定する。
【００３８】
「ｃｈｏｉｃｅの表記」は、（要素内容｜要素内容｜…｜要素内容）基数であるＡＳ　ＸＰａｔｈを意味する。
【００３９】
個々の要素内容でのＸＰａｔｈで割り当てられた結果を、入力ＸＭＬにおける出現順序で出力する。ＸＰａｔｈは全ての要素内容に対するコンテキストノードを指定する。
【００４０】
「整列の表記」は、要素内容であるＯＲＤＥＲＢＹ　ＢＹ　Ｘ　Ｐａｔｈ［ＡＳＣＩＤＥＳＣ］を意味する。要素内容でのＸＰａｔｈで割り当てられた結果ノード集合について、個々のノードに関してＸＰａｔｈを適用して値を得て、その値に基づきソートする。
【００４１】
「重複排除の表記」は、要素内容であるＧＲＯＵＰ　ＢＹ　Ｘ　Ｐａｔｈを意味する。要素内容でのＸＰａｔｈで割り当てられた結果ノード集合について、個々のノードに関してＸＰａｔｈを適用して値を得て、その値に基づき重複を排除する。
【００４２】
図１０は、属性リスト宣言での属性情報の説明を示す図である。
【００４３】
ＰＣＤＡＴＡ“固定値”は、ユーザが指定した固定値を宣言された属性の値とする。
（ＸＳＬ翻訳部の処理手順）
以下、図１１から図３３のフローチャートを参照して、同実施形態のメイン要素であるＸＳＬ翻訳部１００の処理手順を説明する。
【００４４】
図１１はメイン処理手順を示すフローチャートであり、図１２〜図３３はそれぞれサブルーチンの処理手順を示すフローチャートである。
【００４５】
ＸＳＬ翻訳部１００は、ファイルに格納されたＸＭＬ変換命令４０をメモリ上に読み込む（ステップＳ１００）。次に、ＸＳＬ翻訳部１００は、ＸＳＬ（ＸＳＬＴ）のヘッダ情報を出力する（ステップＳ１１０）。このヘッダ情報としては、具体的には、「ＸＭＬのプロセッシングインストラクション」、「ＸＳＬのスタイルシートの開始命令とその名前空間の指定」、「ＸＳＬの変換出力をＸＭＬ指定」、「インデント指定」、「ＸＭＬのプロセッシングインストラクションの出力指定」、及び「変換結果において空白を削除する指定」を含む。
【００４６】
更に、ＸＳＬ翻訳部１００は、読み込んだＸＭＬ変換命令をファイル先頭からチェックして、図７に示すような要素型宣言、仮想要素型宣言、または属性リスト宣言があるか否かを確認する（ステップＳ１２０）。いずれも存在しない場合には、デフォルトテンプレート宣言出力の処理に移行する（ステップＳ１２０のＮＯ，Ｓ１３０）。この後、ＸＳＬのスタイルシートの終了命令を出力する（ステップＳ１４０）。
【００４７】
一方、ＸＳＬ翻訳部１００は、宣言が存在する場合には、宣言種類を判定する処理に移行し、当該種類に基づいて下記のように処理を分岐する（ステップＳ１２０のＹＥＳ，Ｓ１４５）。
【００４８】
当該宣言種類が要素型宣言である場合は、要素テンプレート宣言出力処理を実行する（ステップＳ１５０）。当該宣言種類が仮想要素型宣言である場合は、仮想要素テンプレート宣言出力処理を実行する（ステップＳ１６０）。また、当該宣言種類が属性リスト宣言である場合は、属性テンプレート宣言出力処理を実行する（ステップＳ１７０）。なお、それぞれの宣言出力処理の終了後には、ステップＳ１２０の処理に戻る。ＸＳＬ翻訳部１００は、各宣言出力処理により生成したＸＳＬプログラムに関連する情報（テンプレートなど）を記憶領域１１０に格納する。
【００４９】
次に、図１２及び図１３のフローチャートを参照して、図１１に示すメイン処理手順のサブルーチンを説明する。
【００５０】
図１１のステップＳ１３０のサブルーチンは、図１２に示すように、デフォルトテンプレートの生成処理であり、２つのＸＳＬテンプレートを出力する（ステップＳ１８０）。
【００５１】
ここで、一方のＸＳＬテンプレートは、他のＸＳＬテンプレートにマッチしない入力を破棄するために出力する。他方は、利用者が指定した変数配下の部分木全体を出力するものである。この他方のＸＳＬテンプレートは、後述する図２０のステップＳ４００の処理により呼び出されるＸＳＬテンプレートである。
【００５２】
図１１のステップＳ１５０のサブルーチンは、図１３に示すように、要素宣言が定数要素または変数要素のいずれであるかを判定する（ステップＳ１９０）。変数要素は、その名称が変数を表す記号（例えば＄）から始まる。変数要素の場合には、変数要素テンプレート宣言出力処理（図１７を参照）に移行する（ステップＳ１９０のＹＥＳ，Ｓ２１０）。
【００５３】
一方、定数要素の場合には、定数要素テンプレート宣言出力処理（図１４を参照）に移行する（ステップＳ１９０のＮＯ，Ｓ２００）。
【００５４】
ここで、図１１のステップＳ１６０で示す仮想要素テンプレート宣言出力処理と、前記の要素テンプレート宣言出力処理との差分について説明する。
【００５５】
ＸＳＬＴプログラム翻訳（ＸＳＬプログラムの生成）の際の仮想要素型宣言と要素型宣言との差は、要素型宣言の場合は変換結果として指定の要素を生成するＸＳＬ命令、ノードコピー命令を生成する。これに対して、仮想要素型宣言の場合は、変換結果に指定の要素を出力しないので、それらの命令を生成しない。
【００５６】
定数要素テンプレート宣言出力処理は、図１４に示すように、宣言された要素にＸＰａｔｈが指定されているかどうかを判定する（ステップＳ２２０）。ＸＰａｔｈが指定されている場合には、子定数テンプレート宣言出力処理に移行する（ステップＳ２２０のＹＥＳ，Ｓ２４０）。一方、ＸＰａｔｈが指定されていない場合には、最上位定数テンプレート宣言出力処理に移行する（ステップＳ２２０のＮＯ，Ｓ２３０）。
【００５７】
図１５は、当該ステップＳ２３０のサブルーチンを示すフローチャートである。
【００５８】
即ち、最上位定数テンプレート宣言出力処理では、最初に、宣言された要素名を変数ｌａｂｅｌに設定（代入）する（ステップＳ２５０）。さらに、要素に指定されたＸＰａｔｈを変数ｘｐａｔｈに設定する（ステップＳ２６０）。そして、最上位定数テンプレートの生成処理を開始する（ステップＳ２７０）。即ち、変数ｘｐａｔｈにマッチするＸＳＬテンプレートを生成し、そのテンプレートの内部で、ＸＳＬ変数を宣言しカレントノードを設定し、ＸＳＬ要素生成の開始命令を生成する。このＸＳＬ変数は本ＸＳＬテンプレート内から呼び出される他のＸＳＬテンプレートにパラメータとして渡す。こうすることで呼び出されたテンプレートからは、ＸＰａｔｈを用いて起動元のＸＳＬテンプレートのカレントノードを参照することが可能になる。
【００５９】
次に、後述する図２０のフローチャートで示す内容モデル出力処理を実行する（ステップＳ２８０）。この後に、ＸＳＬ要素生成の終了命令を生成し、ＸＳＬテンプレートの終了命令を生成する（ステップＳ２９０）。
【００６０】
ここで、ステップＳ３００，Ｓ３１０，Ｓ３２０では、前記のステップＳ２７０，Ｓ２８０，Ｓ２９０と同様なテンプレートであって、唯一異なる点は、ステップＳ３００において生成するＸＳＬテンプレートにモード指定を加えた点である。このモード指定の目的は、図１２で説明した部分木を出力するＸＳＬテンプレート内部から本テンプレートを呼び出すためである。
【００６１】
図１６は、図１４のステップＳ２４０のサブルーチンを示すフローチャートである。
【００６２】
即ち、子定数テンプレート宣言出力処理では、最初に、宣言された要素名を変数ｌａｂｅｌに設定（代入）する（ステップＳ３３０）。次に、子定数テンプレートの生成処理を開始する（ステップＳ３４０）。即ち、任意のノードにマッチするＸＳＬテンプレートを生成し、そのテンプレートの内部で、ＸＳＬ変数を宣言しカレントノードを設定し、ＸＳＬ要素生成の開始命令を生成する。但し、このＸＳＬテンプレートを他のＸＳＬテンプレートから呼び出すための識別子として、変数ｌａｂｅｌを用いてテンプレートのモードを指定する。
【００６３】
次に、後述する図２０のフローチャートで示す内容モデル出力処理を実行する（ステップＳ３４１）。この後、ＸＳＬ要素生成の終了命令を生成し、ＸＳＬテンプレートの終了命令を生成する（ステップＳ３５０）。
【００６４】
ここで、図１７から図１９の各フローチャートを参照して、前述のステップＳ２１０で示す変数要素テンプレート宣言出力処理と、ステップＳ２００で示す定数要素テンプレート宣言出力処理との差分を用いて説明する。
【００６５】
定数要素テンプレート宣言出力では、変換結果の要素名を利用者が指定している。これに対して、変数要素テンプレート宣言出力では、変換結果の要素名は入力ＸＭＬのものを利用する。このため、ステップＳ２７０，Ｓ３００，Ｓ３４０で利用していたＸＳＬ要素生成の開始命令の代わりに、ステップＳ３６５，Ｓ３７５，Ｓ３８５においてＸＳＬのノードコピーの開始命令を出力する。同様に、ステップＳ２９０，Ｓ３２０，Ｓ３５０で利用していたＸＳＬ要素生成の終了命令の代わりに、ステップＳ３７０，Ｓ３８０，Ｓ３９０においてＸＳＬのノードコピーの終了命令を出力する。
【００６６】
図２０は、例えば図１５のステップＳ２８０で示す内容モデル出力処理に関するサブルーチンである。
【００６７】
当該処理では、前述の図８および図９で説明した内容モデルの種類に従って処理を分岐する（ステップＳ３９５）。即ち、内容モデルがＡＮＹの場合には、ＡＮＹ処理に移行する（ステップＳ４００）。内容モデルが「＃ＰＣＤＡＴＡ」の場合には、ＰＣＤＡＴＡ処理に移行する（ステップＳ４１０）。内容モデルが「＃ＰＣＤＡＴＡ定数」の場合には、当該定数処理に移行する（ステップＳ４２０）。内容モデルが複数要素のｓｅｑｕｅｎｃｅの場合には、当該処理に移行する（ステップＳ４３０）。内容モデルが複数要素のｃｈｏｉｃｅの場合には、当該処理に移行する（ステップＳ４４０）。内容モデルが単数要素の場合には、当該処理に移行する（ステップＳ４５０）。
【００６８】
前記ステップＳ４３０、Ｓ４４０、Ｓ４５０の処理後では、ＧＲＯＵＰ　ＢＹまたはＯＲＤＥＲ　ＢＹの指定があるか否かを判定する（ステップＳ４６０）。この判定結果に応じて、ＧＲＯＵＰ　ＢＹがある場合には、当該処理に移行する（ステップＳ４７０）。ＯＲＤＥＲ　ＢＹの指定がある場合には、当該処理に移行する（ステップＳ４８０）。
【００６９】
図２１は、ステップＳ４００のサブルーチンを示すフローチャートである。
【００７０】
即ち、ＡＮＹ処理では、前述のステップＳ１８０で生成した部分木全体を出力するＸＳＬテンプレートを呼び出すためのＸＳＬ命令を出力する（ステップＳ４９０）。
【００７１】
図２２は、ステップＳ４１０のサブルーチンを示すフローチャートである。
【００７２】
即ち、ＰＣＤＡＴＡ処理では、宣言された要素にＸＰａｔｈが指定されているかどうかを判定する（ステップＳ５００）。ＸＰａｔｈが指定されている場合には、
ＰＣＤＡＴＡに指定されたＸＰａｔｈを変数ｘｐａｔｈに設定する処理に移行する（ステップＳ５００のＹＥＳ，Ｓ５２０）。一方、指定されていない場合には、カレントノードの値を出力するためのＸＳＬ命令を出力する処理に移行する（ステップＳ５００のＮＯ，Ｓ５１０）。
【００７３】
また、変数ｘｐａｔｈに設定する処理の後に、当該変数ｘｐａｔｈにより指定されるノードの値を出力するためのＸＳＬ命令を出力する処理に移行する（ステップＳ５３０）。
【００７４】
図２３は、ステップＳ４２０のサブルーチンを示すフローチャートである。
【００７５】
即ち、定数処理では、指定された定数値を出力するためのＸＳＬ命令を出力する処理を実行する（ステップＳ５４０）。
【００７６】
図２４は、ステップＳ４５０のサブルーチンを示すフローチャートである。
【００７７】
即ち、単要素処理出は、指定された要素名を変数ｌａｂｅｌに設定（代入）する（ステップＳ５６０）。次に、指定された要素にＸＰａｔｈが指定されているかどうかを判断する（ステップＳ５７０）。
【００７８】
指定されていない場合には、指定された要素から生成されたＸＳＬテンプレートを呼び出すため、変数ｌａｂｅｌをモード指定してＸＳＬテンプレートを呼び出す命令を出力する（ステップＳ５７０のＮＯ，Ｓ５８０）。この際、ＸＳＬテンプレートの抽出記述（ｓｅｌｅｃｔ属性）としては変数ｌａｂｅｌを用いる。更に、カレントノードが設定された変数、及び本ＸＳＬテンプレートを起動するＸＳＬテンプレート群でのカレントノードを設定した変数群をＸＳＬテンプレートを呼び出すパラメータとして設定する。
【００７９】
ＸＰａｔｈが指定されている場合には、要素に指定されたＸＰａｔｈを変数ｘｐａｔｈに設定する（ステップＳ５７０のＹＥＳ，Ｓ５９０）。次に、指定された要素から生成されたＸＳＬテンプレートを呼び出すため、変数ｌａｂｅｌをモード指定してＸＳＬテンプレートを呼び出す命令を出力する（ステップＳ６００）。この際、ＸＳＬテンプレートの抽出記述（ｓｅｌｅｃｔ属性）としては変数ｘｐａｔｈを用いる。
【００８０】
図２５は、ステップＳ４３０のサブルーチンを示すフローチャートである。
【００８１】
即ち、ｓｅｑｕｅｎｃｅ処理では、最初に、ｓｅｑｕｅｎｃｅにＸＰａｔｈが指定されているかどうかを判断する（ステップＳ６１０）。指定されている場合には、指定されたＸＰａｔｈを変数ｘｐａｔｈに設定する（ステップＳ６１０のＹＥＳ，Ｓ６６０）。そして、ＸＰａｔｈで指定されたノード集合の個々のノード毎に処理を行う開始命令を出力する（ステップＳ６７０）。
【００８２】
一方、ＸＰａｔｈが指定されていない場合には、ｓｅｑｕｅｎｃｅのエントリの有無を判断するループ処理に移行する（ステップＳ６１０のＮＯ，Ｓ６３０）。個々のエントリは逐次処理されることになる。ｓｅｑｕｅｎｃｅの要素がある場合には、ｓｅｑｕｅｎｃｅの個々のエントリを取りだし、そのエントリに関する内容モデル処理を実行する（ステップＳ６３０のＹＥＳ，Ｓ６４０，Ｓ６５０）。
【００８３】
一方、特にステップＳ６７０の処理を実行した場合（ｓｅｑｕｅｎｃｅにＸＰａｔｈが指定されている場合）で、ｓｅｑｕｅｎｃｅの要素がない場合には、個々のノード毎に処理を終了するための終了命令を出力する（ステップＳ６３０のＮＯ，Ｓ６８０）。
【００８４】
図２６は、ステップＳ４４０のサブルーチンを示すフローチャートである。
【００８５】
即ち、ｃｈｏｉｃｅ処理では、最初に、ｃｈｏｉｃｅにＸＰａｔｈが指定されているかどうかを判断する（ステップＳ６９０）。ＸＰａｔｈが指定されていない場合には、デフォルトの動作として、カレントノードの全ての子ノード毎に、ｃｈｏｉｃｅのエントリ条件を判別し、条件に一致した処理を行うためのＸＳＬ処理命令を出力する処理に移行する（ステップＳ６９０のＮＯ，Ｓ７００）。
【００８６】
一方、ＸＰａｔｈが指定されている場合には、指定されたＸＰａｔｈを変数ＸＰａｔｈに設定する（ステップＳ６９０のＹＥＳ，Ｓ７４０）。次に、ＸＰａｔｈで指定されたノード集合の個々のノード毎に、ｃｈｏｉｃｅのエントリ条件を判別し、条件に一致した処理を行うＸＳＬ処理命令を出力する（ステップＳ７５０）。
【００８７】
また、さらに、ｃｈｏｉｃｅのエントリの有無を判断するループ処理に移行する（ステップＳ７１０）。即ち、ｃｈｏｉｃｅの要素がある場合には、ｃｈｏｉｃｅの個々のエントリを取りだし、そのエントリを出力する処理を実行する（ステップＳ７１０のＹＥＳ，Ｓ７２０，Ｓ７３０）。ｃｈｏｉｃｅの要素がない場合には、個々のノード毎に処理を終了するための終了命令を出力する（ステップＳ７１０のＮＯ，Ｓ７６０）。
【００８８】
図２７は、ステップＳ７３０のサブルーチンを示すフローチャートである。
【００８９】
即ち、ｃｈｏｉｃｅ要素出力処理では、ｃｈｏｉｃｅのエントリである要素またはＰＣＤＡＴＡにＸＰａｔｈが指定されているかどうかを判断する（ステップＳ７７０）。ＸＰａｔｈが指定されていない場合には、ｃｈｏｉｃｅのエントリのタイプにより処理を分岐する（ステップＳ７７０のＮＯ，Ｓ７８０）。
【００９０】
具体的には、ＰＣＤＡＴＡの場合には、カレントノードが文字であるか否かを判別するためのＸＳＬの条件命令を出力する処理に移行する（ステップＳ７９０）。また、要素の場合には、カレントノードが指定された要素名と同じであるか否かを判別するためのＸＳＬの条件命令を出力する処理に移行する（ステップＳ８００）。
【００９１】
一方、ＸＰａｔｈが指定されている場合には、カレントノードにおいて指定されたＸＰａｔｈに合致するノード集合があるか否かを判別するためのＸＳＬの条件命令を出力する処理に移行する（ステップＳ７７０のＹＥＳ，Ｓ８１０）。
【００９２】
このような処理の後に内容モデル処理を実行し、さらに、ＸＳＬの判定条件の終了を表すＸＳＬ命令を出力する（ステップＳ８１１，Ｓ８２０）。
【００９３】
図２８は、ステップＳ４８０のサブルーチンを示すフローチャートである。
【００９４】
即ち、ＯＲＤＥＲ　ＢＹ処理では、最初にＯＲＤＥＲ　ＢＹのキー条件として指定されたＸＰａｔｈを変数ｘ　ｐａｔｈに設定する（ステップＳ８４０）。次に、ＯＲＤＥＲ　ＢＹに昇順または降順の指定があるか否かを判定する（ステップＳ８５０）。
【００９５】
指定がない場合には昇順として取り扱うことになり、昇順を指定するため変数ｏｒｄｅｒにａｓｃｅｄｉｎｇを設定する（ステップＳ８６０）。一方、降順の指定がある場合には、降順を指定するため変数ｏｒｄｅｒにｄｅｓｃｅｎｄｉｎｇを設定する（ステップＳ８７０）。
【００９６】
そして、記憶領域に書き出されたＸＳＬプログラムで、最も最近に書き出したＸＳＬテンプレートの呼び出し命令（ステップＳ５８０での出力）、あるいはノード集合の個々のノード毎に処理を実行するＸＳＬ命令（ステップＳ６７０，Ｓ７００，Ｓ７５０での出力）を探索して、その命令にＸＳＬの整列（ソート）命令を追加する（ステップＳ８８０）。この際、昇順または降順は変数ｏｒｄｅｒを用いて指定する。
【００９７】
図２９は、ステップＳ４７０のサブルーチンを示すフローチャートである。
【００９８】
即ち、ＧＲＯＵＰ　ＢＹ処理では、ＧＲＯＵＰ　ＢＹのキー条件として指定されたＸＰａｔｈを変数ｘｐａｔｈに設定する（ステップＳ８９０）。次に、記憶領域に書き出されたＸＳＬプログラムで最も最近に書き出したＸＳＬテンプレートの呼び出し命令（ステップＳ５８０での出力）、あるいはノード集合の個々のノード毎に処理を実行するＸＳＬ命令（ステップＳ６７０，Ｓ７００，Ｓ７５０での出力）を探索する（ステップＳ９００）。
【００９９】
この探索処理により見つけた種類に従って処理を分岐する（ステップＳ９１０）。具体的には、ＸＳＬテンプレートの呼び出し命令の場合には、ステップＳ９２０の処理に移行する。この処理では、後述するステップＳ９３０（図３０を参照）で生成される重複排除のＸＳＬテンプレートを起動するため、見つけたＸＳＬテンプレートにおけるＸＳＬテンプレート呼び出し命令を変更する。また、重複排除のＸＳＬテンプレートに変数ｘｐａｔｈの示すノード集合をパラメータとして渡す（ステップＳ９２０）。この後に、ＧＲＯＵＰ　ＢＹテンプレート出力処理を実行する（ステップＳ９３０）。
【０１００】
一方、ノード集合の個々のノード毎に処理を実行するＸＳＬ命令の場合には、ＸＳＬ命令の変更処理に移行する（ステップＳ９４０）。この処理では、見つけたノード集合の個々のノード毎に処理を実行するＸＳＬ命令において、重複値の判定処理を追加し、重複する値が既に処理されている場合はそのノードの処理をスキップするよう変更する。重複を排除する方法は、ノード集合に属する個々のノードの処理において、そのノードの位置より前にあるノードで同じ値のものがあるか否かを判定することで実現できる。
【０１０１】
図３０は、ステップＳ９３０のサブルーチンを示すフローチャートである。
【０１０２】
即ち、ＧＲＯＵＰ　ＢＹテンプレート出力処理では、重複排除のＸＳＬテンプレートを生成する（ステップＳ９６０）。重複排除の方法は、パラメータとして渡されているノード集合において、重複排除のＸＳＬテンプレートが起動された位置（回数）より前にあるノードでカレントノードと同じ値のものがあるか否かを判定することで実現できる。本ＸＳＬテンプレート内で重複排除処理を行い、値が重複していない場合にＧＲＯＵＰ　ＢＹが指定された要素から生成されたＸＳＬテンプレートを起動するＸＳＬ命令を出力する。この際、カレントノードをパラメータとして呼び出し先のＸＳＬテンプレートに渡す。こうすることで呼び出されたテンプレートからは、ＸＰａｔｈを用いて起動元のＸＳＬテンプレートのカレントノードを参照することが可能になる。
【０１０３】
図３１は、図１１のステップＳ１７０のサブルーチンを示すフローチャートである。
【０１０４】
即ち、属性リスト宣言出力処理では、本属性リスト宣言がなされる対象の要素名を変数ｌａｂｅｌに設定する（ステップＳ９８０）。次に、個々の属性の有無を判定するループ処理に移行する（ステップＳ９９０）。宣言される属性がある場合には、宣言された属性名を変数ａｔｔｒに設定する（ステップＳ９９０のＹＥＳ，Ｓ１０００）。そして、宣言の種類に応じて処理を分岐する（ステップＳ１０１０）。
【０１０５】
具体的には、ＣＤＡＴＡの場合には、後述するＣＤＡＴＡ処理に移行する（ステップＳ１０２０）。また、ＣＤＡＴＡ定数の場合には、後述する定数属性処理に移行する（ステップＳ１０３０）。
【０１０６】
図３２は、ステップＳ１０２０のサブルーチンを示すフローチャートである。
【０１０７】
即ち、ＣＤＡＴＡ処理では、属性にＸＰａｔｈが指定されているか否かを判定する（ステップＳ１０４０）。指定されていない場合には、前述のステップＳ９８０で指定された要素から生成されたＸＳＬテンプレートを記憶領域から探索する。そして、そのＸＳＬテンプレートのＸＳＬの要素生成開始命令の後に、変数ａｔｔｒを名称とし＠ａｔｔｒをＸＰａｔｈとして取り出される値を属性値とするようなＸＳＬの属性生成命令を出力する（ステップＳ１０５０）。
【０１０８】
一方、属性にＸＰａｔｈが指定されている場合には、指定されたＸＰａｔｈを変数ｘｐａｔｈに設定する（ステップＳ１０６０）。この後に、前述のステップＳ９８０で指定された要素から生成されたＸＳＬテンプレートを記憶領域から探索する。そして、そのＸＳＬテンプレートのＸＳＬの要素生成開始命令の後に、変数ａｔｔｒを名称とし、指定されたＸＰａｔｈを利用して取り出される値を属性値とするようなＸＳＬの属性生成命令を出力する（ステップＳ１０７０）。
【０１０９】
図３３は、ステップＳ１０３０のサブルーチンを示すフローチャートである。
【０１１０】
即ち、定数属性処理では、最初に、指定された定数値を変数ｃｏｎｓｔａｎｔに設定する（ステップＳ１０８０）。次に、属性にＸＰａｔｈが指定されているか否かを判定する（ステップＳ１０９０）。
【０１１１】
ＸＰａｔｈが指定されていない場合には、固定値の属性出力命令を追加処理を実行する（ステップＳ１０９０のＮＯ，Ｓ１１００）。即ち、前述のステップＳ９８０で指定された要素から生成されたＸＳＬテンプレートを記憶領域から探索する。探索されたＸＳＬテンプレートのＸＳＬの要素生成開始命令の後に、変数ａｔｔｒを名称として、＠ａｔｔｒをＸＰａｔｈとした場合にそれを満たすノードがある場合に、指定された定数値（ｃｏｎｓｔａｎｔ）を属性値とするようなＸＳＬの属性生成命令を出力する。
【０１１２】
一方、ＸＰａｔｈが指定されている場合には、指定されたＸＰａｔｈを変数ｘｐａｔｈに設定する（ステップＳ１１１０）。この後に、前述のステップＳ９８０で指定された要素から生成されたＸＳＬテンプレートを記憶領域から探索する。この探索されたＸＳＬテンプレートのＸＳＬの要素生成開始命令の後に、変数ａｔｔｒを名称とし、指定されたＸＰａｔｈを満たすノードがある場合に指定された定数値（ｃｏｎｓｔａｎｔ）を属性値とするようなＸＳＬの属性生成命令を出力する（ステップＳ１１２０）。
【０１１３】
図３４は、同実施形態のＸＭＬ変換命令の第１の記述例を示す図である。
【０１１４】
本記述例では、１−２行の要素型宣言によって、変換結果における要素名がｂｉｂであり、変換結果はｂｉｂ　ＸＰａｔｈによって指定されるノード集合が割り当てられ、その要素内容は＊ＸＰａｔｈによって指定されるノード集合が割り当てられる。この要素内容は入れ子で更に定義され＄ｘ，ａｒｔｉｃｌｅのｃｈｏｉｃｅによる列挙の０回以上の繰り返しであることが指定されている。この繰り返しはｔｉｔｌｅの値によって整列され、＄ｘにはｓｅｌｆ：：ｂｏｏｋ　ＸＰａｔｈによって指定されるノード集合が、ａｒｔｉｃｌｅにはｓｅｌｆ：：ａｒｔｉｃｌｅによって指定されるノード集合がそれぞれ割り当てられる。
【０１１５】
３行目の要素型宣言によって、要素名が＄で始まる名称であるため、変換結果における要素名は入力ＸＭＬと同じ要素名であり、その要素内容はｔｉｔｌｅ，ａｕｔｈｏｒの１以上の繰り返し、ｐｕｂｌｉｓｈｅｒのｓｅｑｕｅｎｃｅによる列挙であることが指定されている。更にｔｉｔｌｅにはｔｉｔｌｅ　ＸＰａｔｈによって指定されるノード集合が、ａｕｔｈｏｒにはａｕｔｈｏｒ　ＸＰａｔｈによって指定されるノード集合が、ｐｕｂｌｉｓｈｅｒにはｐｕｂｌｉｓｈｅｒ　ＸＰａｔｈによって指定されるノード集合が割り当てられる。
【０１１６】
４行の要素型宣言によって、変換結果における要素名がｔｉｔｌｅであり、その値が結果として割り当てられる。
【０１１７】
５行の要素型宣言によって、変換結果における要素名がａｕｔｈｏｒであり、その要素内容はａｕｔｈｏｒ＿ｎａｍｅであることが指定されている。
【０１１８】
更に、ａｕｔｈｏｒ＿ｎａｍｅには．によって指定されるノード集合が割り当てられる。
【０１１９】
６行の仮想要素型宣言によって、ａｕｔｈｏｒ＿ｎａｍｅに割り当てられたノード集合に関しては結果として出力せず、その値はｃｏｎｃａｔ（ｆｉｒｓｔｎａｍｅ，’’，ｌａｓｔｎａｍｅ）ＸＰａｔｈの結果を割り当てることが指定されている。
【０１２０】
７行の仮想要素型宣言によって、ｐｕｂｌｉｓｈｅｒに割り当てられたノード集合に関しては結果として出力せず、その要素内容はｎａｍｅであることが指定されている。
【０１２１】
更に、ｎａｍｅにはｎａｍｅによって指定されるノード集合が割り当てられる。
【０１２２】
８行の要素型宣言によって、変換結果における要素名がｎａｍｅであり、その値が固定値ＣＯＮＳＴ　ｐｕｂとして割り当てられる。
【０１２３】
９行の要素型宣言によって、変換結果における要素名がａｒｔｉｃｌｅであり、その要素内容がそのまま変換結果に割り当てられることが指定されている。
【０１２４】
図３５（Ａ）は、ＸＭＬ変換命令の第２の記述例であり、ＧＲＯＵＰ　ＢＹによる重複排除変換を利用する例である。
【０１２５】
即ち、１行目の要素型宣言の要素内容で、ｂｏｏｋ／ａｕｔｈｏｒ　ＸＰａｔｈによりｅｎｔｒｙに割り当てられるノード集合の０回以上の繰り返しであることが指定されていて、更にＧＲＯＵＰ　ＢＹ節によって個々のノードに対し．ＸＰａｔｈを適用した結果の値をキーとして、その繰り返しが重複排除変換されることを示している。
【０１２６】
同様に２行目では、ｂｏｏｋに割り当てられるノード集合がＧＲＯＵＰ　ＢＹ節によって、個々のノードに対し＠ｙｅａｒ　ＸＰａｔｈの値を適用した結果の値をキーとして、繰り返しが重複排除されることを示している。
【０１２７】
また３、６行目では、＄ｂｏｏｋＧｒｏｕｐ変数を利用していて、これは２行目で重複排除したｂｏｏｋ毎にそのキー値を参照する変数である（Ｓ９６０に相当）。
【０１２８】
図３５（Ｂ）は、ＸＭＬ変換命令の第３の記述例であり、ＸＰａｔｈのｄｏｃｕｍｅｎｔ関数を用いた複数ＸＭＬを変換操作する例である。
【０１２９】
即ち、この例では８行目の要素に指定されたｄｏｃｕｍｅｎｔ（’ＢｏｏｋＣｏｓｔｓ．ｘｍｌ’）／ＢｏｏｋＣｏｓｔｓ／Ｂｏｏｋ［Ｔｉｔｌｅ＝＄Ｔｉｔｌｅ］／Ｃｏｓｔ　ＸＰａｔｈを用いて、ＢｏｏｋＣｏｓｔｓ．ｘｍｌからノード集合を抽出してＣｏｓｔに割り当ている。
【０１３０】
図３６は、図３４の第１記述例に対応するＸＭＬ変換モデルを表現したものである。
【０１３１】
図３４の１−２行の要素型宣言は、図３６の変数木１の最上位ノードとその子ノード、変数木２の最上位ノードとその子ノード、結果木の最上位ノードに対応する。具体的には、入力ＸＭＬからｂｉｂ，＊のＸＰａｔｈによって変数木１のノード集合を抽出している。変数木１から＊ＸＰａｔｈによって抽出されたノード集合を整列変換を行ってその結果を変数木２に割り当ている（最上位ノードはそのまま割り当ている）。そして変数木２から最上位ノードのみ結果木に割り当ている。
【０１３２】
このように要素型宣言、仮想要素型宣言、属性リスト宣言では、ＸＰａｔｈを用いて変換木を抽出し、同時に要素間の関係、要素属性間の関係、要素・属性とその値の関係を指定する。
【０１３３】
要素型宣言・仮想要素型宣言の要素内容で指定される、ＧＲＯＵＰ　ＢＹ節は重複排除変換を指定し、ＯＲＤＥＲ　ＢＹ変換は整列変換を指定する。
【０１３４】
要素型宣言・属性リスト宣言では、得られた変換木のどの部分を結果木とするか、どのような要素名・属性名にするか、どのような演算を施して値を決定するかを指定する。
【０１３５】
以上要するに、本実施形態のＸＭＬ変換処理方法であれば、ＸＳＬ翻訳部１００において、適切な粒度でのＸＭＬ変換命令を設計することにより、ＸＳＬプログラムを自動的に生成できる。この場合、ＸＳＬ言語を直接に使用してＸＳＬプログラムを設計する場合と比較して、１／１０程度のコード量でＸＳＬプログラムを生成できる。従って、ＸＭＬデータを他の形式のＸＭＬデータに変換するためのＸＳＬプログラムの生産性を向上できる。更に、ＸＳＬプログラムを変更する場合に、１／１０程度のコードに対して差分追加で機能追加を実現できるため、ＸＳＬプログラムの柔軟性を向上できる。換言すれば、機能拡張を差分追加で実現できるようなＸＭＬ変換命令を設計することにより、ＸＳＬプログラムの変更を容易に行なうことができる。
【０１３６】
【発明の効果】
以上詳述したように本発明によれば、ＸＭＬデータから他の形式のＸＭＬデータへのＸＭＬ変換方法において、当該ＸＭＬ変換処理を実行するためのＸＳＬプログラムの生産性の向上を図ることができると共に、当該プログラムの変更の柔軟性を向上できる。
【図面の簡単な説明】
【図１】本発明の実施形態に関するＸＭＬ変換システムの要部を示すブロック図。
【図２】同システムのＸＭＬ変換処理部の要部を示すブロック図。
【図３】同実施形態に関するＸＭＬ変換命令の作成方法を説明するための図。
【図４】同実施形態に関する変数木抽出命令の機能を説明するための図。
【図５】同実施形態に関する変数木変換命令の機能を説明するための図。
【図６】同実施形態に関する結果木生成命令の機能を説明するための図。
【図７】同実施形態に関するＸＭＬ変換命令部品の表現例を示す図。
【図８】同実施形態に関するＸＭＬ変換命令部品の表現例を示す図。
【図９】同実施形態に関するＸＭＬ変換命令部品の表現例を示す図。
【図１０】同実施形態に関するＸＭＬ変換命令部品の表現例を示す図。
【図１１】同実施形態に関するＸＳＬ翻訳部のメイン処理手順を説明するためのフローチャート。
【図１２】同ＸＳＬ翻訳部のデフォルトテンプレート宣言に関するサブルーチンを示すフローチャート。
【図１３】同ＸＳＬ翻訳部の要素テンプレート宣言に関するサブルーチンを示すフローチャート。
【図１４】同ＸＳＬ翻訳部の定数要素テンプレート宣言に関するサブルーチンを示すフローチャート。
【図１５】同ＸＳＬ翻訳部の最上位定数テンプレート宣言に関するサブルーチンを示すフローチャート。
【図１６】同ＸＳＬ翻訳部の子定数テンプレート宣言に関するサブルーチンを示すフローチャート。
【図１７】同ＸＳＬ翻訳部の変数要素テンプレート宣言に関するサブルーチンを示すフローチャート。
【図１８】同ＸＳＬ翻訳部の最上位変数テンプレート宣言に関するサブルーチンを示すフローチャート。
【図１９】同ＸＳＬ翻訳部の子変数テンプレート宣言に関するサブルーチンを示すフローチャート。
【図２０】同ＸＳＬ翻訳部の内容モデル出力処理に関するサブルーチンを示すフローチャート。
【図２１】同ＸＳＬ翻訳部のＡＮＹ処理に関するサブルーチンを示すフローチャート。
【図２２】同ＸＳＬ翻訳部のＰＣＤＡＴＡ処理に関するサブルーチンを示すフローチャート。
【図２３】同ＸＳＬ翻訳部の定数処理に関するサブルーチンを示すフローチャート。
【図２４】同ＸＳＬ翻訳部の単要素処理に関するサブルーチンを示すフローチャート。
【図２５】同ＸＳＬ翻訳部のｓｅｑｕｅｎｃｅ処理に関するサブルーチンを示すフローチャート。
【図２６】同ＸＳＬ翻訳部のｃｈｏｉｃｅ処理に関するサブルーチンを示すフローチャート。
【図２７】同ＸＳＬ翻訳部のｃｈｏｉｃｅ要素出力に関するサブルーチンを示すフローチャート。
【図２８】同ＸＳＬ翻訳部のＯＲＤＥＲ　ＢＹ処理に関するサブルーチンを示すフローチャート。
【図２９】同ＸＳＬ翻訳部のＧＲＯＵＰ　ＢＹに関するサブルーチンを示すフローチャート。
【図３０】同ＸＳＬ翻訳部のＧＲＯＵＰ　ＢＹテンプレート出力に関するサブルーチンを示すフローチャート。
【図３１】同ＸＳＬ翻訳部の属性リスト宣言に関するサブルーチンを示すフローチャート。
【図３２】同ＸＳＬ翻訳部のＣＤＡＴＡ出力に関するサブルーチンを示すフローチャート。
【図３３】同ＸＳＬ翻訳部の定数属性処理に関するサブルーチンを示すフローチャート。
【図３４】同実施形態に関するＸＭＬ変換命令の第１の記述例を示す図。
【図３５】同実施形態に関するＸＭＬ変換命令の第２及び第３の記述例を示す図。
【図３６】同第１の記述例に対応するＸＭＬ変換モデルを表現した図。
【符号の説明】
１０…ＸＭＬ変換処理部
４０…ＸＭＬ変換命令
５０…パーソナルコンピュータ
１００…ＸＳＬ翻訳部
１０１…ＸＳＬ処理部
４００…ＸＭＬ変換命令部品群
【図１】
2004133786.tif 000003
【図２】
2004133786.tif 000004
【図３】
2004133786.tif 000005
【図４】
2004133786.tif 000006
【図５】
2004133786.tif 000007
【図６】
2004133786.tif 000008
【図７】
2004133786.tif 000009
【図８】
2004133786.tif 000010
【図９】
2004133786.tif 000011
【図１０】
2004133786.tif 000012
【図１１】
2004133786.tif 000013
【図１２】
2004133786.tif 000014
【図１３】
2004133786.tif 000015
【図１４】
2004133786.tif 000016
【図１５】
2004133786.tif 000017
【図１６】
2004133786.tif 000018
【図１７】
2004133786.tif 000019
【図１８】
2004133786.tif 000020
【図１９】
2004133786.tif 000021
【図２０】
2004133786.tif 000022
【図２１】
2004133786.tif 000023
【図２２】
2004133786.tif 000024
【図２３】
2004133786.tif 000025
【図２４】
2004133786.tif 000026
【図２５】
2004133786.tif 000027
【図２６】
2004133786.tif 000028
【図２７】
2004133786.tif 000029
【図２８】
2004133786.tif 000030
【図２９】
2004133786.tif 000031
【図３０】
2004133786.tif 000032
【図３１】
2004133786.tif 000033
【図３２】
2004133786.tif 000034
【図３３】
2004133786.tif 000035
【図３４】
2004133786.tif 000036
【図３５】
2004133786.tif 000037
【図３６】
2004133786.tif 000038