Freigeben über


Bindungsunterstützung für das enumeration-Element

.NET Framework stellt partielle Bindungsunterstützung für das <enumeration>-Element bereit.

Nur wenn das <enumeration>-Facet auf zeichenfolgenbasierte Typen wie xsd:string angewendet wird, wird es mit Xsd.exe in eine enum-Definition von .NET Framework übersetzt.

Erklärung

Das <enumeration>-Element wird zum Erstellen einer endlichen Auswahlgruppe eines einfachen Datentyps verwendet. Über dieses Element wird ein neuer einfacher Typ von einem vorhandenen einfachen Typ durch Begrenzen des Basistyps abgeleitet. Der Basistyp wurde möglicherweise als Enumeration erstellt.

Durch die XML-Schemaspezifikation kann das <enumeration>-Facet auf alle einfachen Typen angewendet werden, mit Ausnahme von xsd:boolean. Beim Generieren von Quellcode aus einem XML-Schemadokument erkennt Xsd.exe jedoch nur die Enumerationen mit zeichenfolgenbasierten einfachen Datentypen, z. B. xsd:string, als Enumerationen. In diesem Fall wird bei der Übersetzung eine enum-Definition erstellt.

Die folgenden integrierten Typen der XML-Schemadefinitionssprache werden in enum-Typdefinitionen übersetzt:

  • string

  • normalizedString

  • token

  • Name

  • NCName

  • ID

  • ENTITY

  • NMTOKEN

Beim Generieren eines XML-Schemadokuments aus einer Reihe von Klassen übersetzt Xsd.exe eine enum-Definition in eine auf xsd:string beruhende Enumeration.

Andere nicht zeichenfolgenbasierte einfache Typen werden je nach Kontext und Typ verarbeitet. Bei einer auf einem integrierten numerischen Datentyp beruhenden Enumeration wird bei der Übersetzung ein Feld eines Typs erstellt, der dem Basistyp entspricht (z. B. System.Decimal für xsd:decimal), solange die Enumeration als Element oder Attribut in einem komplexen Typ angezeigt wird. Andernfalls wird die Enumeration einfach ignoriert, wenn lediglich das zugehörige global definierte Feld aufgefüllt wird.

Das value-Attribut in zeichenfolgenbasierten Enumerationen

Ein Enumerationswert muss entweder als gültiger Konstantenname qualifiziert oder mit Xsd.exe in einen Konstantennamen konvertiert werden. Ein Beispiel ist der folgende Enumerationswert:

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

Dieser Wert wird in den folgenden enum-Member konvertiert:

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

Das einzelne ‎Leerzeichen wird entfernt, um einen gültigen Konstantennamen zu erstellen. Zudem wird ein XmlEnumAttribute-Attribut auf den enum-Member angewendet. Der Attributparameter ändert den Enumerationswert für das XML-Schema, der für den enum-Wert verwendet wird. Der Standardwert ist der enum-Wert selbst, in diesem Fall IRISHCREAM. Bei einem Enumerationswert für XML-Schema, der bereits als gültiger Konstantenname qualifiziert ist, entfällt das XmlEnum-Attribut.

.NET Framework übersetzt eine numerische XSD-Enumeration nicht in eine enum-Definition, jedoch eine XSD-Enumeration mit Zeichenfolgen, deren Werte Ziffern sind. Über die folgende einfache Typdefinition wird eine Bindung mit einem enum-Typ erstellt, da base="xsd:string" angegeben wird:

<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>

Der folgende enum-Typ wird erstellt:

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,
}

Das XmlEnum-Attribut wird zum Überschreiben der Standardbindung des xsd:enumeration-Werts in einen Enumerationswert für XML Schema verwendet.

Beispiel

Geben Sie ein XML-Schemadokument ein, das die xsd:string-Enumeration und die xsd:int-Enumeration definiert:

<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>

Aus dem vorhergehenden XML-Schemadokument generierte C#-Klassen: Die Ganzzahlenumeration wurde durch ein Feld des Typs int ersetzt:

[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,
}

Aus einer Assembly, die aus der vorherigen C#-Quelle kompiliert wurde, generierter komplexer und einfacher XML-Schematyp:

  <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>
Mögliche Attribute Bindungsunterstützung

id

Das Dienstprogramm Xsd.exe ignoriert das id-Attribut, mit dem ein eindeutiger Bezeichner bereitgestellt werden soll.

value

Informationen zur Verwendung des value-Attributs in Enumerationen, die auf zeichenfolgenbasierten einfachen Datentypen beruhen, z. B. xsd:string, finden Sie unter The value attribute in string-based enumerations.

Bei allen anderen zählbaren Datentypen wird das value-Attribut ignoriert.

Weitere Informationen finden Sie in den Ausführungen zum Bindungsunterstützung für das value-Attribut-Attribut.

Mögliche übergeordnete Elemente: <restriction>

Mögliche untergeordnete Elemente: <annotation>

Siehe auch

Referenz

XmlSchemaEnumerationFacet

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.