Схема счета на покупку объявляет различные
элементы и атрибуты, которые имеют простой тип. Некоторые из этих простых типов,
такие как 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 и т.д. Отметим, что значения перечисления, указанные для одного типа, должны быть уникальны.