This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: XSLT and Default namespaces



If an element or attribute in the source document is in a namespace (whether
default or prefixed), your stylesheet *must* include a namespace declaration
corresponding to the same namespace and it *must* use a prefix as well
(whatever you want).  Even if your stylesheet itself has a default
namespace, that namespace will only be in effect for unprefixed element
names in the stylesheet, but not for names in XPath expressions or XSLT
patterns.

<snip href="http://www.w3.org/TR/xslt#qname" note="emphasis added">
2.4 Qualified Names
The name of an internal XSLT object, specifically a named template (see [6
Named Templates]), a mode (see [5.7 Modes]), an attribute set (see [7.1.4
Named Attribute Sets]), a key (see [12.2 Keys]), a decimal-format (see [12.3
Number Formatting]), a variable or a parameter (see [11 Variables and
Parameters]) is specified as a QName. If it has a prefix, then the prefix is
expanded into a URI reference using the namespace declarations in effect on
the attribute in which the name occurs. The expanded-name consisting of the
local part of the name and the possibly null URI reference is used as the
name of the object. ***The default namespace is not used for unprefixed
names.***
</snip>

Evan Lenz
elenz@xyzfind.com
http://www.xyzfind.com
XYZFind, the search engine *designed* for XML
Download our free beta software: http://www.xyzfind.com/beta


-----Original Message-----
From: owner-xsl-list@mulberrytech.com
[mailto:owner-xsl-list@mulberrytech.com]On Behalf Of Raimond Brookman
Sent: Thursday, October 05, 2000 12:03 PM
To: xsl-list@mulberrytech.com
Subject: XSLT and Default namespaces


Hi,

I want to transform an xml document that has declared a namespace, for
example:

<?xml version="1.0" encoding="UTF-8"?>
<test xmlns="myns">
 <a>
  <b></b>
 </a>
</test>

The corresponding XSLT is:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select="a/b"/>
 </xsl:template>
</xsl:stylesheet>

The resulting output document is empty.
When i dont use a default namespace and prefix the root elements in the
source document, and also declare the namespace in the XSL and use it in my
X-path, it works:

<?xml version="1.0" encoding="UTF-8"?>
<x:test xmlns:x="myns">
 <a>
  <b></b>
 </a>
</x:test>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:x="myns">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select="x:test/a/b"/>
 </xsl:template>
</xsl:stylesheet>

Result:
<?xml version="1.0" encoding="UTF-16"?>
<b xmlns:x="myns"></b>

So, after this lengthy introduction the following questions:
1. Is there a way to make this work without having to contantly prefix all
my xpath queries
2. Secondly, MS has come up with XDR, which is declared as follows:
    xmlns="x-schema:myschema.xdr"
    The problem is, that automatic validating happens in this case in tools
such as XML spy. I cant find a way to declare that namespace inside an XSLT
without having problems running the XLST because validation kicks in.....

Anybody know some workarounds for these things?

Grtz,
Raimond



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]