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


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

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

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

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

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

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

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

Простой тип Description
boolean True, false, 0, 1.
byte Целые числа в диапазоне от -128 до 127.
unsignedByte Целые числа в диапазоне от 0 до 255.
short Целые числа в диапазоне от -32768 до 32767.
unsignedShort Целые числа в диапазоне от 0 до 65535.
INT Целые числа в диапазоне от -2147483648 до 2147483647.
unsignedInt Целые числа в диапазоне от 0 до 4 294 967 295.
длинный Целые числа в диапазоне от -9223372036854775808 до 9223372036854775807.
unsignedLong Целые числа в диапазоне от 0 до 18446744073709551615.
integer Определенное количество цифр, возможно с префиксом «-».
десятичное Числовые значения с точностью, содержащей от 0 до 28 десятичных знаков.
с плавающей запятой Десятичные дроби, за которыми следует символ «e» или «E» и целое число, представляющее экспоненту. Десятичные значения могут находиться в диапазоне от -16777216 до 16777216. Значения экспоненты могут находиться в диапазоне от –149 до 104.

Тип Float позволяет с помощью специальных значений представлять бесконечность и нечисловые значения. Специальными значениями для типа float являются: 0, -0, INF, -INF, NaN.
двойной точности То же, что и float, но десятичные значения могут находиться в диапазоне от -9 007 199 254 740 992 до 9 007 199 254 740 992, а значения экспоненты — в диапазоне от -1075 до 970.

Тип Double позволяет с помощью специальных значений представлять бесконечность и нечисловые значения. Специальными значениями для типа float являются: 0, -0, INF, -INF, NaN.
duration Формат длительности консорциума W3C.
dateTime Формат dateTime консорциума W3C.
Время Формат time консорциума W3C.
Дата Значение года ограничиваются значениями от 1 до 9 999.
gYearMonth Григорианский месяц и год в формате консорциума W3C.
строка Один или несколько символов Юникода.

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

Класс 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.

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

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

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

См. также