code: void appendNSDeclaration(int prefixIndex, int namespaceIndex,
                             boolean isID)
    {
      // %REVIEW% I'm assigning this node the "namespace for namespaces"
      // which the DOM defined. It is expected that the Namespace spec will
      // adopt this as official. It isn't strictly needed since it's implied
      // by the nodetype, but for now...
  
      // %REVIEW% Prefix need not be recorded; it's implied too. But
      // recording it might simplify the design.
  
      // %TBD% isID is not currently honored.
  
      final int namespaceForNamespaces=m_nsNames.stringToIndex("http://www.w3.org/2000/xmlns/");
  
      // W0  High:  Namespace  Low:  Node Type
      int w0 = NAMESPACE_NODE | (m_nsNames.stringToIndex("http://www.w3.org/2000/xmlns/")<<16);
  
      // W1:  Parent
      int w1 = currentParent;
      // W2:  CURRENTLY UNUSED -- It's next-sib in attrs, but we have no kids.
      int w2 = 0;
      // W3:  namespace name
      int w3 = namespaceIndex;
      // Add node
      int ourslot = appendNode(w0, w1, w2, w3);
      previousSibling = ourslot;	// Should attributes be previous siblings
      previousSiblingWasParent = false;
      return ;//(m_docHandle | ourslot);
    }
docs: Append a Namespace Declaration child at the current insertion point.
  Assumes that the symbols (namespace URI and prefix) have already been
  added to the pools
  
  @param prefixIndex: Index within the prefix string pool
  @param namespaceIndex: Index within the namespaceURI string pool
  @param isID: If someone really insists on writing a bad DTD, it is
  theoretically possible for a namespace declaration to also be declared
  as being a node ID. I don't really want to support that stupidity,
  but I'm not sure we can refuse to accept it.