[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Subject: Re: Use of QNames
I think I have burnt most of my arguments, especially if you don't
answer my points about the architecture...
However, can I submit a (last?) use case ?
James Clark wrote:
>
> Eric van der Vlist wrote:
>
> > > - XPath/XSLT (namespace axis provides *exactly* this information)
> >
> > The namespace axis is very weak compared to the other axis (you can't
> > apply templates on it and you can't easily replace a prefix by another
> > one) and it would be much easier to manipulate the syntax I have
> > proposed than a syntax based on namespaces declarations.
>
> I disagree: in some ways it's easier using namespace declarations than
> using a new syntax, because if you use namespace declarations XSLT/XPath
> handles inheritance for you, and automatically ensures that the
> appropriate namespace declarations are copied over and generated as
> necessary.
Taking back the example:
<?xml version="1.0" encoding="UTF-8"?>
<element name="e:addressBook" xmlns:e="http://www.example.com">
<zeroOrMore>
<element name="e:card">
<element name="e:name">
<anyString/>
</element>
<element name="e:email">
<anyString/>
</element>
</element>
</zeroOrMore>
</element>
Can you show me how we can write a generic transformation that would
produce
<?xml version="1.0" encoding="UTF-8"?>
<element name="e:addressBook" xmlns:e="http://www.example.com/v2">
<zeroOrMore>
<element name="e:card">
<element name="e:name">
<anyString/>
</element>
<element name="e:email">
<anyString/>
</element>
</element>
</zeroOrMore>
</element>
(or equivalent) to adapt the TREX schema to a modification of the
namespace of my vocabulary to prepare a next version ?
The transformation should, of course, handle namespace declaration that
can be done on any element.
I have given it a naive try:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="old" select="'http://www.example.com'"/>
<xsl:param name="new" select="'http://www.example.com/v2'"/>
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="node()|@*"/>
<xsl:for-each select="namespace::*[.=$old]">
????
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
but I am blocked at the question marks since I cannot create a namespace
node with the old prefix and the new URI.
I could do it if there was an element or attribute to create as a
literal with this namespace, but it's not the case here.
The only solution that seems to be left is to define a new namespace
prefix (for instance in the top level element if I accept to write it as
a literal and/or to add a dummy attribute somewhere that would be using
it) and to analyze all the attributes that can hold a namespace prefix
to change their prefix when needed.
Doesn't look straightforward to handle the general case where the prefix
may be redefine in each element and a URI have multiple prefixes !
I may of course have missed something since I am not using the namespace
axis that much ;=) ...
Eric
> James
--
See you in Austin (Knowledge Technologies 2001)
http://www.gca.org/attend/2001_conferences/kt_2001/mon.htm
------------------------------------------------------------------------
Eric van der Vlist Dyomedea http://dyomedea.com
http://xmlfr.org http://4xt.org http://ducotede.com
------------------------------------------------------------------------
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Powered by eList eXpress LLC