Перейдем к делу…
Прежде всего, читая различные руководства по языку XML, не обращайте внимания
на заявления типа «если вы знаете HTML, вы легко разберетесь с новым языком разметки».
В данном случае лучше как раз забыть все, что вы знали. Кроме, пожалуй, языка
программирования Pascal. Это связано с тем, что в основе XML лежит совершенно
другая идеология. Это язык описания структуры документа (и не более того!) — что-то
вроде DDL (язык определения данных) в SQL. Pascal был мной упомянут как наиболее
строгий язык с обязательной типизацией данных. В XML вы с этим тоже столкнетесь.
Главной же новизной для большинства Web-мастеров и программистов станет идея о
возможности создания полностью собственного языка.
Действительно, в случае с HTML, PostScript, любыми языками программирования
все уже придумано за вас. Остается только грамотно расставлять имеющиеся ключевые
слова (я, конечно, утрирую). С XML вы вольны придумывать свой собственный язык.
Да, вы можете создать любые теги, какие только взбредут в голову! Этим-то мы сейчас
и займемся.
Попробуем создать заготовку для небольшого справочника, например по командам
редактора VI (он имеет все шансы сравниться по продолжительности жизни с линкором
в мирное время). Начнем мы, естественно, с описания структуры нашего документа.
Для этого мы создадим (см. листинг 1) так называемое определение
типа документа — DTD (Document Type Definition). Проще всего воспринимать его
как описание пользовательских типов данных в любом типизированном языке программирования.
Как вы, наверное, уже догадались, в первой и последней строках расположены комментарии.
Выглядят они так же, как и в HTML, и ведут себя, как обычные комментарии в любом
языке. Во второй строке говорится, что все заключенное между открывающей и закрывающей
(предпоследняя строка) квадратными скобками будет нашим описанием типа документа.
Этому описанию присвоено имя guide. В третьей строке объявляется сущность (entity)
с именем author. Термин «сущность» (в других переводах «единица») может здорово
сбить с толку. На самом деле это своего рода объявление константы, или, точнее,
аналог директивы препроцессора #define в языке C. Еще проще: если далее в документе
мы напишем &author; (именно так, со знаками «&» в начале и «;» в конце),
то при разборе его будет использоваться определенная при объявлении данной сущности
последовательность символов (в нашем случае — Smirnov Ilia). И все!
Далее (в четвертой строке) объявляется корневой элемент документа guide и говорится,
что он будет состоять в свою очередь из обязательно присутствующего элемента title,
необязательного элемента notes и одного или более элементов chapter. Что такое
элементы? Это все, что содержится между открывающим и закрывающим тегами (в данном
случае <guide> и </guide> ), т. е. наше смысловое содержание документа
или его дальнейшая уточняющая разметка. Внешний вид тегов напоминает HTML-теги,
что и послужило основой для заявлений о легкости изучения XML. Элементы должны
будут появляться именно в том порядке, который задан. Способ их описания, скорее,
близок к регулярным выражениям UNIX: те же символы «*», «?», «+», и скобки для
указания того, сколько раз какой элемент должен появиться.
Затем (в пятой строке) мы говорим, что элемент title будет содержать только
разобранные символьные данные (parsed character data), т. е. обычный текст, но
не элементы разметки. Напротив, элемент notes может содержать все что угодно —
никаких ограничений. Естественно, такими объявлениями не стоит злоупотреблять,
иначе вместо строгой «паскалевской» программы мы получим Visual Basic с одними
только Variant-переменными.
Теперь, надеюсь, дальнейшее описание структуры документа понятно. Например,
глава будет состоять из текстовых заголовка и описания и структурированных пунктов.
Надо только пояснить восьмую и девятую строки. В них объявляется список атрибутов
элемента chapter. На самом деле упомянут только один обязательный атрибут number.
Сразу замечу, что выглядеть в тексте содержимого он будет, как привычный атрибут
HTML-тега (например, <chapter number=”1”> ).