Partilhar via


Regras para inferir tipos simples

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.

Ver também