|  |  | 赤紫蘇２．リファレンス
|  | aka:choice 要素の定義
| akaxiso2.0-beta1 |
| 目次 はじめに 1. 概要 2. ライブラリAPI 3.単純型 4. 組み込み型 5. 配列 6. ポインタ 7. データモデル 8. aka:sequence 8.1 メンバ定義(単純型) 8.2 メンバ定義(複雑型) 8.3 出現頻度定義 9. aka:all 10 aka:choice 10.1 要素の定義 10.2 固定値の定義 10.3 mocクラス 10.4 itemの扱い 11 aka:simplecontent 12 属性 13 XML Schema機能対応表 |  | aka:choiceは、xs:choiceに対応する赤紫蘇データモデル中のパーティクルです。aka:choiceの値クラスは、aka::itemクラスを要素として持つ、コンテナとして定義します。配列と同様、STLコンテナ、もしくは、STLコンテナインターフェースを持つコンテナが使用可です。 例として、std::string型の"item1"を子要素として持つaka:choice、itemsを定義します。 aka:choiceは、順序つきコンテナと連想コンテナの両者を使うことができます。配列と同様に、leafクラスの指定が異なります。順序つきコンテナの場合、aka::sequential_choice<>テンプレートを、連想コンテナの場合、aka:associative_choice<>テンプレートを使用します。 この例では、コンテナとして、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)では、デフォルト値の定義を行うことができます。しかし、赤紫蘇２の場合には、子要素にデフォルト値を指定する場合がないので、設定機能はありません。(固定値、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を用い、出現頻度を指定します。

リファレンストップに戻る 赤紫蘇ホームページへ sourceforgeプロジェクトページへ