Введение

В вычислительной технике двумя основными языками стилей являются каскадные таблицы стилей (CSS) и язык расширяемых таблиц стилей (XSL). Несмотря на то, что оба они называются языками стилей, их назначение и принципы работы существенно различаются.

Каскадные таблицы стилей

CSS разработан для стилизации документов, структурированных с помощью языков разметки, таких как HTML и XML (включая XHTML и SVG). Он был создан именно для этого. Код CSS использует не-XML синтаксис для определения информации о стиле различных элементов документа, который он стилизует. Язык, используемый для структурирования документа (язык разметки), является основой для CSS. Языки разметки, такие как HTML и, в меньшей степени, XUL, могут определять некоторые базовые элементы для стилизации документа, например, тег `<emphasis>` для выделения жирным шрифтом. CSS применяет стили к документу для отображения на "экранных носителях" или "страничных носителях". Экранные носители отображаются как одна страница (возможно, с гиперссылками), имеющая фиксированную горизонтальную ширину и практически неограниченную вертикальную высоту. Прокрутка часто используется для просмотра частей экранного носителя. Это отличается от "страничных носителей", которые состоят из нескольких страниц, каждая из которых имеет определенные фиксированные горизонтальные и вертикальные размеры. Стилизация для страничных носителей включает в себя ряд сложностей, которых нет при работе с экранными носителями. Поскольку CSS изначально разрабатывался для экранных носителей, его возможности для работы со страничными носителями были ограничены. CSS версии 3.0 предоставляет новые функции, позволяющие более эффективно стилизовать документы для отображения на страницах.

Язык расширяемой таблицы стилей

XSL радикально изменился от своего первоначального замысла, превратившись во что-то совершенно отличное от его изначальной цели. Первоначальная идея XSL заключалась в создании языка стилей на основе XML, предназначенного для страничных носителей отображения. Механизм, использованный для решения этой задачи, заключался в разделении процесса на два отдельных этапа. Сначала XML-документ преобразуется в промежуточную форму. Процесс выполнения этого преобразования регулируется XSL-стилем, как определено в спецификации XSL. Результатом этого преобразования является XML-документ на промежуточном языке, известном как XSL FO (также определенном спецификацией XSL). Однако в процессе разработки этапа преобразования стало ясно, что универсальный язык преобразования XML будет полезен не только для создания представления XML-документа. В связи с этим от рабочей группы XSL была выделена новая рабочая группа, и язык XSL Transformations (XSLT) стал рассматриваться как отдельный от информации о стилях документа XSL FO. Этот раскол расширился еще больше, когда XPath стал самостоятельной спецификацией, хотя и тесно связанной с XSLT. Сочетание XSLT и XSL FO создает мощный язык стилей, хотя и гораздо более сложный, чем CSS. XSLT является языком, полным по Тьюрингу, в то время как CSS – нет; это демонстрирует степень мощности и гибкости, недоступную в CSS. Кроме того, XSLT способен создавать контент, например, автоматически генерировать оглавление только на основе глав книги, или удалять/выбирать контент, например, создавать только глоссарий из книги. XSLT версии 1.0 с расширениями EXSLT или версии 2.0 также может генерировать несколько документов, например, разделять главы книги на отдельные страницы. В отличие от этого, CSS может только выборочно скрывать контент, не отображая его. XSL FO отличается от CSS тем, что документ XSL FO является самостоятельным. CSS изменяет документ, к которому он прикреплен, в то время как документ XSL FO (обычно результат преобразования XSLT исходного документа) содержит весь контент, который должен быть представлен в чисто презентационном формате. Он имеет широкий спектр опций спецификации в отношении постраничного форматирования и высококачественной верстки. Однако он не определяет сами страницы. Документ XSL FO должен быть обработан утилитой процессора XSL FO, которая генерирует окончательный страничный вывод, подобно тому, как HTML+CSS должен быть обработан веб-браузером для отображения в отформатированном виде. Сложность XSL FO является проблемой, главным образом потому, что реализация FO-процессора очень сложна. Реализации CSS в веб-браузерах все еще не полностью совместимы друг с другом, и написать CSS-процессор намного проще, чем FO-процессор. Однако для насыщенных страничных носителей такая сложность в конечном итоге необходима для решения различных задач верстки.