Схема счета на покупку объявляет различные
элементы и атрибуты, которые имеют простой тип. Некоторые из этих простых типов,
такие как string
и decimal
, встроены в XMLSchema, тогда как другие получены из встроенных. Например, атрибут
partNum
имеет тип, называемый SKU
(StockKeepingUnit), получен из string
. Как встроенные простые типы, так и образованные от них,
могут использоваться во всех объявлениях элементов и атрибутов. В Таблице2 перечислены все простые типы, которые встроены в XMLSchema, и их примеры.
Простой тип | Примеры | Примечания |
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оrdinatedUniversalTime, см. (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 | NCNameXMLNamespace, т.е. 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 - допустимые форматы с плавающей точкой, представляющие «сто». Однако, правила установленные для этого типа, определяют канонический лексический формат, см. XMLSchema 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.
XMLSchema определяет пятнадцать видов ограничителей, которые перечислены в Приложение 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
и т.д. Отметим, что значения перечисления, указанные для одного типа, должны быть уникальны.