Правила выведения простых типов
Обновлен: 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-документов
Правила выведения структуры и типов узлов схемы