Элемент xsl:namespace-alias
Синтаксическая конструкция этого элемента выглядит следующим образом:
stylesheet-prefiх=" префикс " | "#default"
result-prefix=" префикс " | "#default"/>
Элемент xsl:namespace-aliasназначает пространству имен выходящего документа пространство имен, которое будет подменять его в преобразовании, иначе говоря — псевдоним.
Обязательный атрибут result-prefixуказывает, какому пространству имен назначается псевдоним. Обязательный атрибут stylesheet-prefixуказывает, какое пространство имен будет использоваться в качестве его псевдонима в преобразовании. Оба атрибута содержат префиксы пространств имен, которые, естественно, должны быть ранее объявлены в преобразовании.
Пример
Возвращаясь к генерации преобразования, мы можем изменить пространство имен генерируемых элементов так, чтобы они не воспринимались процессором как элементы XSLT. Для того чтобы в выходящем документе эти элементы все же принадлежали пространству имен XSLT, измененное пространство имен в преобразовании должно указываться как псевдоним этого пространства.
Листинг 8.15. Преобразование, использующее псевдонимы пространств имен
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:axsl="http://www.w3.org/1999/XSL/Transform/Alias">
stylesheet-prefix="axsl"
result-prefix="xsl"/>
В этом преобразовании элемент xsl:namespace-aliasуказывает на то, что все элементы, принадлежащие в преобразовании пространству имен с URI
http://www.w3.org/1999/XSL/Transform/Alias
в выходящем документе должны принадлежать пространству имен с URI
http://www.w3.org/1999/XSL/Transform
то есть пространству имен XSLT.
Результатом применения этого преобразования к документу из листинга 8.13 будет следующий документ.
Листинг 8.16. Выходящее преобразование
version="1.0"
xmlns:axsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
В этом сгенерированном преобразовании элементы имеют префикс axsl, но при этом принадлежат пространству имен XSLT.
Атрибуты stylesheet-prefixи result-prefixэлемента xsl:namespace-aliasмогут иметь значения "#default". Определение вида
stylesheet-prefix="a"
result-prefix="#default"/>
означает, что элементы, принадлежащие в преобразовании пространству имен а, в выходящем документе должны принадлежать пространству имен по умолчанию. Определение вида
stylesheet-prefix="#default"
result-prefix="a"/>
означает, что элементы, принадлежащие в преобразовании пространству имен по умолчанию, в выходящем документе должны принадлежать пространству имен а.
Пример
Листинг 8.17. Преобразование
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:a="urn:a"
xmlns="urn:b">
stylesheet-prefix="#default"
result-prefix="a"/>
stylesheet-prefix="a"
result-prefix="#default"/>
Листинг 8.18. Выходящий документ
Результатом этого преобразования является то, что пространство имен с URI "urn:а"стало пространством имен по умолчанию, а пространство имен с URI "urn:b"изменило префикс на а.
В преобразованиях можно объявлять несколько псевдонимов пространств имен при условии, что одно и то же пространство имен преобразования не должно быть объявлено элементами xsl:namespace-aliasс одинаковым порядком импорта псевдонимом для различных пространств имен выходящего документа.
Пример
Если преобразование a.xslсодержит определение
stylesheet-prefix="x"
result-prefix="a"/>
а преобразование b.xsl— определение
stylesheet-prefix="x"
result-prefix="b"/>
где в обоих преобразованиях префикс xпредставляет одно пространство имен, а пространства имен aи b— разные, то преобразование a.xslне сможет включать преобразование b.xslи наоборот, потому что они будут иметь одинаковый порядок импорта и содержать элементы xsl:namespace-alias, назначающие разным пространствам имен одинаковые псевдонимы. В одном преобразовании такие псевдонимы также не имеют права встречаться. Если же подобное все же случилось, процессор может сигнализировать ошибку или использовать определение, которое было дано в преобразовании последним.
Совсем иначе обстоит дело с импортированием. При импортировании определения старших в порядке импорта преобразований могут переопределять определения младших преобразований. Таким образом, если преобразование a.xslбудет импортировать преобразование b.xsl, пространство имен xбудет назначено псевдонимом пространству имен аи наоборот.
Читать дальше