--- Joseph Kesselman <keshlam(_at_)us(_dot_)ibm(_dot_)com> wrote:
Can you provide a *small* example, please?
Smallest would be a conceptual sketch rather than an example.
Let's say we want to insert <xsl:text>foo</xsl:text> into the middle
of
our output document. One approach is to code it using a "dummy"
namespace, and translate that on output to the correct namespace::
<xsl:namespace-alias stylesheet-prefix="newxsl"
result-prefix="xsl"/>
...
<newxsl:text>foo</newxsl:text>
and have XSLT automatically translate the dummy namespace into the
"real"
xsl namespace. I've tended to prefer this approach for clarity
reasons.
The downside of the aliasing solution is that it may produce more
verbose
output. Some XSLT processors -- Xalan in particular -- keep the
original
prefix and just change the namespace binding. This is actually nice
in
some ways, since it means you can see which names were generated by
the
aliasing mechanism. But when you combine that with a serializer which
generates namespace declarations at the point where it discovers they
were
used without having been explicitly declared, that means the output
becomes
<newxsl:text
xmlns:newxsl="http://www.w3.org/1999/XSL/Transform">foo</newxsl:text>
.... and that namespace declaration occurs on every one of these
generated
<newxsl:text/> elements.
In case if we have:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:newxsl="http://dymmy/Transform"
exclude-result-prefixes="xsl">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:namespace-alias stylesheet-prefix="newxsl"
result-prefix="xsl"/>
<xsl:template match="/">
<newxsl:stylesheet version="1.0">
<newxsl:text>foo</newxsl:text>
</newxsl:stylesheet>
</xsl:template>
</xsl:stylesheet>
and the XSLT processor (e.g. Xalan) keeps the new prefix and only
changes its namespace-uri, then the serialiser will have to generate
the correct namespace declaration for newxsl:stylesheet. Thus the
required namespace declaration will be at the highest place possible in
the hierarchy.
The result from the above transformation must be:
<newxsl:stylesheet xmlns:newxsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<newxsl:text>foo</newxsl:text>
</newxsl:stylesheet>
Isn't this a solution to the problem?
=====
Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
__________________________________________________
Do you Yahoo!?
Yahoo! Tax Center - forms, calculators, tips, more
http://taxes.yahoo.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list