RE: [xsl] Can one _generate_ namespace nodes?

Subject: RE: [xsl] Can one _generate_ namespace nodes?
From: "Richard Lander" <rlander@xxxxxxxxxxxxx>
Date: Mon, 24 Feb 2003 12:20:02 -0800
I've developed an interesting scheme -- with help from various folks on this list -- for doing something along these lines. I hope that this approach helps people. In addition, I have an additional problem that I need help solving.

I have a file that maps XPaths to Word styles. It is a little more complicated than that, but that's the basic idea. The XPaths are namespace qualified, as are all good XPaths.

Near the top of the mapping file, I have the following markup:

		<xmlNamespaceManager>
			<mapping>
				<prefix>foo</prefix>
				<uri>http://foo</uri>
			</mapping>
			<mapping default="yes">
				<prefix>xhtml</prefix>
				<uri>http://www.w3.org/1999/xhtml</uri>
			</mapping>
		</xmlNamespaceManager>

I then have a transform that transforms the mapping file into a transform. In that transform, I have the following logic:

			<xslt:for-each select="m:xmlNamespaceManager/m:mapping">
				<xslt:attribute name="{m:prefix}:{m:prefix}" namespace="{m:uri}">
					<xslt:value-of select="m:prefix"/>
				</xslt:attribute>
			</xslt:for-each>

The result of these instructions in the resultant XML file, which happens to be a transform is:

<xslt:transform version="1.0" foo:foo="foo" xhtml:xhtml="xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml"; xmlns:foo="http://foo"; ...

I hope that helps. This discovery was certainly a big help to me.

So, on to my problem ... I'd like the make the xhtml namespace the default one in the document. I could generated an namespace-alias instruction, which would work if the xhtml content was prefixed with 'xhtml'; however, it is not qualified. Is there anyway that folks can see to extend this scheme to coerce a default namespace declaration on the root element?

It may be that my xhtml content needs to be qualified with xhtml. I believe, then, that the namespace aliasing trick should work. I would then do something like:

			<xslt:for-each select="m:xmlNamespaceManager/m:mapping[@default='yes'][1]">
				<x:namespace-alias stylesheet-prefix="{m:prefix}" result-prefix="#default"/>
			</xslt:for-each>

Assuming the following:

	<xslt:namespace-alias stylesheet-prefix="x" result-prefix="xslt"/>

Hope this all makes sense ...

Thanks,

Rich

-----Original Message-----
From: G. Ken Holman [mailto:gkholman@xxxxxxxxxxxxxxxxxxxx] 
Sent: Friday, February 21, 2003 11:42 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx

At 2003-02-21 19:24 -0500, Joseph Kesselman wrote:
>If anyone *does* know of
>an official and reliable way to generate a namespace declaration into a 
>document at a specific point

In the past I've tried unsuccessfully doing an <xsl:copy-of> from the stylesheet to the result as in:

<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                 xmlns:xslo="dummy"
                 version="1.0">

<xsl:namespace-alias stylesheet-prefix="xslo" result-prefix="xsl"/>

<xsl:template match="/">
   <output>
     <xsl:copy-of select="document('')/*/namespace::xslo"/>
     <xslo:embedded/>
   </output>
</xsl:template>

</xsl:stylesheet>

but though it works in XT it doesn't work in Saxon because in Saxon the dummy namespace URI of the copied namespace node isn't being translated.  I'm willing to accept either way as correct, but don't know which way that would be.

My fallback is to just add a placebo attribute to the result document element:

<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                 xmlns:xslo="dummy"
                 version="1.0">

<xsl:namespace-alias stylesheet-prefix="xslo" result-prefix="xsl"/>

<xsl:template match="/">
   <output xslo:dummy="">
     <xslo:embedded/>
   </output>
</xsl:template>

</xsl:stylesheet>

 > If not... well, the article goes out as "it's ugly but it works."

If adding the document element placebo is less ugly than the repeated declarations, and it doesn't interfere with the result (which it might ... 
I am changing the result information set by doing this and that may not be acceptable), then you are all set.

I hope this helps.

...................... Ken

--
Upcoming hands-on in-depth   Europe:         February 17-21, 2003
XSLT/XPath and/or XSL-FO     North America:      June 16-20, 2003

G. Ken Holman                mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd.         http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0   +1(613)489-0999 (F:-0995)
ISBN 0-13-065196-6                      Definitive XSLT and XPath
ISBN 0-13-140374-5                              Definitive XSL-FO
ISBN 1-894049-08-X  Practical Transformation Using XSLT and XPath
ISBN 1-894049-10-1              Practical Formatting Using XSL-FO
Male Breast Cancer Awareness http://www.CraneSoftwrights.com/s/bc


 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