赤紫蘇2.リファレンス

aka:choice 要素の定義

akaxiso2.0-beta2


aka:choiceは、xs:choiceに対応する赤紫蘇データモデル中のパーティクルです。aka:choiceの値クラスは、aka::itemクラスを要素として持つコンテナとして定義します。配列と同様、STLコンテナ、もしくは、STLコンテナインターフェースを持つコンテナが使用可です。

aka:choiceは、順序つきコンテナと連想コンテナの両者を使うことができます。配列と同様に、leafクラスの指定が異なります。順序つきコンテナの場合、aka::sequential_choice<>テンプレートを、連想コンテナの場合、aka:associative_choice<>テンプレートを使用します。

例として、std::string型の"item1"を子要素として持つaka:choice、itemsを定義します。 この例では、コンテナとして、std::list<>を用いることにしますので、aka:sequential_choice<>テンプレートを使用します。

typedef std::list<aka::item> items;

struct items_leaf : aka::sequential_choice<items, items_leaf> {
  void model() {
    item("item1", xiso::leaf<std::string>());
  }
};

子要素の定義は、aka:sequenceの時と同様に、model()メソッドを用いて行いますが、その際に、item()を用い、タグ名と型の対応付けを行います。

item()の宣言は、以下の通りです。

template<class IL>
void item(const std::string &tagname, const IL&, int minOccurs = 1, int maxOccurs = 1);

tagnameはタグ名、ILは、要素値となる型に対するleafクラスです。モデル参照を行う場合には、タグ名の頭に"&"をつけます。
また、aka:choiceの子要素として、配列が使用できます。その場合には、ILとして、配列に対するleafクラスを使用し、minOccurs、maxOccursを指定する必要があります。

XML Schemaの仕様によれば、xs:choiceにおける要素の定義(xs:element)では、デフォルト値の定義を行うことができます。しかし、赤紫蘇2の場合には、子要素にデフォルト値を指定する場合がないので、設定機能はありません。(固定値、fixedに関しては、別に説明します。)

aka::any、aka::any_arrayを用いる場合には、aka:sequenceの場合と同様に、any()を使用します。

void any(const std::string &tagname);
void any(const std::string &tagname, int minOccurs, int maxOccurs) ;    

一つ目の形式は、aka::anyを子要素とする場合に用います。
二つ目の形式では、aka::any_arrayを子要素とし、minOccurs、maxOccursを用い、出現頻度を指定します。


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