uri'>фиксированный URI пространства имён был декларирован как синоним другого URI пространства имён, то в конечном дереве URI пространства имён будет представлен не этим фиксированным URI пространства имён, а тем URI пространства имён, для которого он является синонимом. Элемент xsl:namespace-alias декларирует, что URI пространства имён, связанный с префиксом, задаваемым атрибутом stylesheet-prefix, является синонимом для URI пространства имён, связанного с префиксом, задаваемым атрибутом result-prefix. Таким образом, атрибут stylesheet-prefix указывает URI пространства имён, который будет представлен в стиле, а атрибут result-prefix задает соответствующий URI пространства имён, который будет представлен в конечном дереве. Пространство имён по умолчанию (декларируемое с помощью xmlns) может быть задано не префиксом, а с помощью #default. Если некое URI пространства имён декларировано как синоним сразу для нескольких различных URI пространства имён, то используется декларация с наивысшим приоритетом импорта. Если и таких деклараций будет несколько, фиксируется ошибка. XSLT процессор может сигнализировать об этой ошибке, если он этого не делает, то должен обработать ошибку сам, выбрав среди деклараций с наивысшим приоритетом импорта ту, которая в стиле появилась последней.
Если фиксированные конечные элементы используются для создания узлов элементов, атрибутов или пространств имён, использующих URI пространства имён XSLT, такой стиль должен использовать синоним. Например, стиль
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:fo='http://www.w3.org/1999/XSL/Format' xmlns:axsl='http://www.w3.org/1999/XSL/TransformAlias'>
<xsl:namespace-alias stylesheet-prefix='axsl' result-prefix='xsl'/>
<xsl:template match='/'>
<axsl:stylesheet>
<xsl:apply-templates/>
</axsl:stylesheet>
</xsl:template>
<xsl:template match='block'>
<axsl:template match='{.}'>
<fo:block>
<axsl:apply-templates/>
</fo:block>
</axsl:template>
</xsl:template>
</xsl:stylesheet>
будет генерировать стиль XSLT из документа следующего вида:
<elements>
<block>p</block>
<block>h1</block>
<block>h2</block>
<block>h3</block>
<block>h4</block>
</elements>
Замечание: Синонимы могут также понадобиться для иных пространств имён, нежели URI пространства имён XSLT. Например, фиксированные конечные элементы, принадлежащие пространству имён, работающему с цифровыми подписями, могут привести к тому, что стили XSLT будут неправильно обрабатываться программами обеспечения безопасности общего назначения. Используя синоним для этого пространства имён, такую нестыковку можно устранить.
7.1.2 Создание элементов с помощью xsl:element
<!– Category: instruction ->
<xsl:element
name = { qname }
namespace = { uri-reference }
use-attribute-sets = qnames >
<!– Content: template ->
</xsl:element>
Элемент xsl:element позволяет создавать элемент с вычисляемым названием. Расширенное имя создаваемого элемента определяется обязательным атрибутом name и необязательным атрибутом namespace . Содержимое элемента xsl:element является шаблоном для атрибутов и непосредственного потомка создаваемого элемента.
Атрибут name интерпретируется как шаблон значения атрибута. Если строка, получающаяся после обработки шаблона значения атрибута, не является QName, фиксируется ошибка. XSLT процессор может сигнализировать об этой ошибке, если он этого не делает, то должен обработать ошибку сам, представив результат обработки элемента xsl:element последовательностью узлов, созданных обработкой содержимого элемента xsl:element и исключением всех исходных узлов атрибутов. Если атрибут namespace не был предоставлен, QName приводится к расширенному имени с помощью деклараций пространства имён, в области действия которых находится данный элемент xsl:element, включая все декларации пространства имён по умолчанию.
Если атрибут namespace присутствует, также обрабатывается как шаблон значения атрибута. Строка, полученная после обработки шаблона значения атрибута, должна являться ссылкой URI. Если эта строка не будет синтаксически правильной ссылкой URI, ошибка фиксироваться не будет. Если строка пустая, то расширенное имя данного элемента имеет нулевой URI пространство имён. В противном случае, эта строка используется как URI пространства имён для расширенного имени создаваемого элемента. Локальная часть QName, задаваемая атрибутом name, используется как локальная часть в расширенном имени создаваемого элемента.
При отборе префикса для вывода созданного элемента в виде XML XSLT процессоры могут