Разработка веб-служб средствами Java. Ильдар ХабибуллинРазработкаWebслужбсредствами
Скачать 9.24 Mb.
|
Ильдар Хабибуллин Разработка Web-служб средствами Архитектура Web-служб Работа Web-служб в J2EE Безопасность предоставления услуг Ильдар Хабибуллин Разработка WEB-СЛУЖБ средствами Java Санкт-Петербург «БХВ-Петербург» 2003 УДК 681.3.068 ББК 32.973.202 Х12 Хабибуллин И. Ш. Х12 Разработка Web-служб средствами Java. — СПб.: БХВ-Петербург, 2003. — 400 с: ил. ISBN 5-94157-227-1 Книга посвящена описанию методов разработки Web-служб — приложений, доступных в Internet с помощью языка XML и обычных средств WWW. В книге последовательно излагаются все сведения, необходимые для создания Web- служб, рассматриваются средства разработки на языке Java, разъясняются прие- мы их использования. Приводятся необходимые сведения о языке прото- колы SOAP, WSDL, и другие протоколы и спецификации, применяемые при создании Web-служб. Подробно изучаются пакеты классов Java и прочие инструментальные средства, облегчающие создание приложений. Особое вни- мание уделено русификации Web-служб. Пользуясь материалом книги, читатель сможет создавать самые разнообраз- ные Web-службы любой сложности. Книга адресована студентам старших кур- сов, ИТ-специалистам и профессиональным разработчикам Web-приложений. Для программистов УДК 681.3.068 ББК 32.973.202 Группа подготовки издания: Главный редактор Екатерина Кондукова Зам. главного редактора Евгений Рыбаков Зав. редакцией Григорий Добин Редактор Анатолий Хрипов Компьютерная верстка Татьяны Валерьяновой Корректор Евгений Камский Оформление серии Via Design Дизайн обложки Игоря Цырульникова Зав. производством Николай Тверских Лицензия ИД № 02429 от 24.07.00. Подписано в печать Формат Печать офсетная. Усл. печ. л. 32,25. Тираж 3000 экз. Заказ 748 "БХВ-Петербург", Санкт-Петербург, Измайловский пр., 29. Гигиеническое заключение на продукцию, товар No от г. выдано Департаментом ГСЭН Минздрава России. Отпечатано с готовых диапозитивов в Академической типографии РАН 199034, Санкт-Петербург, 9 линия, ISBN 5-94157-227-1 Хабибуллин И. Ш., 2003 © издательство "БХВ-Петербург", 2003 Содержание Введение 8 Глава 1. Обработка документов XML 14 Описание DTD 21 Пространство имен тегов 23 XML 25 Встроенные простые типы XSD 26 Определение простых типов 28 Описание элементов и их атрибутов 32 Определение сложных типов 33 Пример: схема адресной книги 40 Безымянные типы 43 Пространства имен языка XSD 45 Включение файлов схемы в другую схему 48 Связь документа XML со своей схемой 50 Другие языки описания схем 51 Инструкции по обработке 51 Анализ документа XML 52 Анализ документов XML с помощью SAX2 API 53 Связывание данных XML с объектами Java 63 Объекты данных 64 Анализ документов XML с помощью DOM API ..65 Интерфейс Node 67 Интерфейс Document 68 Интерфейс Element 70 Другие DOM-парсеры 74 Преобразование дерева объектов в XML 75 Таблицы стилей XSL 77 Преобразование документа XML в HTML 81 4 Содержание Глава 2. Архитектура Web Services 83 Протокол 88 Протокол SOAP 92 Процедурный стиль послания SOAP 93 Документный стиль послания SOAP 96 Средства разработки SOAP 97 Создание простейшей Java Web-службы 99 Описание Web-службы 107 Инструменты создания описаний WSDL Регистрация Web-службы Система описания и обнаружения UDDI Язык для поиска Web-служб 123 Пакет JAXR 127 Стек протоколов Web Services 133 Глава 3. Протокол SOAP и Web Services 134 Структура SOAP-послания 135 Сообщение об ошибке Типы ошибок 140 Типы данных SOAP 143 Массивы 145 Структуры 147 Введение новых типов 148 Процедурный стиль SOAP 149 Сложные аргументы и результаты 151 Пересылка послания по протоколу HTTP 155 Использование метода GET 157 Пересылка послания по протоколу SMTP 158 SOAP-послание с дополнениями 159 multipart/related 159 Оформление SOAP-послания с дополнениями 163 Формат сообщения DIME 164 Средства создания SOAP-посланий 166 Работа с Axis 167 Установка Axis 167 Создание Web-службы для Axis 168 Клиент Axis 169 Использование конфигурационного файла 170 Использование описаний WSDL 176 Сеанс связи с Axis 178 Содержание Глава 4. Описание Web Services на языке WSDL 183 Состав документа WSDL 183 Конкретизация описания WSDL 193 Дополнительные элементы протокола SOAP 193 Дополнительные элементы протокола HTTP 196 Дополнительные элементы МШЕ-типов 201 Инструменты создания описаний WSDL 202 Пакет JWSDL и его реализация WSDL4J 206 Глава 5. Регистрация Web Services в реестре UDDI 212 Состав реестра UDDI 213 Элемент 216 Элемент Элемент 220 Элемент Элемент 223 Программный интерфейс UDDI 223 Функции запроса информации 225 Функции регистрации и модификации Web-службы 226 Реализации UDDI API 227 Пакет IBM UDDI4J 228 Пакет JAXR 234 Состав пакета JAXR 235 Глава 6. Детали создания Web Services 247 Создание SOAP-послания 248 Узел дерева элементов Node 248 Элемент послания SOAPElement 248 Основные элементы SOAP-послания 249 Послание SOAPMessage 251 Процесс создания SOAP-послания 252 Отправка SOAP-послания и получение ответа 254 Создание SOAP-послания с дополнениями 257 Класс 258 Сообщение об ошибке 262 Интерфейс 262 Асинхронный обмен сообщениями 265 Протокол WS-Routing и его реализация 266 Связь с поставщиком сообщений 271 Создание SOAP-послания и его отправка 272 Содержание Сервлеты 274 Сервлеты класса JAXMServlet 278 Послания процедурного стиля 281 Создание Web-службы средствами JAX-RPC 283 Жизненный цикл Web-службы 287 Контекст Web-службы 287 Предварительная обработка послания 288 Компиляция файлов Web-службы 291 Конфигурационный файл компилятора jaxrpc-ri.xml 292 Создание клиента JAX-RPC 295 Глава 7. Web Services как часть J2EE 305 Компоненты EJB 306 Session-компоненты 307 Контекст session-компонента MDB-компоненты 315 Конфигурационный файл EJB-приложения 317 Размещение Web-служб на 321 Реализация порта 323 Конфигурационный файл Web-службы 324 Конфигурационный файл клиента 328 Конфигурационный файл JAX-RPC 332 Установка Web-службы в контейнер 335 Глава 8. Безопасность предоставления услуг 337 Криптография 338 Симметричные ключи 338 Асимметричные ключи 339 Дайджест сообщения 340 Цифровая подпись 340 Цифровой сертификат 341 Реализация криптографии в Java 341 Безопасность на транспортном уровне 342 Безопасность на уровне 343 Шифрование документов 344 Цифровая подпись документа 349 Средства Java для шифрования XML 352 Безопасность SOAP-посланий 357 Спецификация 359 Что дальше? 363 Содержание Глава 9. Развитие Web Services 364 Протокол SOAP 364 Описание на языке WSDL 365 Реестр UDDI 366 Фирменные разработки 366 Язык описания потоков работ WSFL 367 Деятельность организации WS-I , 376 Профиль WS-Basic 377 Что дальше? 380 Список литературы 382 Предметный указатель 384 Введение Уже несколько лет в Интернете и на страницах компьютерных журналов мелькает словосочетание "Web Services" ("Web-службы"). Это понятие бурно обсуждается специалистами, создаются рабочие группы и целые фирмы, занимающиеся Web Services, выходят программные продукты, публикуются статьи и книги. Буквальный перевод этих слов ничего не проясняет — вся "Всемирная паутина" только тем и занимается, что предоставляет сервисное обслуживание своим клиентам. Что же именно включают в себя Web Services? Объяснение придется начать издалека. Передача информации по компьютерным сетям должна удовлетворять двум противоречивым требованиям. Это надежность и скорость. Особенно важно обеспечить надежность связи и скорость передачи информации для компо- нентов распределенного приложения [10], работающих на разных машинах и часто на значительном удалении от друга. Распределенное приложе- ние должно выполняться как единое целое, без сбоев и задержек, как будто все оно целиком работает на одном компьютере. Надежность обеспечивается избыточностью информации: проверками по- ступающей информации, подтверждением ее получения, повторной переда- чей. Все эти приемы сильно загружают сеть и замедляют скорость пересыл- ки информации. Для увеличения скорости передачи информация сжимается и уплотняется. Придуманы изощренные способы кодирования, экономно использующие каждый бит. Сетевые протоколы задают правила формиро- вания сетевых пакетов, похожие на инструкции шифровальным отделам секретных служб. Сетевые приложения жестко привязываются к определен- ному протоколу, теряют переносимость, сфера их применения резко сужа- ется. Создаются различные технологии сетевого взаимодействия распреде- ленных компонентов: RPC (Remote Procedure Call), DCOM, (Remote Method Invocation), CORBA. Компьютерное сообщество разделилось, как человечество после Вавилон- ского столпотворения. Технологии RPC, DCOM, RMI плохо стыкуются друг с другом. Распределенное приложение приходится строить на основе только какой-то одной технологии. Это сильно ограничивает область его применения и затрудняет включение в приложение новых компонентов. Введение 9 Технология Web Services создана фирмами IBM, Microsoft и UserLand для того, чтобы объединить компьютерный мир. Эта технология отказалась от упаковки и сжатия информации и предлагает прямо противоположный под- ход — по сети посылается простой "плоский" текст, записанный в байтовой кодировке ASCII, Latin СР866, СР1251, или в кодировках Unicode: UTF-8, UTF-16. Этим сразу решается проблема переносимости сетевой ин- формации — любой сервер легко прочитает обычный текст. Для выявления структуры пересылаемых документов их записывают на языке XML (extensible Markup Language, расширяемый язык разметки). Это не сужает область распространения документов, поскольку любой сервер в состоянии понять язык XML. Надо сделать только одно — стандартизировать структу- ру документа XML. Для этого в технологии Web Services разработан специ- альный протокол SOAP (Simple Object Access Protocol). Сообщение, запи- санное на языке XML по правилам протокола SOAP, может принять и об- работать любая Web-служба, на каком бы языке программирования она ни была написана, и в какой бы операционной системе она ни работала. Второе предложение технологии Web Services — использовать для передачи сообщений, написанных по правилам протокола SOAP, только самый рас- пространенный в Интернете, общедоступный и простой протокол HTTP (HyperText Transfer Protocol). Сервер, работающий по протоколу HTTP, можно легко развернуть на любой машине. Информация, предназначенная для HTTP-сервера, пропускается практически всеми брандмауэрами, что тоже удобно для распределенных приложений. Это предложение выполняется не столь строго. Web-службы могут взаимо- действовать и по почтовому протоколу SMTP (Simple Mail Transfer Protocol), и непосредственно транспортному протоколу TCP (Transmission Control Protocol). запрещены и другие протоколы. Технология Web Services не остановилась на создании единого протокола пересылки сообщений. Она создала и средства описания Web-службы. Сер- вер, на котором установлена Web-служба, предоставляет всем желающим ее описание. Описание выполняется на специально разработанном языке WSDL (Web Services Description Language, язык описания Web-служб). Это еще одна реализация языка XML. Клиент, обращающийся к Web-службе, читает ее описание и формирует свой запрос. Интересно, что разработаны программы, которые по готовой Web-службе создают ее описание на WSDL. Еще интереснее то, что есть программы, создающие, наоборот, Web-службу по ее описанию, сделанному на языке WSDL. Для того чтобы клиент не обшаривал весь Интернет в поисках нужной Web- службы, создаются реестры, хранящие информацию о местоположении Web-служб вместе с описанием предоставляемых ими услуг. Правила реги- страции Web-службы в реестре, а также правила хранения информации в реестре определяются еще одной реализацией XML — спецификацией Введение (Universal Discovery, Description and Integration). Многие известные фирмы, в числе которых IBM, Microsoft, Hewlett Packard, SAP AG, содержат свои реестры UDDI. Клиенту достаточно обратиться к реестру, найти в нем подходящую Web-службу, выбрать из реестра контактную информацию Web-службы и запросить у нее нужные услуги. Итак, технология Web Services стоит на "трех китах" — протоколах и специ- фикациях SOAP, WSDL и UDDI. "Черепаха", на которой они стоят — это протокол HTTP. Имея такое надежное основание, Web Services уверенно плывут по безбрежному морю Интернета. Кроме этих основополагающих протоколов, есть еще несколько спецификаций, решающих вопросы, воз- никающие при практическом построении Web-служб, например, вопросы безопасности информации. Они вводятся в книге по мере возникновения решаемых ими вопросов. Для быстрого развития Web Services нужны реализации спецификаций в виде библиотек и пакетов классов. Этим занимаются многие фирмы- производители программного обеспечения. Корпорация Microsoft поставля- ет программное обеспечение Web Services в рамках технологии Microsoft Описанию этой технологии посвящены многие публикации. На рус- ском языке уже вышла очень живо и доступно написанная книга Игоря Шапошникова [12]. Фирмы IBM, Sun Microsystems и многие другие компа- нии развивают Web Services как часть технологии Java. Поговорим об этом подробнее. Web Services и Java Создавая технологию Java, фирма Sun Microsystems, девиз которой: "Сеть — это компьютер", стремилась обеспечить создание межплатформенных при- ложений. Такое приложение пишется на любом языке, для которого есть компилятор в байт-коды Java. Приложение, откомпилированное в байт- коды, распространяется по Интернету и может быть выполнено на любом компьютере, имеющем JVM (Java Virtual Machine, виртуальная машина Java), без всяких дополнительных компиляций и инсталляций. При этом не надо компоновать приложение с библиотеками классов — библиотеки стан- дартизированы, они прилагаются к JVM и динамически компонуются во время выполнения приложения. Прекрасно! Не надо компилировать приложение под разные платформы, мучительно добиваясь совместимости, не надо подбирать под каждую плат- форму подходящие библиотеки классов, не надо публиковать в Интернете список версий приложения, разработанных под разные платформы, вместе со списком версий подобранных библиотек. Пользователю не надо выкачи- вать из Интернета "толстый" дистрибутив и необходимые версии библиотек и инсталлировать их на своем компьютере. Введение 11 Почему же технология Java не вытеснила все другие технологии Интернета? Почему мы до сих пор используем CGI, ASP, PHP, JavaScript, Perl, Python? Все дело в последнем условии — на каждом компьютере должна работать виртуальная машина Java. говоря уже о том, что она есть не на всяком компьютере, у JVM, как у всякого приложения, есть разные производители и разные версии, не полностью совместимые между собой. Кроме того, JVM должна быть полностью совместима с операционной системой и обо- рудованием того компьютера, на котором она работает. Выясняется, что технология Java только частично решает проблему совмес- тимости. Она переносит эту проблему с самих приложений на виртуальную машину Java. Конечно, решить проблему совместимости различных моделей JVM гораздо проще, но до сих пор это не сделано полностью. С появлением Web Services эта проблема отпадает сама собой. Web-служба, построенная по технологии Java, может работать под управлением любой JVM. Ее легко встроить в любой J2EE-cepBep (Java 2 Enterprise Edition) или Web-контейнер. • Более того, Java облегчает создание и работу Web Services. В технологии Java уже есть все средства для их быстрой стандартную по- ставку JDK (Java Developer Kit, пакет разработчика на Java) входят сред- ства генерации документов XML вместе со средствами разбора готовых документов XML. Их удобно применять для создания и чтения сообще- ний Web-службы. На языке Java написаны самые популярные анализаторы XML- документов, программы для их проверки и преобразования и другие го- товые средства работы с XML-документами . • Сервлеты и страницы JSP (Java Server Page) позволяют организовать Web Services с минимальными затратами усилий. Уже одних сервлетов вполне достаточно для создания полноценных Web-служб. • Компоненты EJB (Enterprise JavaBeans) дают возможность создать по- вторно применяемые модули Web-служб, а также связать их с базами данных и другими источниками информации. • Новые библиотеки классов, специально разработанные для создания Web Services, предоставляют готовые компоненты Web-служб. Очень час- то можно просто собрать Web-службу из готовых компонентов. • Во все средства быстрой разработки (RAD) и интегрированные среды разработки (IDE, Integrated Development Environment) на языке Java уже встроены "мастера", собирающие Web-службу несколькими щелчками Таким образом, технология Java прекрасно сочетается с технологией Web Services. Поэтому можно прийти к выводу, что дальнейшее развитие Web Введение Services будет тесно связано с Java. Эта книга знакомит вас с Java Web Services — самой мощной ветвью технологии Web Services. Структура книги Основной язык, постоянно используемый при создании Web Services — это язык XML. Поэтому в главе 1 подробно изложены все необходимые конст- рукции XML и его реализаций. Особенно подробно изложен язык XSD (XML Schema Definition Language, язык определения схем XML), описы- вающий элементы документа. Это первое описание языка XSD, сделанное на русском языке. Кроме того, в главе 1 подробно рассматриваются интерфейсы и классы Java, предназначенные для чтения, анализа и преобразования документов XML, a также готовые инструментальные средства, реализующие эти интерфейсы, и использующие эти классы. Глава 2 посвящена описанию работы Web Services на конкретных примерах. Прочитав эту главу, вы получите полное представление о структуре Web Services, механизмах их работы, поймете, как создаются Web-службы и как клиенты используют их услуги. Здесь приведено строгое определение Web Services и его реализаций различными фирмами-производителями средств создания Web-служб. Дан обзор наиболее распространенных пакетов клас- сов, на которых основаны Web Services, и разобраны наиболее популярные инструментальные средства. Здесь же описывается средство описания Web- служб — язык WSDL — и средство регистрации Web-служб в Интернете — язык UDDI. Прочитав главу 2, вы получите полное представление о Web Services и смо- жете свободно ориентироваться в публикациях, посвященных Web-службам. Для создания Web-служб нужны более глубокие сведения. В главах 3, 4 и 5 подробно рассматриваются новейшие версии "трех китов", на которых стоят Web Services — протоколов SOAP, WSDL и UDDI. Здесь же приведены про- граммные средства, реализующие эти протоколы, показаны приемы их применения, приведены многочисленные примеры. К этим главам примыкает глава 6, в которой разобраны внутренние меха- низмы Java Web Services. Прочитав эту главу, вы поймете, как технология Java реализует протоколы и спецификации Web Services. Освоив эти меха- низмы, вы сможете изменять исходные тексты используемых вами про- граммных продуктов, добиваясь полного решения ваших задач, или само- стоятельно создавать реализации Java Web Services. Большинство Web-служб, созданных с применением Java, работает в составе серверов приложений. Серверы приложений, как правило, реализуют ин- Введение терфейсы, входящие в состав J2EE. Правила встраивания Web-служб в J2EE и особенности их работы в составе J2EE-cepBepa изложены в главе 7. Про- читав эту главу, вы поймете, какое место занимают Web-службы среди дру- гих компонентов J2EE-cepBepa приложений, и как Web-службы взаимодей- ствуют с другими компонентами сервера. Кроме того, здесь рассказано, как установить готовую Web-службу в приложений. В Web-технологиях важное место занимают вопросы безопасности. Понача- лу Web Services не рассматривали их, предпочитая переложить эти вопросы на серверы, содержащие Web-службы, и на нижележащие протоколы. Очень скоро оказалось, что от проблемы безопасности не уйти, и в технологию Web Services были введены спецификации, обеспечивающие безопасность предоставления Web-услуг. Они обсуждаются в главе 8. На момент написа- ния книги выходили только черновые версии этих спецификаций. Поэтому глава 8 носит обзорный характер. Наконец, глава 9 содержит обзор новейших веяний в технологии Web Services и позволяет проследить возможные пути ее дальнейшего развития. ГЛАВА 1 Обработка документов XML В развитии Web-технологии огромную роль сыграл язык HTML (HyperText Markup Language, язык разметки гипертекста) . Любой человек, совсем не знакомый с программированием, мог бы за полчаса понять принцип метки текста и за пару дней изучить теги HTML. Пользуясь простейшим текстовым редактором он мог бы написать свою страничку HTML, тут же посмотреть ее в своем браузере, испытать чувство глубокого удовлетворе- ния, и гордо выставить в Интернете свой шедевр. Замечательно! Не надо месяцами изучать запутанные языки программиро- вания, явно предназначенные только для яйцеголовых "ботаников", осваи- вать сложные алгоритмы, возиться с компиляторами и отладчиками, раз- множать свое творение на дисках. Очень скоро появились текстовые редак- торы, размечающие обычный "плоский" текст тегами HTML. Разработчику осталось только поправлять готовую страницу HTML, созданную таким ре- дактором. Простота языка HTML привела к взрывному росту числа сайтов, пользова- телей Интернета и авторов многочисленных Web-страничек. Обычные поль- зователи компьютеров ощутили себя творцами, получили возможность зая- вить о себе, высказать свои мысли и чувства, найти в Интернете своих еди- номышленников. Ограниченные возможности языка HTML быстро перестали удовлетворять поднаторевших разработчиков, почувствовавших себя "профи". Набор тегов языка HTML строго определен и должен одинаково пониматься всеми брау- зерами. Нельзя ввести дополнительные теги или указать браузеру, как сле- дует отобразить на экране содержимое того или иного тега. Введение таблиц стилей CSS (Cascading Style Sheet) и включений на стороне сервера SSI (Server Side Include) лишь ненадолго уменьшило недовольство разработчи- Глава 1. Обработка документов XML 15 ков. Профессионалу всегда не хватает средств разработки, он постоянно испытывает потребность добавить к ним какое-то свое средство, позволяю- щее воплотить все его фантазии. Такая возможность есть. Еще в 1986 году стал стандартом язык создания языков разметки SGML (Standard Generalized Markup Language), с помощью которого и был создан язык HTML. Основная особенность языка SGML заключается в том, что он позволяет создать новый язык разметок, опреде- лив набор тегов создаваемого языка. Каждый конкретный набор тегов, соз- данный по правилам SGML, снабжается описанием DTD (Document Definition) — определением типа документа, разъясняющим связь тегов меж- ду собой и правила их применения. Специальная программа — драйвер принтера или SGML-браузер — руководствуется этим описанием для печати или отображения документа на экране дисплея. В это же время выявилась еще одна, самая важная область применения языков разметки — поиск и выборка информации. В настоящее время подавляющее большинство информации хранится в реляционных базах данных. Они удобны для хранения и поиска информации, представимой в виде таблиц: анкет, ведомостей, списков и тому подобного, но неудоб- ны для хранения различных документов, планов, отчетов, статей, книг, не представимых в виде таблицы. Тегами языка разметки можно задать структурную, а не визуальную разметку документа, разбить документ на главы, параграфы и абзацы или на какие-то другие элементы, выделить важные для поиска участки документа. Легко написать программу, ана- лизирующую размеченный такими тегами документ и извлекающую из него нужную информацию. Язык SGML оказался слишком сложным, требующим тщательного и объе- мистого описания элементов. Он применяется только в крупных проектах, например, для создания единой системы документооборота крупной фир- мы. Скажем, man-страницы Solaris Operational Environment написаны на специально сделанной реализации языка SGML. Золотой серединой между языками SGML и HTML стал язык разметок XML. Это подмножество языка SGML, избавленное от излишней сложно- сти, но позволяющее разработчику Web-страниц создавать свои собствен- ные теги. Язык XML достаточно широк, чтобы можно было создать все нужные теги, и достаточно прост, чтобы можно было быстро их описать. Создавая описание документа на языке XML надо, прежде всего, продумать структуру документа. Приведем пример. Пусть мы решили, наконец, упоря- дочить свою записную книжку с адресами и телефонами. В ней записаны фамилии, имена и отчества родственников, сослуживцев и знакомых, дни их рождения, их адреса, состоящие из почтового индекса, города, улицы, дома и квартиры, и телефоны, если они есть: рабочие и домашние. Мы Разработка Web-служб средствами Java придумываем теги для выделения каждого из этих элементов, продумываем вложенность тегов и получаем структуру, показанную в листинге 1.1. Листинг_1.1._Пример_XML-документа'>Листинг 1.1. Пример XML-документа notebook SYSTEM "ntb.dtd"> 23-15 Глава 1. Обработка документов XML 77 17 Документ XML начинается с необязательного пролога, состоящего из двух частей. В первой части пролога — объявлении XML (XML declaration), — записанной в первой строке листинга 1.1, указывается версия языка XML, необязатель- ная кодировка документа и отмечается, зависит ли этот документ от других документов XML По умолчанию принимается кодировка UTF-8. Все элементы документа XML обязательно должны содержаться в корневом элементе (root element), в листинге 1.1 это — элемент Declaration). путайте с определением типа документа DTD!) Имя доку- мента записывается после слова DOCTYPE. Объявление типа документа запи- сано во второй строке листинга 1.1. В этой части пролога после слова DOCTYPE и имени документа в квадратных скобках идет описание DTD: [ Сюда заносится описание DTD ]> Очень часто описание DTD составляется сразу для нескольких документов XML. В таком случае его удобно записать отдельно от документа. Если опи- сание DTD отделено от документа, то во второй части пролога вместо квад- ратных скобок записывается одно из слов SYSTEM ИЛИ За словом SYSTEM идет (Universal Resource Identifier, универсальный идентифика- 18 Разработка Web-служб средствами Java тор ресурсов) файла с описанием DTD, а за словом PUBLIC, кроме того, можно записать дополнительную информацию. XML-документ состоит из элементов. Элемент начинается открывающим тегом, потом идет необязательное тело элемента и в заключении — закры- вающий тег: элементаЗакрывающий тег> Закрывающий тег содержит наклонную черту, после которой повторяется имя открывающего тега. Язык XML, в отличие от языка HTML, требует обязательно записывать за- крывающие теги. Если у элемента нет тела и закрывающего (empty — пустой элемент), то его открывающий тег должен заканчиваться символами "/>", например: Сразу надо сказать, что язык XML, в отличие от HTML, различает регистры букв. Из листинга 1.1 видно, что элементы документа XML могут быть вложе- ны друг в друга. Надо следить за тем, чтобы элементы не пересекались, а полностью вкладывались друг в друга. Как уже говорилось выше, все элементы, составляющие документ, вложены в корневой элемент этого документа. Тем самым документ наделяется структурой дерева вложен- ных элементов. На рис. 1.1 показана структура адресной книжки, опи- санной в листинге 1.1. work-phone home-phone Рис. Дерево элементов документа XML У открывающих тегов XML могут быть атрибуты. Например, имя, отчество и фамилию можно записать как атрибуты first, second и surname тега В отличие от языка HTML в языке XML значения атрибутов обязательно надо заключать в кавычки или апострофы. Глава 1. Обработка документов XML 19 Атрибуты удобны для описания простых значений. У каждого гражданина России, уважающего режим, обязательно есть одно имя, одно отчество и одна фамилия. Их удобно записывать атрибутами. Но у гражда- нина России может быть несколько телефонов, поэтому их номера удобнее оформить как элементы и вложенные в эле- мент а не атрибуты открывающего тега За- метьте, что элемент с атрибутами пустой, у него нет тела, следова- тельно, не нужен закрывающий тег. Поэтому тег с атрибутами за- вершается символами "/>". В листинге 1.2 приведена измененная адресная книжка. Листинг Пример XML-документа с атрибутами в открывающем теге version="1.0" notebook SYSTEM "ntb.dtd"> 23-15 67 20 Разработка Web-служб средствами Java 17 Атрибуты открывающего тега удобны и для указания типа элемента. На- пример, мы не уточняем, в городе живет наш родственник, в поселке или деревне. Можно ввести в тег , , В описании указываются только самые общие признаки логической взаимо- связи элементов и их тип. Элемент • Элемент содержит ровно один элемент нуль или не- сколько элементов и нуль или один элемент • Элемент пустой. • В открывающем теге три атрибута first, second, surname, значе- ния которых — строки • Элемент содержит по одному элементу Глава 1. Обработка документов XML 21 • Элементы • Элемент • У открывающего тега принимающий одно из трех значений город, поселок или деревня. Зна- чение по умолчанию город. Необязательный элемент содержит нуль или более элемен- тов И • Элементы |