| 赤紫蘇２．リファレンス
| データモデル
目次 1. 概要 2. ライブラリAPI 3. 組み込み型 4. 配列 5. ポインタ 6. データモデル 7. aka:sequence 7.1 メンバ定義(単純型) 7.2 メンバ定義(複雑型) 7.3 出現頻度定義 8. aka:all 9 aka:choice 10 属性 | 赤紫蘇データモデル 赤紫蘇のデータモデルは、XML Schemaの抽象データモデルをベースとして作成されています。 しかし、若干の機能の割り振りの異なりがあります。これは、意図的なものであり、C++のクラスで、XML-Schemaのデータモデルを表現した際に、クラスの数が非常に多くなり、煩雑となることを考慮しているからです。 特に、xs:complexTypeについては、赤紫蘇データモデルにおいて、明確に対応する要素がなく、単に、インスタンシングできるクラスとして、対応付けられます。 赤紫蘇データモデルにおけるパーティクル 赤紫蘇データモデルでは、aka:sequence、aka:all、aka:choiceという三つの要素が用いられます。これは、大きくは、XML-Schemaで用いられるパーティクル、xs:sequence、xs:all、xs:sequenceのそれぞれに、xs:complexTypeの機能を付加したような機能を持ちます。 XML-Schemaにおいて、使用可能な複雑型は、xs:complexTypeタグを用いて、定義されます。また、xs:sequence、xs:all、xs:choiceのようなパーティクルを直接的に、型として、XML文書中では使用できず、常に、xs:complexType、xs:group以下で定義することになります。 赤紫蘇データモデルでは、パーティクルの機能をクラスを用いて実装します。クラスは、基本的にインスタンシング可能なものです。このため、"実体ができるパーティクル"を導入したほうが、モデルがシンプルになります。aka:sequence、aka:all、aka:choiceのパーティクルが、赤紫蘇データモデルの基本となっています。 XML Schemaでは、属性宣言がxs:complexTypeで行われるますが、赤紫蘇データモデルでは、aka:sequence、aka:all内で、属性宣言を行います。XML Schemaの構造とは違い、パーティクルに属性を持つことを許します。 簡単にまとめたも表を、以下に示します。
赤紫蘇データモデル | 属性の使用 | モデルグループ参照 | 実体
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:sequenceをxs:complexTypeの代用として使用し、クラスのメンバとして(STL)コンテナを用いることで、属性を持つaka:choiceを定義することができます。

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