object dom_implementation::createDocument(string_type ns_uri, string_type qname,
                                          boost::optional<doctype&> doctype) {
  arabica_doctype dt = doctype
                     ? static_cast<arabica_doctype>(doctype->underlying_impl())
                     : arabica_doctype();

  XML_CB_TRY {
    return master_node_map_->get_node( impl_.createDocument( ns_uri, qname, dt ) );
  } XML_CB_CATCH
}