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 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 é 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. |