Prise en charge de la liaison de l'élément Enumeration

Cette rubrique est spécifique à une technologie existante. Les services Web XML et les clients du service Web XML doivent à présent être créés à l'aide de Windows Communication Foundation.

Le .NET Framework prend en charge la liaison partielle pour l'élément <enumeration>.

Xsd.exe traduit la facette <enumeration> en définition enum .NET Framework uniquement lorsque cette facette s'applique à des types basés sur une chaîne tels que xsd:string.

Explication

L'élément <enumeration> est utilisé pour créer un ensemble fini de choix à partir d'un type de données simple. Il est utilisé pour dériver un nouveau type simple à partir d'un type simple existant en restreignant le type de base. Le type de base a pu être créé en tant qu'énumération.

La spécification de schéma XML permet d'appliquer la facette <enumeration> à tout type simple sauf xsd:boolean. Toutefois, lors de la génération du code source à partir d'un document de schéma XML, Xsd.exe reconnaît uniquement les énumérations des types de données simples basés sur une chaîne, tels que xsd:string, en tant qu'énumérations. Dans ce cas, la traduction produit une définition enum.

Les types intégrés suivants du schéma en langage XSD (XML Schema Definition) sont traduits en définitions de type enum :

  • string

  • normalizedString

  • token

  • Name

  • NCName

  • ID

  • ENTITY

  • NMTOKEN

Lors de la génération d'un document de schéma XML à partir d'un ensemble de classes, Xsd.exe traduit une définition enum en une énumération basée sur xsd:string.

Les actions réalisées par l'outil Xsd.exe avec les autres types simples non basés sur une chaîne dépendent à la fois du contexte et du type. Pour une énumération basée sur un type de données numériques intégré, la traduction produit un champ dont le type correspond au type de base (tel que System.Decimal pour xsd:decimal), tant que l'énumération apparaît en tant qu'élément ou attribut d'un type complexe. Sinon, l'énumération est simplement ignorée lorsqu'elle remplit seulement son propre élément défini globalement.

Attribut value dans les énumérations basées sur une chaîne

Une valeur d'énumération doit prétendre au titre de nom de constante valide ou être convertie en nom de constante par Xsd.exe. La valeur d'énumération suivante en est un exemple :

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

Cette valeur est convertie en membre enum qui suit :

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

L'espace vide est supprimé pour obtenir un nom de constante valide et un attribut XmlEnumAttribute est appliqué au membre enum. Le paramètre d'attribut modifie la valeur d'énumération de schéma XML qui est utilisée pour cette valeur enum. La valeur par défaut est la valeur enum elle-même, dans le cas présent, IRISHCREAM. Pour une valeur d'énumération de schéma XML qui prétend déjà au titre de nom de constante valide, l'attribut XmlEnum est omis.

Alors que le .NET Framework ne traduit pas d'énumération XSD numérique en définition enum, il traduit une énumération XSD de chaîne dont les valeurs sont des nombres. La définition de type simple suivante crée une liaison avec un type enum car elle indique base="xsd:string" :

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

Le type enum suivant est obtenu :

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

L'attribut XmlEnum est de nouveau utilisé pour substituer la liaison par défaut de la valeur xsd:enumeration à une valeur d'énumération de schéma XML.

Example

Document de schéma XML d'entrée définissant des énumérations xsd:string et xsd:int :

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

Classes C# générées à partir du document de schéma XML précédent. L'énumération integer a été remplacée par un champ de type 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,
}

Type simple et type complexe de schéma XML générés à partir d'un assembly compilé depuis la source C# précédente :

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

Attributs possibles Prise en charge de la liaison

id

L'utilitaire Xsd.exe ignore l'attribut id qui a pour but de fournir un identificateur unique.

value

Concernant l'utilisation de l'attribut value dans les énumérations basées sur les types de données simples de chaîne, telles que xsd:string, consultez The value attribute in string-based enumerations.

L'attribut value est ignoré avec tous les autres types de données énumérables.

Consultez l'attribut Prise en charge de la liaison de l'attribut Value.

Éléments parents possibles : <restriction>

Éléments enfants possibles : <annotation>

Voir aussi

Référence

XmlSchemaEnumerationFacet