Hello Jörn,
I need to create an XML document from data in BaseX 11.5 inside basexgui. The data in the database does not use any namespaces. The document I am creating must have a default namespace set. Here is a stripped down example of my XQuery: for $w in /json/workouts/_/header[uuid='123'] return
<gpx xmlns="http://www.topografix.com/GPX/1/1" > <title>{$w/title/text()}</title> </gpx> Strangely all XPaths inside and outside the gpx-element will not match anything as long as I have the default namespace on the gpx-element defined. It works if I drop the xmlns attribute or I define the namespace explicitly, like: for $w in /json/workouts/_/header[uuid='123'] return <g:gpx xmlns:g="http://www.topografix.com/GPX/1/1" > <g:title>{$w/title/text()}</g:title> </g:gpx>
I think I made a standalone (no database) example that illustrates your issue:
let $doc := document { <json> <workouts> <_> <header> <uuid>123</uuid> <title>title 1</title> </header> </_> <_> <header> <uuid>123</uuid> <title>title 2</title> </header> </_> </workouts> </json> } let $gpx1 := for $w in $doc/json/workouts/_/header[uuid='123'] let $title := $w/title/text() return <gpx xmlns="http://www.topografix.com/GPX/1/1" > <title>{$w/title/text()}</title> <titlex>{$w/*:title/text()}</titlex> <titley>{$title}</titley> </gpx> let $gpx2 := for $w in $doc/json/workouts/_/header[uuid='123'] return <g:gpx xmlns:g="http://www.topografix.com/GPX/1/1" > <g:title>{$w/title/text()}</g:title> </g:gpx> return ( $gpx1 , $gpx2 )
When I run this in the BaseX GUI, I get
<gpx xmlns="http://www.topografix.com/GPX/1/1"><title/><titlex>title 1</titlex><titley>title 1</titley></gpx> <gpx xmlns="http://www.topografix.com/GPX/1/1"><title/><titlex>title 2</titlex><titley>title 2</titley></gpx> <g:gpx xmlns:g="http://www.topografix.com/GPX/1/1%22%3E<g:title>title 1</g:title></g:gpx> <g:gpx xmlns:g="http://www.topografix.com/GPX/1/1%22%3E<g:title>title 2</g:title></g:gpx>
The default namespace on <gpx> becomes the default namespace in the XPath expression. I am not sure if this is correct, and I have not looked this up in the specification.
Maybe someone who is more knowledgeable can tell if this behaviour is correct. For now, I suggest you use the additional $title variable.
Best regards, Nico Verwer