赤紫蘇2.

忍坂2(α)

akaxiso2.0-beta1


忍坂2は、XML-Schemaドキュメントから、シリアライザブルなクラスを生成するためのスキーマコンパイラです。

コマンドライン

osixaka2 [-p] [-d] [-o ディレクトリ名] [-D] [-l <プリファレンスファイル名>] [-s <プリファレンスファイル名>] <XML文書 ファイル>

オプション

オプション文字 意味

-p

スキーマファイルをパースするのみで終了する。
-d パースされたスキーマドキュメントを、シリアライズする。
-o <ディレクトリ名> 出力ディレクトリの指定。無指定の場合カレントディレクトリ
-D 与えられたXML文書からDTDを読み込み、XML-Schemaドキュメントに変換、書き出す。
-l 与えられたプリファレンスファイルを読み込む。
-s プリファレンスファイルを書き出す。

例として、忍坂2による、XML Schemaのためのスキーマ文書生成について説明します。

XMLSchemaは、以下の二つのスキーマ文書により定義されています。

名前空間URI ファイル名 オリジナルスキーマのURL
http://www.w3.org/2001/XMLSchema XMLSchema.xsd http://www.w3.org/2001/XMLSchema.xsd
http://www.w3.org/XML/1998/namespace xml.xsd http://www.w3.org/2001/xml.xsd

これらのファイルは、オリジナルのスキーマです。
忍坂2でのスキーマ生成では、以下の前処理を施す必要があります。

  • xs:include、xs:importなどで指定する外部スキーマ文書の位置を、処理対象となるスキーマ文書からの相対パスに変更
    • XMLSchema.xsdの場合には、xs:includeで指定されるxml.xsdのパスを相対パスに変更。

前処理を施したファイルは、akaxiso2/osixaka2以下にあります。このファイルを使用して、以下のコマンドを実行してください。

Windowsの場合(akaxiso2\binディレクトリにて)

akaxiso2\bin> osixaka2 ..\osixaka2\XMLSchema.xsd

Linuxの場合(akaxiso2/osixaka2ディレクトリにて)

$ ./osixaka2 XMLSchema.xsd

この操作により、element.h/xiso.h/xiso.cppの三つのファイルが生成されます。それぞれの内容を以下に示します。

ファイル名
内容
element.h シリアライザブルなクラスの宣言
シリアライズ関数の宣言
xiso.h leaf<>クラスの宣言
xiso.cpp leaf<>クラスの実装
シリアライズ関数の実装

以上のファイルをコンパイルし、赤紫蘇ライブラリとリンクすることで、XML Schemaドキュメントのシリアライズ、デシリアライズが可能となります。デシリアライズ、シリアライズするためのサンプルコードは、osixaka2/test_main.cpp(HTML版)をご参照ください。
(Linuxであれば、osixaka2ディレクトリで、make parserを行うことで、ビルドできます。)

仕様、制限、未実装部など

  • XML-Schema中の組込み型は、忍坂2により、C++クラスにマッピングされます。
    対応表(赤紫蘇、忍坂2における組み込み型)を参照ください。また、これらの対応は、設定ファイルにより変更可能です。

  • xs:simpleTypeによる単純型の定義を用いた場合、生成される型は、std::stringのtypedef名となります。
    また、単純型の制限、拡張の定義について、妥当性検証ロジックはサポートされません。

  • 以下のタグ、属性は、サポートされません。
    • xs:keybase、xs:keyref、xs:substitutionGroup、mixed属性、

  • 以下のタグ、属性は、未実装です。
    • xs:redefine、abstract属性、final属性、block属性、blockDefault属性

  • complexContent以下におけるrestrictionの定義に関して、制約のチェックは、未実装です。

  • 赤紫蘇では、XMLSchemaで記述されるドキュメント構造を、より少ない数のクラスで表現できるようにしてあります。
    このため、XML Schemaで定義される文書をそのまま、C++のクラスへと変換すると冗長な宣言になります。このため、忍坂2では、内部でドキュメント構造の単純化、最適化を行っています。このロジックについては、より、詳細な実装を行う予定です。

  • xs:include、xs:importの処理時に指定されるschemaLocation属性は、処理対象のスキーマファイルからの相対パスで記述されるものとします。


ホームに戻る 赤紫蘇2プロジェクトページへ