Compartir a través de


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:

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

attributeFormDefault="unqualified"

Las clases y los campos correspondientes a los atributos aparecen sin un formulario especificado.

No se especifica, se revierte el valor predeterminado attributeFormDefault="unqualified".

Unspecified

Las clases y los campos correspondientes a los atributos aparecen sin un formulario especificado.

No se especifica, se revierte el valor predeterminado attributeFormDefault="unqualified".

attributeFormDefault="qualified"

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 Form=XmlSchemaForm.Qualified.

No se especifica, se revierte el valor predeterminado attributeFormDefault="unqualified".

Además, en cada declaración de atributo se especifica form="qualified". Aquí se incluyen los atributos declarados globalmente a los que se hace referencia.

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

elementFormDefault="qualified"

Las clases y los campos correspondientes a los elementos aparecen sin un formulario especificado.

elementFormDefault="qualified"

Unspecified

Las clases y los campos correspondientes a los elementos aparecen sin un formulario especificado.

elementFormDefault="qualified"

elementFormDefault="unqualified"

Los campos correspondientes a los elementos declarados localmente aparecen con un atributo XmlElement al que se le pasa Form=XmlSchemaForm.Unqualified. Los campos correspondientes a los elementos declarados globalmente a los que se hace referencia aparecen sin un formulario especificado.

elementFormDefault="qualified"

Además, los elementos que en su origen se declararon localmente utilizan form="unqualified". Los elementos que en su origen se declararon globalmente aparecen localmente sin un atributo form.

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, unqualified. La herramienta Xsd.exe traduce un valor qualified por campo, estableciendo la propiedad Form de cada atributo XmlAttributeAttribute de un campo no reemplazado en consecuencia.

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, qualified. La herramienta Xsd.exe siempre genera un elemento <schema> con elementFormDefault="qualified". La herramienta traduce un valor unqualified por campo, estableciendo la propiedad Form de cada atributo XmlElementAttribute de un campo no reemplazado en consecuencia.

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>

Vea también

Referencia

XmlSchema