RE: [XQuery] 3.7.4 Namespace nodes on constructed elements

For information, XSLT 2.0 does provide these two options in its
xsl:copy-of instruction, for much the reasons described.

One use case that motivated this was the need to extract the payload of
a SOAP message without copying all the SOAP namespaces.

There is a complication, which James Clark identified: if you don't copy
the namespace nodes, you can't safely copy the type annotations.

Michael Kay

> -----Original Message-----
> From: public-qt-comments-request@w3.org 
> [mailto:public-qt-comments-request@w3.org] On Behalf Of Jonathan Robie
> Sent: 13 February 2004 01:02
> To: XML Query Comments
> Subject: [XQuery] 3.7.4 Namespace nodes on constructed elements
> 
> 
> 
> For many applications, namespace node preservation is 
> overweight. For others, it is needed. The current definition 
> of XQuery can easily result in large numbers of superfluous 
> namespace nodes, especially when querying documents that use 
> several namespaces.
> 
> Consider the following data, taken from the DOM Issues List:
> 
> <issues xmlns:xlink="http://www.w3.org/1999/xlink"
>   xmlns:xi="http://www.w3.org/2001/XInclude"
>   xmlns="http://www.w3.org/2003/10/issues"
>   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> 
>   <header>
>     <title>DOM Level 3 Core Issues List</title>
>     <!-- SNIP -->
>   </header>
> </issues>
> 
> Now consider the following query, applied to this data:
> 
> <out>
> {
>  doc("dom-issues.xml")/issues/header/title
> }
> </out>
> 
> Here is the result, according to our current spec:
> 
> <out>
>  <title xmlns:xlink="http://www.w3.org/1999/xlink"
>   xmlns:xi="http://www.w3.org/2001/XInclude"
>   xmlns="http://www.w3.org/2003/10/issues"
>   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>   >DOM Level 3 Core Issues List</title>
> </out>
> 
> Although none of these namespaces are actually used in the 
> title element that was retrieved, our current specification 
> require that all namespaces in scope in the original document 
> must be in scope for the copied element in the constructed 
> element. Now suppose that we create several 
> namespace-decorated documents like this one, and perform an 
> XQuery that copies from each of these to create a new 
> document with even more namespaces...
> 
> Naturally, we do need to ensure that namespaces are preserved 
> if they are used in element names, attribute names, or 
> QNames. Consider the following query:
> 
> doc("dom-issues.xml")/issues//originator
> 
> The result must preserve the above-mentioned namespaces to 
> allow correct interpretation:
> 
> <originator xlink:type='simple' 
> xmlns:xlink="http://www.w3.org/1999/xlink"
> xlink:href="mailto:caillon@netscape.com">Christopher 
> Aillon</originator>
> 
> There are also XML vocabularies, such as XML Schema or XSLT, 
> that use QNames in content, and for these, all QNames really 
> must be preserved.
> 
> I think we should provide two modes of operation:
> 
> 1. Namespace preserving copy keeps all namespace nodes
> 
> 2. Normal copy keeps only namespace nodes used in element names,
>    attribute names, or instances of xs:QName.
> 
> One possibility would be to declare this at a global level:
> 
>   declare namespace-preserving = "true";
> 
> Another possibility would be to declare namespace 
> preservation for specific namespaces:
> 
>   declare namespace-preserving = "http://www.w3.org/2001/XMLSchema",
>      "http://www.w3.org/1999/XSL/Transform";
> 
> Either of these would reduce the overhead associated with 
> copying elements significantly in some implementation environments.
> 
> Jonathan
> 

Received on Friday, 13 February 2004 07:27:14 UTC