赤紫蘇2.リファレンス

aka:sequence 複雑型メンバ

akaxiso2.0-beta2


前節では、単純型のメンバに関する定義について、説明をしました。

本節では、複雑型、特殊なクラス型のメンバに関する定義、また、グループ参照について、説明を加えます。

複雑型をメンバとして持つ場合

クラスをメンバとして持つ場合にも、単純型と同様の定義を使用します。ただし、グループ参照、aka::any、aka::any_array(xs:anyType)の使用などの特別な用法がいくつかあります。

グループの参照

タグ名の頭に'&'を使用することで、そのタグは(デ)シリアライズ時に無視され、<xs:group>を用いたグループ参照と等価な機能を実現できます。具体的には、新規の値クラスのメンバを、すでに定義された値クラスと対応するleafクラスを用いて定義することができます。

ワイルドカード要素

赤紫蘇2の組み込み型として、aka::any、aka::any_arrayを用いることができます。これは、XML Schemaのワイルドカード要素(xs:anyType, xs:any)に対応します。

aka::any型を使用する場合には、any()を用いて、メンバの宣言を行います。

template<class P>
void any(const std::string &tagname, aka::any P::* m, 
         const std::string ns_list = "#all"); 

第一引数は、タグ名、第二引数は、aka::any型への配列メンバのポインタ、第三引数は、ワイルドカード要素が属する名前空間指定です。名前空間は、以下の書式で定義します。

ns_listの値 許される子要素
#all すべての名前空間に属する要素
#other:(名前空間URI) 名前空間URIで示された名前空間以外に属する要素
例: "#other:http://akaxiso.sourceforge.jp/akaxiso2"とすると、"http://akaxiso.sourceforge.jp"のURIで定義される名前空間以外に属する要素、もしくは、ローカルな要素
#local ローカルな要素
スペースで区切られたURIのリスト リストに挙げられたURIのリストに属する要素

aka::any型の配列であるaka::any_arrayを使用する場合、出現頻度指定つきのanyを使用します。

template<class P>
void any(const std::string &tagname, aka::any_array P::* m, int minOccurs, int maxOccurs, 
         const std::string &ns_list = "#all") 

タグ名として、頭に'&'をつけた名前を与えた場合、<xs:any>のように、タグ名にかかわらず、aka::any、aka::any_arrayにデシリアライズされた内容が書き込まれます。

また、頭に'&'をつけない場合、型として、xs:anyTypeを定義したことと同等となり、要素の内容モデルがワイルドカードとなります。


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