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(_at_)pitt(_dot_)edu
--~------------------------------------------------------------------
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>
--~--