IZONE- http://www.izcity.com/- бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

XSL— зеркало для XML

Дмитрий Ситников

От CSS к XSL

В предыдущей статье «XML — это очень просто...» мы познакомились с некоторыми простыми выразительными средствами, которые можно использовать для визуализации документов XML. Напомню уважаемым читателям, что XML сам по себе является лишь универсальным языком для представления структурированных данных. Профессионалы говорят, что лучше хорошо уметь делать что-то одно, чем плохо — все понемногу. XML придерживается этого золотого правила. Он хорошо умеет лишь описывать предметную область (причем в обычном текстовом файле!), а вопросы визуализации предоставляет решать другим средствам, иногда специально для этого созданным.

Мы уже рассмотрели простой пример использования каскадных таблиц стилей (CSS), позволяющих превратить серый и невзрачный документ XML в приятную глазу картинку, радующую поразительным сходством со знакомыми до боли образами HTML. Несмотря на то, что таблицы CSS просты и удобны в обращении, их использование для визуализации документов XML не в полной мере согласуется с самим духом XML. Будучи расширяемым языком разметки, XML должен иметь в своем распоряжении средства визуализации, также обладающие способностью к расширению. С целью разработки таких средств был создан специальный расширяемый язык стилей (Extensible Styling Language, XSL), позволяющий творить чудеса, выходящие далеко за пределы возможностей таблиц CSS. Кроме форматирования как такового (что, в общем, под силу и CSS), XSL позволяет трансформировать документ, менять порядок показа элементов, осуществлять поиск и сортировку, добавлять фрагменты текста и совершать другие полезные и интересные действия.

Если XML в его «чистом» виде настолько прост и прозрачен, что люди, ознакомившись с основными принципами языка, часто недоумевают: «Как же я сам до этого не додумался?!» (к числу этих несчастных относится и Ваш покорный слуга), то XSL посложнее и похож больше на язык программирования, чем на язык разметки. Полностью сохраняя «классическую» структуру документа XML, документ XSL бывает заполнен длинными тэгами, в которых угадываются очертания страшных для непрограммистов операторов цикла, условных операторов и некоторых конструкций, смутно напоминающих элементы SQL (SQL — структурированный язык запросов к таблицам баз данных). Не бойтесь этих монстров! Они не так страшны, как их рисуют создатели XSL. А теперь посмотрим на документы XSL поближе.

Чтобы лучше видеть документ

Уважаемый читатель, наверное, не очень расстроится, если я скажу ему, что для визуализации XML с помощью XSL нам понадобится Microsoft Internet Explorer 5.0. Мы уже использовали его в предыдущей статье, когда применяли таблицу CSS для презентации документа. Дело в том, что пока из всех доступных нам браузеров только Internet Explorer годится для наших целей. Вообще, что касается XML, компания Microsoft стремится быть «впереди планеты всей», внедряя поддержку XML во многие свои программные продукты. Стандарты XSL, предложенные консорциумом W3C, частично поддерживаются пятой версией Internet Explorer, однако не все и не полностью. Дело в том, что Microsoft Internet Explorer 5.0 увидел свет раньше, чем консорциум предложил те стандарты, которые действуют сейчас. В пятой версии обеспечена поддержка стандартов XSL, некоторые из них в настоящее время считаются устаревшими. Поэтому для практических целей нам придется загрузить и установить некоторые дополнительные программы, чтобы видеть документы XML в зеркале XSL неискаженными.

Прежде всего, скачаем файлы InstMsi.exe (Windows Installer, который, возможно, у Вас уже есть), msxml3.exe (parser) и XmlInst.exe (средство для замены старой версии анализатора новой). Для этого можно воспользоваться адресом http://msdn.microsoft.com/ или любыми другими адресами, которые Вам удастся обнаружить на сайте Microsoft.

Файл msxml3.exe представляет собой программу, устанавливающую новый анализатор (XML parser), в котором обеспечена поддержка современных международных стандартов XML и XSL. Прежде чем инсталлировать данную программу, нужно запустить InstMsi.exe, после чего начинать установку. Но если ограничиться этими действиями, желанного эффекта мы не добьемся, так как новая программа-анализатор msxml3.exe будет установлена в режиме side-by-side со старым анализатором. При работе с XML в этом случае по умолчанию будет вызываться старый анализатор, не соответствующий современным стандартам. Чтобы избежать этого, запустим программу XmlInst.exe, которая обеспечит автоматический вызов нового анализатора msxml3.exe при работе с документами XML. Важно запускать программы в указанной последовательности, чтобы не ошибиться. Должен заметить, что на сайтах Microsoft встречаются предупреждения о возможных ошибках, возникающих после запуска XmlInst.exe. По этому поводу могу сказать, что мне приходилось устанавливать новый анализатор XML на десятках компьютеров, и я ни разу не встречал серьезных проблем или ошибок. Если все сделано правильно, мы готовы к практической работе с документами XML/XSL.

Простое форматирование

Было бы совсем неловко, если бы язык XSL не включал в себя инструментов для простого форматирования документов. К счастью, все, что может HTML, доступно и для XSL. Более того, элементы HTML активно используются в документах XSL, а специфические конструкции XSL многократно усиливают выразительные возможности HTML, придавая процессу визуализации документов XML определенную гибкость.

Рассмотрим следующий документ XML:

В этом тексте нет почти ничего принципиально нового по сравнению с документом myFirstXML.xml, который мы рассматривали в статье «XML — это очень просто». В новом документе, конечно, содержатся новые тэги, но в том то и прелесть XML, что он позволяет нашей фантазии (в союзе со здравым смыслом) творить новые структуры данных. Кое-что действительно новое содержится в первых двух «декларативных» строках. В первой строке мы видим идентификатор стандартной кодировки символов Windows-1251. Без явного указания этой кодировки мы не сможем просмотреть наш документ в браузере, так как он содержит символы Кириллицы. Во второй строке декларируется связь нашего документа с таблицей стилей XSL, которую мы сейчас создадим. Сохраните приведенный выше документ в текстовом файле и дайте ему имя catastrophe.xml. Вы можете проверить синтаксическую корректность документа, удалив из него строку

и открыв его в Internet Explorer. При открытии файлов советую использовать стандартную команду Файл > Открыть вместо двойного щелчка на имени файла (или перетаскивания файла мышью в окно браузера). Было подмечено, что при открытии файлов XML двойным щелчком иногда возникают проблемы с визуализацией документа. Если Вы все же откроете документ двойным щелчком и увидите сообщение о том, что «для запрошенного ресурса данные недоступны», щелкните «Обновить». После проверки не забудьте вставить строку, декларирующую связь со стилевой таблицей, в документ на то же место. Если Вы правильно набрали текст, можно приступать к созданию таблицы стилей XSL для форматирования документа:

Здесь, конечно, требуются некоторые разъяснения. Первая строка говорит о том, что данный текстовый документ представляет собой стилевую таблицу XSL (версия 1.0). Кроме того, в этой строке указывается так называемое «пространство имен XML» (name space), которое используется в данном документе XSL (xmlns:xsl="http://www.w3.org/1999/XSL/Transform"). Как видите, многие тэги, встречающиеся в документе, имеют префикс xsl:. В дальнейшем мы будем пользоваться именно этим пространством имен. Если бы мы не установили предварительно программу-анализатор msxml3.exe и ограничились использованием стандартного Internet Explorer 5.0, то первая строка документа XSL должна была бы выглядеть следующим образом:

Такая декларация соответствует устаревшему пространству имен, использующемуся стандартным Internet Explorer 5.0.

Вы, наверное, скажете, что, если речь идет о синтаксисе, то документ XSL очень похож на документ XML, и будете, конечно, абсолютно правы! Мы снова видим открывающие и закрывающие тэги, «пустые» тэги вроде <xsl:apply-templates/> («пустые» тэги удобно использовать для сокращения записи), а также параметры и их значения, например, match="paragraph". В общем, все то же самое. Смысл этих тэгов, однако, заключается в том, чтобы «найти нечто в документе и сделать что-то с этим нечто», — например, найти определенный элемент и показать его содержимое как заголовок.

Пройдемся сверху вниз по документу, начиная со второй строки:

Элемент <xsl:template> здесь служит для того, чтобы найти узел <article> (который, кстати, содержит все остальные элементы) в документе catastrophe.xml и назначить в качестве цвета переднего плана голубой (для всей статьи). Приказ о применении данного шаблона («template» означает «шаблон») отдается тэгом <xsl:apply-templates/>, что в переводе означает «применить шаблоны».

Конструкция

используется для того, чтобы найти узел <title> и показать его коричневым цветом в виде заголовка HTML второго уровня. Следующая конструкция

отводится на нахождение узла <paragraph> в документе (заметьте, что должны быть найдены все такие узлы) и оформление его содержимого (того, что заключено между открывающим и закрывающим тэгами) в виде параграфов HTML. Следующий фрагмент

оформляет дату курсивом в виде отдельного параграфа и показывает содержимое узла <date> очень маленьким шрифтом (extra-extra-small). Я думаю, Вам не составит труда истолковать значение остальных элементов документа.

Описанные выше фрагменты документа XSL можно было бы расположить и в другом порядке. При этом результат не изменился бы. Программа-анализатор (parser) действует точно в соответствии с инструкциями. Она отыскивает в документе все узлы, имена которых соответствуют значению параметра match, после чего применяет форматирование, описанное между тэгами <xsl:template> и </xsl:template>. Заметьте, что тэг <xsl:apply-templates/>, являющийся «пусковым механизмом» для форматирования содержимого узлов, помещается в «самую середину» между открывающими и закрывающими тэгами HTML (в последнем рассмотренном фрагменте <xsl:apply-templates/> находится между тэгами <i> и </i>, которые, в свою очередь, располагаются между тэгами <p> и </p>).

Наберите рассмотренный выше документ XSL и сохраните его в виде текстового файла. Назовите этот файл catastrophe.xsl (в полном соответствии с именем файла, указанным во второй строке документа catastrophe.xml). Давайте же наконец посмотрим, как выглядит документ catastrophe.xml, отформатированный с помощью стилевой таблицы catastrophe.xsl. Для этого откройте файл catastrophe.xml в Internet Explorer, предварительно убедившись, что файлы catastrophe.xml и catastrophe.xsl находятся в одной папке. Если Вы нигде не ошиблись, получится что-то вроде страницы, изображенной на рисунке.

Это еще не все…

Вы, наверное, слегка разочарованы. Действительно, если тем, что мы только что рассмотрели, исчерпываются возможности XSL, то никакого особого преимущества над каскадными таблицами стилей (CSS ) этот язык, казалось бы, не имеет. То же самое мы могли бы сделать и с помощью CSS. Спешу заверить читателя, что мы испытали только самые простые средства XSL. Более тонкие и изощренные методы визуализации документов XML, включающие поиск, сортировку и многое другое, мы рассмотрим в следующих статьях.

(Продолжение следует)

Источник: http://www.mycomp.com.ua/

 


Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com