[xquery-talk] Using axis in XQuery

Michael Kay mhk at mhk.me.uk
Wed Dec 1 09:26:14 PST 2004

> This is one way
> declare function local:fullpath($node as node())
> {
> 	if (name($node)) then 
> 		concat(name($node), '/', local:fullpath($node/..))
> 	else ()
> };
> Ivan

This will fail with a type error if applied to a node in a tree whose root
is an element rather than a document node (it will call itself with an empty
sequence as the argument value). In a static-typing implementation it will
fail with a static type error because of this possibility.

You can solve the first problem by making the terminating condition

if ($node/..) then

It would also be cleaner to make the else branch return "" rather than (),
and to declare the return type as xs:string. 

Michael Kay

More information about the talk mailing list