34.3. 列挙

概要

XML Schema では、列挙型は xsd:enumeration ファセットを使用して定義された単純な型です。アトミック単純なタイプとは異なり、これらは Java enums にマッピングされます。

XML スキーマで列挙型を定義する

列挙型は、xsd:enumeration ファセットを使用したシンプルなタイプです。各 xsd:enumeration ファセットは、列挙されたタイプの 1 つの可能な値を定義します。

例34.5「XML スキーマ定義の列挙」 は、列挙型の定義を示します。次の可能な値があります。

  • big
  • large
  • mungo
  • gargantuan

例34.5 XML スキーマ定義の列挙

<simpleType name="widgetSize">
  <restriction base="xsd:string">
    <enumeration value="big"/>
    <enumeration value="large"/>
    <enumeration value="mungo"/>
    <enumeration value="gargantuan"/>
  </restriction>

Java へのマッピング

ベースタイプが xsd:string である XML Schema の列挙型は、自動的に Java の enum 型にマッピングされます。「列挙マッピングのカスタマイズ」 で説明されているカスタマイズを使用すると、コードジェネレーターに対し、他のベース型の列挙を Java enum 型にマッピングするように指示できます。

enum タイプは以下のように作成されます。

  1. タイプの名前は、単純なタイプ定義の name 属性から取得され、Java 識別子に変換されます。

    一般に、これは XML スキーマの名前の最初の文字を大文字に変換することを意味します。XML スキーマ名の最初の文字が無効な文字である場合は、名前の前にアンダースコア (_) が追加されます。

  2. enumeration ファセットごとに、列挙定数が value 属性の値に基づいて生成されます。

    定数の名前は、値内のすべての小文字を同等の大文字に変換することによって付けられます。

  3. 列挙型の基本型からマップされた Java 型を取得するコンストラクターが生成されます。
  4. value() というパブリックメソッドは、タイプのインスタンスによって表されるファセット値にアクセスするための生成されます。

    value() メソッドの戻り値タイプは、XML Schema 型のベースタイプです。

  5. fromValue() というパブリックメソッドが生成され、ファセット値に基づいて列挙タイプのインスタンスを作成します。

    value() メソッドのパラメータータイプは、XML Schema 型のベースタイプです。

  6. クラスは @XmlEnum アノテーションで禁止されています。

例34.5「XML スキーマ定義の列挙」で定義される列挙型は、例34.6「文字列ベースの XML スキーマ列挙用に生成された列挙型」に記載の enum 型にマッピングされます。

例34.6 文字列ベースの XML スキーマ列挙用に生成された列挙型

@XmlType(name = "widgetSize")
@XmlEnum
public enum WidgetSize {

    @XmlEnumValue("big")
    BIG("big"),
    @XmlEnumValue("large")
    LARGE("large"),
    @XmlEnumValue("mungo")
    MUNGO("mungo"),
    @XmlEnumValue("gargantuan")
    GARGANTUAN("gargantuan");
    private final String value;

    WidgetSize(String v) {
        value = v;
    }

    public String value() {
        return value;
    }

    public static WidgetSize fromValue(String v) {
        for (WidgetSize c: WidgetSize.values()) {
            if (c.value.equals(v)) {
                return c;
            }
        }
        throw new IllegalArgumentException(v);
    }

}