Compatibilidad con enlaces del atributo Value

.NET Framework proporciona una compatibilidad de enlace parcial para el atributo value.

La herramienta Xsd.exe traduce el atributo value de un aspecto <enumeration> a un miembro enum de .NET Framework si la restricción de dicha enumeración se aplica a un tipo basado en cadenas. De lo contrario, no habrá ningún enlace entre los aspectos del esquema XML y las definiciones de clase de .NET Framework.

Explicación

El lenguaje de definición de esquemas XML proporciona diversos mecanismos para derivar nuevos tipos simples, restringiendo los valores de los tipos simples base. Estas restricciones, denominadas aspectos, se especifican como elementos secundarios del elemento <restriction> en una definición <simpleType> (o <simpleContent>), que se localiza a través de simpleType/restriction/facetName de XPath, donde facetName es el aspecto en cuestión. El atributo value del elemento de aspecto especifica un valor adecuado para dicho aspecto.

El atributo de valor en enumeraciones basadas en cadenas

La herramienta Xsd.exe traduce el atributo value de un aspecto <enumeration> a un miembro enum de .NET Framework si la restricción de dicha enumeración se aplica a un tipo de datos basado en cadenas. El tipo de datos se especifica a través del atributo base del elemento <restriction>. Vea el elemento <enumeration> para obtener una lista de los tipos de datos de esquemas XML integrados que la herramienta Xsd.exe interpreta como cadenas.

Es necesario que se certifique un valor de enumeración como un nombre de constante válido o que Xsd.exe lo convierta en un nombre de constante. Un ejemplo es el siguiente valor de enumeración:

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

Este valor se convierte en el siguiente miembro enum:

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

Se quita el espacio para generar un nombre de constante válido y se aplica un atributo XmlEnumAttribute al miembro enum. El parámetro de atributo cambia el valor de enumeración de esquema XML que se utiliza para dicho valor enum. El valor predeterminado es el propio valor enum; en este caso, IRISHCREAM. En el caso de un valor de enumeración del esquema XML que ya esté certificado como un nombre de constante válido, se omite el atributo XmlEnum.

Aunque .NET Framework no traduzca enumeraciones XSD numéricas a una definición enum, sí que traduce enumeraciones XSD de cadena cuyos valores son números. La siguiente definición de tipo simple se enlaza a un tipo enum porque especifica 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>

Se genera el siguiente tipo enum:

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

De nuevo, el atributo XmlEnum se utiliza para reemplazar el enlace predeterminado del valor xsd:enumeration por un valor de enumeración de esquema XML.

Otros usos del atributo value

Además de las enumeraciones basadas en tipos de datos de enlace de cadenas, no existen enlaces entre las restricciones de tipo simple que utilizan aspectos de esquemas XML y las definiciones de clases de .NET Framework. Esto significa lo siguiente (con la excepción de las enumeraciones basadas en cadenas):

  • Al generar el código fuente a partir de un documento del esquema XML, Xsd.exe omite las restricciones de tipos simples; simplemente produce el tipo de .NET Framework que corresponda al tipo simple base.

  • La clase XmlSerializer no tiene en cuenta estas restricciones cuando se serializan objetos a XML y se deserializan desde XML.

En cuanto al modelo de objetos de esquemas, el espacio de nombres System.Xml.Schema dispone de una clase abstracta XmlSchemaFacet con una propiedad Value. Los tipos derivados de XmlSchemaFacet de cada uno de los aspectos de restricción posibles pueden utilizarse para crear un modelo de objetos de esquemas mediante programación que efectúe restricciones por medio de aspectos.

Posibles elementos contenedores: todos los aspectos de restricción

Consulte también

Referencia

Value

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.