<div dir="ltr">Hi all,<div><br></div><div>A common question for beginners is how to access empty namespaced elements in non-empty contexts.  The easiest answer is to use a wildcard.  For example, we use one here inside the curly braces:</div><div><br></div><div>  let $x := <x><y/></x><br></div><div>  return</div><div>    <z xmlns="foo">{ $x/*:y }</z></div><div><br></div><div>As expected, this query returns:</div><div><br></div><div>  <z xmlns="foo"><y xmlns=""/></z></div><div><br></div><div>The other method I know of is to use the URI-qualified name:</div><div><br></div><div><div>  let $x := <x><y/></x><br></div><div>  return</div><div>    <z xmlns="foo">{ $x/Q{}y }</z></div><div><br></div></div><div>A third method occurred to me, but it does not work, and I haven't been able to pin down the reason despite reading the spec.  The idea is to bind the empty namespace URI to a namespace prefix, e.g., "my":</div><div><br></div><div>  declare namespace my="";<br></div><div>  </div><div><div>  let $x := <x><y/></x></div><div>  return</div><div>    <z xmlns="foo">{ $x/my:y }</z></div></div><div><br></div><div>In BaseX, eXist, and Saxon, this returns err:XPST0081 (<a href="https://www.w3.org/TR/xquery-31/#ERRXPST0081">https://www.w3.org/TR/xquery-31/#ERRXPST0081</a>).  The location of the error points to the step, "my:y" on the final line.</div><div><br></div><div>Can anyone enlighten me on the reason this 3rd method is invalid?  Bonus points for an explanation that includes why I cannot bind a namespace prefix to the empty namespace, but I can access it via *: and Q{}?</div><div><br></div><div>Thanks,</div><div>Joe</div></div>