|  |  | 忍坂２．リファレンス
|  | 忍坂２の動作
| akaxiso2.0-beta2 |
| 忍坂２リファレンス コマンドラインオプション 忍坂２の動作 チューニング DTD->XMLスキーマ変換 |  | 以下、忍坂２の動作について説明します。 ・生成される要素 ・忍坂２が行う処理 ・ファイル生成オプション 生成される要素 以下のクラス、関数のソースが生成されます。
C++値クラス
| 値を保持するC++クラスの定義です。 生成されるファイルは、値クラスの宣言を含むヘッダファイルとなります。 ファイル名は、XMLスキーマ文書名を用いて、"<スキーマ文書名>.h"となります。
leafクラス宣言、定義
| C++値クラスに対応するleafクラスの宣言、定義を生成します。 leafクラスの宣言が生成されるヘッダファイルの名前は、"<スキーマ文書名>_xiso.h"となります。 leafクラスの実装が生成されるcppファイルの名前は、"<スキーマ文書名>_xiso.cpp"となります。
leafクラスのインスタンシング、名前空間の登録を行う関数の宣言、定義
| leafクラスのinitialize()メソッドを順次呼び出し、XML型情報を登録したり、名前空間プレフィックスとURIを対応付けるための処理を実装する関数(instantiate_xiso())の宣言、実装を生成します。 生成されるファイルの名前は、ファイル生成オプションにより異なります。
シリアライズ関数の宣言と定義
| グローバル名前空間にserialize()関数の宣言と定義を生成します。 serialize()関数は、関数オーバーロードを用いて定義され、ルートクラス、std::ostreamのインスタンスを渡すだけで、シリアライズを行います。 生成されるファイルの名前は、ファイル生成オプションにより異なります。
忍坂２が行う処理 忍坂２が行う処理は以下のようになります。
XMLスキーマ文書のデシリアライズ
| XMLスキーマ文書がデシリアライズされC++オブジェクトツリーへと変換されます。(デシリアライザは赤紫蘇２を使って実装されています。) この際、<xs:include>、<xs:import>で外部ファイルを読み込みます。外部ファイルのパスは、@schemaLocation属性を用いて示します。ファイルが存在するパスからの相対パスで記述します。
XMLスキーマデータモデルから赤紫蘇データモデルへの変換
| XMLスキ−マのデータモデルを赤紫蘇２データモデルへと変換します。
赤紫蘇データモデルの最適化
| データモデルの変換中に発生する冗長なクラスや、XMLスキーマ文書中の定義の冗長な構造を最適化し、生成されるクラス数を減らします。 デフォルトで有効にされています。(-a0オプションで最適化無効)
ソース生成
| 構築されたデータモデルからソースファイルを生成します。 ファイル生成のオプションは、-f、-n です。詳細は後述します。 メンバ名、クラス名の命名規則は、設定ファイル(-Lオプションを用いて読み込み)を用いて変更することができます。
ファイル生成オプション 忍坂２のファイル生成には、以下の二つのやり方があります。 ・all-in-one型 ひとつ、もしくは、複数のXMLスキーマドキュメントをまとめて処理し、値クラスヘッダファイル(*.h)、leafクラスヘッダファイル (*_xiso.h)、leafクラス実装ファイル(*_xiso.cpp)の三つのファイルを生成します。<xs:import>を用い、複数のXMLスキーマ文書を読み込み、複数の名前空間を同時扱っている場合でも、以上の三つのファイルに、全内容が生成されます。ファイルは、XMLスキーマの文書名を用いて名づけられます。 また、instantiate_xiso()関数や、seirlize()関数についても、宣言は値クラスヘッダファイルに、実装はleafクラス実装に含まれます。 例： osixaka2ディレクトリ中のXMLSchema.xsdを用いた場合の、ファイル生成の実行例
    $ osixaka2 XMLSchema.xsd
XMLSchema.xsdは、xml.xsd(XML名前空間内の定義)、osx.xsd(忍坂名前空間内の定義)を読み込み、XMLSchema.h、XMLSchema_xiso.h、XMLSchema_xiso.cppに、ソースを生成します。 ・分割ソース生成 XMLスキーマ文書が定義する名前空間ごとに、値クラスヘッダファイル(*.h)、leafクラスヘッダファイル(*_xiso.h)、leafクラス実装ファイル(*_xiso.cpp)を別個に生成します。 また、instantiate_xiso()関数や、serialize()関数についても、別個に、ヘッダ、実装ファイルが生成されます。 名前空間ごとのクラス宣言、leafクラス宣言、実装を生成するためには、osixaka2の実行時に-nオプションをつけます。 また、instantiate_xiso()関数、serialize()関数の宣言、実装を生成するためには、-fオプションを用います。-fオプションは、出力ファイル名を引数としてとります。 例： osixaka2ディレクトリ内のXMLSchema.xsdを用いた場合のファイル生成の実行例
    # クラス宣言定義の生成(-nオプション使用)
    $ osixaka2 -n XMLSchema.xsd
    $ osixaka2 -n xml.xsd
    $ osixaka2 -n osx.xsd
    # instantiate_xiso()、serialize()関数の生成 (-fオプション使用)
    $ osixaka2 -f serializer XMLSchema.xsd xml.xsd osx.xsd
-nオプションをつけ、実行することで、XMLスキーマ、XML、忍坂２の名前空間に対応するクラスが生成されます。また、最後のコマンドで、serializer.h/.cppファイルに、instantiate_xiso()、serialize()関数が生成されます。

リファレンストップへ 赤紫蘇２トップページへ sourceforgeプロジェクトページへ