Enumeration 요소의 바인딩 지원

이 항목은 레거시 기술과 관련된 것입니다. 이제 XML Web services와 XML Web services 클라이언트는 다음을 사용하여 만들어야 합니다. 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)에 해당하는 형식의 필드가 생성됩니다. 그렇지 않으면 열거형은 무시되고 전역으로 정의된 자체의 요소로만 채워집니다.

문자열 기반 열거형의 value 특성

열거형 값은 유효한 상수 이름으로 한정되거나 Xsd.exe에 의해 상수 이름으로 변환되어야 합니다. 다음 열거형 값을 예로 들 수 있습니다.

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

이 값은 다음 enum 멤버로 변환됩니다.

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

유효한 상수 이름을 생성하기 위해 공백 하나가 제거되며 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 특성을 사용하여 xsd:enumeration 값의 기본 바인딩을 XML 스키마 열거형 값으로 재정의합니다.

Example

xsd:stringxsd: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