Open Bug 213996 Opened 21 years ago Updated 2 years ago

XSLT <namespace-alias> element not support

Categories

(Core :: XSLT, defect)

x86
All
defect

Tracking

()

People

(Reporter: ian.graham, Assigned: peterv)

References

Details

Attachments

(1 file)

User-Agent:       Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko/20030624
Build Identifier: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko/20030624

As noted, the indicated XSLT element is not supported. Testcase (to be attached
also is as follows:

Load into Mozilla the following XML data file (data-5.xml):

<?xml version="1.0" ?>
<?xml-stylesheet href="transform-5.xsl" type="text/xsl"  ?>
<pa:data xmlns:pa="http://www.dummy.com/spaceA"
          xmlns:pb="http://www.dummy.com/spaceB" >
     raw data in data element
      <pa:item  att1="foo"  pa:att1="goo" pb:att2="boo"> item in spaceA element
</pa:item>
     <pb:item> item in spaceB element</pb:item>
 </pa:data>

This will then load in the stylesheet transform-5.xsl

<xsl:stylesheet version="1.0" 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   xmlns:xslout="http://dummy.org" >
  <xsl:namespace-alias stylesheet-prefix="xslout" result-prefix="xsl"  />
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
     <xslout:stylesheet version="1.0" >
        <xslout:output method="xml" indent="no" />
      ....
     </xslout:stylesheet>
</xsl:template>
</xsl:stylesheet>

The result should be something like:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no" />
      ....
     </xsl:stylesheet>

But Mozilla produces:

<xslout:stylesheet xmlns:xslout="http://dummy.org" version="1.0"><xslout:output
method="xml" indent="no"/>
      ....
     </xslout:stylesheet>

-- the output namespace is wrong. 

This fails on Mozilla 1.4 (release) and on latest Firebird build (Mozilla/5.0
(Windows; U; Win98; en-US; rv:1.5a) Gecko/20030725 Mozilla Firebird/0.6) 

Reproducible: Always

Steps to Reproduce:
1. see above.
2.
3.



Expected Results:  
SHould implement <namespace-alias> element.
I'm tempted to do this, but let's clear this out a bit first.

namespace-alias only works on literal results, but not on xsl:element or
xsl:attribute, right? As those don't create literal namespace URIs. Or am I
reading this too strict?
Summary: XSLT <namespace-alias> element not support → XSLT <namespace-alias> element not support
Not quite sure what you mean.  My guess has been that namespace-alias remapping
would be applied after the transformation is complete, and that the application
simply remaps the 'dummy' namespace (the one that's being aliased as
stylesheet-prefix) to the desired target namespace.  So, yes, in that sense it
only applies to the literal results. 

However, the details of this (7.7.1 in the spec) are, to my little mind, rather
hard to follow .... particularly for cases where there may be multiple aliasing
elemetns in the stylesheet ..
Pike: Yes, i read the spec the same way as you.

Ian: doing some sort of post-processing on the result document would be
hellishly hard, and is not how i read the spec.

We could implement it as some sort of post-processing on the compiled stylesheet
though... But i'm leaving that up to pike
The xalan tests are with me as well, namespace24 checks exactly that.

I'm afraid that I will need to do post-processing of the txStartLREElement and
txAttribute instructions on the merging of the stylesheets, as namespace aliasing
is not known during the compilation of the templates. I could extend the
evaluation context and whack the instructions to check on eval, but that seems to
be putting cost on this rarely used feature for everybody. And now I'm going
to add inspection code to instructions, bah on me.
Is there a way to add the support for the <namespace-alias> element ?
It is used to generate XSL from a xml/xsl transformation. There are no other way to generate xsl.

Ignore the element using the alias namespace, just add it to the output and replace the prefix with the one specified in the <namespace-alias> attribute.

I m afraid that now many people are using those sort of transformations and it's fully part of the xslt 1.0 recommendations as a high level item.
In cases of small stylesheets the XSL generation problem can be solved using xsl:element / xsl:attribute for elements in xsl namespace but it's very awkward IMO. Another workaround is some ugly postprocessing. Please add xsl:namespace-alias...
QA Contact: keith → xslt
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: