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

yet another namespace question (unwanted xmlns=""

Subject: yet another namespace question (unwanted xmlns=""
From: "Birnbaum, David J" <djbpitt@xxxxxxxx>
Date: Sat, 14 Aug 2010 10:09:27 -0400
 yet another namespace question (unwanted xmlns=""
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

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.