xsl-list
[Top] [All Lists]

Re: [xsl] Getting the root namespace from the input document

2007-02-06 05:00:34
  Here are the results on Xalan, xsltproc, Saxon 6 and Saxon 8:

~/tests$ xalan -XSL namespace-double.xsl -IN namespace-double.xml
<my:same xmlns:my="namespace-double.xsl" added="my:value">
  <my:other xmlns:my="other-uri" added="my:value"/>
</my:same>

~/tests$ xsltproc namespace-double.xsl namespace-double.xml
<my:same xmlns:my="namespace-double.xsl" added="my:value">
  <my:other xmlns:my="other-uri" added="my:value"/>
</my:same>

~/tests$ saxon namespace-double.xml namespace-double.xsl
Warning: at xsl:stylesheet on line 6 of namespace-double.xsl:
  Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
<my:same xmlns:my="namespace-double.xsl" added="my:value">
  <my:other xmlns:my="other-uri" added="my:value"/>
</my:same>

~/tests$ saxon6 namespace-double.xml namespace-double.xsl
Error at xsl:copy-of on line 15 of namespace-double.xsl:
  Cannot create two namespace nodes with the same name
Transformation failed: Run-time errors were reported

~/tests$ 

  Regards,

--drkm


bryan rasmussen wrote:

Okay I haven't gone and checked but I would expect that some
processors would change the namespace to fit the copy-of namespace.
At
any rate what were the outputs like? Did you have an output from the
processors that was illegal? If not, what did they do?

This seems like a useful transform to test a lot of processor outputs
on actually.
Cheers,
Bryan Rasmussen

On 2/6/07, Florent Georges <darkman_spam(_at_)yahoo(_dot_)fr> wrote:
Michael Kay wrote:

  Hi

There's also sometimes a theoretical risk that prefixes
will be changed because XSLT 1.0 permits it

  Yes, it is what I thought about.

but mainstream processors all do the decent thing in
straightforward cases.

  And that is why I use it.  But I'm not very comfortable
with the use of this "observable behaviour" without knowing
exactly how this happens (prefixes will be changed in
particular cases or not?).

  In XSLT 2.0, the transformation fails if you try to create
a namespace node whose the prefix is already bound to
another namespace URI.  I like that.  In XSLT 1.0, the
transformation succeed, your result is not correct and the
error will propagate further in the chain.

  Mmh, before to post, I just wrote a little test.  Input:

    <my:same xmlns:my="namespace-double.xsl">
      <my:other xmlns:my="other-uri"/>
    </my:same>

Stylesheet:

    <xsl:stylesheet
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
        xmlns:exsl="http://exslt.org/common";
        xmlns:my="namespace-double.xsl"
        exclude-result-prefixes="exsl"
        version="1.0">

      <xsl:output indent="yes" omit-xml-declaration="yes"/>

      <xsl:template match="*">
        <xsl:variable name="dummy-ns">
          <my:e/>
        </xsl:variable>
        <xsl:copy>
          <xsl:copy-of select="
             exsl:node-set($dummy-ns)/*/namespace::*"/>
          <xsl:attribute name="added">my:value</xsl:attribute>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>

      <xsl:template match="@*|node()" priority="-1">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>

    </xsl:stylesheet>

  I tested it with Saxon 6, Saxon 8, Xalan and xsltproc.
Actually, Saxon 6 was the only one to generate an error:

    Error at xsl:copy-of on line 16 of namespace-double.xsl:
      Cannot create two namespace nodes with the same name
    Transformation failed: Run-time errors were reported

  I thought in this case an XSLT 1.0 processor will change
one of the prefixes and not generate an error, but I didn't
find the right verses in the XSLT 1.0 REC.  Does any one
know those verses?

  Furthemore, I thought Saxon 8 didn't throw an error
because it was in compatibility mode, but the transformation
succeed even with an XSLT 2.0 stylesheet.  It fails if we
use xsl:namespace to create the node, but not if we use
xsl:copy-of to copy it.  Again, I didn't find in the XSLT
2.0 REC the difference between xsl:namespace and xsl:copy-of
regarding the duplicate namespace node names.  Any pointer?

  Regards,

--drkm


























___________________________________________________________________________
Découvrez une nouvelle façon d'obtenir des réponses à toutes vos
questions !
Profitez des connaissances, des opinions et des expériences des
internautes sur Yahoo! Questions/Réponses
http://fr.answers.yahoo.com


--~------------------------------------------------------------------
XSL-List info and archive: 
http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





        

        
                
___________________________________________________________________________ 
Découvrez une nouvelle façon d'obtenir des réponses à toutes vos questions ! 
Profitez des connaissances, des opinions et des expériences des internautes sur 
Yahoo! Questions/Réponses 
http://fr.answers.yahoo.com

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--