This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: XSLT and Default namespaces
- To: <xsl-list at mulberrytech dot com>
- Subject: RE: XSLT and Default namespaces
- From: "Evan Lenz" <elenz at xyzfind dot com>
- Date: Thu, 5 Oct 2000 17:32:29 -0700
- Reply-To: xsl-list at mulberrytech dot com
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