2.3 Простые типы

Схема счета на покупку объявляет различные элементы и атрибуты, которые имеют простой тип. Некоторые из этих простых типов, таких как string и decimal, встроены в XML Schema, тогда как другие получены из встроенных. Например, атрибут partNum имеет тип, называемый SKU (Stock Keeping Unit), который получен из string. Как встроенные простые типы, так и образованные из них, могут использоваться во всех объявлениях элементов и атрибутов. В Таблице 2 перечислены все простые типы, которые встроены в XML Schema, наряду с примерами других типов.

Таблица 2. Простые типы, встроенные в XML Schema

Простой тип

Примеры

Примечания

string

Confirm this is electric

 

normalizedString

Confirm this is electric

см. (3)

token

Confirm this is electric

см. (4)

byte

-1, 126

см. (2)

unsignedByte

0, 126

см. (2) 

base64Binary

GpM7

 

hexBinary

0FB7

 

integer

-126789, -1, 0, 1, 126789

см. (2)

positiveInteger

1, 126789

см. (2)

negativeInteger

-126789, -1

см. (2)

nonNegativeInteger

0, 1, 126789

см. (2)

nonPositiveInteger

-126789, -1, 0

см. (2)

int

-1, 126789675

см. (2)

unsignedInt

0, 1267896754

см. (2)

long

-1, 12678967543233

см. (2)

unsignedLong

0, 12678967543233

см. (2)

short

-1, 12678

см. (2)

unsignedShort

0, 12678

см. (2)

decimal

-1.23, 0, 123.4, 1000.00

см. (2)

float

-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN

Эквивалентно 32-х битовому числу с плавающей точкой с одинарной точностью, NaN это «not a number», см. (2)

double

-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN

Эквивалентно 64-х битовому числу с плавающей точкой с двойной точностью, см. (2)

boolean

true, false
1, 0

 

time

13:20:00.000, 13:20:00.000-05:00

см. (2)

dateTime

1999-05-31T13:20:00.000-05:00

31 Мая 1999            13 часов 20 минут

 Стандартное время, которое на 5 часов позади Coоrdinated Universal Time, см. (2)

duration

P1Y2M3DT10H30M12.3S

1 год, 2 месяца, 3 дня, 10 часов, 30 минут и 12.3 секунды

date

1999-05-31

см. (2)

gMonth

--05--

Май, см. (2) (5)

gYear

1999

1999, см. (2) (5)

gYearMonth

1999-02

Месяц февраль 1999, без номера дня, см. (2) (5)

gDay

---31

31-й день, см. (2) (5)

gMonthDay

--05-31

Каждое 31 мая, см. (2) (5)

Name

shipTo

Тип Name XML 1.0

QName

po:USAddress

QName XML Namespace

NCName

USAddress

NCName XML Namespace, т.е. QName без префикса и двоеточия

anyURI

http://www.example.com/, http://www.example.com/doc.html#ID5

 

language

en-GB, en-US, fr

Действительные значения xml:lang, как определено в XML 1.0

ID

 

тип атрибута XML 1.0 ID, см. (1)

IDREF

 

тип атрибута XML 1.0 IDREF, see (1)

IDREFS

 

тип атрибута XML 1.0 IDREFS, см. (1)

ENTITY

 

тип атрибута XML 1.0 ENTITY, см. (1)

ENTITIES

 

XML 1.0 ENTITIES attribute type, см. (1)

NOTATION

 

тип атрибута XML 1.0 NOTATION, см. (1)

NMTOKEN

US,
Brésil

тип атрибута XML 1.0 NMTOKEN, см. (1)

NMTOKENS

US UK,
Brésil
Canada Mexique

тип атрибута XML 1.0 NMTOKENS, т.е. пробелы, разделяющие список  NMTOKEN, см. (1)

Примечания: (1) Для обеспечения совместимости между XML Schema и XML 1.0 DTD, ID простых  типов, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN, NMTOKENS должны только использоваться в атрибутах. (2) Значение этого типа может быть представлено больше чем одним лексическим форматом, например и 100, и 1.0E2 - допустимые форматы с плавающей точкой, представляющие «сто». Однако, правила установленные для этого типа, определяют канонический лексический формат, см. XML Schema Part 2. (3) Символы новой строки, табуляции и возврата каретки в типе normalizedString - преобразованы в пробелы перед обработкой схемы. (4) Как normalizedString, так и смежные пробелы сведены к одному пробелу. Начальные  и конечные пробелы удалены. (5) префикс "g" сообщает о периодах времени в Грегорианском каландре. 

Новые простые типы получаются из существующих простых типов (встроенных и полученных ранее). В частности мы можем получить новый простой тип, ограничивая существующий простой тип. Другими словами, допустимый диапазон значений для нового типа есть подмножество диапазона значений существующего типа. Мы используем элемент simpleType, чтобы определить и дать имя новому простому типу. Мы используем элемент restriction, чтобы указать существующий (основной) тип, и определить «допустимые значения», которые ограничивают диапазон значений. Полный список допустимых значений представлен в Приложение B.

Предположим, что мы желаем создать новый тип целого числа с именем myInteger, диапазон значений которого должен быть между 10000 и 99999 (включительно). Мы формируем наше определение на встроенном простом типе integer, чей диапазон значений также включает целые числа меньше чем 10000 и больше чем 99999. Для того, что бы определить myInteger, мы ограничиваем диапазон основного типа integer , посредством двух применимых ограничений, называемых minInclusive и maxInclusive:

Определение myInteger, диапазон 10000-99999

<xsd:simpleType name="myInteger">
  <xsd:restriction base="xsd:integer">
    <xsd:minInclusive value="10000"/>
    <xsd:maxInclusive value="99999"/>
  </xsd:restriction>
</xsd:simpleType>

В примере показана одна определенная комбинация исходного типа и два ограничения, которые используются для определения myInteger. Однако, если просмотреть список встроенных простых типов и их ограничений (Приложение B), то можно предложить и другие возможные комбинации.

Схема счета на покупку содержит другой, более сложный, пример определения простого типа. Новый простой тип, называемый SKU получен (в соответствии с ограничением) от простого типа string. Кроме того, мы ограничиваем значения SKU, используя ограничение, называемое pattern  вместе с регулярным выражением «\d {3} - [A-Z] {2}», которое читается как «три цифры, после них дефис, далее два ASCII символа верхнего регистра»:

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

<xsd:simpleType name="SKU">
  <xsd:restriction base="xsd:string">
    <xsd:pattern value="\d{3}-[A-Z]{2}"/>
  </xsd:restriction>
</xsd:simpleType>

Этот язык регулярных выражений более полно описан в Приложение D.

XML Schema определяет пятнадцать видов ограничений, которые перечислены в Приложение B. Среди них особенно полезно ограничение enumeration, оно может использоваться для того, чтобы сузить набор возможных значений почти любого простого типа, исключение - тип boolean. Ограничение enumeration сводит множество возможных значений простого типа к нескольким значениям. Например, мы можем использовать ограничение enumeration,  чтобы определить новый простой тип с именем USState, полученный из string, чье значение должно быть одной из стандартных аббревиатур штатов США:

Использование ограничения Enumeration

<xsd:simpleType name="USState">
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="AK"/>
    <xsd:enumeration value="AL"/>
    <xsd:enumeration value="AR"/>
    <!-- and so on ... -->
  </xsd:restriction>
</xsd:simpleType>

USState - хорошая альтернатива для типа string, которая может использоваться в объявлении элемента state. Выполняя эту замену, всегда будут использоваться только правильные значения элемента state, то есть подэлементы state - billTo и shipTo будут ограничены одним из значений: AK, AL, AR и т.д. Отметим, что значения перечисления, указанные для специфического типа должны быть уникальны.

 

Используются технологии uCoz