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

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

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

Простой тип

Примеры

Примечания

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оrdinatedUniversalTime, см. (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

NCNameXMLNamespace, т.е. 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

USUK,
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 - допустимые форматы с плавающей точкой, представляющие «сто». Однако, правила установленные для этого типа, определяют канонический лексический формат, см. XMLSchema 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.

XMLSchema определяет пятнадцать видов ограничителей, которые перечислены в Приложение 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