Nível de suporte ao esquema
Esta seção aborda os detalhes em torno do nível de suporte ao esquema.
O esquema dá suporte diretamente ao seguinte:
- Sequências de elementos.
- Derivação de tipos de elemento.
- Opções simples de elementos (aqueles que são mapeados para uma união marcada).
- Tipos básicos definidos pelo formato binário XSD/.NET, incluindo intervalos (mínimo/máximo).
- Suporte simples para qualquer elemento (sem restrições no tipo de elemento).
- Elementos e atributos opcionais com valores padrão.
- Elementos recorrentes com intervalos (mínimo/máximo).
- Elementos anuláveis.
O esquema não dá suporte diretamente ao seguinte (o que implica o comportamento de "fallback):
- Tipos básicos definidos pelo usuário.
- Escolhas mais complicadas.
- Rejeitando atributos desconhecidos.
- Arredondar atributos desconhecidos de remoção.
- Suporte mais complicado para qualquer elemento.
- A construção de todos.
- Key/keyref.
Veja a seguir um detalhamento do suporte a componentes de esquema diferentes. Ele é comparado com o contrato de dados no WCF porque a similaridade na funcionalidade. A diferença será descrita.
Em geral, para comportamentos de fallback:
- os atributos são apoiados para WS_STRING;
- o conteúdo do elemento é respaldado em WS_XML_BUFFER.
- complexType são respaldados na estrutura que contém um campo de WS_XML_BUFFER.
- Tipos simples são respaldados em WS_STRING.
O wsutil gera avisos para componentes de esquema que não têm suporte total no momento. O aplicativo pode precisar fazer uma verificação adicional para esses componentes. O wsutil de horas extras pode ser aprimorado para lidar com alguns dos recursos que têm suporte no tempo de execução, como o suporte a valor padrão. o wsutil também pode ser aprimorado junto com a serialização para dar suporte a outros recursos, como abstrato. O número de componentes de esquema sem suporte pode ser reduzido ao longo do tempo.
O documento de esquema geral
Definição global que pode afetar definições inseridas no esquema. Esses são atributos globais aplicáveis a todas as definições no esquema.
atributos de> xs:schema <
- attributeFromDefault Ignorado.
- blockDefault Ignorado.
- elementFormDefault Ignorado. Isso é diferente de dataContract, pois há suporte para elementos não qualificados em runtime.
- finalDefault Ignorado. Não há suporte à linguagem C para o conceito de final.
- ID Ignorada.
- targetNamespace Compatível e mapeado para o namespace de serviço.
- versão ignorada.
<conteúdo de> xs:schema
- incluir com suporte; wsutil requer que toda a definição necessária esteja disponível como arquivos de entrada durante o tempo de compilação.
- redefinir Ignorado. O wsutil não dá suporte a isso.
- importação com suporte; wsutil requer que toda a definição necessária esteja disponível como arquivos de entrada durante o tempo de compilação.
- simpleType Supported- consulte a seção de tipo simples abaixo.
- complexType Com suporte- consulte a seção 'complexType'
- grupo Ignorado.
- attributeGroup Ignorado.
- elemento com suporte; mapeia para definições de elemento global.
- atributo com suporte; mapeia para definições de atributo global.
- notação ignorada
Tipo complexo
Tipo complexo, representado por <>xs:complexType, pode ser restrição de tipo simples ou tipo complexo, extensão de tipo simples, matrizes ou estrutura. Observe que, em extensão de tipos simples, não há herança e nenhum suporte xsi:type.
atributos de> xs:complexType <
- abstrato Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- bloquear Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- último gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- ID Ignorada.
- mixed Generate warning about unsupported feature, fallback to structure with WS_XML_BUFFER if true.
- nome com suporte e mapeado para o nome do tipo de estrutura.
<conteúdo de> xs:complexType
Essa é a definição de tipo para estrutura. Não há suporte para restrição complexContent.
- complexContent Suporte extensão de conteúdo complexo. Mapeia para estruturar a herança.
- agrupar fallback atualmente para estrutura com WS_XML_BUFFER campo. Pode ser suportado de acordo com a partícula inferior.
- opção com suporte como união. Não há suporte para isso no contrato de dados.
- sequência com suporte – mapeia para campos de uma estrutura
- atributo com suporte com uma exceção de 'proibido'. fallback para estrutura com WS_XML_BUFFER se 'proibido'.
- attributeGroup com suporte – mapeia para sequência de atributos
- anyAttribute Ignorado
- AttributeGroupRef Com suporte – mapeia para sequência de atributos.
- GroupRef Atualmente fallback para estrutura com WS_XML_BUFFER campo. Pode ter suporte de acordo com o grupo abaixo.
- Com suporte, mapeia para XML_BUFFER
- (em branco) mapa com suporte para descrição de struct vazia sem struct gerado.
< > xs:sequence em um tipo complexo: conteúdo
wsutil só dá suporte total à sequência de minOccurs = 1 e maxOccurs = 1; caso contrário, o tipo complexo atualmente é respaldado em WS_XML_BUFFER. Ele pode ter suporte como matriz de estruturas.
- elemento com suporte; cada instância é mapeada para um campo na estrutura.
- Fallback de grupo; o complexType é fallback para WS_XML_BUFFER.
- Todo o fallback; o complexType é fallback para WS_XML_BUFFER.
- opção com suporte; mapeie para o campo união.
- fallback de sequência; o complexType é fallback para WS_XML_BUFFER.
- qualquer suporte; mapeado para XML_BUFFER.
- (em branco) com suporte; complexType poderá ser uma estrutura vazia se não houver atributos.
Elementos
< >xs:element pode ocorrer em três contextos.
- Pode ocorrer em um <>xs:sequence, descrevendo um campo de um struct regular. Nesse caso, o atributo maxOccurs deve ser 1. O campo será opcional se minOccurs for 0.
- Pode ocorrer em um <>xs:sequence, descrevendo um campo de uma matriz. Nesse caso, o atributo maxOccurs deve ser maior que 1 ou "não associado".
- Pode ocorrer em um <> xs:schema como uma descrição de elemento global.
< > de elemento xs:element em um <> xs:sequence ou <xs:choice> como um campo em uma estrutura
- ref com suporte; resolvido para fazer referência ao elemento global.
- nome com suporte, mapeia para o nome do campo.
- tipo com suporte, mapeia para o tipo de campo. Para obter mais informações, consulte 'Mapeamento de Tipo'. Se não for especificado (e o elemento não contiver um tipo anônimo), xs:anyType será assumido.
- bloquear Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- padrão Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- correção de gerar aviso sobre o recurso sem suporte, sem alteração na geração de código.
- formulário ignorado. Nossa camada de serialização dá suporte a formulários qualificados e não qualificados.
- ID Ignorada.
- maxOccurs mapeia para um único campo de dados se for igual a 1. ele será mapeado para um campo de matriz (elemento recorrente) se maxOccurs for maior que 1.
- minOccurs if 0, the field options is set to FIELD_OPTIONAL, if nillable is not set.
- nillable O campo é nillable. Consulte de serialização para obter mais detalhes.
< > de elemento xs:element como elemento global: atributos
Os atributos minOccurs e maxOccurs são inválidos como descrição do elemento global. O aplicativo pode usar a descrição do elemento gerado diretamente em camadas de serialização ou de canal.
- abstrato Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- bloquear Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- padrão Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- último gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- correção de gerar aviso sobre o recurso sem suporte, sem alteração na geração de código.
- ID Ignorada.
- name Supported- map to name of the global element description, and it is the base for the anonymous type when specified.
- O aplicativo ignorado nillable precisa chamar com o sinalizador direito.
- fallback do substitutionGroup para estrutura com WS_XML_BUFFER se definido. O wsutil não dá suporte a substitutionGroup.
- digite com suporte e mapeie para o tipo do elemento.
<elemento xs:> como elemento global: conteúdo
- simpleType com suporte; mapeia para definição de tipo.
- complexType com suporte; mapeia para um tipo complexo.
- aviso de geração exclusiva sobre o recurso sem suporte, sem alteração na geração de código. O wsutil não dá suporte a restrições de elemento.
- key Generate warning about unsupported feature, no change to code generation. O wsutil não dá suporte a restrições de elemento.
- keyref Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código. O wsutil não dá suporte a restrições de elemento.
- (em branco) Suportado; o elemento sem especificação de tipo é tratado como xs:anyType.
Tipos simples
atributos <xs:simpleType>
- Aviso de geração final sobre o recurso sem suporte, nenhuma alteração na geração de código.
- ID ignorada
- Nome com suporte, mapeia para o nome do tipo.
<conteúdo de> xs:simpleType
- Restrição Com suporte, mapeia para o tipo ou intervalo de enumeração. Consulte a seção "restrições xs:simpleType".
- List Generate warning about unsupported feature, fallback to XML_BUFFER.
- Union Generate warning about unsupported feature, fallback to XML_BUFFER.
Restrição de tipo simples
Determinadas facetas são permitidas em tipos integrais e tipos de cadeias de caracteres para permitir suporte a intervalo e enumeração.
Suporte à enumeração
<xs:enumeração> restrição de tipo simples para o tipo base de cadeia de caracteres é tratada como tipo de enumeração. Nesse caso, o atributo Base DEVE ser tipo de cadeia de caracteres. Em caso de enumeração, todas as outras facetas são ignoradas.
intervalo no suporte de tipo simples
Algumas facetas são compatíveis com tipos simples que dão suporte a intervalos efetivamente permitidos no tipo. A seguir estão a restrição para tipos integrais e tipos flutuantes/duplos. Tipos simples com outras facetas são compatíveis com WS_STRING tipo
- Suporte minExclusive
- Suporte para minInclusive
- maxExclusive com suporte
- maxInclusive com suporte
- totalDigits Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- fractionDigits Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- length Generate warning about unsupported feature, no change to code generation.
- minLength Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- maxLength Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- enumeração Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- whiteSpace Generate warning about unsupported feature, no change to code generation.
- padrão Gerar aviso sobre o recurso sem suporte, nenhuma alteração na geração de código.
- (em branco) Suportado.
No momento, não há suporte para minLength e maxLength na cadeia de caracteres, mas é um recurso desejável para dar suporte.
Herança
O Wsutil dá suporte à herança de tipos complexos, ou seja, uma estrutura pode herdar de outra estrutura, semelhante à herança de interface no C++. Isso é feito por meio <>xs:complexContentExtension . <xs:simpleContentExtension> tem suporte, mas é gerado como estrutura simples com tipo base como primeiro campo em vez de herança de tipo.
Mapeamento de tipo/primitivo
Os identificadores precisam ser normalizados ao traduzir de NCNames em XML. Cadeias de caracteres são nulas; os tipos de ponteiro são anuláveis; tipos integrais e float/double são nillable e defaultValue é definido como 0.