Subject: RE: Xalan Java 2: doesn't seem to output namespaces to result document ...
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 13 Jan 2005 08:46:59 -0000
|
> After studying the http://www.w3.org/TR/xslt20/ working draft and much
> experimentation, I am not able to get xsl:namespace to create a
> namespace node in the result document using Xalan Java 2.6.0 or Xalan
> Java 2.2.Dll.
That's because Xalan doesn't implement XSLT 2.0. I would expect it to give
you an error message when you use the xsl:namespace instruction.
>
> <xsl:template match="/">
> <xsl:copy-of select="xalan:checkEnvironment()"/>
> <xsl:element name="xsl:stylesheet">
> <!-- I expect to see a xmlns:test='...' in the
> resulting xsl:stylesheet tag -->
> <xsl:namespace name="test"
> select="'http://www.test.com/test'"/>
> <xsl:apply-templates />
> </xsl:element>
> </xsl:template>
>
> You mentioned that I would need to also use the
> xsl:namespace-alias. Can
> you explain more on this as I am not able to find any reference to how
> xsl:namespace and xsl:namespace-alias work together?
They don't work together. As I think I said, xsl:namespace-alias only
affects the results of literal result elements.
> For example, the following:
>
> <xsl:stylesheet
> version="2.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:xalan="http://xml.apache.org/xalan"
> xmlns:test="http://www.test.com/test"
> xmlns:cxsl="copy-XSL-nodes"
> >
> <xsl:namespace-alias stylesheet-prefix="cxsl" result-prefix=
> "xsl"/>
> <xsl:template match="/">
> <xsl:copy-of select="xalan:checkEnvironment()"/>
> <cxsl:stylesheet>
> <xsl:namespace name="google"
> select="'http://www.google.com/nothing'"/>
> <xsl:apply-templates />
> </cxsl:stylesheet>
> </xsl:template>
> </xsl:stylesheet>
>
> 1) The above copied all namespaces to the result document even though
> I'm not using xmlns:test.
> Why did xmlns:test show up?
cxsl:stylesheet is a literal result element. When an LRE is evaluated, all
its in-scope namespaces (other than those listed in exclude-result-prefixes)
are copied to the result tree.
> And why does the xsl:element not have the same behavior?
Because that's the way it's specified.
>
> 2) I expected to see xmlns:google='...' in the cxsl:stylesheet node in
> the result document. Of course, it is not there.
> I'm wondering why?
>
My only surprise here is that Xalan doesn't error on this stylesheet. The
rule is that an XSLT 1.0 processor, given a stylesheet that says
version="2.0", should give a run-time error if you try to execute an
instruction in the XSLT namespace that hasn't been defined in the XSLT 1.0
specification, unless it has an xsl:fallback child element.
Michael Kay
http://www.saxonica.com/
|