[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: How to stop xalan from deleting namespace declarat

Subject: RE: How to stop xalan from deleting namespace declarations
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Wed, 11 Jun 2003 15:10:13 +0100
xalan namespace prefix
A classic example of the problem that namespace prefixes don't matter,
except when they do.

The rules for xsl:namespace-alias don't say what namespace prefix should
be used in the result tree. This makes it difficult to reliably use a
namespace prefix within the content of the result document, as in your
example system-property('xsl:version').

You may be better off not using xsl:namespace-alias at all. I find it
more straightforward to write:

<xsl:element name="xsl:stylesheet">

etc., and this way you're more likely to get the prefix you want, though
it's still not guaranteed.

Using <xsl:element> to generate just the outermost (xsl:stylesheet)
element may be enough to force the processor to output a namespace
declaration for the desired prefix.

You can force the result tree to contain a particular namespace
declaration in XSLT 2.0 by using xsl:namespace, or in 1.0 by copying a
namespace node from another document. 

Michael Kay


> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of 
> Peter Janker
> Sent: 11 June 2003 08:00
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject:  How to stop xalan from deleting namespace declarations
> 
> 
> 
> Hello All,
> 
> I  try to write an  xslt-script that outputs an xslt-script. 
> Saxon (6.5.2) and MSXSL(3) seem to work but I have difficulties with 
> the namespace handling within xalan (2_5_0).
> Therefore I have three related questions concerning xalan(2-5-0) and 
> the handling of namespace declarations.
> 
> 1: How can I prevent xalan from deleting its own namespace 
> prefix declaration?
> 2: How can I prevent xalan from deleting a second namespace prefix 
> declaration for a given namespace?
> 3: How can I force xalan to explicitely write a namespace declaration 
> within a tag in the output script?
> (like: <out:apply-templates xmlns:xalan="http://xml.apache.org/xalan" 
> select="xalan:nodeset($Var)"/> )
> 
> Details:
> 
> The command
> <xsl:namespace-alias stylesheet-prefix="out" 
> result-prefix="xsl"/> is used to set the prefix in the output 
> script. (Saxon and msxsl replace the prefix, xalan uses the 
> prefix 'out' and 
> replaces the URL.)
> 
> To handle tree fragments in different environments I want to 
> know the vendor:
> 
> <out:variable name="Vendor" select="system-property('xsl:vendor')" />
> 
> 'xsl' because within the single quotes ('') the prefix is not 
> replaced.
> 
> Because of the URI-replacement xalan does not know the xsl 
> prefix. I thought a workaround would be to declare the 
> namespace either for 
> both prefixes or within the variable tag: 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:out="http://www.w3.org/1999/XSL/Transform"
> <out:variable name="Vendor" 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> select="system-property('xsl:vendor')" />
> 
> <out:apply-templates xmlns:xalan="http://xml.apache.org/xalan" 
> select="xalan:nodeset($Var)"/>
> 
> Unfortunately xalan is always deleting one of the declarations and 
> omittes the inline declaration.
> Furthermore xalan is always deleting its own namespace-prefix 
> declaration (xmlns:xalan="http://xml.apache.org/xalan" ) from the 
> stylesheet-tag and therefore the following lines
> in the output script do not work because of an unknown prefix 'xalan'.
> 
> <out:choose>
> ....
>     <out:when test="contains($Vendor, 'Apache') ">
>         <out:apply-templates select="xalan:nodeset($Var)"/>
>     </out:when>
> ....
> </out:choose>
> 
> 
> The transformation is started by a batch file with one line: 
> java -classpath 
> .;D:\jdk1.3.1_04\lib\tools.jar;D:\Xalan\xalan-j_2_5_0\bin\xala
> n.jar;D:\Xalan\xalan-j_2_5_0\bin\xml-apis.jar;D:\Xalan\xalan-j
> _2_5_0\bin\xercesImpl.jar 
> org.apache.xalan.xslt.Process -in m2t.xml -xsl m2t.xsl -out 
> xalan_m2T_out.xsl
> 
> The generated script xalan_m2T_out.xsl works if one adds the two by 
> xalan omitted declarations.
> 
> Thank you for your help.
> 
> 
> Peter
> 
> -- 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.