Compartilhar 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 tipos inferidos potenciais, como vários valores diferentes são reconciliados com um único tipo e como os atributos definidores de xsi esquema são tratados.

Tipos inferidos

A XmlSchemaInference classe infere valores de elemento e atributo como tipos simples e inclui um atributo de tipo no esquema resultante. Todos os tipos inferidos são tipos simples. Nenhum tipo de base ou facetas são incluídos como parte do esquema resultante.

Os valores são examinados individualmente conforme são encontrados no documento XML. O tipo de um valor é inferido no momento em que ele é examinado. Se um tipo tiver sido inferido para um atributo ou elemento e um valor para o atributo ou elemento for encontrado que não corresponda ao tipo inferido no momento, a XmlSchemaInference classe promoverá o tipo para cada um de um conjunto de regras. Essas regras são discutidas na seção da promoção de tipos, posterior 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 Inteiros no intervalo de –128 a 127.
byte sem sinal Inteiros no intervalo de 0 a 255.
curto Inteiros no intervalo de –32768 a 32767.
unsignedShort Inteiros no intervalo de 0 a 65535.
int Inteiros no intervalo de –2147483648 a 2147483647.
unsignedInt Inteiros no intervalo de 0 a 4294967295.
Longas Inteiros no intervalo de –9223372036854775808 a 9223372036854775807.
unsignedLong Inteiros no intervalo de 0 a 18446744073709551615.
número inteiro Um número finito de dígitos possivelmente prefixado com "-".
decimal Valores numéricos que contêm de 0 a 28 dígitos de precisão.
flutuar Decimais seguidos, opcionalmente, por "E" ou "e", seguido por um valor inteiro que representa o expoente. Valores decimais podem estar no intervalo de -16777216 a 16777216. Os valores expoentes podem estar no intervalo de –149 a 104.

O 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 valores decimais podem estar no intervalo de -9007199254740992 a 9007199254740992 e que valores expoentes podem estar no intervalo de –1075 a 970.

O 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 hora W3C.
data Os valores de ano são restritos de 0001 a 9999.
gYearMonth O formato gregoriano mês e ano de W3C.
cadeia de caracteres Um ou mais caracteres Unicode.

Promoção de tipos

A XmlSchemaInference classe examina os valores de atributo e elemento um de cada vez. À medida que os valores são encontrados, o tipo mais restritivo e sem sinal é inferido. Se um tipo tiver sido inferido para um atributo ou elemento e um novo valor for encontrado que não corresponda ao tipo inferido no momento, o tipo inferido será promovido a um novo tipo que se aplica ao tipo inferido no momento 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 attr1 é inferido como unsignedByte, com base no valor 12. Quando o segundo attr1 é encontrado, o tipo é promovido para unsignedShort com base no tipo unsignedByte inferido no momento e no valor 52344 atual.

Agora, considere o seguinte XML de dois documentos XML:

<MyElement2 attr2="0" />

<MyElement2 attr2="true" />

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

Atributos ignorados do https://www.w3.org/2001/XMLSchema-instance namespace

Veja a seguir os atributos que definem o esquema que são ignorados durante a inferência de 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 filhos.
xsi:schemaLocation Se xsi:schemaLocation é encontrado, será ignorado.
xsi:noNamespaceSchemaLocation Se xsi:noNamespaceSchemaLocation é encontrado, será ignorado.

Consulte também