Loading TOC...

fn.resolveQName

fn.resolveQName(
   qname as String?,
   element as Node
) as xs.QName?

Summary

Returns an xs:QName value (that is, an expanded QName) by taking an xs:string that has the lexical form of an xs:QName (a string in the form "prefix:local-name" or "local-name") and resolving it using the in-scope namespaces for a given element.

Parameters
qname A string of the form "prefix:local-name".
element An element providing the in-scope namespaces to use to resolve the qualified name.

Usage Notes

Sometimes the requirement is to construct an xs:QName without using the default namespace. This can be achieved by writing:

     if ( fn:contains($qname, ":") )
     then ( fn:resolve-QName($qname, $element) )
     else ( fn:QName("", $qname) )

If the requirement is to construct an xs:QName using the namespaces in the static context, then the xs:QName constructor should be used.

If $qname does not have the correct lexical form for xs:QName an error is raised [err:FOCA0002].

If $qname is the empty sequence, returns the empty sequence.

More specifically, the function searches the namespace bindings of $element for a binding whose name matches the prefix of $qname, or the zero-length string if it has no prefix, and constructs an expanded QName whose local name is taken from the supplied $qname, and whose namespace URI is taken from the string value of the namespace binding.

If the $qname has a prefix and if there is no namespace binding for $element that matches this prefix, then an error is raised [err:FONS0004].

If the $qname has no prefix, and there is no namespace binding for $element corresponding to the default (unnamed) namespace, then the resulting expanded QName has no namespace part.

The prefix (or absence of a prefix) in the supplied $qname argument is retained in the returned expanded QName, as discussed in Section 2.1 Terminology[DM].

Example

const foo = xdmp.unquote('<foo xmlns:eg="eg"/>');
const el = fn.head(foo).xpath("/element()");
fn.resolveQName("hello", el);

=> a QName with local name "hello"
   that is in no namespace.

const foo = xdmp.unquote('<foo xmlns:eg="eg"/>');
const el = fn.head(foo).xpath("/element()");
fn.resolveQName("eg:myFunc", el);

=> an xs:QName whose namespace URI is specified
   by the namespace binding corresponding to the
   prefix "eg" and whose local name is "myFunc".

Stack Overflow iconStack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.