|  |  | 赤紫蘇２．リファレンス
|  | aka:choice 要素の定義
| 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スキーマ機能対応表 |  | 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,
              bool emptiable = false);
tagnameはタグ名、ILは、要素値となる型に対するleafクラスです。モデル参照を行う場合には、タグ名の頭に"&"をつけます。 また、aka:choiceの子要素として、配列が使用できます。その場合には、ILとして、配列に対するleafクラスを使用し、minOccurs、maxOccursを指定する必要があります。また、最後の引数、emptiableをtrueに下場合は、minOccursが0でない場合に、子要素の出現頻度0を許します。 XMLスキーマの仕様では、xs:choiceにおける要素の定義(xs:element)では、デフォルト値の定義を行うことができます。しかし、赤紫蘇２の場合には、子要素にデフォルト値を指定する場合がないので、設定機能はありません。(固定値、fixedに関しては、別に説明します。) aka::any、aka::any_arrayを用いる場合には、aka:sequenceの場合と同様に、any()を使用します。
    void any(const std::string &tagname, const std::string &ns_list = "##any");
    void any(const std::string &tagname, int minOccurs, int maxOccurs, const std:s:tring &ns_list = "##any") ;
    void any(const std::string &tagname, int minOccurs, int maxOccurs, bool emptiable,
             const std::string &ns_list) ;
一つ目の形式は、aka::anyを子要素とする場合に用います。 二つ目の形式では、aka::any_arrayを子要素とし、minOccurs、maxOccursを用い、出現頻度を指定します。三つ目の形式では、aka::any_arrayを子要素とし、さらに、emptiableが指定できます。 どのバージョンのany()においても、ns_listの指定は、aka:sequenceの場合と同様です。

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