Схема счета на покупку объявляет
различные элементы и атрибуты, которые имеют простой тип. Некоторые из этих
простых типов, таких как string
и decimal
, встроены в XML Schema, тогда как другие получены из
встроенных. Например, атрибут partNum
имеет тип, называемый SKU
(Stock Keeping Unit), который получен из string
. Как встроенные простые типы, так и
образованные из них, могут использоваться во всех объявлениях элементов и
атрибутов. В Таблице
2 перечислены все простые типы, которые встроены в XML Schema, наряду с примерами других типов.
Простой тип
|
Примеры |
Примечания |
Confirm this
is electric |
|
|
Confirm this
is electric |
см. (3) |
|
Confirm this
is electric |
см. (4) |
|
-1, 126 |
см. (2) |
|
0, 126 |
см. (2) |
|
GpM7 |
|
|
0FB7 |
|
|
-126789, -1,
0, 1, 126789 |
см. (2) |
|
1, 126789 |
см. (2) |
|
-126789, -1 |
см. (2) |
|
0, 1, 126789 |
см. (2) |
|
-126789, -1, 0
|
см. (2) |
|
-1, 126789675 |
см. (2) |
|
0, 1267896754 |
см. (2) |
|
-1,
12678967543233 |
см. (2) |
|
0,
12678967543233 |
см. (2) |
|
-1, 12678 |
см. (2) |
|
0, 12678 |
см. (2) |
|
-1.23, 0,
123.4, 1000.00 |
см. (2) |
|
-INF, -1E4, -0, 0, 12.78E-2, 12, INF, |
Эквивалентно
32-х битовому числу с плавающей точкой с одинарной точностью, NaN это «not a number», см. (2) |
|
-INF, -1E4, -0, 0, 12.78E-2, 12, INF, |
Эквивалентно
64-х битовому числу с плавающей точкой с двойной точностью, см. (2) |
|
true, false |
|
|
13:20:00.000,
13:20:00.000-05:00 |
см. (2) |
|
1999-05-31T13:20:00.000-05:00
|
31 Мая
1999 13 часов 20 минут Стандартное время, которое на 5 часов позади
Coоrdinated Universal Time, см. (2) |
|
P1Y2M3DT10H30M12.3S
|
1 год, 2 месяца,
3 дня, 10 часов, 30 минут и 12.3 секунды |
|
1999-05-31 |
см. (2) |
|
--05-- |
Май, см. (2)
(5) |
|
1999 |
1999, см. (2)
(5) |
|
1999-02 |
Месяц февраль
1999, без номера дня, см. (2) (5) |
|
---31 |
31-й день, см.
(2) (5) |
|
--05-31 |
Каждое 31 мая,
см. (2) (5) |
|
shipTo |
Тип Name XML 1.0 |
|
po:USAddress |
QName XML
Namespace |
|
USAddress |
NCName XML Namespace, т.е. QName без префикса и двоеточия |
|
http://www.example.com/, http://www.example.com/doc.html#ID5
|
|
|
en-GB, en-US, fr |
Действительные
значения xml:lang, как определено в XML 1.0 |
|
|
тип атрибута XML 1.0 ID, см. (1) |
|
|
тип атрибута XML 1.0 IDREF, see (1) |
|
|
тип атрибута XML 1.0 IDREFS, см. (1) |
|
|
тип атрибута XML 1.0 ENTITY, см. (1) |
|
|
XML 1.0 ENTITIES attribute type, см. (1) |
|
|
тип атрибута XML 1.0
NOTATION, см.
(1) |
|
US, |
тип атрибута XML 1.0 NMTOKEN, см. (1) |
|
|
тип атрибута 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
:
<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 символа верхнего регистра»:
<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
, чье значение должно быть одной из
стандартных аббревиатур штатов США:
<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
и т.д. Отметим, что значения
перечисления, указанные для специфического типа должны быть уникальны.