Правила выведения простых типов
Описывает, как класс 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 он не учитывается. |