This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Why does using the XSL namespace default namespace preclude literal result elements in the empty namespace?
- To: xsl-list at lists dot mulberrytech dot com
- Subject: Re: [xsl] Why does using the XSL namespace default namespace preclude literal result elements in the empty namespace?
- From: tcn at melvaig dot co dot uk (Trevor Nash)
- Date: Sat, 21 Jul 2001 15:32:25 GMT
- Organization: Melvaig Software Engineering Limited
- References: <3B593436.2050803@brioforge.com> <15193.34092.766000.83820@gargle.gargle.HOWL>
- Reply-To: xsl-list at lists dot mulberrytech dot com
On Sat, 21 Jul 2001 09:35:40 -0400 (Eastern Daylight Time), Mark
Nahabedian <naha@ai.mit.edu> wrote:
>Aaron Hope writes:
> > I know that's a long subjetct but the instructions said to be specific...
> >
> > I've got a stylesheet with 80-90% of elements in the xsl namespace, the
> > rest being literal result elements destined for html output. All those
> > xsl: prefixes add up to a lotta noise, and well, i can't help but feel
> > there should be a way to avoid it. If what i gather from the 1.0 spec
> > is correct, then these elements can't simply be in an html: namespace
> > (html 4.0 or xhtml, say). I know I can replace them with <element> and
> > <attribute> tags, but, again, that's a lot of noise and you end up
> > putting in c-like terminator comments, e.g. </element><!-- table -->.
> > At first I read the namespace-alias entry and I said "Ooh, there we
> > go!", but no, since you can't have empty namespaces other than the
> > default, there's no way to set the result namespace to the null namespace.
>
>The XSLT and HTML names are in different namespaces. Those namespaces
>can not both be the default namespace at the same time. What I do is
>pick the one that it's the biggest nuissance to type the prefix for
>(usially XSLT) as the default namespace.
>
> > So, after all that here's my question: why can't i say
> > <namespace-alias stylesheet-prefix="html" result-prefix="#none"/>? (or
> > #empty or #null, etc)
>
Because namespace-alias is used to swap one namespace for another. It
has nothing to do with what prefix the XSLT processor uses in the
output: you do not get any control over this, though most processors
try to follow what is in the input.
It is a feature of the namespace recommendation that the empty
namespace cannot be associated with a prefix. I.e. you can say
xmlns="" but not xmlns:null="". If you want the empty namespace in
the output, then you have to reserve the default namespace for literal
result elements. I guess somebody somewhere knows why?
>What's wrong with using the zero length string, as in
>
> <namespace-alias stylesheet-prefix="html" result-prefix=""/>
>
This is not legal. The default namespace is referred to by '#default'
not ''. Besides, the effect would be to declare the output elements
in the XSLT namespace, which is not what you want.
>Admittedly, the one time I recall trying to do this it didn't work,
>but I attributed that to a bug in the processor I was using, which was
>beta software.
>
One way to address this problem, and other perceived shortcomings of
XSLT syntax, is to write a stylesheet which takes something like
<stylesheet>
<template match="/">
<h:html/>
</template>
</stylesheet>
and produces
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
>
<xsl:template match="/">
<html/>
</xsl:template>
</xsl:stylesheet>
Its not hard. Though you will have to understand what namespace-alias
really does, and you may end up finding out more than you really want
to know about white space handling ;-)
Regards,
Trevor Nash
--
Traditional training & distance learning,
Consultancy by email
Melvaig Software Engineering Limited
voice: +44 (0) 1445 771 271
email: tcn@melvaig.co.uk
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list