赤紫蘇2 リファレンス

属性

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:sequence、aka:allに対して行うことができます。leafクラス内の、void model()メソッド内で、以下のstruct attributeを使って定義します。値クラスのメンバが、属性値となります。

struct attritbute {
  template<class P, class V>
  attribute(const std::string &tagname, V P::*member);

  template<class P, class V, class VL>
  attribute(const std::string &tagname, V P::* member, const VL&);

  void set_default(const std::string &defval);
  void required(bool required); 
};

struct attributeのコンストラクタがattributeの定義に用いられます。
一つ目のコンストラクタの第一引数は、タグ名、二つ目の引数は、メンバ指定を行います。暗黙的にxiso::leaf<V>をleafクラスとして使用します。
二つ目のコンストラクタは、一つ目の形式に対し、第三引数として、leafクラスを明示的に指定することができます。

また、set_default()メソッド、required()メソッドを用いることで、デフォルト値の指定、出現頻度の指定をすることができます。

set_default()と、required()の使用は排他となります。これは、XMLスキーマの仕様に基づくものです。
デフォルト値の設定を行った場合、required()は、自動的にfalseに設定されますが、これは、default値を指定した場合は、use="optional"となることに対応しています。
また、required()でtrue、つまり、use="required"を設定した場合、default値を持つことができません。

固定値属性

固定値(fixed)の定義は、struct fixed_attribute<>テンプレートを用いて行います。

template<class V>
struct fixed_attribute{
  fixed_attribute(const std::string &tagname, const std::string &fixed_value);

  template<class VL>
  fixed_attribute(const std::string &tagname, const std::string &fixed_value, const VL &);
};

固定値の場合、値が決まっているため、クラスに対応するメンバを持つ必要がありません。固定値アトリビュートの定義は、staticなオブジェクトにより行われ、(デ)シリアライズの時のみ、使用されます。
struct fixed_attribute<>のテンプレート引数、Vは、値の型となります。

ワイルドカードアトリビュート

ワイルドカードアトリビュート(xs:anyAttribute)は、以下の形式で、指定します。

template<class P>
void any_attribute(any_attributes P::*member);

以下に、aka:sequence型のstruct fooに対して、アトリビュートを定義した例を示します。

struct foo {
  std::string attribute_;
  std::string required_attr_;
  std::string default_attr_;
  aka::any_attribute any_attr_;
};

struct foo_leaf {
  void model() {
    attribute("attribute", &foo::attribute_);  // 通常の属性
    attribute("required_attr", &foo::required_attr).required(true); // use="required"
    attribute("default_attr", &foo::default_attr).set_default("default_value"); // defaultが指定されている
    fixed_attribute<std::string>("fixed_attr", "fixed_attr_value"); // use="fixed", 固定値が指定されている。
    any_attribute(foo::any_attr_); // ワイルドカードアトリビュート
  }
};


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