xsl-list
[Top] [All Lists]

RE: problem - generating XML schema via XSLT

2003-10-03 10:08:57
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