uri is a Tcllib module for parsing and manipulating URIs .
uri::split breaks a URI up into its component parts .
The parts identified depend on the schemes supported. For instance, for ftp, the pieces identified are
The file protocol is supported
The data protocol is not yet supported .
LV: What does "doesn't yet support" mean?
AK: That the code does not know to handle such urls (split/join). There are no regexp patterns either.
LV: but I see this behavior with tcl8.4 and tcllib 1.0:
% package require uri 1.0 % set name "file://home/lwv26/myfile.txt" file://home/lwv26/myfile.txt % uri::split $name path /lwv26/myfile.txt scheme file host home
So it LOOKS like file is supported.
The new Tcl 8.4a4 VFS layer by Vince Darley simplifies this work. See the "tclvfs" extension on SourceForge [L1 ] for example code which opens http, ftp, zip, and more - using the "blah:..." notation.
HaO 2013-05-03 I tried to use 'uri::canonicalize' to implement a smart url completer, e.g. to say transform "test.de" to "http://test.de/ ".
% package require uri 1.2.2 % uri::canonicalize test.de http:///test.de
So there are 3 slashes instead of two and no trailing slash. This is not what I intended.
The reason is, that 'uri::canonicalize' internally uses 'uri::split' and 'uri::join'' and the first interpretes the given data as a path and not as a host:
% ::uri::split test.de fragment {} port {} path test.de scheme http host {} query {}
AK: The urn handler was added to tcllib after the 1.1.0 release