|  |  | 赤紫蘇２．リファレンス
|  | 属性
| 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: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 Schemaの仕様に基づくものです。 デフォルト値の設定を行った場合、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_); // ワイルドカードアトリビュート
      }
    };

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