Типы данных в схеме XML
С точки зрения базы данных основательная поддержка типов и структур данных является одним из главных достоинств XML Схем. В спецификации XML Schema определено более 30 встроенных типов данных, очень похожих на типы данных SQL. Наиболее важные с точки зрения баз данных типы данных ХМL Схем перечислены в таблице 7.1.
Если сравнить типы данных XML Схемы с типами данных баз данных, приведенных в таблице 3.1, то можно сделать вывод, что все они могут быть взаимно обратно преобразованы друг в друга без потери информации. Именно это обстоятельство является важным качеством XML-формата.
Таблица 7.1. Типы данных в XML Схеме
Тип данных XML Схемы | Описание |
Числовые данные | |
Integer | Целое число |
PositiveInteger | Положительное целое число |
NegativeInteger | Отрицательное целое число |
NonPositiveInteger | Нуль или отрицательное целое число |
NonNegativeInteger | Нуль или положительное целое число |
Int | 32-битовое целое число со знаком |
UnsignedInt | 32-битовое целое число без знака |
Long | 64-битовое целое число со знаком |
UnsignedLong | 64-битовое целое число без знака |
Short | 16-битовое целое число со знаком |
UnsignedShort | 16-битовое целое число без знака |
Decimal | Число, содержащее дробную часть |
Float | Число с плавающей запятой стандартной точности |
Double | Число с плавающей запятой двойной точности |
Символьные данные | |
String | Символьная строка переменной длины |
NormalizedString | Строка, в которой символы новой строки, возврата каретки и табуляции заменены пробелами |
Token | Строка, обработанная как NormalizedString, в которой удалены начальные и конечные пробелы и подряд идущие пробелы заменены одним пробелом |
Дата и время | |
Time | Время дня (часы/минуты/секунды/миллисекунды) |
DateTime | День и время (эквивалент SQL-типа TIMESTAMP) |
Duration | Длительность временного интервала (эквивалент SQL-типа DURATION) |
Date | Год/месяц/день |
Gmonth | Месяц по григорианскому календарю (от 1 до 12) |
Gyear | Год по григорианскому календарю (от 0000 до 9999) |
Gday | День месяца по григорианскому календарю (от 1 до 31) |
GmonthDay | Месяц/день по григорианскому календарю |
Другие данные | |
Boolean | Значение TRUE/FALSE |
Byte | Один байт данных со знаковым битом |
UnsignedByte | Один байт данных без знакового бита |
base64Binary | Двоичные данные по основанию 64 |
HexBinary | Двоичные данные по основанию 16 |
AnyURI | URI-адрес в Интернете, например, http://www.w3.org |
Language | Допустимый язык XML (английский, французский ...) |
Так же как стандарты SQL2 и SQL3, XML Schema поддерживает пользовательские типы данных, производные от встроенных типов или других пользовательских типов данных. Пользовательский тип данных определяется как ограничение, накладываемое на другой тип данных XML.
Ниже приведено определение производного типа данных repNumType, ограничивающего допустимые коды служащих диапазоном значений от 101 до 199.
<simpleType name="repNumType">
<restriction base ="integer">
<minlnclusive value="101" />
<maxExclusive value="200" />
</restriction>
</simpleType>
С таким определением типа данных можно объявлять сущности и атрибуты схемы как относящиеся к типу repNumType, и для них будет автоматически применяться заданное вами ограничение.
Спецификация XML Schema предоставляет богатый набор характеристик типов данных (называемых аспектами), которые можно использовать в ограничениях. Это длина данных (для строк и двоичных данных), включающие и исключающие диапазоны значений, количество цифр целой и дробной части (для числовых данных) и явные перечни допустимых значений. Имеется даже встроенная возможность проверки на соответствие шаблону, позволяющая ограничить набор допустимых значений данных при помощи специального синтаксиса.
Еще XML Schema позволяет определять сложные типы данных, то есть пользовательские структуры. Вот, например, определение сложного типа данных custAddrType, составленного из вложенных элементов стандартных типов:
<complexType name="custAddrType">
<sequence>
<element name="city" type="string"/>
<element name-"street" type="string"/>
<element name="state" type="string"/>
<element name-"postcode" type="integer"/>
</sequence>
</complexType>
Можно также создать пользовательский тип данных, представляющий собой список элементов данных другого типа. Вот, в частности, определение сложного типа repListType, представляющего собой список кодов служащих:
<simpleType name="repListType">
<list itemType="repNumType"/>
</simpleType>
Обычно в определении любого языка содержится описание типов и структур данных. Информация о типе указывает характер размещения данных в двоичной памяти, выделяемой ОС в ходе выполнения этой программы. Язык программирования воспринимает данные через собственный набор типов данных, которые, по сути, являются абстракцией двоичного кода, используемого для физического хранения и манипулирования битами и байтами.
Поэтому программные средства используют только собственный, уникальный механизм для формирования, передачи и хранения данных, как будто не существует других языков программирования или словно эта программная система решает многолетнюю проблему абстрагирования данных раз и навсегда.
XML делает следующий шаг, который заключается в том, что программы должны уметь отображать свои форматы данных лишь в XML и обратно. Этот шаг представляет собой значительный сдвиг в вопросе восприятия данных приложениями, особенно это касается общих данных, совместно используемых программами и приложениями различных типов.
XML хранит все данные в виде текста, как и положено языку разметки. Программы, обращающиеся к XML, отображают эти данные в свое представление и обратно в текстовое, используя сведения о связи типов. Поскольку такие сведения хранятся отдельно, допускается множественный доступ с возможностью независимого изменения этих данных.
Таким образом, XML-процессоры осуществляют преобразование данных приложений в данные XML и обратно, практически так же, как браузеры производят HTML-разметку текста. Различие заключается в том, что в данном случае целью преобразования является не графический интерфейс пользователя, а файл данных или программа.
XML-процессоры находят соответствие имен элементов в файле схемы с именами элементов в файле данных и применяют сведения о типе и структуре. XML-процессоры также должны «понимать» специальные элементы схемы, касающиеся интерпретации данных, по таким вопросам, как упорядочивание данных для передачи по HTTP (сериализация) или порядок отображения SOAP-сообщения на определенный метод объекта.
Отображение любых значений в текстовую форму и обратно является неэффективным действием в плане как использования пространства памяти, так и в отношении скорости обработки. Но нередко производительность является «наименьшим злом» по сравнению с нереализованными возможностями. И в этом случае, поскольку язык XML предлагает выход для важнейшей, ранее неразрешимой проблемы, производительность отступает на второй план.
Дата добавления: 2015-02-03; просмотров: 3221;