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]