Опубликован: 08.08.2007 | Уровень: для всех | Доступ: платный
Лекция 10:

Трансформация документа XML

< Лекция 9 || Лекция 10: 12345 || Лекция 11 >

Элементы, объявленные в XSLT

Язык XSLT объявляет около полусотни элементов. Из них 17 элементов верхнего уровня, которые могут быть непосредственно вложены в корневой элемент xsl:stylesheet таблицы стилей. Они называются декларациями. Это элементы xsl: import, xsl: include, xsl: attribute-set, xsl:character-map, xsl:date-format, xsl:decimal-format, xsl:function, xsl:import-schema, xsl:key, xsl:namespace-alias, xsl:output, xsl:param, xsl:preserve-space, xsl:sort-key, xsl:strip-space, xsl:template, xsl:variable. Более того, все эти элементы, кроме xsl:param и xsl: variable, можно записывать только на верхнем уровне вложенности, непосредственно в корневом элементе xsl:stylesheet.

Кроме элементов верхнего уровня вложенности, в языке XSLT объявлено более тридцати элементов, которые можно записывать в теле элементов верхнего уровня. Наиболее часто применяются элементы xsl:apply-templates, xsl:value-of, xsl:copy-of, xsl:sort, xsl:text.

Из всех элементов XSLT не верхнего уровня вложенности выделяются инструкции. Не путайте инструкции XSLT и инструкции по обработке XML. Формально инструкции XSLT определяются как элементы, которые можно вставлять в конструктор последовательности. К инструкциям, в частности, относятся элементы, создающие узлы всех семи видов и последовательности узлов. Это элементы xsl:element, xsl:attribute, xsl:text, xsl:comment, xsl:processing-instruction, xsl:namespace, xsl:result-document, xsl:sequence.

Кроме них, инструкциями считаются элементы xsl:apply-templates, x sl: value-of, xsl: variable и др., всего более двадцати элементов. К инструкциям относятся как элементы, управляющие выбором правил преобразовании xsl:if, xsl:for-each, xsl:choose, так и элементы, копирующие узлы xsl:copy, xsl:copy-of.

Все элементы необязательны и могут располагаться в любом порядке, за одним исключением: декларации xsl:import, если они есть, должны быть записаны первыми.

Рассмотрим некоторые наиболее часто применяемые элементы XSLT.

Декларация xsl:import

Элемент xsl:import записывается очень просто:

<хsl:import href="адрес URI таблицы стилей" />

Его можно записать только непосредственно в корневом элементе xsl:stylesheet и только в самом начале таблицы стилей. Элементов xsl: import может быть несколько.

Процессор XSLT отыскивает таблицу стилей по указанному атрибутом href адресу и подставляет ее на место элемента xsl:import перед преобразованием.

Некоторые правила преобразования из таблиц, импортируемых элементами xsl:import, могут конфликтовать с правилами, импортированными из других таблиц или определенными в самой таблице стилей. В таком случае чаще всего применяются те правила, которые записаны последними. Поэтому порядок записи элементов xsl:import в таблицу стилей имеет большое значение.

Декларация xsl:include

Второй элемент, включающий внешние таблицы стилей в данную таблицу, - это элемент xsl:include. Он записывается точно так же, как элемент xsl:import, и оказывает такое же действие:

<xsl:include href="адрес URI таблицы стилей" />

Его можно записать не только непосредственно в корневом элементе xsl:stylesheet, но, в отличие от элемента xsl:import, в любом месте таблицы стилей. Второе отличие от элемента xsl:import заключается в том, что порядок записи элементов xsl:include в таблице стилей не имеет значения.

Декларация xsl:variable

Элемент xsl:variable определяет имя объекта. Оно записывается обязательным атрибутом name. Имя объекта должно быть уточненным именем XML типа QName. Кроме того, атрибутом select переменной можно задать сам объект, а атрибутом as определить тип объекта. Например:

<xsl:variable name="var1" select="count(//person)" as="xs:integer" />

Имя var1 будет хранить число элементов person. Объект может быть получен из содержимого элемента xsl: variable:

<xsl: variable name="var2">10</xsl:variable>

или создан конструктором последовательности:

<xsl:variable name="var3">
<xsl:value-of select="count (//person) " /> 
<xsl:variable>

Если объект не получен из атрибута select или содержимого элемента xsl: variable, то по умолчанию имя связывается с пустой строкой.

Для того чтобы получить объект, связанный с именем, определенным элементом xsl: variable, перед именем надо поставить знак доллара: $varl, $var2. При этом следует учитывать область действия имени.

Область действия имени простирается на весь элемент, в котором оно определено, начиная с места определения и включая вложенные элементы, если только в них не определено то же самое имя.

Имена, определенные непосредственно в корневом элементе xsl:stylesheet, называются глобальными именами, остальные - локальными именами.

Хотя слово "variable" и переводится с английского языка как "переменная", имя, созданное элементом xsl: variable - это не имя переменной, его значение нельзя изменить. Это только название некоторого объекта, которое удобно использовать в тех случаях, когда объект надо использовать во многих местах таблицы стилей, а его вычисление сложно или громоздко.

Декларация xsl:param

Элемент xsl:param записывается или непосредственно в элементе xsl:stylesheet, чтобы задать параметр преобразования, или в элементе xsl:template, чтобы задать параметр правила, или в элементе xsl:function как аргумент функции. У него один обязательный атрибут name, определяющий имя параметра. Кроме него, часто присутствует необязательный атрибут select, в котором записывается выражение для получения значения параметра:

<xsl:param name="pl" select="10 + 20" />

Если атрибут select отсутствует, то значение параметра берется из содержимого элемента, которым может быть конструктор последовательности узлов и атомарных значений:

<xsl:param name="p2">10</xsl:param>

Если отсутствует и атрибут select, и содержимое элемента, то параметр получает значение пустой строки.

Дли получении значения параметра надо записывать его имя со знаком доллара: $p1,$p2. Например:

<xsl:when test= "$p1=10 ">

Правила, определяющие область видимости параметров, такие же, как и у имен объектов, определенных декларацией xsl:variable.

Еще один необязательный атрибут as содержит желательный тип, к которому будет приведено значение параметра.

Наконец, последний атрибут required, принимающий значения yes или nо (по умолчанию), указывает обязательность параметра. Если параметр обязателен, required="yes", то элемент xsl:param должен быть пустым и не содержать атрибут select. В таком случае он получит определенное значение при вызове функции или элементом xsl:with-param при вызове шаблона.

Элемент xsl:with-param

Элемент xsl:with-param ссылается на некоторый параметр, имя которого записано в обязательном атрибуте name. Необязательным атрибутом select можно задать выражение, результат вычисления которого будет новым значением параметра:

<xsl:with-param name="pl" select="100 * 20" />

Новое значение можно задать и в содержимом элемента:

<xsl:with-param name="pl">100</xsl:with-param>

Элемент xsl:with-param используется только в инструкциях xsl:apply-templates, xsl:apply-imports, xsl:call-template.

Инструкция xsl:value-of

Элемент xsl:value-of вычисляет выражение, записанное в его обязательном атрибуте select, и преобразует его в строку. Например, выше мы определили имя объекта var2. Чтобы получить значение объекта var2, надо записать:

<xsl:value-of select="$var2" /></example>

Если в результате вычисления выражения получается последовательность, то процессор XSLT версии 1.0 выберет из нее только первый элемент, преобразованный в строку.

< Лекция 9 || Лекция 10: 12345 || Лекция 11 >
Вадим Новицкий
Вадим Новицкий
Беларусь, Минск
Trololo Пукпрук
Trololo Пукпрук
Беларусь