[xquery-talk] namespace questions

Uwe Küssner UweKuessner at web.de
Mon May 8 14:32:05 PDT 2006


dear michael kay,

thank you for your answer, as far as I understand you, something like

let $x := element {QName('uri', 'local')} { 'content' }
return
<foo xmlns:sam="http://www.aaa.aaa/a">
{$x}
</foo>

should do the job. right ?
but the result is:

<foo>
    <local>content</local>
</foo>

both namespaces are not present.
is it because i have to configure the serialization (with saxon),
as Martin Probst said ?

probst >his is a serialization issue and depends on the implementation you
probst >use. I.e. in X-Hive a simple .toString() on an XML element won't add
probst >XML namespace declarations, but you can always use an XML serializer
probst >and set DomConfiguration.FEATURE_NAMESPACES to true in its config.

thank you.

uwe kuessner


> -----Ursprüngliche Nachricht-----
> Von: "Michael Kay" <mhk at mhk.me.uk>
> Gesendet: 08.05.06 10:23:27
> An:  <talk at xquery.com>
> Betreff: RE: [xquery-talk] namespace questions 


> > I use the follwing xquery:
> > 
> > declare namespace sam="http://www.aaa.aaa/a"; declare 
> > namespace huhu="http://www.aaa.aaa/b"; let $extern := <a 
> > namespace="huhu"/> return
> >    <foo>
> > 	<sam:bar/>
> > 	{element {concat($extern/@namespace,":","ele")} {"text"}}
> > 	</foo>
> > 
> > which generates:
> > 
> > <foo>
> >     <sam:bar/>
> >     <huhu:ele>text</huhu:ele>
> > </foo>
> > 
> > Questions:
> > 1.	What is necessary to create the missing namespace 
> > declarations xmlns:sam=”http://www.aaa.aaa/a”  in the foo element ?
> 
> Write <foo xmlns:sam="http://www.aaa.aaa/a"/>.
> 
> There are two kinds of namespace declarations in XQuery. "declare namespace"
> defines a namespace binding that can be used anywhere in the query, but
> which is not copied into constructed elements. An xmlns="xyz" declaration in
> a direct element constructor defines a binding that can be used anywhere
> lexically within that element constructor, and which is also copied to the
> result element.
> 
> > 2. If the second line  (declare namespace 
> > huhu=http://www.aaa.aaa/b”; is missing ) there is a runtime 
> > error. (Undeclared prefix in element name:huhu). If the 
> > prefix “huhu” of the namespace is not known in advance, but 
> > only at run time, is it still possible to construct a node 
> > “<huhu:ele>” ?
> 
> Yes, supply a value of type xs:QName(), which you can construct dynamically
> if you know the namespace URI and local name.
> 
> element {QName('uri', 'local')} { content }
> 
> Michael Kay
> http://www.saxonica.com/
> 





More information about the talk mailing list