    /*
     *  call-seq:
     *    namespace_definitions()
     *
     *  returns namespaces defined on self element directly, as an array of Namespace objects. Includes both a default namespace (as in"xmlns="), and prefixed namespaces (as in "xmlns:prefix=").
     */
    static VALUE namespace_definitions(VALUE self)
    {
      /* this code in the mode of xmlHasProp() */
      xmlNodePtr node ;
      VALUE list;
      xmlNsPtr ns;

      Data_Get_Struct(self, xmlNode, node);

      list = rb_ary_new();

      ns = node->nsDef;

      if(!ns) return list;

      while(NULL != ns) {
        rb_ary_push(list, Nokogiri_wrap_xml_namespace(node->doc, ns));
        ns = ns->next;
      }

      return list;
    }