/**
  * Declare a namespace whose prefix can be used in expressions. Namespaces may either be
  * pre-declared (the traditional Saxon interface), or they may be resolved on demand using a
  * supplied NamespaceContext. When a prefix has to be resolved, the parser looks first in the
  * pre-declared namespaces, then in the supplied NamespaceContext object.
  *
  * @param prefix The namespace prefix. Must not be null. Must not be the empty string ("") -
  *     unqualified names in an XPath expression always refer to the null namespace.
  * @param uri The namespace URI. Must not be null.
  */
 public void declareNamespace(String prefix, String uri) {
   if (prefix == null) {
     throw new NullPointerException("Null prefix supplied to declareNamespace()");
   }
   if (uri == null) {
     throw new NullPointerException("Null namespace URI supplied to declareNamespace()");
   }
   namespaces.put(prefix, uri);
   namePool.allocateNamespaceCode(prefix, uri);
 }
 /**
  * Declare a variable. A variable may be declared before an expression referring to it is
  * compiled. Alternatively, a JAXP XPathVariableResolver may be supplied to perform the
  * resolution. A variable that has been explicitly declared is used in preference.
  *
  * @param qname Lexical QName identifying the variable. The namespace prefix, if any, must have
  *     been declared before this method is called, or must be resolvable using the namespace
  *     context.
  * @param initialValue The initial value of the variable. A Java object that can be converted to
  *     an XPath value.
  */
 public Variable declareVariable(String qname, Object initialValue) throws XPathException {
   String prefix;
   String localName;
   try {
     String[] parts = Name.getQNameParts(qname);
     prefix = parts[0];
     localName = parts[1];
   } catch (QNameException err) {
     throw new StaticError("Invalid QName for variable: " + qname);
   }
   String uri = "";
   if (!("".equals(prefix))) {
     uri = getURIForPrefix(prefix);
   }
   Variable var = Variable.make(qname, getConfiguration());
   var.setValue(initialValue);
   int fingerprint = namePool.allocate(prefix, uri, localName) & 0xfffff;
   variables.put(new Integer(fingerprint), var);
   stackFrameMap.allocateSlotNumber(fingerprint);
   return var;
 }
 /** Set the default namespace for element and type names */
 public void setDefaultElementNamespace(String uri) {
   defaultElementNamespace = namePool.allocateCodeForURI(uri);
 }