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 Description
boolean Verdadeiro, falso, 0, 1.
byte Números inteiros no intervalo de –128 a 127.
unsignedByte Números inteiros na faixa de 0 a 255.
curtas Números inteiros no intervalo de –32768 a 32767.
unsignedShort Números inteiros no intervalo de 0 a 65535.
número inteiro Números inteiros no intervalo de –2147483648 a 2147483647.
unsignedInt Números inteiros no intervalo de 0 a 4294967295.
long Números inteiros no intervalo de –9223372036854775808 a 9223372036854775807.
não assinadoLong Números inteiros no intervalo de 0 a 18446744073709551615.
integer Um número finito de dígitos possivelmente prefixados com "-".
decimal 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 valores decimais, pode estar no intervalo de -9007199254740992 a 9007199254740992, e 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.
duration O formato de duração do W3C.
dateTime O formato dateTime do W3C.
hora O formato de hora W3C.
data Os valores anuais são restritos de 0001 a 9999.
gAnoMês O formato de mês e ano gregoriano do W3C.
string 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 attr1 valor é encontrado, o tipo de é inferido attr1 como unsignedByte baseado no valor 12. Quando o segundo attr1 é encontrado, o tipo é promovido para unsignedShort com base no tipo atualmente inferido e unsignedByte no valor 52344atual .

Agora, considere o seguinte XML de dois documentos XML:

<MyElement2 attr2="0" />

<MyElement2 attr2="true" />

Quando o primeiro attr2 valor é encontrado, o tipo de é inferido attr2 como unsignedByte baseado no valor 0. Quando o segundo attr2 é encontrado, o tipo é promovido para string com base no tipo atualmente inferido e unsignedByte no valor true atual porque a XmlSchemaInference classe considera os valores anteriores ao promover o tipo inferido. No entanto, se ambas as instâncias de foram encontradas no mesmo documento XML e não em dois documentos XML diferentes, como ilustrado acima, attr2 teria sido inferido attr2 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 Description
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.

Consulte também