Поделиться через


Правила выведения простых типов

Обновлен: November 2007

Описывает, как класс XmlSchemaInference выводит тип данных для атрибутов и элементов.

Класс XmlSchemaInference выводит типы данных для атрибутов и элементов как простые типы данных. В этом разделе описываются возможные выводимые типы, приведение нескольких различных значений к одному типу, а также обработка задающих схему атрибутов xsi.

Выводимые типы

Класс XmlSchemaInference выводит значения элемента и атрибута в виде простых типов и включает атрибут типа в результирующую схему. Выводимые типы являются простыми типами. Никакие базовые типы или аспекты не включаются в результирующую схему.

Определение простого типа

Значения проверяются отдельно по мере того, как они обнаруживаются в XML-документе. Во время проверки значения выводится его тип. Если для атрибута или элемента был выведен тип, а значение обнаруженного атрибута или элемента не соответствует текущему выведенному типу, то класс XmlSchemaInference повышает тип для каждого набора правил. Эти правила обсуждаются в подразделе «Повышение типа», далее в этом разделе.

В следующей таблице перечислены возможные выводимые типы для результирующей схемы.

Простой тип

Описание

boolean

True, false, 0, 1.

byte

Целые числа в диапазоне от –128 до 127.

unsignedByte

Целые числа в диапазоне от 0 до 255.

short

Целые числа в диапазоне от -32 768 до 32 767.

unsignedShort

Целые числа в диапазоне от 0 до 65 535.

int

Целые числа в диапазоне от -2 147 483 648 до 2 147 483 647.

unsignedInt

Целые числа в диапазоне от 0 до 4 294 967 295.

long

Целые числа в диапазоне от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.

unsignedLong

Целые числа в диапазоне от 0 до 18 446 744 073 709 551 615.

integer

Определенное количество цифр, возможно с префиксом «-».

decimal

Числовые значения с точностью, содержащей от 0 до 28 десятичных знаков.

float

Десятичные дроби, за которыми следует символ «e» или «E» и целое число, представляющее экспоненту. Десятичные числа могут находиться в диапазоне от -16 777 216 до 16 777 216. Значения экспоненты могут находиться в диапазоне от -149 до 104.

Тип Float позволяет с помощью специальных значений представлять бесконечность и нечисловые значения. Специальные значения для float следующие: 0, -0, INF, -INF, NaN.

double

То же, что и float, но десятичные значения могут находиться в диапазоне от -9 007 199 254 740 992 до 9 007 199 254 740 992, а значения экспоненты — в диапазоне от -1 075 до 970.

Тип Double позволяет с помощью специальных значений представлять бесконечность и нечисловые значения. Специальные значения для float следующие: 0, -0, INF, -INF, NaN.

duration

Формат длительности консорциума W3C.

dateTime

Формат dateTime консорциума W3C.

time

Формат time консорциума W3C.

date

Значение года ограничиваются значениями от 1 до 9 999.

gYearMonth

Григорианский месяц и год в формате консорциума W3C.

string

Один или несколько символов Юникода.

Повышение типа

Класс XmlSchemaInference проверяет одновременно значения элемента и атрибута. По мере обнаружения значений, выводится наиболее ограниченный тип без знака. Если для атрибута или элемента уже был выведен тип, а новое обнаруженное значение не соответствует текущему выведенному типу, то выведенный тип повышается до нового типа, который применим как текущему выведенному типу, так и к новому значению. Класс XmlSchemaInference не рассматривает предыдущие значения при повышении выведенного типа.

Например, рассмотрим следующие фрагменты XML их двух XML-документов.

<MyElement1 attr1="12" />

<MyElement1 attr1="52344" />

При обнаружении первого значения attr1 тип attr1 выводится как unsignedByte на основе значения 12. Когда обнаруживается второе значение attr1, тип повышается до unsignedShort на основе текущего выведенного типа unsignedByte и текущего значения 52344.

Теперь рассмотрим следующий XML из двух XML-документов.

<MyElement2 attr2="0" />

<MyElement2 attr2="true" />

При обнаружении первого значения attr2 тип attr2 выводится как unsignedByte на основе значения 0. При обнаружении второго значения attr2 тип повышается до string на основе текущего выведенного типа unsignedByte и текущего значения true, потому что класс XmlSchemaInference не учитывает предыдущие значения при повышении выводимого типа. Однако если оба экземпляра attr2 были обнаружены в одном XML-документе, а не в двух различных XML-документах, как показано выше, то attr2 выведется как boolean.

Не обрабатываемые атрибуты из пространства имен http://www.w3.org/2001/XMLSchema-instance

Далее перечислены атрибуты схемы, которые не обрабатываются при выведении схемы.

Атрибут

Описание

xsi:type

Если обнаруживается элемент с указанным атрибутом xsi:type, этот атрибут xsi:type не обрабатывается.

xsi:nil

Если обнаруживается элемент с атрибутом xsi:nil, то декларация элемента в выводимой схеме имеет значение nillable="true". Элемент с атрибутом xsi:nil, установленным в значение true, не может иметь дочерние элементы.

xsi:schemaLocation

При обнаружении xsi:schemaLocation он не учитывается.

xsi:noNamespaceSchemaLocation

При обнаружении xsi:noNamespaceSchemaLocation он не учитывается.

См. также

Основные понятия

Выведение схем из XML-документов

Правила выведения структуры и типов узлов схемы

Другие ресурсы

Модель объектов схемы XML (SOM)