Пишем содержимое
Итак, структура описана. Теперь при написании собственно содержимого мы будем
вынуждены следовать собственным правилам. Если что-то будет не так, нас грубо
одернут. Пишем содержимое (см. листинг 2). Наверное, все понятно.
Только одно небольшое замечание: каждый тег должен иметь закрывающего «напарника»,
порядок появления тегов должен строго соблюдаться (т. е. допустимо <p1>
<p2> 123 </p2> </p1> , но не <p1> <p2> 123 </p1>
</p2> ), содержимое должно соответствовать установленным в DTD правилам,
регистр букв должен соблюдаться как уголовный кодекс.
Что осталось сделать после того, как мы собрали вместе DTD и содержимое (в
файле с расширением XML)? Конечно же, написать в самом верху объявление, что это
за документ:
<?xml version=”1.0”?>
Теперь кто угодно догадается, что это файл XML (версии 1.0). Но как нам проверить,
что все сделано правильно? Потребуется скачать из Интернета какую-либо программу
проверки правильности XML-кода (так называемый валидатор). Например, xmlint с
сайта msdn.microsoft.com.
Подобные программы будут вам очень полезны.
Небольшое лирическое отступление. Строго говоря, не требуется включать в каждый
XML-документ или подключать к нему внешний файл с DTD (хотя и весьма рекомендуется).
Это некоторое послабление для ленивых. Таким образом, существует две разновидности
XML-документов: правильно оформленный (well-formed), в котором DTD нет, но в остальном
он подчиняется правилам формирования XML, и действительный (valid) документ —
«полный», т. е. с DTD, в соответствии с которым он может быть проверен. Когда
будете выбирать себе валидатор (какое словосочетание!), обратите на это внимание
— программы проверки могут работать, например, только с well-formed документами.
Прекрасно, наше творение прошло проверку. Но как насладиться плодами труда?
Очень просто: запускаем Internet Explorer 5 и загружаем в него наш документ. Что
мы видим? Нечто странное — почти то же самое, что и в Notepad ( рис. 1). Причина проста — никто не сказал
броузеру, какой конечный вид мы хотим придать документу. Для этого есть старое
проверенное средство — каскадные таблицы стилей (CSS). Их-то мы и применим.
Быстренько создадим файл VI.CSS (см. листинг 3). Здесь особых комментариев,
вроде бы, не нужно. Пожалуй, необходимо лишь уточнить, что у нас есть два тега
<title> , но один из них применяется только внутри тега <chapter>
. Как их различить? Смотрите первую и четвертую строчки. Все очевидно.
Теперь добавим в наш основной файл строчку (сразу после указания версии XML):
<?xml:stylesheet type=”text/css” href=”vi.css”?>
И смотрим результат в броузере ( рис. 2). Радуемся, а затем задумываемся
над вопросом: если CSS были разработаны для HTML, то неужели они так легко и просто
подходят для XML? Естественно, нет. Такой подход чреват массой проблем. В частности,
XML-документы плохо «ложатся» в структуру «каскадирования», характерную для CSS.
Кроме того, каскадные таблицы стилей не предназначены для генерации текстов (они
только задают оформление), не способны работать с двунаправленным или вертикальным
текстом и т. д. Естественным выходом из такой ситуации было взять за основу средства
представления данных, разработанные для SGML, и адаптировать их к XML.
Действительно, существует DSSSL (Document Style Semantics and Specification
Language, язык семантики и спецификации стиля документа) — большой свод правил
преобразования и стилевого оформления SGML-документов. Сначала разработчики создали
DSSSL-O (online-версию), а затем и язык XSL (eXtensible Style Language) — расширяемый
язык стиля. Строго говоря, XSL задает не только (и не столько) представление XML-документа,
но и занимается переводом документов из одного DTD в другой. Таким образом, мы
можем на лету преобразовать наш справочник в HTML, понятный броузеру.
Создадим под именем VI.XSL еще один файл (см. листинг 4). Что можно в нем отметить?
Во-первых, это XML-документ. Во-вторых фактически это шаблон HTML-документа, ряд
полей которого надо заполнить. В-третьих, заполнением будет заниматься сам броузер,
руководствуясь инструкциями вида for—each (т. е. для любого элемента, расположенного
между соответствующими тегами), value-of select=”123” (выбрать значение
тега с именем 123). Кроме того, обратите внимание на вторую строку (в ней задается
используемое пространство имен, о котором я еще упомяну) и на теги, заканчивающиеся
символами />. Это так называемые пустые теги. Их аналогом в HTML может служить,
например, <hr>. Очевидно, что конструкция вида <hr> содержимое </hr>
абсурдна. Но в XML все теги должны быть парными. Соответственно пустой тег тоже
будет «закрыт», но так: <тег />. Кроме того, поменяем в исходном документе
(файл с расширением XML) вторую строку на:
<?xml-stylesheet type=”text/xsl” href=”vi.xsl”?>
Затем запускаем броузер и наслаждаемся мощью XML (рис. 3). Добавлю только, что в XSL заложены
огромные возможности по поиску и фильтрации нужных фрагментов XML-документов.
Теперь можно будет забыть о поиске словосочетаний средствами броузера!