Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Descreve como a XmlSchemaInference classe infere o tipo de dados para atributos e elementos.
A XmlSchemaInference classe infere o tipo de dados para atributos e elementos como tipos simples. Esta seção descreve os possíveis tipos inferidos, como vários valores diferentes são reconciliados com um único tipo e como os atributos que definem xsi o esquema são tratados.
Tipos inferidos
A XmlSchemaInference classe infere valores de elemento e atributo como tipos simples e inclui um atributo type no esquema resultante. Todos os tipos inferidos são tipos simples. Nenhum tipo de base ou faceta é incluído como parte do esquema resultante.
Os valores são examinados individualmente à medida que são encontrados no documento XML. O tipo é inferido para um valor no momento em que é examinado. Se um tipo tiver sido inferido para um atributo ou elemento, e for encontrado um valor para o atributo ou elemento que não corresponda ao tipo atualmente inferido, a XmlSchemaInference classe promoverá o tipo para cada um de um conjunto de regras. Essas regras são discutidas na seção Promoção de tipo, mais adiante neste tópico.
A tabela a seguir lista os possíveis tipos inferidos para o esquema resultante.
| Tipo simples | Descrição |
|---|---|
| Booleano | Verdadeiro, falso, 0, 1. |
| byte | Números inteiros no intervalo de –128 a 127. |
| byte não assinado | Números inteiros na faixa de 0 a 255. |
| curto | Números inteiros no intervalo de –32768 a 32767. |
| unsignedShort | Números inteiros no intervalo de 0 a 65535. |
| Int | Números inteiros no intervalo de –2147483648 a 2147483647. |
| inteiroSemSinal | Números inteiros no intervalo de 0 a 4294967295. |
| longo | Números inteiros no intervalo de –9223372036854775808 a 9223372036854775807. |
| não assinadoLong | Números inteiros no intervalo de 0 a 18446744073709551615. |
| número inteiro | Um número finito de dígitos possivelmente prefixados com "-". |
| decimais | Valores numéricos que contêm de 0 a 28 dígitos de precisão. |
| flutuante | Decimais opcionalmente seguidos por "E" ou "e" seguido por um valor inteiro que representa o expoente. Os valores decimais podem estar no intervalo de -16777216 a 16777216. Os valores expoentes podem estar na faixa de –149 a 104. Float permite que valores especiais representem valores infinitos e não numéricos. Os valores especiais para float são: 0, -0, INF, -INF, NaN. |
| duplo | O mesmo que "float", exceto que os valores decimais podem estar no intervalo de -9007199254740992 a 9007199254740992, e os valores expoentes podem estar no intervalo de –1075 a 970. Double permite que valores especiais representem valores infinitos e não numéricos. Os valores especiais para float são: 0, -0, INF, -INF, NaN. |
| Duração | O formato de duração do W3C. |
| data e hora | O formato dateTime do W3C. |
| Tempo | O formato de tempo W3C. |
| data | Os valores anuais são restritos de 0001 a 9999. |
| gAnoMes | O formato de mês e ano gregoriano do W3C. |
| corda | Um ou mais caracteres Unicode. |
Tipo de Promoção
A XmlSchemaInference classe examina os valores de atributos e elementos um de cada vez. À medida que os valores são encontrados, o tipo mais restritivo e não assinado é inferido. Se um tipo tiver sido inferido para um atributo ou elemento e for encontrado um novo valor que não corresponde ao tipo atualmente inferido, o tipo inferido será promovido para um novo tipo que se aplica ao tipo inferido atualmente e ao novo valor. A XmlSchemaInference classe considera valores anteriores ao promover o tipo inferido.
Por exemplo, considere os seguintes fragmentos XML de dois documentos XML:
<MyElement1 attr1="12" />
<MyElement1 attr1="52344" />
Quando o primeiro valor attr1 é encontrado, o tipo attr1 é inferido como unsignedByte com base no valor 12. Quando o segundo attr1 é encontrado, o tipo é promovido para unsignedShort com base no tipo de unsignedByte atualmente inferido e no valor atual 52344.
Agora, considere o seguinte XML de dois documentos XML:
<MyElement2 attr2="0" />
<MyElement2 attr2="true" />
Quando o primeiro valor attr2 é encontrado, o tipo attr2 é inferido como unsignedByte com base no valor 0. Quando o segundo attr2 é encontrado, o tipo é promovido para string com base no tipo atualmente inferido de unsignedByte e no valor atual true porque a classe XmlSchemaInference realmente considera os valores anteriores ao promover o tipo inferido. No entanto, se ambas as instâncias de attr2 fossem encontradas no mesmo documento XML e não em dois documentos XML diferentes, como ilustrado acima, attr2 teria sido inferido como boolean.
Atributos ignorados do https://www.w3.org/2001/XMLSchema-instance namespace
A seguir estão os atributos que definem o esquema que são ignorados durante a inferência do esquema.
| Atributo | Descrição |
|---|---|
xsi:type |
Se um elemento for encontrado com xsi:type especificado, o xsi:type será ignorado. |
xsi:nil |
Se um elemento com um xsi:nil atributo for encontrado, sua declaração de elemento no esquema inferido terá o valor de nillable="true". Um elemento com um xsi:nil atributo definido como true não pode ter elementos filho. |
xsi:schemaLocation |
Se xsi:schemaLocation for encontrado, é ignorado. |
xsi:noNamespaceSchemaLocation |
Se xsi:noNamespaceSchemaLocation for encontrado, é ignorado. |