Compatibilidad con enlaces del atributo Value
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 atributo value.
La herramienta Xsd.exe traduce el atributo value de una faceta <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 las facetas 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 facetas, 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 la faceta en cuestión. El atributo value del elemento de faceta especifica un valor adecuado para dicha faceta.
El atributo de valor en enumeraciones basadas en cadenas
La herramienta Xsd.exe traduce el atributo value de una faceta <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 califique 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é calificado 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 facetas 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 una de las facetas de restricción posibles pueden utilizarse para crear un modelo de objetos de esquemas mediante programación que efectúe restricciones por medio de facetas.
Posibles elementos contenedores: todos las facetas de restricción