# File lib/data_objects/uri.rb, line 20
    def self.parse(uri)
      return uri if uri.kind_of?(self)

      if uri.kind_of?(Addressable::URI)
        scheme = uri.scheme
      else
        if uri[0,4] == 'jdbc'
          scheme    = uri[0,4]
          uri       = Addressable::URI::parse(uri[5, uri.length])
          subscheme = uri.scheme
        else
          uri       = Addressable::URI::parse(uri)
          scheme    = uri.scheme
          subscheme = nil
        end
      end

      self.new(
                :scheme     => scheme,
                :subscheme  => subscheme,
                :user       => uri.user,
                :password   => uri.password,
                :host       => uri.host,
                :port       => uri.port,
                :path       => uri.path,
                :query      => uri.query_values,
                :fragment   => uri.fragment,
                :relative   => !!uri.to_s.index('//') # basic (naive) check for relativity / opaqueness
              )
    end