def self.split(uri)
    case uri
    when ''
      
    when ABS_URI
      scheme, opaque, userinfo, host, port, 
        registry, path, query, fragment = $~[1..-1]
      
      
      
      
      
      
      
      
      if !scheme
        raise InvalidURIError, 
          "bad URI(absolute but no scheme): #{uri}"
      end
      if !opaque && (!path && (!host && !registry))
        raise InvalidURIError,
          "bad URI(absolute but no path): #{uri}" 
      end
    when REL_URI
      scheme = nil
      opaque = nil
      userinfo, host, port, registry, 
        rel_segment, abs_path, query, fragment = $~[1..-1]
      if rel_segment && abs_path
        path = rel_segment + abs_path
      elsif rel_segment
        path = rel_segment
      elsif abs_path
        path = abs_path
      end
      
      
      
      
      
      
      
    else
      raise InvalidURIError, "bad URI(is not URI?): #{uri}"
    end
    path = '' if !path && !opaque 
    ret = [
      scheme, 
      userinfo, host, port,         
      registry,                        
      path,                         
      opaque,                        
      query,
      fragment
    ]
    return ret
  end