Subject: Matching on elements from namespaces
From: zun@xxxxxxxxxxxxxx
Date: Thu, 21 Oct 1999 16:31:20 -0400 (EWT)
|
Hi everyone,
I've run across two interesting issues in matching elements from
namespaces. The end goal is to have several stylesheets, each of which
process elements from a particular namespace, and then have a master
stylesheet which imports these stylesheets.
For example, I might want an XHTML stylesheet and a MathML stylesheet
which when combined together will generate HTML from a mixed XHTML/MathML
document.
What I'm finding is that writing the XHTML stylesheet is cumbersome. With
the latest version of XT and the following source:
<html xmlns="http://www.w3.org/TR/xhtml1/strict">
<head>
<title>Example page</title>
</head>
<body>Some stuff</body>
</html>
I have to write a stylesheet like the following:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0"
xmlns:xhtml="http://www.w3.org/TR/xhtml1/strict">
<xsl:output method="html"/>
<xsl:template match="/xhtml:html/xhtml:body">
<xsl:copy-of select="text()|xhtml:*"/>
</xsl:template>
</xsl:stylesheet>
Note the nasty match and select expressions. Now according to XPath
section 2.3 Node Tests,
A QName in the node test is expanded into an expanded-name using
the namespace declarations from the
expression context. This is the same way expansion is done for
element type names in start and end-tags except that
the default namespace declared with xmlns is not used: if the
QName does not have a prefix, then the namespace
URI is null (this is the same way attribute names are expanded).
For future versions of XSLT/XPath, what do you feel should be the best way
to reduce the clutter? How about an inputns attribute, so I can write
something like:
<xsl:template match="/html/body" inputns="http://www.w3.org/TR/xhtml1/strict">
<xsl:copy-of select="text()|*"/>
</xsl:template>
or an input-prefix attribute:
<xsl:template match="/html/body" input-prefix="xhtml">
<xsl:copy-of select="text()|*"/>
</xsl:template>
The second issue relates to my desire for having a separate stylesheet per
namespace. Right now, both xsl:include and xsl:import must be top-level
elements. If I have several hundred namespaces this can get unwieldy and
so I would like to have a facility to include only those stylesheets which
are currently applicable to the document at hand. That is, perhaps a top
level element to indicate a mapping between namespace and stylesheet.
Comments?
. . . Sean.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|