You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-users@xalan.apache.org by Csaba Koncz <cs...@gmail.com> on 2013/05/13 10:48:53 UTC

XPath expression in literal element namespace declaration

Hi all,

I need to generate a number of XML Schemas having some XML documents
as input (crazy, I know).

This is how I try to generate the root element of the schema:

    <xsl:param name="targetNS">http://a.com</xsl:param>

    <xsl:template match="/">
        <schema xmlns="http://www.w3.org/2001/XMLSchema"
                xmlns:tns="{$targetNS}"
                targetNamespace="{$targetNS}">
        </schema>
    </xsl:template>


Unfortunately the "{$targetNS}" expression in the xmln:tns attribute
is not evaluated, thus the created schema is unusable (I can not
reference types created for the target namespace).

The other way would be to declare the target namespace as the default
one in the schema, but that also fails.

Is there a restriction for using XPath expressions for namespace
declarations in the result document?

Is there a way to a achieve my goal to generate a namespace
declaration which is unknown at the time of writing the XSLT?

Thank you in advance,
Csaba

p.s. I am attaching the XSLT, a sample input and the generated output files.

Re: XPath expression in literal element namespace declaration

Posted by ke...@us.ibm.com.
> Is there a restriction for using XPath expressions for namespace 
declarations in the result document?

Literal namespace declarations are just that, literal namespace 
declarations. 

In XSLT 1.0, there really isn't an explicit way to create "namespace 
nodes" programmatically. The closest you can come is creating a nodeset 
containing an element which is in that namespace (which can be done) and 
then access the nodeset to find that Namespace Node and copy it into the 
target document. There should be an example of that in Dave Pawson's XSL 
FAQ website; I don't have a pointer handy right now.

XSLT 2.0 introduced a better mechanism, the <xsl:namespace> directive. 


______________________________________
"Everything should be as simple as possible. But not simpler." -- 
attributed to Albert Einstein

Csaba Koncz <cs...@gmail.com> wrote on 05/13/2013 04:48:53 AM:

> From:
> 
> Csaba Koncz <cs...@gmail.com>
> 
> To:
> 
> j-users@xalan.apache.org, 
> 
> Date:
> 
> 05/13/2013 04:47 AM
> 
> Subject:
> 
> XPath expression in literal element namespace declaration
> 
> Hi all,
> 
> I need to generate a number of XML Schemas having some XML documents
> as input (crazy, I know).
> 
> This is how I try to generate the root element of the schema:
> 
>     <xsl:param name="targetNS">http://a.com</xsl:param>
> 
>     <xsl:template match="/">
>         <schema xmlns="http://www.w3.org/2001/XMLSchema"
>                 xmlns:tns="{$targetNS}"
>                 targetNamespace="{$targetNS}">
>         </schema>
>     </xsl:template>
> 
> 
> Unfortunately the "{$targetNS}" expression in the xmln:tns attribute
> is not evaluated, thus the created schema is unusable (I can not
> reference types created for the target namespace).
> 
> The other way would be to declare the target namespace as the default
> one in the schema, but that also fails.
> 
> Is there a restriction for using XPath expressions for namespace
> declarations in the result document?
> 
> Is there a way to a achieve my goal to generate a namespace
> declaration which is unknown at the time of writing the XSLT?
> 
> Thank you in advance,
> Csaba
> 
> p.s. I am attaching the XSLT, a sample input and the generated output 
files.
> [attachment "in.out.xml" deleted by Joseph Kesselman/Watson/IBM] 
> [attachment "in.xml" deleted by Joseph Kesselman/Watson/IBM] 
> [attachment "schema-gen.xslt" deleted by Joseph Kesselman/Watson/IBM]