Nivel de compatibilidad con esquemas
En esta sección se tratan los detalles sobre el nivel de compatibilidad con el esquema.
El esquema admite directamente lo siguiente:
- Secuencias de elementos.
- Derivación de tipos de elementos.
- Opciones simples de elementos (aquellas que se asignan a una unión etiquetada).
- Tipos básicos definidos por el formato binario XSD o .NET, incluidos los intervalos (min/max).
- Compatibilidad sencilla con cualquier elemento (sin restricciones en el tipo de elemento).
- Elementos y atributos opcionales con valores predeterminados.
- Repetir elementos con rangos (min/max).
- Elementos nillables.
El esquema no admite lo siguiente directamente (lo que implica el comportamiento de "reserva"):
- Tipos básicos definidos por el usuario.
- Opciones más complicadas.
- Rechazar atributos desconocidos.
- Atributos desconocidos de ida y vuelta.
- Compatibilidad más complicada con cualquier elemento.
- La construcción all.
- Key/keyref.
A continuación se muestra un desglose detallado de la compatibilidad con distintos componentes de esquema. Se compara con el contrato de datos en WCF porque la similitud en la funcionalidad. Se describirá la diferencia.
Por lo general, para los comportamientos de reserva:
- los atributos se revierten a WS_STRING;
- el contenido del elemento se revierte a WS_XML_BUFFER.
- complexType se revierte a la estructura que contiene un campo de WS_XML_BUFFER.
- Los tipos simples se revierten a WS_STRING.
wsutil genera advertencias para los componentes de esquema que no son totalmente compatibles actualmente. Es posible que la aplicación tenga que realizar una comprobación adicional para esos componentes. Wsutil de horas extra se puede mejorar para controlar algunas de las características que se admiten actualmente en tiempo de ejecución, como la compatibilidad con valores predeterminados. wsutil también se puede mejorar junto con la serialización para admitir otras características como abstract. El número de componentes de esquema no admitidos se puede reducir con el tiempo.
Documento de esquema general
Definición global que podría afectar a las definiciones incrustadas en el esquema. Estos son atributos globales aplicables a todas las definiciones del esquema.
<Atributos xs:schema>
- attributeFromDefault Ignored.
- blockDefault Ignored.
- elementFormDefault Ignored. Esto es diferente de dataContract, ya que los elementos no calificados se admiten en tiempo de ejecución.
- finalDefault Ignored. No hay compatibilidad con lenguaje C para el concepto de final.
- id Ignored.
- targetNamespace Compatible y asignado al espacio de nombres del servicio.
- versión omitida.
<contenido de xs:schema>
- include Supported; wsutil requiere que todas las definiciones necesarias estén disponibles como archivos de entrada durante el tiempo de compilación.
- redefinir Ignored. wsutil no admite esto.
- import Supported; wsutil requiere que todas las definiciones necesarias estén disponibles como archivos de entrada durante el tiempo de compilación.
- simpleType Supported: consulte la sección tipo simple a continuación.
- complexType Supported: consulte la sección "complexType".
- grupo omitido.
- attributeGroup Ignored.
- element Supported; se asigna a definiciones de elementos globales.
- atributo Admitido; se asigna a definiciones de atributos globales.
- notación omitida
Tipo complejo
El tipo complejo, representado por <xs:complexType>, podría ser una restricción de tipo simple o tipo complejo, extensión de tipo simple, matrices o estructura. Se ha observado que, en extensión de tipos simples, no hay herencia ni compatibilidad con xsi:type.
<Atributos xs:complexType>
- abstract Generar advertencia sobre la característica no admitida, sin cambios en la generación de código.
- block Generar advertencia sobre la característica no admitida, sin cambios en la generación de código.
- final Generar advertencia sobre la característica no admitida, sin cambios en la generación de código.
- id Ignored.
- mixed Generar advertencia sobre la característica no admitida, reserva a la estructura con WS_XML_BUFFER si es true.
- name Compatible y asignado al nombre del tipo de estructura.
<Contenido de xs:complexType>
Esta es la definición de tipo para la estructura. No se admite la restricción complexContent.
- complexContent Admite la extensión de contenido complejo. Se asigna a la herencia de la estructura.
- grupo Reserva actualmente en la estructura con WS_XML_BUFFER campo. Se puede admitir según la partícula subyacente.
- opción admitida como unión. Esto no se admite en el contrato de datos.
- sequence Supported: se asigna a campos de una estructura
- atributo admitido con una excepción de 'prohibido'. reserva a la estructura con WS_XML_BUFFER si está "prohibido".
- attributeGroup admitido: se asigna a la secuencia de atributos
- anyAttribute Ignored
- AttributeGroupRef Compatible: se asigna a la secuencia de atributos.
- GroupRef Reserva actualmente en la estructura con WS_XML_BUFFER campo. Se puede admitir según el grupo subyacente.
- Cualquier compatible, se asigna a XML_BUFFER
- (en blanco) se admite la asignación a la descripción de estructura vacía sin ninguna estructura generada.
<xs:sequence> en un tipo complejo: contenido
wsutil solo admite totalmente la secuencia de minOccurs = 1 y maxOccurs = 1; de lo contrario, el tipo complejo se reserva actualmente en WS_XML_BUFFER. Se puede admitir como matriz de estructuras.
- element Supported; cada instancia se asigna a un campo de la estructura .
- Reserva de grupo; complexType se reserva a WS_XML_BUFFER.
- Toda reserva; complexType se reserva a WS_XML_BUFFER.
- opción admitida; asignar al campo de unión.
- reserva de secuencia; complexType se reserva a WS_XML_BUFFER.
- any Supported; asignado a XML_BUFFER.
- (en blanco) compatible; complexType puede ser una estructura vacía si no hay atributos.
Elementos
<xs:element>puede producirse en tres contextos.
- Puede producirse dentro de una <secuencia xs:sequence>, que describe un campo de una estructura normal. En este caso, el atributo maxOccurs debe ser 1. El campo es opcional si minOccurs es 0.
- Puede producirse dentro de una <secuencia xs:sequence>, que describe un campo de una matriz. En este caso, el atributo maxOccurs debe ser mayor que 1 o "sin enlazar".
- Puede producirse dentro de un <esquema xs:schema> como una descripción de elemento global.
<xs:element> dentro de xs <:sequence> o <xs:choice> como campo de una estructura
- ref Compatible; resuelto para hacer referencia al elemento global.
- name Compatible, se asigna al nombre del campo.
- type Supported, se asigna al tipo de campo. Para obtener más información, vea "Asignación de tipos". Si no se especifica (y el elemento no contiene un tipo anónimo), se asume xs:anyType.
- block Generar advertencia sobre la característica no admitida, sin cambios en la generación de código.
- default Genera una advertencia sobre la característica no admitida, sin cambiar a la generación de código.
- se ha corregido Generar advertencia sobre la característica no admitida, sin cambios en la generación de código.
- formulario omitido. Nuestra capa de serialización admite formularios calificados y no calificados.
- id Ignored.
- maxOccurs se asigna a un único campo de datos si es igual a 1. se asigna a un campo de matriz (elemento de repetición) si maxOccurs es mayor que 1.
- minOccurs si es 0, las opciones de campo se establecen en FIELD_OPTIONAL, si no se establece nillable.
- nillable El campo es nillable. Consulte Serialización para obtener más detalles.
<xs:element> como elemento global: atributos
Los atributos minOccurs y maxOccurs no son válidos como descripción del elemento global. La aplicación puede usar la descripción de elementos generada en la capa de serialización o las capas de canal directamente.
- abstract Generar advertencia sobre la característica no admitida, sin cambios en la generación de código.
- block Generar advertencia sobre la característica no admitida, sin cambios en la generación de código.
- default Genera una advertencia sobre la característica no admitida, sin cambiar a la generación de código.
- final Generar advertencia sobre la característica no admitida, sin cambios en la generación de código.
- se ha corregido Generar advertencia sobre la característica no admitida, sin cambios en la generación de código.
- id Ignored.
- name Supported: se asigna al nombre de la descripción del elemento global y es la base del tipo anónimo cuando se especifica.
- Nillable Ignored-application debe llamar con la marca derecha.
- substitutionGroup reserva a structure con WS_XML_BUFFER si se establece. wsutil no admite substitutionGroup.
- type Supported y map to the type of the element.
<xs:element> como elemento global: contenido
- simpleType Supported; se asigna a la definición de tipo.
- complexType compatible; se asigna a un tipo complejo.
- unique Genera una advertencia sobre la característica no admitida, sin cambios en la generación de código. wsutil no admite restricciones de elemento.
- key Genera una advertencia sobre la característica no admitida, sin cambios en la generación de código. wsutil no admite restricciones de elemento.
- keyref Genera una advertencia sobre la característica no admitida, sin cambios en la generación de código. wsutil no admite restricciones de elemento.
- (en blanco) Apoyado; el elemento sin especificación de tipo se trata como xs:anyType.
Tipos simples
<Atributos xs:simpleType>
- Final Generar advertencia sobre la característica no admitida, sin cambios en la generación de código.
- Id Ignored
- Nombre admitido, se asigna al nombre de tipo.
<Contenido de xs:simpleType>
- Restricción admitida, se asigna al tipo de enumeración o intervalo. Consulte la sección "restricciones xs:simpleType".
- Lista Generar advertencia sobre la característica no admitida, reserva a XML_BUFFER.
- Unión Genera una advertencia sobre la característica no admitida, la reserva a XML_BUFFER.
Restricción de tipo simple
Se permiten ciertas facetas en tipos enteros y tipos de cadenas para permitir la compatibilidad con intervalos y enumeraciones.
compatibilidad con enumeración
<La restricción de tipo simple xs:enumeration> para el tipo base de cadena se trata como tipo de enumeración. En este caso, el atributo Base DEBE ser de tipo de cadena. En el caso de enumeración, se omiten todas las demás facetas.
intervalo en compatibilidad de tipos simples
Algunas facetas son compatibles con tipos simples que admiten el intervalo eficaz permitido en el tipo. A continuación se muestran restricciones para los tipos enteros y los tipos float/double. Los tipos simples con otras facetas se revierten a WS_STRING tipo
- minExclusive Supported
- minInclusive Supported
- maxExclusive Supported
- maxInclusive Supported
- totalDigits Genera una advertencia sobre la característica no admitida, sin cambios en la generación de código.
- fractionDigits Genera una advertencia sobre la característica no admitida, sin cambios en la generación de código.
- length Genera una advertencia sobre la característica no admitida, sin cambios en la generación de código.
- minLength Genera una advertencia sobre la característica no admitida, sin cambios en la generación de código.
- maxLength Genera una advertencia sobre la característica no admitida, sin cambios en la generación de código.
- enumeración Generar advertencia sobre la característica no admitida, sin cambios en la generación de código.
- whiteSpace Genera una advertencia sobre la característica no admitida, sin cambios en la generación de código.
- patrón Generar advertencia sobre la característica no admitida, sin cambios en la generación de código.
- (en blanco) Apoyado.
minLength y maxLength en la cadena no se admiten actualmente, pero es una característica deseable para admitir.
Herencia
Wsutil admite la herencia de tipos complejos, es decir, una estructura puede heredar de otra estructura, similar a la herencia de interfaz en C++. Esto se hace a través de <xs:complexContentExtension>. <xs:simpleContentExtension> se admite, pero se genera como estructura sin formato con tipo base como primer campo en lugar de herencia de tipos.
Asignación de tipo/primitivo.
Los identificadores deben normalizarse al traducir desde NCNames en XML. Las cadenas son nillables; los tipos de puntero son nillables; los tipos enteros y float/double son nillables y defaultValue se establece en 0.