赤紫蘇2 リファレンス

赤紫蘇2データモデル パーティクル

akaxiso2.0-beta3


赤紫蘇2リファレンス

1.概要
1.1 赤紫蘇2の構成
1.2 プログラムの
開始から終了まで
1.3 文字コードと
文字コード変換エンジン
1.4 名前空間とQName
1.5 マルチスレッディング

2. 赤紫蘇2データモデル
2.1 チュートリアル
2.2 パーティクル
2.3 aka:sequence
2.3.1 単純型の子要素
2.3.2 複合型の子要素
2.3.1 配列型
2.4 aka::all
2.5 aka:choice
2.5.1 複雑型の子要素
2.5.2 単純型の子要素
2.5.3 バインダクラス
2.5.4 子要素オブジェクト
(aka::item)の扱い
2.5.5 子要素の出現頻度
2.6 属性
2.7 aka:simpleContent
2.8 単純型(aka:simleType)
2.8.1

組み込み型

2.9

配列とポインタ

2.,10 ワイルドカード

3 XMLによる永続化
3.1 シリアライズ
3.2 デシリアライズ

付表
A ライブラリ主要API
B XML Schemaとの
機能対応表
C リリースノート

赤紫蘇2データモデルでは、aka:sequence、aka:choice、aka:allという三つのパーティクルを用いて、データ構造を定義します。
また、データ構造における出現頻度を規定するために、配列型、ポインタ型についても、実装が提供されています。

XMLスキーマ文書という型定義言語に対するXMLドキュメントは、スキーマという型に対するインスタンスに対応します。また、複雑型定義は、常に<xs:complexType>以下にて行われます。言い換えれば、XMLスキーマにより定義可能であり、XML文書としてインスタンシング可能な複雑型は、すべて、<xs:complexType>により定義されることになります。赤紫蘇2データモデルでは、この複雑型を、C++のインスタンシング可能なクラスとして定義します。

ただし、<xs:complexType>は、1個以下のパーティクル(<xs:sequence>、<xs:choice>、<xs:all>など)と属性しか持つことはできません。つまり、子要素として定義される内容は、最大でも一つのパーティクルとなります。これでは、クラスのメンバ数が不必要なまでに少なくなり(0個、もしくは、1個)、かつ、パーティクル定義のためのクラス数も多くなってしまいます。このため、赤紫蘇2データモデルでは、インスタンシング可能なクラスとして、aka:sequence、aka::choice、aka::allを定義しデータモデルの構造を記述するために用います。これらのパーティクルは、大まかに、XMLスキーマで用いられるパーティクル、<xs:sequence>、<xs:all>、<xs:choice>のそれぞれに対応します。言い換えれば、赤紫蘇2のパーティクルは、<xs:complexType>の機能と、<xs:sequence>、<xs:all>、<xs:choice>それぞれの機能とを併せ持っています。

これらの赤紫蘇2データモデル中のパーティクルのうち、aka:sequence、aka:allは、属性と子要素を持つことが可能なインスタンシング可能なクラスとして定義されます。また、aka:choiceは、属性を持つことはできませんが、インスタンシング可能なコンテナクラスとして定義されます。

XMLスキーマにおいて、パーティクルを用いたデータ構造を定義するためには、<xs:group>を用いることもできます。赤紫蘇2データモデルにおけるパーティクルは、<xs:group>以下に定義されるパーティクルとしても扱うことができ、他のパーティクルより、参照することが可能です。ただし、<xs:group>以下で属性の宣言ができないことに対応し、モデルグループとして用いられる赤紫蘇2パーティクルにおいては、属性宣言を行うことはできません。

また、<xs:all>は、モデルグループの参照が許されていませんが、赤紫蘇2データモデルにおけるaka:allについても、モデルグループの参照はできません。

簡単にまとめた表を、以下に示します。

赤紫蘇2パーティクル 属性の使用 モデルグループ参照 実体
aka:sequence メンバを持つクラス
aka:all × メンバを持つクラス
aka:choice × コンテナ(メンバを持たない)

aka:sequenceは、属性宣言可能であり、子要素を持つことができるデータタイプです。<xs:complexType>と<xs:sequence>の両者の機能を持ちます。

aka:allは、xs:allを下敷きにして作られています。値クラスは、メンバを持つクラスとして定義され、属性宣言も許されます。しかしながら、<xs:all>の子要素が<xs:element>に限定されているように、モデルグループとしての定義はできませんし、引用もできません。また、出現頻度の指定も制限がかけられています。

aka:choiceの値クラスは、(STL)コンテナとして定義され、クラス自体がメンバを持つことを考慮していません。このため、属性宣言はできません。子要素として、通常の型に加え、モデルグループの引用が可能です。aka:choiceと属性を併せて宣言するには、aka:sequenceを<xs:complexType>の代用として使用し、クラスのメンバとして(STL)コンテナを用いることで、実現できます。

XMLスキーマ文書という型定義言語に対するXMLドキュメントは、スキーマという型に対するインスタンスに対応します。また、複雑型定義は、常に<xs:complexType>以下にて行われます。言い換えれば、XMLスキーマにより定義可能であり、XML文書としてインスタンシング可能な複雑型は、すべて、<xs:complexType>により定義されることになります。赤紫蘇2データモデルでは、この複雑型を、C++のインスタンシング可能なクラスとして定義します。ただし、<xs:complexType>は、1個以下のパーティクル(<xs:sequence>、<xs:choice>、<xs:all>など)と属性しか持つことはできません。つまり、子要素として定義される内容は、最大でも一つのパーティクルとなります。これでは、クラスのメンバ数が不必要なまでに少なくなり(0個、もしくは、1個)、かつ、パーティクル定義のためのクラス数も多くなってしまいます。

このため、赤紫蘇2データモデルでは、インスタンシング可能なクラスとして、aka:sequence、aka:choice、aka:allを定義しデータモデルの構造を記述するために用います。これらのパーティクルは、<xs:complexType>の機能と、<xs:sequence>、<xs:all>、<xs:choice>それぞれの機能とを併せ持っています。


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