![]() |
赤紫蘇2.リファレンス |
||
aka:choice 要素の定義 |
|||
akaxiso2.0-beta1 | |||
|
|||
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クラスです。モデル参照を行う場合には、タグ名の頭に"&"をつけます。 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を子要素とする場合に用います。 |