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

Literal result element namespace differs from xsl:elem

Subject: Literal result element namespace differs from xsl:element namespace
From: "Jones, Rick" <rick.jones@xxxxxxxx>
Date: Wed, 17 Dec 2003 16:59:10 -0000
xsl element namespace
I'm getting a problem with namespaces, where the output document needs to
change its namespace in the middle. Saxon works OK, but libxslt behaves
differently.

Here's a highly simplified example - the intended output is:

<?xml version="1.0"?>
<Message xmlns="http://me.envelope">
  <Header>
    <Title>My document</Title>
    <From>someone</From>
  </Header
  <Body xmlns="http://me.content">
    <Item>
      <Ref>1234</Ref>
      <Info desc="A widget">
        <Note>min qty 5</Note>
      </Info>
      <Quantity>10</Quantity>
    </Item>
    <!-- etc. -->
</Message>

	note the change in namespace (fictitious URIs for simplicity)

Source is:

<?xml version="1.0"?>
<report>
	<title>My Document</title>
	<origin>someone</origin>
	<form>
		<code>1234</code>
		<description note="min qty 5">A widget</description>
		<qty>10</qty>
	</form>
	<form>
		<code>99999</code>
		<description note="add comment">Miscellaneous</description>
		<qty>3</qty>
	</form>
</report>

And stylesheet is:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://me.envelope"
    version="1.0">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="report">
    <Message>
      <Header>
        <Title><xsl:value-of select="title"/></Title>
        <From><xsl:value-of select="origin"/></From>
      </Header>
      <Body xmlns="http://me.content">
        <xsl:for-each select="form">
          <Item>
            <Ref><xsl:value-of select="code"/></Ref>
            <xsl:element name="Info">
              <xsl:attribute name="desc">
                <xsl:value-of select="description"/>
              </xsl:attribute>
              <Note><xsl:value-of select="description/@note"/></Note>
            </xsl:element>
            <Quantity><xsl:value-of select="qty"/></Quantity>
          </Item>
        </xsl:for-each>
      </Body>
    </Message>
  </xsl:template>
</xsl:stylesheet>

But using libxslt (in fact xsltproc) this produces:

<?xml version="1.0"?>
<Message xmlns="http://me.envelope">
  <Header>
    <Title>My Document</Title>
    <From>someone</From>
  </Header>
  <Body xmlns="http://me.content">
    <Item xmlns="http://me.envelope">
      <Ref>1234</Ref>
      <Info xmlns="http://me.content" desc="A widget">
        <Note xmlns="http://me.envelope">min qty 5</Note>
      </Info>
      <Quantity>10</Quantity>
    </Item>
    <Item xmlns="http://me.envelope">
      <Ref>99999</Ref>
      <Info xmlns="http://me.content" desc="Miscellaneous">
        <Note xmlns="http://me.envelope">add comment</Note>
      </Info>
      <Quantity>3</Quantity>
    </Item>
  </Body>
</Message>

	note all the xmlns attributes !

It seems to assume that literal result elements in the style sheet that are
children of Body belong to the top-level default namespace, not the
namespace declared on Body. It thus switches namespace in the output.

However, elements created by xsl:element are assumed to belong to the inner
namespace. With a mixture of both methods of creating elements, the output
contains a mass of namespace changes (all wrong).

The real application is vastly more complex than this, and I'm hoping to be
able to use xsltproc (or a custom app using libxslt) without having to
resort to major reconstruction of the stylesheet (the only way I can see to
fix it so far is to add explicit namespaces to every element in the
stylesheet :( )

It strikes me as inconsistent, but I can't find anything explicit in the
books or docs. that says how this should work. Is Saxon and MSXML wrong, or
is libxslt - or is it "undefined"?

Comments and suggestions much appreciated

TIA
Rick Jones


--------------------------------------------------------------------------------------------
The statements and opinions expressed here are my own
and may not represent those of the company.
This e-mail is subject to copyright and the information in it
is confidential. It is intended only for the named recipient. 
You are advised not to disclose the contents of this e-mail
to another person or take copies of it.
---------------------------------------------------------------------------------------------


 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.