Enumeration 要素のバインディング サポート

このトピックの対象は、レガシ テクノロジに特定されています。XML Web サービスと XML Web サービス クライアントは以下を使用して作成してください。 Windows Communication Foundation.

.NET Framework では、<enumeration> 要素のバインディングを一部サポートしています。

<enumeration> ファセットが xsd:string のような文字列ベースの型に適用されるときだけ、Xsd.exe は .NET Framework の enum 定義に変換します。

説明

<enumeration> 要素は、単純データ型から有限な一連の選択肢を作成するために使用されます。基本型を制約することで、既存の単純型から新規の単純型を派生させるために使用されます。基本型は、列挙型から作成されていることがあります。

XML スキーマ仕様では、xsd:boolean 以外の任意の単純型に、<enumeration> ファセットを適用できます。ただし、XML スキーマ ドキュメントからソース コードを生成するとき、Xsd.exe で列挙型として認識されるのは、xsd:string のような文字列ベースの単純データ型を元にした列挙型だけです。その場合、変換によって、enum 定義が生成されます。

XML スキーマ定義言語の組み込み型のうち、enum 型定義に変換される型は次のとおりです。

  • string

  • normalizedString

  • token

  • Name

  • NCName

  • ID

  • ENTITY

  • NMTOKEN

一連のクラスから XML スキーマ ドキュメントを生成するとき、Xsd.exe は enum 定義を xsd:string を基にした列挙型に変換します。

Xsd.exe ツールがその他の文字列ベースでない単純型をどのように処理するかは、コンテキストと型の両方に依存します。組み込み数値データ型を基にした列挙型の場合、列挙型が複合型内の要素または属性として現れるならば、変換によって、基本型に対応する型のフィールド (xsd:decimal に対して System.Decimal など) が生成されます。それ以外の場合、グローバルに定義された固有の要素を作成するだけのときは、列挙型は単に無視されます。

文字列ベースの列挙型の値属性

列挙値は、有効な定数名として修飾されるか、または Xsd.exe によって定数名に変換される必要があります。たとえば次の列挙値を考えてみます。

<xsd:enumeration value="IRISH CREAM" />

この値は、次の enum メンバーに変換されます。

[System.Xml.Serialization.XmlEnumAttribute("IRISH CREAM")]
IRISHCREAM,

有効な定数名を生成するために空白文字 1 つが削除され、XmlEnumAttribute 属性が enum メンバーに適用されます。属性パラメーターは、その enum 値で使用される XML スキーマ列挙値を変更します。既定は enum 値自体で、この場合は IRISHCREAM になります。既に有効な定数名として修飾されている XML スキーマ列挙型の場合は、XmlEnum 属性が省略されます。

.NET Framework では、数値 XSD 列挙型は enum 定義に変換されず、値に数値が使用されることもある文字列 XSD 列挙型を変換します。次の単純型定義は、base="xsd:string" を指定するため、enum 型にバインドされます。

<xsd:simpleType name="Primes">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="2" />
        <xsd:enumeration value="3" />
        <xsd:enumeration value="5" />
        <xsd:enumeration value="7" />
        <xsd:enumeration value="11" />
        <xsd:enumeration value="13" />
        <xsd:enumeration value="17" />
    </xsd:restriction>
</xsd:simpleType>

次の enum 型が生成されます。

public enum Primes { 
    [System.Xml.Serialization.XmlEnumAttribute("2")]
    Item2,
    [System.Xml.Serialization.XmlEnumAttribute("3")]
    Item3,
    [System.Xml.Serialization.XmlEnumAttribute("5")]
    Item5,
    [System.Xml.Serialization.XmlEnumAttribute("7")]
    Item7,
    [System.Xml.Serialization.XmlEnumAttribute("11")]
    Item11,
    [System.Xml.Serialization.XmlEnumAttribute("13")]
    Item13,
    [System.Xml.Serialization.XmlEnumAttribute("17")]
    Item17,
}

ここでも、XmlEnum 属性を使用して、XML スキーマ列挙値に対する既定のバインディングである xsd:enumeration の値がオーバーライドされています。

Example

xsd:string 列挙型および xsd:int 列挙型を定義する入力 XML スキーマ ドキュメント:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://example.org/" xmlns="http://example.org/" elementFormDefault="qualified">
    <xsd:element name="coffeeDrink" type="FancyCoffeeType" />

    <xsd:complexType name="FancyCoffeeType">
        <xsd:attribute ref="selection" use="required" />
        <xsd:attribute ref="shots" use="required" />
    </xsd:complexType>
    
    <xsd:attribute name="selection" type="Flavors"/>
    <xsd:attribute name="shots" type="Primes"/>

    <xsd:simpleType name="Flavors">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="VANILLA" />
            <xsd:enumeration value="HAZELNUT" />
            <xsd:enumeration value="CARAMEL" />
            <xsd:enumeration value="RASPBERRY" />
            <xsd:enumeration value="ALMOND" />
            <xsd:enumeration value="CHERRY" />
            <xsd:enumeration value="IRISH CREAM" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Primes">
        <xsd:restriction base="xsd:int">
            <xsd:enumeration value="2" />
            <xsd:enumeration value="3" />
            <xsd:enumeration value="5" />
            <xsd:enumeration value="7" />
            <xsd:enumeration value="11" />
            <xsd:enumeration value="13" />
            <xsd:enumeration value="17" />
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>

上記の XML スキーマ ドキュメントから生成される C# クラス。整数列挙型は int 型のフィールドで置き換えられています:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("coffeeDrink", Namespace="http://example.org/", IsNullable=false)]
public class FancyCoffeeType {
        
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public Flavors selection;
        
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public int shots;
}
    
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
public enum Flavors {
    VANILLA,        
    HAZELNUT,
    CARAMEL,        
    RASPBERRY,
    ALMOND,
    CHERRY,
    System.Xml.Serialization.XmlEnumAttribute("IRISH CREAM")]
    IRISHCREAM,
}

上記の C# ソースからコンパイルされたアセンブリから生成される XML スキーマ複合型および単純型:

  <xs:complexType name="FancyCoffeeType">
    <xs:attribute name="selection" type="tns:Flavors" />
    <xs:attribute name="shots" type="xs:int" />
  </xs:complexType>
  <xs:simpleType name="Flavors">
    <xs:restriction base="xs:string">
      <xs:enumeration value="VANILLA" />
      <xs:enumeration value="HAZELNUT" />
      <xs:enumeration value="CARAMEL" />
      <xs:enumeration value="RASPBERRY" />
      <xs:enumeration value="ALMOND" />
      <xs:enumeration value="CHERRY" />
      <xs:enumeration value="IRISH CREAM" />
    </xs:restriction>
  </xs:simpleType>

使用可能な属性 バインディング サポート

id

Xsd.exe ユーティリティでは、一意な識別子を提供するための id 属性は無視されます。

value

xsd:string などの文字列ベースの単純データ型を基にした列挙型で value 属性を使用する方法については、「The value attribute in string-based enumerations」を参照してください。

その他の列挙可能なデータ型すべてで、value 属性は無視されます。

Value 属性のバインディング サポート 属性を参照してください。

使用可能な親要素 : <restriction>

使用可能な子要素 : <annotation>

参照

リファレンス

XmlSchemaEnumerationFacet