Листинг 3.31. Выходящий документ проведённого преобразования
Надо сказать, что спецификация языка XSLT не оговаривает, в каком именно порядке процессоры должны выполнять шаблонные правила — главное, чтобы результат преобразования совпадал с результатом, полученным при обработке приведенным выше способом. На практике это означает, что разработчикам совершенно необязательно знать, как именно конкретный процессор применяет правила — достаточно понимать принципы шаблонной обработки. В этом одно из главных достоинств XSLT как языка, не имеющего побочных эффектов.
Глава 4
Структура преобразования
Для того чтобы выделить элементы и атрибуты, которые принадлежат логической схеме XSLT, в этом языке применяется механизм пространств имен. Это означает, что в документе преобразования элементы, относящиеся к XSLT, должны принадлежать его пространству имен.
Уникальный идентификатор ресурса пространства имен XSLT имеет вид
http://www.w3.org/1999/XSL/Transform
Как отмечалось ранее, по адресу, указанному в URI пространства имен, совершенно необязательно будет находиться что-либо осмысленное. Однако в нашем случае по адресу http://www.w3.org/1999/XSL/Transform
находится текстовый документ, содержащий единственную строчку:
This is the XSLT namespace.
Символ 1999
в URI пространства имен XSLT никак не соотносится с версией языка преобразования. Это просто год, который был назначен Консорциумом W3 данной спецификации и не более. Версия использованного языка определяется атрибутом version
элемента xsl:stylesheet
.
Общепринятым префиксом пространства имен языка XSLT является префикс xsl
. Естественно, он может быть любым другим, но в этой книге мы будем использовать именно такое обозначение. Таким образом, объявление пространства имен XSLT в общем случае будет выглядеть следующим образом: xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
Пример
Приведем пример простого преобразования, в котором объявлено пространство имен XSLT.
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
В некоторых случаях исходный текст намного упрощается, если пространство имен XSLT объявляется по умолчанию:
version="1.0"
xmlns="http://www.w3.org/1999/XSL/Transform">
Кроме этого, пространство имен по умолчанию можно снова обнулить:
version="1.0"
xmlns="http://www.w3.org/1999/XSL/Transform">
В последнем случае элемент root
будет принадлежать нулевому пространству имен. Результат всех трех преобразований одинаков:
Элементы XSLT могут содержать атрибуты, принадлежащие другим, но обязательно ненулевым, пространствам имен. Такие атрибуты могут содержать дополнительную информацию, но поскольку они не относятся к XSLT, обрабатываться процессором в общем случае они не будут.
Пример
Если мы определим в преобразовании элемент вида
xmlns:xsldoc="http://www.a.com/XSL/doc">
...
то в общем случае атрибут xsldoc:text
будет проигнорирован. Однако процессор, которому знакомо пространство имен с URI http://www.a.com/XSL/doc
сможет понять, что этот атрибут применен для документирования преобразования и будет использовать его в своих целях.
Корневые элементы преобразования
За исключением случаев упрощенных преобразований, корневым элементом XSLT-документа всегда является элемент xsl:stylesheet
или его синоним xsl:transform
. Эти элементы полностью идентичны и различаются только именами, поэтому мы будем описывать семантику и пользоваться только элементом xsl:stylesheet
.
Элементы xsl:stylesheet и xsl:transform
id=" идентификатор "
extension-element-prefixes=" префиксы "
exclude-result-prefixes=" префиксы "
version=" число ">
extension-element-prefixes=" префиксы "
exclude-result-prefixes=" префиксы "
version=" число ">
Элемент xsl:stylesheet
имеет обязательный атрибут version
, в котором указывается версия языка, использованная при создании этого преобразования. Текущей версией языка является версия 1.0, поэтому все преобразования, которые мы будем приводить в качестве примеров, будут начинаться следующим тегом:
Необязательный атрибут id
может содержать уникальный идентификатор данного преобразования. Этот атрибут используется в тех случаях, когда преобразование включено в преобразуемый документ для его идентификации внутри этого документа.
Читать дальше