В чем сложность применения таблицы стилей xsl

The W3C Recommendation “Associating Style Sheets with XML documents” doesn"t define the case of embedded style sheets, although it seems a reasonable extrapolation to allow URL fragments (starting with a “#”). At this time, early 2006, there are still unsolved problems and there is no published specification. The problems are as follows:

  1. Because the embedded style sheet is not downloaded separately from the server, the server cannot tell the browser what the format of the style sheet is. Therefore, the type attribute is required in this case. It is undefined what happens if the attribute is omitted: is the style sheet ignored? is it assumed to be CSS? is there some algorithm to determine the language?
  2. In most XML-based formats, a fragment identifier identifies a complete element, not the contents of an element. But a style sheet that starts with
    is not correct CSS, so it seems there needs to be an extra rule that a fragment identifier used in a style sheet PI points to the contents of an element, not to the element itself.
  3. Similarly, it is undefined what happens if there are child elements inside the element that is pointed to. Does the style sheet consist of all the contents of all the elements concatenated? the contents of just the first element? or is this an error and is the whole element ignored?
  4. In the example above, the URL pointed into the document itself. The fact that the browser is able to look at that URL at all indicates that it knows how to parse XML and is probably capable of finding the indicated style element. But now consider a URL that points to a fragment of an external document. In order to succesfully retrieve the style sheet, the browser must first download and parse the external document and then extract and parse the style sheet. But the type attribute only gives the type of one of the two and thus the browser cannot know if it is able to use the style sheet. It is not even defined whether the type attributes gives the type of the external document or of the style sheet embedded in it.

Вместе с документами XML тоже можно применять таблицы стилей CSS. Для этого в язык XML введена инструкция по обработке stylesheet, которая используется так, как показано в листин­ге 8.4.

Листинг 8.4. Документ XML, использующий таблицу стилей CSS

TpyflOBoii floroBop

Иванов Петр Сидорович

01.07.03

Всякий браузер, "понимающий" XML, например Mozilla или Internet Explorer 6.x, покажет приведенный в листинге 8.4 документ в соответствии со стилями, записанными в файле xmlcontractcss.

Таблица стилей, включенная в файл xmlcontract.css, оформляется по прави­лам CSS и может выглядеть так, как показано в листинге 8.5.

Листинг 8.5. Таблица стилей для документа XML

date, period { margin: 0.5em; }

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

Язык описания стилей XSL

Таблицы стилей для документов XML записываются при помощи специаль­но сделанной реализации языка XML, названной XSL (XML Stylesheet Language). В то время, когда писалась эта книга, действовала первая версия XSL, изложенная в рекомендации "Extensible Stylesheet Language (XSL). Version 1.0". Она опубликована на Web-странице http://www.w3.org/TR/xsl/.

Язык XSL, как и язык XPath, представляет документ в виде дерева. Процес­сор языка XSL преобразует это дерево, руководствуясь таблицей стилей, и форматирует его для вывода в окно браузера, на принтер, экран проектора или на какое-то другое устройство. Таким образом, обработка проходит два этапа: преобразование дерева документа (XML transform) и форматирование (formatting) дерева, полученного после преобразования.

Первый этап - этап преобразования - может быть достаточно сложным и кардинально поменять структуру дерева: изменить уровни вложенности, удалить или добавить новые узлы, создать оглавление, предметный указа­тель, индекс. Результат преобразования может стать новым самостоятель­ным документом или даже несколькими документами. Таблица стилей, по которой идет преобразование, содержит правила, состоящие из двух частей: образцов (patterns) для отбора узлов, предназначенных для преобразования, и шаблонов (templates) или конструкторов (sequence constructors) для по­строения преобразованных узлов.

Второй этап - этап форматирования - абстрагируется от конечного уст­ройства, хотя может выполняться непосредственно в нем, например, в брау­зере, пейджере, принтере, проекторе. Форматирование формулируется в терминах классов и объектов. Под объектами форматирования FO (for­matting objects) понимаются узлы дерева, а под их классами - некие конеч­ные структуры: страницы, абзацы, таблицы, списки. Таблица стилей опре­деляет правила форматирования (formatting properties). По этим правилам строится дерево, но уже не дерево узлов, а дерево геометрических областей (area tree), на которые разбивается документ, и определяются их характери­стики: размеры, цвет, шрифт.

Вскоре после выхода рекомендации языка XSL стало ясно, что преобразо­вание документа XML - это самостоятельная и независимая задача, кото­рую можно выполнять не только для приведения их к одному стилю, но и для многих других целей. Например, можно преобразовать документ XML в документ HTML, XHTML или даже в документ PDF. Можно обновить документ, изменив некоторые узлы, или разделить его на несколько доку­ментов.

Поэтому преобразование документов XML было выделено в отдельную об­ласть исследования и описано отдельным языком XSLT (XSL Transfor­mation), первая версия которого изложена в рекомендации "XSL Transfor­mation (XSLT). Version 1.0". Эта версия рекомендации, действующая на вре­мя написания данной книги, расположена по адресу http://www.w3.org/TR /xslt. Ее русский перевод, сделанный Радиком Усмановым, можно посмот­реть в нескольких местах Рунета, например, по адресу http://www.online.ru /it/helpdesk/xslt01.htm.

После выделения преобразований в отдельный язык XSLT первоначальная рекомендация языка XSL была переработана, сейчас основной акцент в ней сделан на форматировании, поэтому ее часто называют рекомендацией "XSL-FO". Мы рассмотрим форматирование в следующей главе, а в этой займемся преобразованием документов XML с помощью языка XSLT.

Возрадуйтесь, дети мои, ибо пришёл я к вам с миром и богатыми дарами. Нет, я не принёс вам того, чего вы не видели. И даже не принёс того, чего вы не имели. От чистого сердца вручаю вам то, что всегда лежало у вас под ногами, но вы не замечали того, брезгливо перешагивая, пробегая мимо по своим, несомненно самым важным, делам.

Константы! Да, ваши чаяния достигли моих ушей, пробрались в глубины души и вырвали наружу эти прекрасные создания, позволяющие синхронно менять связанные значения в разных частях файла.

Примеси! Я же знаю, вы так устали без наследования. Приходится внедрять лишние классы в элементы или даже, переходить на тёмную сторону силы - копипастить по чёрному.

Отныне! Ваша душа будет чиста как у младенца. Руки в золоте как у царевичей. Дети послушными и приветливыми.









"margin: 0; text-align: center;"
>

]>< css >< body >

html {
background: &color.main;;
margin: 0;
padding: &width.padding;pt;
}
h1 { &mixin.header;
border: &width.border;pt solid &color.add;;
padding: &width.padding;pt;
font-size: 32pt;
color: &color.add;;
line-height: 1em;
text-overflow: ellipsis;
overflow: hidden;
}
p { &mixin.header;
font-size: 16pt;
color: &color.main;;
background: &color.add;;
padding: 0 &width.border;pt &width.border;pt;
font-style: italic;
border-bottom: &width.decor;pt dashed &color.main;;
}


Да пребудет с вами мир и понимание!