Главная » Java, Web, XML » Обработка документов XML

0

В развитии Web-технологии огромную роль сыграл язык HTML (HyperText Markup Language, язык разметки гипертекста) . Любой человек, совсем не знакомый с программированием, мог бы за полчаса понять принцип разметки текста и за пару дней изучить теги HTML. Пользуясь простейшим текстовым редактором он мог бы написать свою страничку HTML, тут же посмотреть ее в своем браузере, испытать чувство глубокого удовлетворения, и гордо выставить в Интернете свой шедевр.

Замечательно! Не надо месяцами изучать запутанные языки программирования, явно предназначенные только для яйцеголовых "ботаников", осваивать сложные алгоритмы, возиться с компиляторами и отладчиками, размножать свое творение на дисках. Очень скоро появились текстовые редакторы, размечающие обычный "плоский" текст тегами HTML. Разработчику осталось только поправлять готовую страницу HTML, созданную таким редактором.

Простота языка HTML привела к взрывному росту числа сайтов, пользователей Интернета и авторов многочисленных Web-страничек. Обычные пользователи компьютеров ощутили себя творцами, получили возможность заявить о себе, высказать свои мысли и чувства, найти в Интернете своих единомышленников.

Ограниченные возможности языка HTML быстро перестали удовлетворять поднаторевших разработчиков, почувствовавших себя "профи". Набор тегов языка HTML строго определен и должен одинаково пониматься всеми браузерами. Нельзя ввести дополнительные теги или указать браузеру, как следует отобразить на экране содержимое того или иного тега. Введение таблиц стилей CSS (Cascading Style Sheet) и включений на стороне сервера SSI (Server Side Include) лишь ненадолго уменьшило недовольство разработчиков. Профессионалу всегда не хватает средств разработки, он постоянно испытывает потребность добавить к ним какое-то свое средство, позволяющее воплотить все его фантазии.

Такая возможность есть. Еще в 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 надо, прежде всего, продумать структуру документа. Приведем пример. Пусть мы решили, наконец, упорядочить свою записную книжку с адресами и телефонами. В ней записаны фамилии, имена и отчества родственников, сослуживцев и знакомых, дни их рождения, их адреса, состоящие из почтового индекса, города, улицы, дома и квартиры, и телефоны, если они есть: рабочие и домашние. Мы

придумываем теги для выделения каждого из этих элементов, продумываем вложенность тегов и получаем структуру, показанную в листинге 1.1.

Листинг 1.1. Пример XML-документа

<?xml version="l.О" encoding="Windows-1251"?> <!doctype notebook SYSTEM "ntb.dtd">

<notebook>

<person>

<name>

<first-name>HBaH</first-name> <second-name>rieTpoBM4</second-name> <surname>CnflopoB</surname> </name>

<birthday>25.03.1977</birthday>

<address>

<street>CaflOBaH, 23-15</street> <city>ypioroiHCK</city>

<zip>123 45 6</zip> </address>

<phone-list>

<work-phone>2654321</work-phone> <work-phone>2 654 023</work-phone> <home-phone >3 4 5 67 81</home-phone>

</phone-list>

</person> <person> <name>

<first-name>MapnH</first-name> <second-name>neTpoBHa</second-name>

<surname>CnflopoBa</surname>

</name>

<birthday>17.05.1969</birthday>

<address>

<street>HroflHaH, 17</street> <city»KMepHHKa</city>

<zip>23 45 6K/zip> </address>

<phone-list>

<home-phone>2334455</home-phone> </phone-list>

</person>

</notebook>

Документ XML начинается с необязательного пролога, состоящего из двух частей.

В первой части пролога — объявлении XML (XML declaration), — записанной в первой строке листинга 1.1, указывается версия языка XML, необязательная кодировка документа и отмечается, зависит ли этот документ от других документов XML (standalone="yes"/"no")- По умолчанию принимается кодировка UTF-8.

Все элементы документа XML обязательно должны содержаться в корневом элементе (root element), в листинге 1.1 это — элемент <notebook>. Имя корневого элемента считается именем всего документа и указывается во второй части пролога, называемой объявлением типа документа (Document Туре Declaration). (Не путайте с определением типа документа DTD!) Имя документа записывается после слова DOCTYPE. Объявление типа документа записано во второй строке листинга 1.1. В этой части пролога после слова DOCTYPE и имени документа в квадратных скобках идет описание DTD:

<!DOCYPE notebook [ Сюда заносится описание DTD ]>

Очень часто описание DTD составляется сразу для нескольких документов XML. В таком случае его удобно записать отдельно от документа. Если описание DTD отделено от документа, то во второй части пролога вместо квадратных скобок записывается одно из слов system или public. За словом system идет URI (Universal Resource Identifier, универсальный идентификатор ресурсов) файла с описанием DTD, а за словом PUBLIC, кроме того, можно записать дополнительную информацию.

XML-документ состоит из элементов. Элемент начинается открывающим тегом, потом идет необязательное тело элемента и в заключении — закрывающий тег:

соткрывающий тег>тело элемента</Закрывающий тег>

Закрывающий тег содержит наклонную черту, после которой повторяется имя открывающего тега.

Язык XML, в отличие от языка HTML, требует обязательно записывать закрывающие теги. Если у элемента нет тела и закрывающего тега (empty — пустой элемент), то его открывающий тег должен заканчиваться символами "/>", например:

<br />

Сразу надо сказать, что язык XML, в отличие от HTML, различает регистры букв.

Из листинга 1.1 видно, что элементы документа XML могут быть вложены друг в друга. Надо следить за тем, чтобы элементы не пересекались, а полностью вкладывались друг в друга. Как уже говорилось выше, все элементы, составляющие документ, вложены в корневой элемент этого документа. Тем самым документ наделяется структурой дерева вложенных элементов. На рис. 1.1 показана структура адресной книжки, описанной в листинге 1.1.

Рис. 1.1. Дерево элементов документа XML

У открывающих тегов XML могут быть атрибуты. Например, имя, отчество и фамилию можно записать как атрибуты first, second и surname тега <name>;

<name first="№aH" second="neTpoBM4" зигпате="Сидоров" />

В отличие от языка HTML в языке XML значения атрибутов обязательно надо заключать в кавычки или апострофы.

Атрибуты удобны для описания простых значений. У каждого гражданина России, уважающего паспортный? режим, обязательно есть одно имя, одно отчество и одна фамилия. Их удобно записывать атрибутами. Но у гражданина России может быть несколько телефонов, поэтому их номера удобнее оформить как элементы                          и                           вложенные в эле

мент <phone-list>, а не атрибуты открывающего тега <phone-list>. Заметьте, что элемент <name> с атрибутами пустой, у него нет тела, следовательно, не нужен закрывающий тег. Поэтому тег <name> с атрибутами завершается символами "/>". В листинге 1.2 приведена измененная адресная книжка.

Листинг 1.2. Пример XML-документа с атрибутами в открывающем теге

<?xml version="1. 0" encoding="Windows-1251"?> <!DOCTYPE notebook SYSTEM "ntb.dtd">

<notebook> <person>

<name f irst="I4BaH" second="IleTpoBM4" зигпате="Сидоров"

<birthday>25.03.1977</birthday>

<address>

<street>CaflOBaH, 23-15</street>

<city>ypronnHCK</city>

<zip>123456</zip>

</address>

<phone-list>

<work-phone>2654321</work-phone> <work-phone>2654023</work-phone> <home-phone>34 5 67 81</home-phone> </phone-list>

</person>

<person>

<name first="Mapi«[" second= "Петровна" surname="Сидорова" />

<birthday>17.05.1969</birthday>

<address>

<street>HroflHaH, 17</street> <city>Жмepинкa</city>

<zip>23456K/zip> </address>

<phone-list>

<home-phone>2334455</home-phone>

</phone-list>

</person> </notebook>

Атрибуты открывающего тега удобны и для указания типа элемента. Например, мы не уточняем, в городе живет наш родственник, в поселке или деревне. Можно ввести в тег <city> атрибут type, принимающий одно из значений: город, поселок, деревня. Например:

<city type="ropofl">MocKBa</city>

Для описания адресной книжки нам понадобились открывающие теги

<notebook>, <person>, <name>, <address>, <street>, <city>, <zip>, <phone-

и соответствующие им закрывающие теги, помеченные наклонной чертой. Теперь необходимо дать их описание. В описании указываются только самые общие признаки логической взаимосвязи элементов и их тип.

? Элемент <notebook> может содержать в себе только нуль или больше элементов <person>.

?         Элемент <person> содержит ровно один элемент <name>, нуль или несколько элементов <address> и нуль или один элемент <phone-list>.

?           Элемент <name> пустой.

?         В открывающем теге <name> три атрибута first, second, surname, значения которых — строки символов.

?         Элемент <address> содержит по одному элементу <street>, <city> и <zip>.

?           Элементы <street> и <city> содержат по одной текстовой строке.

?           Элемент <zip> содержит одно целое число.

?         У открывающего тега <city> есть один необязательный атрибут type, принимающий одно из трех значений город, поселок или деревня. Значение по умолчанию город.

? Необязательный элемент <phone-list> содержит нуль или более элементов <work-phone> И <home-phone>.

?         Элементы <work-phone> и <home-phone> содержат по одной строке, состоящей только из цифр.

Это словесное описание, называемое схемой документа XML, формализуется несколькими способами. Наиболее распространены два способа: можно сделать описание DTD, пришедшее в XML из SGML, или описать схему на языке XSD.

Литература:

Хабибуллин И. Ш. Разработка Web-служб средствами Java. — СПб.: БХВ-Петербург, 2003. — 400 с: ил.

По теме:

  • Комментарии