/**
   * DOM Level 3: Check a node to determine if it contains unbound namespace prefixes.
   *
   * @param node The node to check for unbound namespace prefices
   */
  protected void checkUnboundNamespacePrefixedNode(Node node) throws IOException {

    if (fNamespaces) {

      if (DEBUG) {
        System.out.println(
            "==>serializeNode(" + node.getNodeName() + ") [Entity Reference - Namespaces on]");
        System.out.println("==>Declared Prefix Count: " + fNSBinder.getDeclaredPrefixCount());
        System.out.println("==>Node Name: " + node.getNodeName());
        System.out.println("==>First Child Node Name: " + node.getFirstChild().getNodeName());
        System.out.println("==>First Child Node Prefix: " + node.getFirstChild().getPrefix());
        System.out.println(
            "==>First Child Node NamespaceURI: " + node.getFirstChild().getNamespaceURI());
      }

      Node child, next;
      for (child = node.getFirstChild(); child != null; child = next) {
        next = child.getNextSibling();
        if (DEBUG) {
          System.out.println("==>serializeNode(" + child.getNodeName() + ") [Child Node]");
          System.out.println("==>serializeNode(" + child.getPrefix() + ") [Child Node Prefix]");
        }

        // If a NamespaceURI is not declared for the current
        // node's prefix, raise a fatal error.
        String prefix = child.getPrefix();
        prefix =
            (prefix == null || prefix.length() == 0)
                ? XMLSymbols.EMPTY_STRING
                : fSymbolTable.addSymbol(prefix);
        if (fNSBinder.getURI(prefix) == null && prefix != null) {
          fatalError(
              "The replacement text of the entity node '"
                  + node.getNodeName()
                  + "' contains an element node '"
                  + child.getNodeName()
                  + "' with an undeclared prefix '"
                  + prefix
                  + "'.");
        }

        if (child.getNodeType() == Node.ELEMENT_NODE) {

          NamedNodeMap attrs = child.getAttributes();

          for (int i = 0; i < attrs.getLength(); i++) {

            String attrPrefix = attrs.item(i).getPrefix();
            attrPrefix =
                (attrPrefix == null || attrPrefix.length() == 0)
                    ? XMLSymbols.EMPTY_STRING
                    : fSymbolTable.addSymbol(attrPrefix);
            if (fNSBinder.getURI(attrPrefix) == null && attrPrefix != null) {
              fatalError(
                  "The replacement text of the entity node '"
                      + node.getNodeName()
                      + "' contains an element node '"
                      + child.getNodeName()
                      + "' with an attribute '"
                      + attrs.item(i).getNodeName()
                      + "' an undeclared prefix '"
                      + attrPrefix
                      + "'.");
            }
          }
        }

        if (child.hasChildNodes()) {
          checkUnboundNamespacePrefixedNode(child);
        }
      }
    }
  }