赤紫蘇2.リファレンス

  データモデル


赤紫蘇データモデル

赤紫蘇のデータモデルは、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を定義することができます。


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