|  |  | 赤紫蘇２．リファレンス
|  | 赤紫蘇データモデル
| akaxiso2.0-beta2 |
| 赤紫蘇２リファレンス はじめに 1. 概要 2. ライブラリAPI 3.名前空間とQName 4.単純型 5. 組み込み型 6. 配列 7. ポインタ 8. データモデル 9. aka:sequence 9.1 メンバ定義(単純型) 9.2 メンバ定義(複雑型) 9.3 出現頻度定義 10. aka:all 11 aka:choice 11.1 要素の定義 11.2 固定値の定義 11.3 binderクラス 11.4 itemの扱い 11.5 出現頻度定義 12 aka:simplecontent 13 属性 14 シリアライズ 15 デシリアライズ 16 XMLスキーマ機能対応表 |  | 赤紫蘇データモデル 赤紫蘇のデータモデルは、XMLスキーマの抽象データモデルをベースとして作成されています。 しかし、若干の機能の割り振りの異なりがあります。C++のクラスで、XMLスキーマのデータモデルを表現した際に、クラスの数が非常に多くなり、煩雑となることを考慮しているからです。 複雑型<xs:complexType>とパーティクル 赤紫蘇データモデルでは、aka:sequence、aka:all、aka:choiceという三つのパーティクルがデータモデルの構造を記述するために用いられます。これらのパーティクルは、大まかに、XMLスキーマで用いられるパーティクル、xs:sequence、xs:all、xs:sequenceのそれぞれに対応します。 XMLスキーマにおいて複雑型は、xs:complexTypeタグを用いて定義されます。また、xs:sequence、xs:all、xs:choiceのようなパーティクルは、常に、xs:complexType内で定義されるか、グループを参照して、使用することとなります。 XMLスキーマドキュメントに対し、XMLドキュメントは、スキーマという型に対するインスタンスとして捕らえることができます。つまり、XML Schemaのパーティクルは、xs:complexTypeタグ内で宣言しない限り、インスタンシングできないと考えることができます。 しかしながら、赤紫蘇データモデルは、C++クラスを対象とします。xs:complexTypeで定義される複雑型が XML ドキュメントとしてインスタンシング可能であることを考慮すると、インスタンシングできるC++クラスは、xs:complexTypeによる宣言と対応していると考えることができます。 このため、赤紫蘇データモデルにおけるパーティクル、aka:sequence、aka:choice、aka:allは、XML Schemaのパーティクルの機能に加え、xs:complexTypeの機能を(場合によっては限定的に)併せ持ちます。また、明示的に、xs:complexTypeに対応する要素はありません。 赤紫蘇データモデルにおいて定義されたパーティクルは、xs:complexTypeと同様、他のモデルから参照されることを許します(型の参照、もしくは、モデルの参照) 。また、aka::sequence、aka::allでは、属性の宣言を行うことができます。 簡単にまとめた表を、以下に示します。
赤紫蘇データモデル | 属性の使用 | モデルグループ参照 | 実体
aka:sequence | ○ | ○ | メンバを持つクラス
aka:all | ○ | × | メンバを持つクラス
aka:choice | × | ○ | コンテナ(メンバを持たない)
aka:sequenceは、xs:complexTypeとxs:sequenceの機能を併せ持つデータタイプです。 値クラスは、メンバを持つクラスとして定義され、属性宣言も許されます。xs:complexTypeにもっとも近いデータタイプです。 aka:allは、xs:allを下敷きにして作られています。値クラスは、メンバを持つクラスとして定義され、属性宣言も許されます。しかしながら、xs:allの子要素がxs:elementに限定されているように、モデルグループの引用はできません。また、出現頻度の指定も制限がかけられています。 aka:choiceの値クラスは、(STL)コンテナとして定義され、クラス自体がメンバを持つことを考慮していません。このため、属性宣言はできません。子要素として、通常の型に加え、モデルグループの引用が可能です。 aka:choiceと属性を併せて使用するには、aka:sequenceをxs:complexTypeの代用として使用し、クラスのメンバとして(STL)コンテナを用いることで、実現できます。 単純型 赤紫蘇データモデルにおける単純型は、タグに囲まれたテキスト、もしくは、属性値として扱われます。 赤紫蘇２は、赤紫蘇データモデルによる、XMLドキュメントの妥当性検証機能を持ちますが、単純型の妥当性検証について、実装を提供しません。必要に応じ、ユーザが実装することとなります。 赤紫蘇２は、(デ)シリアライザであり、パースして得られるテキストをC++の値クラスへと変換する必要があります。単純型の内容検証を行う汎用のエンジンを実装することは可能ですが、これだけでは、対象となる値クラスへの読み込み・書き出しが行えないためです。 おのおのの単純型に対応するテキストをパースし、値クラスに代入する部分は、ユーザによる実装となりますが、この部分でのエラーチェックにより、妥当性検証も行われることとなります。 xs:simpleContent 単純型を拡張するxs:simpleContentに対応する要素として、aka:simplecontentがあります。aka:simplecontentは、属性を持つ単純型として扱われます。単純型に固定値(@fixed)を指定する場合にも使用することができます。 xs:complexContent 複雑型を拡張・制限するxs:complexContentに対応する機能は、赤紫蘇２データモデル中には、ありません。C++クラスの継承や、アクセス制限などを用いて、同等の機能を実現することは可能です。 混合型(mixed) 要素と要素の間にあるテキスト値は、混合型のデータと呼ばれます。 赤紫蘇２データモデルでは、混合型XML文書を定義することはできません。ただし、混合型のXML文書をデシリアライズすることは可能です。この際、混合型のテキスト要素は、無視されます。

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