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
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.