Regras para inferir tipos simples
Descreve como a classe de XmlSchemaInference infere o tipo de dados para atributos e elementos.
A classe de XmlSchemaInference infere o tipo de dados para atributos e elementos como tipos simples. Esta seção descreve os tipos inferidos possivelmente, como os valores de diferentes de vários são reconciliados a um único tipo, e como esquema- definindo atributos de xsi
são tratados.
Tipos inferidos
A classe de XmlSchemaInference infere valores de elemento e atributo como tipos simples e inclui um atributo de tipo no esquema resultante. Todos os tipos são inferidos tipos simples. Qualquer tipo base ou aspecto são incluído como parte do esquema resultante.
Os valores são examinados individualmente que são encontrados no documento XML. O tipo é inferido para um valor então é examinado. Se um tipo é inferido de um atributo ou um elemento, e um valor para o atributo ou o elemento está localizado que não corresponde ao tipo atualmente inferido, a classe de XmlSchemaInference eleva 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 tipos inferidos possíveis para o esquema resultante.
Tipo simples | Descrição |
---|---|
booleano | True, false, 0, 1. |
byte | Inteiros no intervalo de – 128 a 127. |
unsignedByte | Inteiros no intervalo de 0 a 255. |
short | 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. |
long | Inteiros no intervalo de – 9223372036854775808 a 9223372036854775807. |
unsignedLong | Inteiros no intervalo de 0 a 18446744073709551615. |
Número inteiro | Um número de dígitos finito prefixados possivelmente com “-”. |
decimal | Valores numéricos que contêm 0 a 28 dígitos de precisão. |
FLOAT | Os decimais opcionalmente seguido por “E” ou “e” tiver usado por um valor inteiro que representa o expoente. Os valores decimais podem estar no intervalo de -16777216 a 16777216. Os valores do expoente podem estar no intervalo de – 149 a 104. O flutuante permite valores especiais representar a infinito e não valores numéricos. Os valores especiais para o flutuante são: 0, -0, INF, - INF, NaN. |
double | O mesmo como flutuam exceto valores decimais podem estar no intervalo de -9007199254740992 a 9007199254740992, e o expoente valor podem estar no intervalo de – 1075 a 970. O tipo double permite valores especiais representar a infinito e não valores numéricos. Os valores especiais para o flutuante são: 0, -0, INF, - INF, NaN. |
duration | O formato de duração W3C. |
dateTime | O formato dateTime W3C. |
time | O formato de hora W3C. |
date | Os valores do ano são impedidos de 0001 a 9999. |
gYearMonth | O formato gregoriano mês e ano de W3C. |
string | Um ou mais caracteres Unicode. |
Promoção de tipos
A classe de XmlSchemaInference examina valores de atributo e de um elemento de cada vez. Como valores são encontrados, o tipo mais restritivo, o mais sem sinal é inferido. Se um tipo é inferido de um atributo ou um elemento, e um novo valor está localizado que não corresponde ao tipo atualmente inferido, o tipo é inferido alto para um novo tipo que se aplica a ambos tipo atualmente inferido e o novo valor. A classe de XmlSchemaInference considera valores anteriores para elevar o tipo inferido.
Por exemplo, considere os seguintes fragmentos XML de dois documentos XML:
<MyElement1 attr1="12" />
<MyElement1 attr1="52344" />
Quando o primeiro valor de attr1
é encontrado, o tipo de attr1
será inferida como unsignedByte
com base no valor 12
. Quando segundo attr1
é encontrado, o tipo é promovido a unsignedShort
com base no tipo atualmente inferido de unsignedByte
e o valor atual 52344
.
Agora, considere o seguinte XML de dois documentos XML:
<MyElement2 attr2="0" />
<MyElement2 attr2="true" />
Quando o primeiro valor de attr2
é encontrado, o tipo de attr2
será inferida como unsignedByte
com base no valor 0
. Quando segundo attr2
é encontrado, o tipo é promovido a string
com base no tipo atualmente inferido de unsignedByte
e o valor atual true
porque a classe de XmlSchemaInference considera valores anteriores para elevar o tipo inferido. No entanto, se ambas as instâncias de attr2
foram encontrados no mesmo documento XML e não em dois documentos XML diferentes que ilustradas anterior, attr2
seria inferido como boolean
.
Atributos ignorados do namespace https://www.w3.org/2001/XMLSchema-instance
Os seguintes esquema- está definindo os atributos que são ignorados durante a inferência de esquema.
Atributo | Descrição |
---|---|
xsi:type |
Se um elemento é encontrado com xsi:type especificou, xsi:type é ignorado. |
xsi:nil |
Se um elemento com um atributo de xsi:nil é encontrado, sua declaração de elemento no esquema inferido tem o valor de nillable="true" . Um elemento com um atributo de xsi:nil definido como true não pode ter elementos filho. |
xsi:schemaLocation |
Se xsi:schemaLocation é encontrado, será ignorado. |
xsi:noNamespaceSchemaLocation |
Se xsi:noNamespaceSchemaLocation é encontrado, será ignorado. |