table of contents
other versions
other sections
uri(3tcl) | Tcl Uniform Resource Identifier Management | uri(3tcl) |
NAME¶
uri - URI utilitiesSYNOPSIS¶
package require Tcl 8.2DESCRIPTION¶
This package contains two parts. First it provides regular expressions for a number of url/uri schemes. Second it provides a number of commands for manipulating urls/uris and fetching data specified by them. For the latter this package analyses the requested url/uri and then dispatches it to the appropriate package (http, ftp, ...) for actual fetching. The package currently does not conform to RFC 2396 ( http://www.rfc-editor.org/rfc/rfc2396.txt), but quite likely should be. Patches and other help are welcome.COMMANDS¶
- uri::split url ?defaultscheme?
- uri::split takes an url, decodes it and then
returns a list of key/value pairs suitable for array set containing
the constituents of the url. If the scheme is missing from the url
it defaults to the value of defaultscheme if it was specified, or
http else. Currently only the schemes http, ftp,
mailto, urn, news, ldap and file are
supported by the package itself. See section EXTENDING on how to
expand that range.
- ftp
- user, pwd, host, port, path, type
- http(s)
- user, pwd, host, port, path, query, fragment. The fragment is optional.
- file
- path, host. The host is optional.
- mailto
- user, host. The host is optional.
- news
- Either message-id or newsgroup-name.
- uri::join ?key value?...
- uri::join takes a list of key/value pairs (generated by uri::split, for example) and returns the canonical url they represent. Currently only the schemes http, ftp, mailto, urn, news, ldap and file are supported. See section EXTENDING on how to expand that range.
- uri::resolve base url
- uri::resolve resolves the specified url relative to base. In other words: A non-relative url is returned unchanged, whereas for a relative url the missing parts are taken from base and prepended to it. The result of this operation is returned. For an empty url the result is base.
- uri::isrelative url
- uri::isrelative determines whether the specified url is absolute or relative.
- uri::geturl url ?options...?
- uri::geturl decodes the specified url and
then dispatches the request to the package appropriate for the scheme
found in the url. The command assumes that the package to handle the given
scheme either has the same name as the scheme itself (including possible
capitalization) followed by ::geturl, or, in case of this failing,
has the same name as the scheme itself (including possible
capitalization). It further assumes that whatever package was loaded
provides a geturl-command in the namespace of the same name as the
package itself. This command is called with the given url and all
given options. Currently geturl does not handle any options
itself.
- uri::canonicalize uri
- uri::canonicalize returns the canonical form of a URI. The canonical form of a URI is one where relative path specifications, ie. . and .., have been resolved.
- uri::register schemeList script
- uri::register registers the first element of schemeList as a new scheme and the remaining elements as aliases for this scheme. It creates the namespace for the scheme and executes the script in the new namespace. The script has to declare variables containing the regular expressions relevant to the scheme. At least the variable schemepart has to be declared as that one is used to extend the variables keeping track of the registered schemes.
SCHEMES¶
In addition to the commands mentioned above this package provides regular expression to recognize urls for a number of url schemes. For each supported scheme a namespace of the same name as the scheme itself is provided inside of the namespace uri containing the variable url whose contents are a regular expression to recognize urls of that scheme. Additional variables may contain regular expressions for parts of urls for that scheme. The variable uri::schemes contains a list of all supported schemes. Currently these are ftp, ldap, file, http, gopher, mailto, news, wais and prospero.EXTENDING¶
Extending the range of schemes supported by uri::split and uri::join is easy because both commands do not handle the request by themselves but dispatch it to another command in the uri namespace using the scheme of the url as criterion. uri::split and uri::join call Split[string totitle <scheme>] and Join[string totitle <scheme>] respectively.CREDITS¶
Original code (regular expressions) by Andreas Kupries. Modularisation by Steve Ball, also the split/join/resolve functionality.BUGS, IDEAS, FEEDBACK¶
This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category uri of the Tcllib SF Trackers [http://sourceforge.net/tracker/?group_id=12883]. Please also report any ideas for enhancements you may have for either package and/or documentation.KEYWORDS¶
fetching information, file, ftp, gopher, http, ldap, mailto, news, prospero, rfc 2255, rfc 2396, uri, url, wais, wwwCATEGORY¶
Networking1.2.2 | uri |