忍坂2 リファレンス

赤紫蘇2リファレンス

akaxiso2.0-beta3


コマンドラインオプション

忍坂2の動作

チューニング

DTD->XMLスキーマ変換


以下、忍坂2の動作について説明します。

生成される要素

忍坂2が行う処理

ファイル生成オプション


生成される要素

以下のクラス、関数のソースが生成されます。

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のインスタンスを渡すだけで、シリアライズを行います。
  • 生成されるファイルの名前は、ファイル生成オプションにより異なります。


忍坂2が行う処理

忍坂2が行う処理は以下のようになります。

XMLスキーマ文書のデシリアライズ
  • XMLスキーマ文書がデシリアライズされC++オブジェクトツリーへと変換されます。(デシリアライザは赤紫蘇2を使って実装されています。)
  • この際、<xs:include>、<xs:import>で外部ファイルを読み込みます。外部ファイルのパスは、@schemaLocation属性を用いて示します。ファイルが存在するパスからの相対パスで記述します。
XMLスキーマデータモデルから赤紫蘇データモデルへの変換
  • XMLスキ−マのデータモデルを赤紫蘇2データモデルへと変換します。
赤紫蘇データモデルの最適化
  • データモデルの変換中に発生する冗長なクラスや、XMLスキーマ文書中の定義の冗長な構造を最適化し、生成されるクラス数を減らします。
  • デフォルトで有効にされています。(-a0オプションで最適化無効)
ソース生成
  • 構築されたデータモデルからソースファイルを生成します。
  • ファイル生成のオプションは、-f、-n です。詳細は後述します。
  • メンバ名、クラス名の命名規則は、設定ファイル(-Lオプションを用いて読み込み)を用いて変更することができます。


ファイル生成オプション

忍坂2のファイル生成には、以下の二つのやり方があります。

・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、忍坂2の名前空間に対応するクラスが生成されます。また、最後のコマンドで、serializer.h/.cppファイルに、instantiate_xiso()、serialize()関数が生成されます。


赤紫蘇2トップへ sourceforgeプロジェクトページへ