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>