Subject: Re: [xsl] yet another namespace question (unwanted xmlns="" From: Michael Kay <mike@xxxxxxxxxxxx> Date: Sat, 14 Aug 2010 15:37:00 +0100 |
Michael Kay Saxonica
Dear XSL-List,
The input file to the transformation below is not in any namespace, and I'm generating xhtml with in-line svg. The stylesheet below is just a development test; all it does for the moment is count and print (as<svg:text> elements) the position numbers of the nine chapter elements in the input document. The stylesheet works, but it creates xmlns="" output on the svg:text nodes, which, as far as I can tell, are unnecessary: __
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:svg="http://www.w3.org/2000/svg" version="2.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg"> <head> <title>Title goes here</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> </head> <body> <h1>Title goes here</h1> <svg:svg width="100%" height="100%"> <xsl:apply-templates select="//chapter"/> </svg:svg> </body> </html> </xsl:template> <xsl:template match="chapter"> <xsl:variable name="xPos" select="position()"/> <svg:text x="{$xPos}%" y="50%"> <xsl:value-of select="$xPos"/> </svg:text> </xsl:template> </xsl:stylesheet> __
The output (Saxon), when I feed it my xml with 9<chapter> elements, is: __
<?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg"> <head> <title>Title goes here</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> </head> <body> <h1>Title goes here</h1> <svg:svg width="100%" height="100%"> <svg:text xmlns="" x="1%" y="50%">1</svg:text> <svg:text xmlns="" x="2%" y="50%">2</svg:text> <svg:text xmlns="" x="3%" y="50%">3</svg:text> <svg:text xmlns="" x="4%" y="50%">4</svg:text> <svg:text xmlns="" x="5%" y="50%">5</svg:text> <svg:text xmlns="" x="6%" y="50%">6</svg:text> <svg:text xmlns="" x="7%" y="50%">7</svg:text> <svg:text xmlns="" x="8%" y="50%">8</svg:text> <svg:text xmlns="" x="9%" y="50%">9</svg:text> </svg:svg> </body> </html> __
Since the<svg:text> elements all have a namespace prefix that is defined in the<html> root element, the inclusion of:
xmlns=""
while harmless with respect to what is rendered in the browser for the user, seems unnecessary. I can make it go away by changing the<chapter> template to: __
<xsl:template match="chapter"> <xsl:variable name="xPos" select="position()"/> <svg:text x="{$xPos}%" y="50%" xmlns="http://www.w3.org/2000/svg" xsl:exclude-result-prefixes="#default"> <xsl:value-of select="$xPos"/> </svg:text> </xsl:template> __
This creates the output that I think I want, with<svg:text> elements like: __
<svg:text x="1%" y="50%">1</svg:text> __
Not a big deal at the moment, perhaps, but I would prefer not to have to suppress a namespace definition that appears to be irrelevant to the output separately, explicitly, and individually for every element I create in the svg namespace. Aside from the aesthetics, as the stylesheet grows beyond being a frustrating namespace exercise into something that generates useful output, there emerges a real development and maintenance cost. What I'd like to be able to do is include a declaration only once in the stylesheet, so that it will then apply automatically to exclude the xmlns="" where it isn't needed, that is, on elements in the svg namespace.
I've read, tinkered, and googled, but I seem to keep missing the solution. Since the default namespace isn't being used and the namespace of the literal result element is specified by a prefix, is there a graceful general (global) way to prevent the stylesheet from generating the superfluous xmlns="" output on what will eventually become more complex in-line svg?
Thanks,
David djbpitt@xxxxxxxx
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] yet another namespace que, Martin Honnen | Thread | [no subject], Unknown |
Re: [xsl] yet another namespace que, Martin Honnen | Date | [no subject], Unknown |
Month |