<?xml version="1.0" encoding="windows-1251" ?>
<article>
<author id="1" />
<title>Урок 6. Работаем с XML</title>
<body>
<para>Представим, что разработчикам позволено придумывать любые теги
с любыми атрибутами. То есть они сами могут определять,
что означает тот или иной выдуманный тег или атрибут.</para>
<para>Такой код будет содержать данные, …</para>
</body>
<links>
<link href="HTTP://www.parser.ru/docs/lang/xdocclass.htm">Класс xdoc</link>
<link href="HTTP://www.parser.ru/docs/lang/xnodeclass.htm">Класс xnode</link>
</links>
</article>
…но не их форматирование. Подготовкой данных может заняться один человек, а форматированием - другой. Им достаточно договориться об используемых тегах - и можно приступать к работе… одновременно.
Идея эта не нова, существовали многочисленные библиотеки обработки шаблонов, а многие создавали собственные. Библиотеки были несовместимы между собой, зависели от используемых средств скриптования, порождая разобщенность разработчиков и необходимость тратить силы на изучение очередной библиотеки вместо того, чтобы заняться делом.
Однако прогресс не стоит на месте, и сейчас мы имеем не зависящие от средства скриптования стандарты XML и XSLT, позволяющие нам реализовать то, что мы только что представляли. А также стандарты DOM и XPath, открывающие для нас еще больше возможностей.
Parser полностью поддерживает все эти стандарты.
А сейчас самое время открыть выбранную вчера в книжном магазине книгу, описывающую XML и XSLT, и использовать ее как справочни.
Посмотрим, как можно преобразовать приведенную статью из XML в HTML.
Запишем текст из начала статьи в файл article.xml
И создадим файл article.xsl, в котором определим выдуманные нами теги:
# выдача результата в HTML-виде
^transformedDoc.string[
$.method[html]
]
Первой строкой мы загружаем XML-файл, получая в sourceDoc его DOM-представление. Конструкция похожа на загрузку таблицы: ^table::load[…]. Только в этот раз мы загружаем не таблицу (получая объект класса table), а XML-документ (получаем объект класса xdoc). Второй строкой мы преобразуем входной документ по шаблону article.xsl. Из входного документа получаем выходной, применяя XSLT-преобразование, описанное в шаблоне. Последней строкой мы выдаем пользователю текст выходного документа в формате HTML (параметр method со значением html).
Здесь можно задать все параметры, допустимые для тега <xsl:output … />.
Рекомендуем также установить режим «без отступов» (задав параметр indent со значением no:$.indent[no]), чтобы избежать известной проблемы с пустым местом перед</td>.
Обратившись теперь к этой странице, пользователь получит результат преобразования:
<html>
<head><title>Урок 6. Работаем с XML</title></head>
<body>
<p>Представим, что разработчикам позволено придумывать любые теги
с любыми атрибутами. То есть они сами могут определять,
что означает тот или иной выдуманный тег или атрибут.
</p>
<p>Такой код будет содержать данные, …
</p>
Ссылки по теме:
<ul>
<li><a href="HTTP://www.parser.ru/docs/xdocclass.htm">Класс xdoc</a></li>
<li><a href="HTTP://www.parser.ru/docs/xnodeclass.htm">Класс xnode</a></li>
</ul>
</body>
</html>
Как видим, тег <author … /> никак не был определен, как следствие, информация об авторе статьи не появилась в выходном HTML. Со временем, когда будет решено, где и как будут показываться данные об авторах, достаточно будет дополнить шаблон - исправлять данные статей не потребуется.
Внимание: если нужно сделать так, чтобы посетители сайта не имели доступа к XML- и XSL-файлам, эти файлы следует хранить вне веб-пространства (^xdoc::create[/../directory_outside_of_web_space/article.xml]) или запретить к ним доступ средствами веб-сервера (пример запрета доступа к p-файлам описан в разделе: «Установка Parser на веб-сервер Apache. CGI-скрипт»).
Подведем итоги шестого урока.
Что мы сделали: создали заготовку для публикации информации в формате XML с последующим XSLT-преобразованием в HTML.
как загружать XML, делать XSLT-преобразования, выводить объекты класса xdoc в виде HTML.
Что надо запомнить: купить и прочесть книжку по XML, XSLT и DOM.
Что делать дальше: читать эту книжку и экспериментировать с примерами из нее, радуясь тому, что на свете есть хорошие стандарты. А также почитать о postprocess и придумать, как его приспособить, чтобы обращение к XML-файлу вызывало его преобразование в HTML.