Condividi tramite


Supporto dell'associazione all'elemento list

Questo argomento è specifico di una tecnologia legacy. Servizi Web XML e client di servizi Web XML devono essere creati attualmente tramite Windows Communication Foundation.

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

.NET Framework fornisce associazioni accurate per le dichiarazioni degli attributi XML con tipi elenco, ma non per le dichiarazioni degli elementi.

Descrizione

Il costrutto <list> viene utilizzato per definire un tipo semplice i cui valori possibili sono una serie delimitata da spazi di valori di un altro tipo semplice. I tipi con funzione di blocchi di generazione sono definiti tipi atomici in quanto non possono essere suddivisi in altri elementi significativi. Tutti i tipi semplici, ad eccezione degli elenchi o dei tipi unione, sono atomici.

Nell'esempio riportato di seguito viene illustrata la creazione di un tipo elenco i cui valori possono essere numeri decimali delimitati da spazi:

<xsd:simpleType name="numbersList">
  <xsd:list itemType="xsd:Decimal"/>
</xsd:simpleType>

.NET Framework fornisce associazioni per l'elemento <list> quando questo definisce tipi di attributo, ma non tipi di elemento.

Durante la generazione di codice sorgente da un documento XML Schema, se Xsd.exe rileva un elemento con un tipo elenco, produrrà un campo il cui tipo sarà il tipo .NET Framework corrispondente al tipo costitutivo dell'elenco, ovvero il valore dell'attributo itemTypeXmlAttributeAttribute. Per i tipi basati su stringa, questa conversione viene corretta tecnicamente in quanto una stringa costituita da stringhe è ancora una stringa. Per i tipi elenco basati su altri tipi semplici, come il tipo basato sui numeri decimali dell'esempio precedente, la conversione è errata.

Se Xsd.exe rileva un attributo con un tipo elenco, produrrà un campo il cui tipo sarà una matrice del tipo .NET Framework corrispondente al valore dell'attributo itemType. Il campo appare con l'attributo. Di seguito è riportato un esempio di un campo generato:

[System.Xml.Serialization.XmlAttributeAttribute()]
public System.Decimal[] numbers;

Analogamente, durante la generazione di un documento XML Schema da un set di classi, Xsd.exe cercherà le condizioni seguenti in un campo o in una proprietà per produrre un tipo elenco:

  • Il tipo del campo o della proprietà è una matrice di un tipo che può essere mappato a un tipo semplice.

  • La proprietà o il campo viene visualizzato con un attributo XmlAttribute.

Questa combinazione può essere espressa solo come tipo <list>, in quanto un attributo XML deve avere un tipo semplice per evitare che una matrice venga associata a un tipo complesso (con l'attributo maxOccurs impostato su unbounded).

Esempio

Documento XLM Schema di input:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://example.org/" xmlns="http://example.org/" elementFormDefault="qualified">
    <xsd:element name="alphabet" type="AlphabetType"/>

    <xsd:complexType name="AlphabetType">
        <xsd:sequence>
            <xsd:element name="language" type="xsd:string"/>
            <xsd:element name="count" type="xsd:decimal"/>
        </xsd:sequence>
        <xsd:attribute name="letters">
            <xsd:simpleType>
                <xsd:list itemType="Character"/>
            </xsd:simpleType>
        </xsd:attribute>
    </xsd:complexType>

    <xsd:simpleType name="Character">
        <xsd:restriction base="xsd:string">
            <xsd:length value="1"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>

Classe C# generata dal precedente documento XML Schema:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("alphabet", Namespace="http://example.org/", IsNullable=false)]
public class AlphabetType {
        
    public string language;
        
    public System.Decimal count;
        
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string[] letters;
}

Tipo complesso di XML Schema generato da un assembly compilato dal codice sorgente C# precedente:

<xs:complexType name="AlphabetType">
  <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="1" name="language" type="xs:string" />
    <xs:element minOccurs="1" maxOccurs="1" name="count" type="xs:decimal" />
  </xs:sequence>
  <xs:attribute name="letters">
    <xs:simpleType>
      <xs:list itemType="xs:string" />
    </xs:simpleType>
  </xs:attribute>
</xs:complexType>

Attributi possibili Supporto per l'associazione

id

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

itemType

Quando viene utilizzato un tipo elenco come attributo XML (ma non come elemento), lo strumento Xsd.exe produce un campo che rappresenta una matrice del tipo .NET Framework corrispondente al valore dell'attributo itemType.

Elementi padre possibili: <simpleType>

Elementi figlio possibili: <annotation>, <simpleType>

Vedere anche

Riferimento

XmlSchemaSimpleTypeList