Condividi tramite


Supporto dell'associazione all'elemento enumeration

In .NET Framework è incluso un supporto parziale per l'associazione all'elemento <enumeration> .

Il facet <enumeration> viene convertito in una definizione enum .NET Framework solo quando viene applicato a tipi basati su stringa, ad esempio xsd:string.

Descrizione

L'elemento <enumeration> viene utilizzato per la creazione di un insieme di scelte di un tipo di dati semplice. Viene utilizzato per derivare un nuovo tipo semplice da un tipo semplice esistente mediante la limitazione del tipo base. Il tipo base potrebbe essere stato creato come enumerazione.

La specifica dello schema XML consente l'applicazione del facet <enumeration> a qualsiasi tipo semplice, ad eccezione di xsd:boolean. Quando, tuttavia, si genera codice sorgente da un documento dello schema XML, Xsd.exe riconosce come enumerazioni solo quelle che si basano su tipi di dati semplici basati su stringa, ad esempio xsd:string. In questo caso, la conversione produce una definizione enum.

I tipi incorporati riportati di seguito del linguaggio XSD (XML Schema Definition) vengono convertiti nelle definizioni di tipo enum.

  • string

  • normalizedString

  • token

  • Name

  • NCName

  • ID

  • ENTITY

  • NMTOKEN

Durante la generazione di un documento dello schema XML da un insieme di classi, Xsd.exe converte una definizione enum in un'enumerazione basata su xsd:string.

Le operazioni eseguite dallo strumento Xsd.exe sugli altri tipi semplici non basati su stringa dipendono dal tipo e dal contesto dei tipi. Per un'enumerazione basata su un tipo di dati numerico incorporato, la conversione produce un campo di un tipo corrispondente al tipo base (ad esempio System.Decimal per xsd:decimal), finché l'enumerazione viene visualizzata come elemento o attributo all'interno di un tipo complesso. In caso contrario, l'enumerazione viene semplicemente ignorata quando si limita a compilare il rispettivo elemento definito globalmente.

Attributo value nelle enumerazioni basate su stringa

Un valore di enumerazione deve essere qualificato come nome di costante valido o convertito mediante Xsd.exe in un nome di costante. Un esempio è rappresentato dal valore di enumerazione seguente:

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

Questo valore viene convertito nel membro enum seguente:

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

Lo spazio singolo viene rimosso per produrre un nome di costante valido e l'attributo XmlEnumAttribute viene applicato al membro enum. Il parametro di attributo modifica il valore di enumerazione dello schema XML utilizzato per il valore enum in oggetto. Il valore predefinito è enum stesso, in questo caso IRISHCREAM. Per un valore di enumerazione dello schema XML già qualificato come nome di costante valido, l'attributo XmlEnum viene omesso.

Sebbene in .NET Framework un'enumerazione XSD numerica non venga convertita in una definizione enum, la conversione viene applicata a un'enumerazione XSD di stringa i cui valori sono costituiti da numeri. La definizione di tipo semplice riportata di seguito viene associata a un tipo enum in quanto specifica 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>

Viene prodotto il tipo enum seguente:

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

Anche in questo caso, l'attributo XmlEnum viene utilizzato per eseguire l'override dell'associazione predefinita del valore xsd:enumeration a un valore di enumerazione dello schema XML.

Esempio

Documento dello schema XML di input che definisce le enumerazioni xsd:string e 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>

Classi C# generate dal precedente documento dello schema XML. L'enumerazione integer è stata sostituita da un campo del tipo 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,
}

Tipo complesso dello schema XML e tipo semplice generati da un assembly compilato dal codice sorgente C# precedente:

  <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>
Attributi possibili Supporto per l'associazione

id

L'utilità Xsd.exe ignora l'attributo id che fornisce un identificatore univoco.

value

Per informazioni sull'utilizzo dell'attributo value nelle enumerazioni che utilizzano tipi di dati semplici basati su stringa, ad esempio xsd:string, vedere The value attribute in string-based enumerations

Con tutti gli altri tipi di dati enumerabili, l'attributo value viene ignorato.

Vedere l'attributo Supporto dell'associazione all'attributo value.

Elementi padre possibili: <restriction>

Elementi figlio possibili: <annotation>

Vedere anche

Riferimenti

XmlSchemaEnumerationFacet

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.