赤紫蘇2.

赤紫蘇の機能 (XMLSchema機能対応表)


赤紫蘇は、二つの名前空間aka::、xiso::により構成されています。

aka::名前空間では、シリアライザとしてのフレームワークを提供します。
実際のドキュメントの値を保持するクラスは、ユーザ定義となります。このユーザ定義クラスの型情報は、別のクラスとして定義されます。このクラスをleaf<>クラスと呼びます。
通常は、leaf<>クラスを、xiso::名前空間内で定義することにより、シリアライゼーションが可能となります。

赤紫蘇は、XMLスキーマで表現されるモデルをシリアライズ、デシリアライズすることができます。
以下に、スキーマ要素とクラスの間の対応を示します。

XMLSchema要素 C++クラスによる表現 XML型情報の定義
schema/element インスタンシングできるクラス aka::doctype()を用いて、ドキュメントのトップノードであることを明示。
schema/complexType インスタンシングできるクラス leaf<>クラスの宣言が行われていること。
schema/attribute 未対応 仕様検討中
sequence インスタンシングできるクラス。
メンバを要素の値として使用。
leaf<>クラスにおいて、aka::sequence<>を継承する。また、leaf<>クラス内のvoid model()メソッドで内で、要素を定義。
choice aka::itemを値として持つSTLコンテナにより実装。 aka::sequential_choice<>、
aka::associative_choice<>によりleaf<>クラスを定義。
all インスタンシングできるクラス。
クラスのメンバを要素の値として使用。
leaf<>クラスにおいて、aka::all<>を継承する。leaf<>クラス内のvoid model()メソッドで、要素を定義。
simpleContent インスタンシングできるクラス。
メンバを値、属性をとする。
leaf<>クラスにおいて、aka::simplecontent<>を継承し、void model()メソッドで、要素を定義。
attribute
(complexType内)
クラスのメンバを属性値として使用。 sequence、all、simpleContentの場合に定義可能。
  • attribute@default
    (complexType内)
対応するメンバに設定されたデフォルト値を書き込む。 voide model()メソッド内、attribute()クラスのset_default()メソッドにて定義。
  • attribute@fixed
    (complexType内)
クラス内で定義するものはない。 void model()メソッド内において、fixed_attribute<>クラスを用いて定義。leaf<>クラス内のみで定義される。
  • attribute@use
    (complexType内)
クラス内で定義するものはない。 voide model()メソッド内の、member()クラスのrequired(bool val)メソッドにて定義。
element
(sequence、all内)
all、sequenceクラス内のメンバが要素値となる。 leafクラス内のvoid model()メソッドで、member()、ptrmember()を用いて定義。
element
(choice内)
aka::itemに格納されるオブジェクト。 leafクラス内のvoid model()メソッドで、item()を用いて定義。
  • element@default
クラス内で定義するものはない。 void model()メソッド内、member()クラスのset_default()メソッドにて定義。
  • element@fixed
クラス内で定義するものはない。 void model()メソッド内において、fixed_attribute<>クラスを用いて定義。xisoクラス内のみで定義される。
group complexTypeと同様にインスタンシングできるクラスであれば、groupになれる。グループは、all、sequence以下で参照可能。
choice以下は未対応。
void model()メソッド内において、要素名の頭に"&"をつけることで定義。
any 未対応 仕様検討中
attributeGroup 未対応 仕様検討中
restriction 未対応 仕様検討中
extension 未対応 仕様検討中
complexContent 未対応 仕様検討中