Namespace declarations in the source document are translated by the XML
parser into namespace nodes, they are not treated by XSLT as attribute
nodes. Therefore, a namespace declaration can never contain an attribute
value template (because it isn't an attribute).
You need to produce in the result tree a namespace node whose name
(=prefix) is "" and whose string value (=namespace URI) is "test". (It's
very confusing that you chose to use the name "prefix" to refer to the
namespace URI!
In XSLT 2.0 you can do this with
<xsl:namespace name=""><xsl:value-of select="@prefix"/></xsl:namespace>
In 1.0 there is no direct way of doing this. The nearest equivalent is:
<xsl:variable name="dummy">
<xsl:element name="e" namespace="{(_at_)prefix}"/>
</xsl:variable>
<xsl:copy select="xx:node-set($dummy)/*/namespace::*[(_dot_)=(_at_)prefix]"/>
This creates a dummy element in the required namespace, and then copies
the required namespace node to the result tree.
Michael Kay
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
Christian Sell
Sent: 03 October 2003 15:28
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] problem - generating XML schema via XSLT
Hello all,
I am trying to generate an XML schema file from an XML input
document,
and encounter a somewhat esoteric problem. I am using Xalan
2.5.1. The
input document is in essence a simplified version of the
schema. Heres
an example:
the input:
<library prefix="test">
<element name="dosome"/>
</library>
should become:
<xs:schema xmlns:xs="..." xmlns="test" targetNamespace="test">
<xs:element name=dosome type="ElementType"/>
<... type declaration ..>
</xs:schema>
So far all goes well, with the exception of the "xmlns"
attribute in the
output "xs:schema" element, which should hold the value of
the "prefix"
attribute from the "library" input element. I am trying to
achieve this
with the following literal result element inside the template that
matches the library element:
<xs:schema xmlns="{(_at_)prefix}" targetNamespace="{(_at_)prefix}">
...
</xs:schema>
(XML schema requires both the xmlns and the targetNamespace
attributes
to hold the same value). However, the result I get is:
<xs:schema xmlns="{(_at_)prefix}" targetNamespace="test">
Note that the value expression was resolved for the targetNamespace
attribute, but not for the xmlns attribute.
Is this an error with Xalan, or am I missing something? Does
anyone have
a suggestion how to achieve the desired result?
TIA,
Christian
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list