XML - статьи

         

Простые типы


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

Таблица 2. Список простых типов



Простой тип Примеры (разграничены запятыми) Примечания
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 - число не задано, прим. (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 часов отстает от Универсального времени. См.,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 XML 1.0 тип Name
QName po:USAddress XML Namespace QName
NCName USAddress XML Namespace NCName, то есть QName без префикса и двоеточия
anyURI ,  
language en-GB, en-US, fr Значения допустимые для xml:lang как определено в XML 1.0
ID   XML 1.0 атрибут типа ID, см., 1)
IDREF   XML 1.0 атрибут типа IDREF, см., 1)
IDREFS   XML 1.0 атрибут типа IDREFS, см., 1)
ENTITY   XML 1.0 атрибут типа ENTITY, см., 1)
ENTITIES   XML 1.0 атрибут типа ENTITIES, см., 1)
NOTATION   XML 1.0 атрибут типа NOTATION, см., 1)
NMTOKEN US, Bresil XML 1.0 атрибут типа NMTOKEN, см., 1)
NMTOKENS US UK, Bresil Canada Mexique XML 1.0 атрибут типа NMTOKENS, то есть список NMTOKEN разделенных пробелами, см., 1)
Примечания:

1) Для обеспечения совместимости XML-схем и XML 1.0 DTD, простые идентификаторы типов ( IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN, NMTOKENS), должны использоваться только в атрибутах.

2) Значение этого типа может быть представлено больше чем одним лексическим форматом. Например, 100 и 1.0E2 - оба значения представлены в формате с плавающей точкой, и значением равным "сто". Однако, для этого типа были установлены правила, которые определяют канонический лексический формат (см., "XML-схема. Часть 2: Типы данных").

3) Символы перевода строки, табуляции, и перевода каретки в типе normalizedString перед обработкой схемы преобразуются в пробелы.

4) Как и в normalizedString, смежные пробелы сокращены до единственного пробела, предшествующие и завершающие пробелы удаляются.

5) Префикс "g", задает время по Григорианскому календарю.

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

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

Определение myInteger. Диапазон 10000-99999:



Приведенный пример показывает использование одной из возможных комбинаций базового типа, и двух фасетов, которые были применены для определения myInteger. Но возможно использование и других комбинаций встроенных простых типов и фасетов (см., приложение B). Рассмотрим более сложный пример определения простого типа. Тип по имени SKU получен из простого типа string. Мы ограничиваем значения SKU путем использования фасета pattern, который содержит регулярное выражение, определяющее допустимый формат строки "\d{3}-[A-Z]{2}". Это выражение читается следующим образом: "строка начинается с трех цифр, за которыми следует дефис, за дефисом следует два ASCII-символами верхнего регистра".

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



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

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

Использование фасета enumeration:



Использование типа USState является хорошей заменой типа string, при использовании в элементе state (содержит наименование штата). За счет такой замены мы можем ограничить значения элемента state в подэлементах billTo и shipTo. При этом эти значения ограничены следующим перечнем: AK, АL, AR, и т.д. Обратите внимание, что перечисляемые значения, указанные для данного типа должны быть уникальны.


Содержание раздела