On Nov 26, 2013, at 11:49 AM, Gisle Aas <gi...@activestate.com> wrote:

> There is also precedence for using "+" in scheme names.  Something like 
> "db+postgresql:" then.  It's still cluttered, and not really compatible with 
> what other have used.  Or "x-postgres:" while it's still experimental.  
> Naming stuff is hard.

Oh, I thought URI didn’t like +, but it turns out it is okay with it.

    $ perl -MURI -E 'say URI->new("x-ssh+foo://example.com")->scheme'
    x-ssh+foo

Cool. Downside: Each DB engine requires its own scheme, which would make formal 
registration rather a PITA. I do see some registered “hierarchical” schemes 
using a dot, though, e.g., iris.beep, iris.xpc, etc.:

  http://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml

Surely someone has done this before, though. :-(

Yeah, naming is hard. Probably why it’s one of my favorite things to do. :-)

> I don't know.  Version 2 of the mysql protocol perhaps.  I saw it at 
> https://github.com/kennethreitz/dj-database-url/blob/master/dj_database_url.py#L17

Well, if it’s a real thing, I’m happy to add it.

> The scheme really should just be named after the protocol, not the kind of 
> product you happen to find at the other end.

But scheme != protocol. [Wikipedia](http://en.wikipedia.org/wiki/URI_scheme) 
says:

> URI schemes are frequently and incorrectly referred to as "protocols", or 
> specifically as URI protocols or URL protocols, since most were originally 
> designed to be used with a particular protocol, and often have the same name. 
> The http scheme, for instance, is generally used for interacting with web 
> resources using HyperText Transfer Protocol. Today, URIs with that scheme are 
> also used for other purposes, such as RDF resource identifiers and XML 
> namespaces, that are not related to the protocol. Furthermore, some URI 
> schemes are not associated with any specific protocol (e.g. "file") and many 
> others do not use the name of a protocol as their prefix (e.g. "news").

To me it makes sense not to tie it to a particular protocol. I want to connect 
to a database, and don’t much care about the protocol. The PostgreSQL libpq URL 
starts with postgresql://, not libpq://.

> Is sqlite:///path relative or absolute then?  What about sqlite:/path?

Both are absolute. sqlite://path and sqlite:path are both relative. This is how 
my implementation handles them.

> dj-database-url claims 4 slashes is the way to go; sqlite:////path

Wow, is that ugly.

I was relying on the standard for file: URLs as the precedent.

> The ftp: standard had the same problem.  It was once specified that 
> ftp://server/%2Fpath was to be required to make the path absolute, while 
> ftp://server/path was supposed to be relative to the home directory you ended 
> up in after logging in to the ftp account.  This was very confusing to users 
> so most browers just implemented the path to always be absolute, with no way 
> to access relative paths. That's at least how I remembered it.

%2f is ugly. Of course, there is no host name in file: URIs. If we add it, as 
would be needed for Firebird, for example, I can see why dj-database-url ended 
up with four slashes: This is a full path:

    db:firebird://example.com//path/to/db

So I guess these should be equivalent:

    db:firebird:////path/to/db
    db:firebird:/path/to/db

The first has an empty string for the network location, the second has no 
network location part at all. I’ve just committed a fix to support this.

  
https://github.com/theory/uri-db/commit/cd60c7ac7e02572e5db3b39d2acb08b4a7fcfefe

Best,

David

Reply via email to