赤紫蘇2 リファレンス

aka:choice

akaxiso2.0-beta3


赤紫蘇2リファレンス

1.概要
1.1 赤紫蘇2の構成
1.2 プログラムの
開始から終了まで
1.3 文字コードと
文字コード変換エンジン
1.4 名前空間とQName
1.5 マルチスレッディング

2. 赤紫蘇2データモデル
2.1 チュートリアル
2.2 パーティクル
2.3 aka:sequence
2.3.1 単純型の子要素
2.3.2 複合型の子要素
2.3.1 配列型
2.4 aka::all
2.5 aka:choice
2.5.1 複雑型の子要素
2.5.2 単純型の子要素
2.5.3 バインダクラス
2.5.4 子要素オブジェクト
(aka::item)の扱い
2.5.5 子要素の出現頻度
2.6 属性
2.7 aka:simpleContent
2.8 単純型(aka:simleType)
2.8.1

組み込み型

2.9

配列とポインタ

2.,10 ワイルドカード

3 XMLによる永続化
3.1 シリアライズ
3.2 デシリアライズ

付表
A ライブラリ主要API
B XML Schemaとの
機能対応表
C リリースノート

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>());
  }
};

子要素の定義は、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)では、デフォルト値の定義を行うことができます。しかし、赤紫蘇2の場合には、子要素にデフォルト値を指定する場合がないので、設定機能はありません。(固定値、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の場合と同様です。


赤紫蘇2トップへ sourceforgeプロジェクトページへ