Compartir a través de


Compatibilidad con enlaces del elemento List

Este tema es específico de una tecnología heredada. Ahora, los servicios Web XML y los clientes de servicios Web XML deben crearse con Windows Communication Foundation.

.NET Framework proporciona una compatibilidad de enlace parcial para el elemento <list>.

.NET Framework proporciona enlaces precisos para las declaraciones de atributos XML con tipos de lista, pero no para las declaraciones de elementos.

Explicación

La construcción <list> se utiliza para definir un tipo simple cuyos valores posibles son una serie de valores delimitados por espacios en blanco de otro tipo simple. Los tipos que sirven de unidades de creación se denominan tipos atómicos, porque no pueden dividirse en unidades significativas más pequeñas. Todos los tipos simples, a excepción de los tipos de lista o unión, son atómicos.

En el siguiente ejemplo se muestra la forma de crear un tipo de lista donde los valores pueden ser decimales delimitados por espacios en blanco:

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

.NET Framework proporciona enlaces para el elemento <list> cuando éste define tipos de atributo, pero no tipos de elemento.

Cuando se genera código fuente a partir de un documento de esquema XML, si Xsd.exe encuentra un elemento con un tipo de lista, crea un campo cuyo tipo es el tipo de .NET Framework correspondiente al tipo constituyente del tipo de lista, que es el valor del atributo itemTypeXmlAttributeAttribute. En el caso de los tipos basados en cadena, esta traducción sería técnicamente correcta, puesto que una cadena de cadenas sigue siendo una cadena. Pero en el caso de los tipos de lista basados en otros tipos simples, como el tipo basado en el tipo decimal del ejemplo anterior, la traducción sería errónea.

Si Xsd.ese encuentra un atributo con un tipo de lista, crea un campo cuyo tipo es una matriz del tipo de .NET Framework correspondiente al valor del atributo itemType. El campo aparece con el atributo. A continuación, se muestra un ejemplo de un campo generado:

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

Del mismo modo, cuando se genera un documento de esquema XML a partir de un conjunto de clases, Xsd.exe busca las siguientes condiciones en un campo o propiedad para crear un tipo de lista:

  • El tipo de propiedad o campo es una matriz de un tipo que puede asignarse a un tipo simple.

  • La propiedad o el campo se muestran con un atributo XmlAttribute.

Esta combinación solo puede expresarse como un tipo de <list>, ya que los atributos XML deben tener tipos simples; de lo contrario, se enlazaría una matriz a un tipo complejo (con un atributo maxOccurs establecido en unbounded).

Ejemplo

Documento de esquema XML de entrada:

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

Clase de C# generada a partir del documento del esquema XML anterior:

[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 complejo de esquema XML generado a partir de un ensamblado compilado en el código fuente de C# anterior:

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

Atributos posibles Compatibilidad de enlace

id

La utilidad Xsd.exe omite el atributo id, que está pensado para proporcionar un identificador único.

itemType

Cuando se utiliza un tipo de lista como atributo XML (pero no como elemento), la herramienta Xsd.exe crea un campo que es una matriz del tipo de .NET Framework correspondiente al valor del atributo itemType.

Posibles elementos primarios: <simpleType>.

Posibles elementos secundarios: <annotation>, <simpleType>

Vea también

Referencia

XmlSchemaSimpleTypeList