Compatibilidad con enlaces del elemento Schema
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 compatibilidad de enlace para el elemento <schema>.
El elemento <schema> es el elemento raíz de un documento de esquema XML.
Explicación
El elemento <schema> es el elemento raíz de un documento de esquema XML.
De entre los atributos del elemento <schema>, blockDefault, finalDefault, id y version no disponen de enlaces a entidades de código de .NET Framework. El atributo targetNamespace se reconoce; los atributos attributeFormDefault y elementFormDefault se reconocen parcialmente. Vea la siguiente tabla. Para obtener información detallada, vea los temas sobre atributos individuales.
Atributo targetNamespace
El atributo targetNamespace del elemento raíz <schema> especifica el espacio de nombres del esquema como un identificador uniforme de recursos (URI). La herramienta Xsd.exe relaciona el atributo targetNamespace del elemento <schema> con las propiedades espacio de nombres de varios atributos relacionados con XML.
Cuando se genera código fuente a partir de un documento de esquemas XML, Xsd.exe utiliza el valor de targetNamespace tal y como se indica a continuación:
Para cada tipo generado que se corresponde con un tipo de datos del esquema, Xsd.exe establece la propiedad System.Xml.Serialization.XmlTypeAttribute.Namespace en el valor de targetNamespace.
Para cada tipo generado que se corresponde con un tipo de datos que puede aparecer como raíz de un documento XML compatible con el esquema, Xsd.exe establece la propiedad System.Xml.Serialization.XmlRootAttribute.Namespace en el valor de targetNamespace. Un tipo de datos puede aparecer como raíz del documento si se utiliza en un elemento <element> declarado globalmente (como elemento secundario del elemento raíz <schema>).
Cuando se genera un documento de esquemas XML a partir de un conjunto de clases de un ensamblado, Xsd.exe crea un documento de esquemas XML con un único atributo targetNamespace para cada valor único que encuentra en la propiedad espacio de nombres de ciertas clases de atributos relacionados con XML. La propiedad aparece de la siguiente forma:
System.Xml.Serialization.XmlRootAttribute.Namespace
System.Xml.Serialization.XmlTypeAttribute.Namespace
Atributo attributeFormDefault
La utilidad Xsd.exe genera esquemas XML que no especifican el atributo global attributeFormDefault . Cuando se encuentra el atributo en un esquema existente, establece la propiedad Form de cada atributo XmlAttributeAttribute de un campo no reemplazado en consecuencia.
Explicación: atributo attributeFormDefault
El esquema XML requiere que todos los elementos y atributos que se declaran globalmente (como secundarios del elemento <schema>) aparezcan con espacio de nombres en un documento de instancia. Para los elementos y atributos declarados localmente (dentro de una definición <complexType>), la calificación de espacio de nombres es opcional.
Para controlar la calificación de espacios de nombres de todos los elementos y atributos locales declarados en un documento de esquemas XML, utilice los atributos elementFormDefault y attributeFormDefault, respectivamente, del elemento raíz <schema>. En ambos casos, los valores posibles son qualified
y unqualified
; unqualified
es el valor predeterminado.
Además, el atributo form puede utilizarse en una declaración local de <element> o de <attribute> para invalidar el valor predeterminado del esquema de ese elemento o atributo en particular.
En la siguiente tabla se describe la forma en que Xsd.exe procesa las tres opciones posibles de attributeFormDefault: qualified
, unqualified
, sin especificar. (Recuerde que Xsd.exe, cuando genera código fuente a partir de un documento de esquemas XML, crea un campo público para cada atributo XML y aplica a dicho campo un atributo de .NET Framework, XmlAttributeAttribute.)
Posibles valores de attributeFormDefault |
Código fuente generado por Xsd.exe a partir de XSD |
XSD generado por Xsd.exe a partir de un ensamblado compilado desde el mismo código fuente |
|
Las clases y los campos correspondientes a los atributos aparecen sin un formulario especificado. |
No se especifica, se revierte el valor predeterminado |
|
Las clases y los campos correspondientes a los atributos aparecen sin un formulario especificado. |
No se especifica, se revierte el valor predeterminado |
|
Los campos correspondientes a los atributos declarados localmente y a los atributos declarados globalmente a los que se hace referencia aparecen con un atributo XmlAttribute al que se le pasa |
No se especifica, se revierte el valor predeterminado Además, en cada declaración de atributo se especifica |
El parámetro pasado a la declaración XmlAttribute establece la propiedad Form, cuyos valores posibles proceden de la enumeración XmlSchemaForm:
XmlSchemaForm.Qualified
XmlSchemaForm.Unqualified
XmlSchemaForm.None: valor predeterminado
Uno de los resultados del uso del parámetro XmlAttribute es que lo que había sido un valor global en el documento XSD original se especifica con un atributo XML en el código fuente y en el XSD generado. Siempre se asume que el atributo attributeFormDefault global está sin especificar, lo que hace que se revierta el valor predeterminado unqualified
.
Ejemplo: atributo AttributeFormDefault
Documento de esquemas XML de entrada donde attributeFormDefault="qualified"
:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified"
xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="qualified">
<xsd:attribute name="version" type="xsd:string"/>
<xsd:complexType name="keyInfo">
<xsd:attribute ref="version" />
<xsd:attribute name="public" type="xsd:boolean" use="required"/>
</xsd:complexType>
<xsd:element name="key" type="keyInfo"/>
</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("key", Namespace="http://example.org/", IsNullable=false)]
public class keyInfo {
[System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
public string version;
System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
public bool @public;
}
Elemento <schema> raíz del esquema XML generado a partir de un ensamblado compilado con el código fuente de C# anterior (las declaración de atributos también aparecen sin el atributo form):
<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
</xs:schema>
Atributo ElementFormDefault
La utilidad Xsd.exe genera esquemas XML que dejan el atributo global elementFormDefault establecido en "qualified"
. Cuando encuentra el atributo en un esquema existente, establece la propiedad Form de cada atributo XmlElementAttribute de un campo no reemplazado según corresponda.
Explicación: atributo ElementFormDefault
El esquema XML requiere que todos los elementos y atributos que se declaran globalmente (como secundarios del elemento <schema>) aparezcan con espacio de nombres en un documento de instancia. Para los elementos y atributos declarados localmente (dentro de una definición <complexType>), la calificación de espacio de nombres es opcional.
Para controlar la calificación de espacios de nombres de todos los elementos y atributos locales declarados en un documento de esquemas XML, utilice los atributos elementFormDefault y attributeFormDefault, respectivamente, del elemento raíz <schema>. En ambos casos, los valores posibles son qualified
y unqualified
; unqualified
es el valor predeterminado.
Además, el atributo formulario puede utilizarse en una declaración local <element> o <attribute> para invalidar el valor predeterminado del esquema de ese elemento o atributo en particular.
Aunque el valor predeterminado de elementFormDefault sea unqualified
, en la práctica, .NET Framework considera el valor predeterminado como qualified
, mientras siga teniendo en cuenta el uso de unqualified
. En la siguiente tabla se describe la forma en que Xsd.exe procesa las tres opciones posibles de elementFormDefault: qualified
, unqualified
, sin especificar. (Recuerde que Xsd.exe, cuando genera código fuente a partir de un documento de esquemas XML, crea un campo público para cada elemento XML.)
Posibles valores de elementFormDefault |
Código fuente generado por Xsd.exe a partir de XSD |
XSD generado por Xsd.exe a partir de un ensamblado compilado desde el mismo código fuente |
|
Las clases y los campos correspondientes a los elementos aparecen sin un formulario especificado. |
|
|
Las clases y los campos correspondientes a los elementos aparecen sin un formulario especificado. |
|
|
Los campos correspondientes a los elementos declarados localmente aparecen con un atributo XmlElement al que se le pasa |
Además, los elementos que en su origen se declararon localmente utilizan |
El parámetro pasado a la declaración XmlElement establece la propiedad Form, cuyos valores posibles proceden de la enumeración XmlSchemaForm:
XmlSchemaForm.Qualified
XmlSchemaForm.Unqualified
XmlSchemaForm.None: valor predeterminado
Uno de los resultados del uso del parámetro XmlElement es que lo que había sido un valor global en el documento XSD original se especifica con un elemento XML en el código fuente y en el XSD generado. Siempre se asume que el atributo elementFormDefault global tiene el valor qualified
.
Ejemplo: atributo ElementFormDefault
Documento de esquemas XML de entrada donde elementFormDefault="unqualified"
:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="unqualified">
<xsd:element name="version" type="xsd:string"/>
<xsd:complexType name="keyInfo">
<xsd:sequence>
<xsd:element ref="version" />
<xsd:element name="public" type="xsd:boolean" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="key" type="keyInfo"/>
</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("key", Namespace="http://example.org/", IsNullable=false)]
public class keyInfo {
public string version;
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public bool @public;
}
El documento del esquema XML que se ha generado a partir de un ensamblado compilado con el anterior código fuente C#:
<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="key" type="tns:keyInfo" />
<xs:complexType name="keyInfo">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="version" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" form="unqualified" name="public" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
</xs:schema>
Atributos posibles | Compatibilidad de enlace |
---|---|
attributeFormDefault |
.NET Framework reconoce el valor predeterminado, Vea la sección Atributo AttributeFormDefault anterior. |
blockDefault |
El atributo blockDefault del elemento <schema> proporciona un valor predeterminado para los atributos block de los elementos <complexType> y <element>. La herramienta Xsd.exe omite el atributo blockDefault del elemento <schema>, así como el atributo block de sus elementos respectivos. |
elementFormDefault |
En la práctica, .NET Framework utiliza un valor predeterminado distinto, Vea la sección Atributo ElementFormDefault anterior. |
finalDefault |
El atributo finalDefault del elemento <schema> proporciona un valor predeterminado para los atributos final de determinados elementos. La herramienta Xsd.exe omite el atributo finalDefault del elemento <schema>, así como el atributo final de sus elementos respectivos. |
id |
La utilidad Xsd.exe omite el atributo id, que está pensado para proporcionar un identificador único. |
xml:lang |
Xsd.exe omite el atributo lang del espacio de nombres http://www.w3.org/XML/1198 cuando se utiliza en el elemento <schema> raíz. |
targetNamespace |
La herramienta Xsd.exe relaciona el atributo targetNamespace del elemento <schema> con las propiedades espacio de nombres de varios atributos relacionados con XML. En función de la dirección de la traducción se utilizarán unos atributos u otros. Vea la sección anterior TargetNamespace Attribute. |
versión |
El atributo version está disponible como documentación. La herramienta Xsd.exe omite este atributo. |
Posibles elementos primarios: ninguno (elemento raíz)
Elementos secundarios posibles: <annotation>, <attribute>, <attributeGroup>, <complexType>, <element>, <group>, <import>, <include>, <notation>, <redefine>, <simpleType>