afnix-nwg(3)
nwg - standard network working group module
Description
nwg
NAME
nwg - standard network working group module
STANDARD NETWORK WORKING GROUP MODULE
The Standard Network Working Group module is an original implemtation of the recommendations proposed by the NWG and currently found in the form of Request for Comments (RFC). Most of the objects are used with networking application, with the most common one beeing the Universal Resource Identifier (URI) object.
The uri
class
The Uri class is a base class that parses a Uniform Resource
Identifier or uri string and provides methods to access
individual component of that uri. The implementation
conforms to RFC 3986. The URI components are the scheme, the
authority, the path, the query and the fragment. The class
also takes care of the character escaping.
const uri (afnix:www:Uri "http://www.afnix.org")
An uri can be broken into several components called the scheme, the authority, the path, optionally the query and the fragment. The Uri class provide a method to retrieve each component of the parsed uri.
const uri
(afnix:www:Uri "http://www.afnix.org/")
println (uri:get-scheme) # http
println (uri:get-authority) # www.afnix.org
println (uri:get-path) # /
Character
conversion
The Uri class performs automatically the character
conversion in the input uri. For example, the + character is
replaced by a blank. The % character followed by two
hexadecimal values is replaced by the corresponding ASCII
character. Note that this conversion does now apply to the
query string.
Query
string
The get-query method returns the query string of the uri.
The query string starts after the ? character. The query
string is a series of key-pair values separated by the &
character.
const uri
(afnix:www:Uri
"http://www.afnix.org?name=hello&value=world")
println (uri:get-query) # name=hello&value=world
The module also provides the UriQuery class that parses the query string and store the result in the form of a property list. The query string parse is particularly useful when writing automated scripts.
# create a query
string object
const qs (afnix:nwg:UriQuery (uri:get-query))
# get the name value
qs:get-value "name"
Managing a
cgi request
Managing a cgi request involves primarily the parsing of the
requesting uri. The uri generally contains the http referrer
as well as parameter which are stored in the form of a query
string. However, depending on the cgi method which can be of
type GET or POST, the treatment is somewhat different.
Checking the
protocol version
In the presence of a cgi protocol, it is always a good idea
to check the protocol version, or at least to put an
assertion. The protocol version is normally CGI/1.1 and is
stored in the GATEWAY_INTERFACE environment variable.
# check the cgi
protocol
assert "CGI/1.1" (
afnix:sys:get-env "GATEWAY_INTERFACE")
Getting the
query string
If the request method is GET, then the query string is
available in the environment variable QUERY_STRING. If the
request method is POST, the query string is available in the
input stream. The length of the query string is given by the
CONTENT_LENGTH environment variable. The following example
illustrates the extraction of the query string.
# check the cgi
protocol
assert "CGI/.1" (
afnix:sys:get-env "GATEWAY_INTERFACE")
# initialize the query string
const query (afnix:sys:get-env "QUERY_STRING")
# get the request method
const rqm (afnix:sys:get-env "REQUEST_METHOD")
# check for a post request and update the query string
if (== rqm "POST") {
# create a buffer from the content length
const len (
Integer (afnix:sys:get-env "CONTENT_LENGTH"))
# get the standard input stream and read content
const is (interp:get-input-stream)
const buf (is:read len)
# set the query string
query:= (buf:to-string)
}
Parsing the
query string
The UriQuery class is designed to parse a cgi query string.
Once the string has been parsed, it is possible to perform a
query by key since the class operates with a property
list.
const query (
afnix:www:UriQuery "name=hello&value=world")
query:length # 2
query:get-value "name" # hello
query:get-value "value" # world
The UriQuery class is the foundation to build cgi script. When the library is combined with the web application management (wam) service, powerful applications can be built easily.
Special
functions
Several dedicated functions are available in the library as
a way to ease the object manipulations. Theses functions
operate mostly on uri and files as described below.
Uri
functions
Several functions are designed to ease the uri manipulation.
Most of them operate on the uri name or their associated
system name. The normalize-uri-name function normalizes a
string argument by adding a uri scheme if missing in the
original string. If the function detects that the name
starts with a host name, the http scheme is added. If the
function detects that the string starts with a path, the
file scheme is added. otherwise, the name argument is left
untouched. The system-uri-name function normalizes the
string argument by prioritizing the system name. The
function attempts to find a file that match the sring
argument and eventually build a uri file scheme. If the file
is not fond, the normalization process occurs with the
normalize-uri-name function.
# normalize a
uri name
trans unm "http://www.afnix.org"
assert unm (
afnix:nwg:normalize-uri-name unm)
assert unm (
afnix:nwg:normalize-uri-name "www.afnix.org")
assert unm (
afnix:nwg:normalize-uri-name
"//www.afnix.org")
Mime
functions
Mime functions are dedicated to easee the mainpulation of
media types or mime. A media type is defined by a string in
the form of a type and content value such as text/plain. The
mime-value-p predicate returns true if a string mime value
is a valid media type. From a file perspective, the
mime-extension-p predicate returns true if the string
extension has a valid media type associated to it. Finally,
the extension-to-mime function can be used to get the string
mime value associated with a file extension.
# check a media
type
assert true (afnix:nwg:mime-value-p "text/plain")
# check the mime extension predicate
assert true (afnix:nwg:mime-extension-p "txt")
# check the extension to mime
assert "text/plain" (
afnix:nwg:extension-to-mime "txt")
HTTP
transaction objects
The concept of HTTP transactions is defined in RFC 2616. In
the client/server approach, a client issues a request which
is answered with a response. A special case arise when the
server is asked to perform some extra works, such like
executing a script. In this case, the answer is called a
reply which is formatted into a response when the server
does its job correctly. The nature of the HTTP objects
determines how the associated stream behaves. With a HTTP
request, the object is filled by reading an input stream
when operating on the server side. On the other hand, the
request is filled by data when operating on the client side.
With a HTTP response, the opposite situation occurs. The
HTTP response is filled by reading an input stream when
operating on the client side and filled by data when
operating on the server side.
HTTP
protocol
The HttpProto class is a base class designed to handle a
HTTP header that is found in both HTTP request and response.
The class is built around a property list that is filled
either by parsing an input stream or by processing specific
methods. The HttpProto defines also some methods which are
often used with a HTTP request or response.
HTTP
response
The HttpResponse class is a class designed to handle a HTTP
response. When operating on the client side, the response
object is built by reading an input stream. When operating
on the server side, the response object is built by calling
specific methods.
Creating a
server response
A server response is created by specifying the response
status code. By default, a HTTP response is created with the
default media type text/html. If the media type needs to be
changed, it can be passed as the second argument to the
response constructor. By default, the empty constructor
creates an empty constructor with a valid status code.
#create a valid
response
const hr (afnix:nwg:HttpResponse 200)
Once the server response is created, it can be augmented with some headed values. Typically, a server will add some information about the response, such like the content length, the modification time or a tag. The HttpResponse provides several methods that ease the generation of these header values.
Creating a
client response
A client response is created by binding an input stream to a
response object. During the construction, the input stream
is read and the HTTP protocol header is filled. It is also
during this phase that the status code is processed. It is
therefore important to ensure that a response object is
built correctly before attempting to access it.
# create a
client response by stream
const hr (afnix:nwg:HttpResponse is)
Reading a
client response
When the response has been created, it is important to check
its status code. Most of the time, the response is valid and
its content can be read directly. The status-ok-p predicate
returns true if the status code is valid. In such case, a
HTTP stream can be built in order to read the response.
# check that a
response is valid
if (hr:status-ok-p) {
# create a http stream
const rs (afnix:nwg:HttpStream ht is)
# read the response stream
while (rs:eos-p) (rs:read)
}
Before reading a http stream, it is important to detect and verify the nature of the response content. The media-type-p predicate returns true if the media type is defined and the get-media-type method returns the response type in the form of a mime code such like text/html. Eventually, the character set associated with the media type can also be detected. The encoding-mode-p predicate and the get-encoding-mode method can be used to detect the content encoding mode. However, it is worth to note that the HttpStream object is automatically sets with the proper encoding if it can be found in the response header.
Special
client response
Certain response can sometime contains special status codes
that require a specific treatment. This is the case when the
response corresponds to a http redirection. In this case,
the new uri must be fetched to get the desired response. The
location-p predicate returns true if the response
corresponds to a http redirect and the get-location method
can be used to get the new location uri. If this situation
arises, it is up to the implementation to decide what to do
with the new uri. In most cases, a new request will be sent
to the server.
Cookie
object
The Cookie object is a special object that can be used
during a http session, to post data to the http client. The
idea behind cookies is to be able to maintain some state,
during the user session for some time. A cookie is a
name/value pair and eventually an expiration time. By
default, the cookie object are defined for one http client
session, but this behavior can be changed.
Managing
cookies
A cookie is created with a name/value pair and eventually an
expiration time. Such expiration time is called the
maximum-age and is automatically formatted by the object.
With two arguments a session cookie is created. With a third
argument as an integer, the constructor set the maximum age
in seconds.
# create a
cookie with name/value
const cookie (afnix:nwg:Cookie "cartid"
"123456789")
The cookie implementation follows the recommendation of the RFC-2965 for http state management. The most important point to remember is the interpretation of the maximum age that differs from one cookie version to another. With version 1, which is the default, the maximum age is defined relatively in seconds, while it is absolute with version 0.The maximum age is set either at construction or with the set-max-age method. The set-max-age method sets the cookie life time in seconds, in reference to the current time. A negative value is always reset to -1 and defined a session cookie. A 0 value tells the http client to remove the cookie. The set-path method defines the path for which this cookie apply.
Adding a
cookie
Once the cookie is defined, the set-cookie method of the
HttpResponse object can be used to install the cookie.
Combined with the write method, the cookie can be send to
the http client.
STANDARD NETWORK WORKING GROUP REFERENCE
Uri
The Uri class is a base object used to parse or build a
uniform resource identifier as defined by RFC 3986. The URI
can be built by specifying each component or by parsing a
string. When a string is given in the constructor, the class
parses the string and extract all components. The uri
components are the scheme, the authority, the path, the
query and the fragment. The class also takes care of the
character escaping.
Predicate
uri-p
Inheritance
Object
Constructors
Uri
(none)
The Uri constructor creates an empty uri object.
Uri
(String)
The Uri constructor create a uri object by value. The string
argument is the uri to parse at the object construction.
Uri (String
String Integer)
The Uri constructor create a uri object by scheme host and
port. The first argument is the uri scheme. The second
argument is the uri host name. The third argument is the uri
port. The uri base name can be reconstructed from this
information.
Methods
parse ->
none (String)
The parse method reset the uri object, parse the string
argument and fill the uri object with the result.
get-scheme
-> String (none)
The get-scheme method returns the scheme of the parsed uri
object.
get-authority
-> String (none)
The get-authority method returns the authority part of the
parsed uri.
get-path
-> String (none)
The get-path method returns the path of the parsed uri.
get-path-target
-> String (none)
The get-path-target method returns the path target of the
parsed uri. The path target is the last element of the uri
path.
get-query
-> String (none)
The get-query method returns the complete query string of
the parsed uri. Note that characters are not escaped when
getting the string.
get-fragment
-> String (none)
The get-fragment method returns the complete query string of
the parsed uri.
get-base
-> String (none)
The get-base method returns the combined uri scheme and
authority.
get-rname
-> String (none)
The get-rname method returns the reference uri name with the
combined uri scheme, authority and path all percent
encoded.
get-hname
-> String (none)
The get-hname method returns the combined uri scheme,
authority and path.
get-aname
-> String (none)
The get-aname method returns the almost combined uri name
with the scheme, authority, path and query.
add-path
-> Uri (String)
The add-path method adds a path to the calling uri and
returns a new uri with the new path added to the old
one.
get-href
-> Uri (String)
The get-href method returns a new uri by eventually
combining the string argument. If the string argument
correspond to an uri, the corresponding uri is built.
Otherwise, the string argument is considered as a path to be
added to the current uri in order to build a new uri.
get-system-path
-> String (none)
The get-system-path method returns the system path
representation of the uri path. This function works only if
the scheme if a file scheme.
get-path-encoded
-> String (none)
The get-path-encoded method returns the uri in the encoded
form. Normally the get-path removes the percent-encoded
characters which might not be appropriate with some protocol
such like the http protocol. The get-path-encoded returns
the original path. Note that getting the path with getpath
and doing a percent coding might result in a different
result since the internal representation uses normalized
string.
get-host
-> String (none)
The get-host method returns the authority or path host name
if any can be found with respect to the scheme. With a ftp,
http or https scheme, the host is extracted from the
authority. With a mailto scheme, the host is extracted from
the path.
get-port
-> Integer (none)
The get-port method returns the authority port if any can be
found with respect to the scheme.
UriQuery
The UriQuery class is a simple class that parses a uri query
string and build property list. during the parsing process,
a special transliteration process is done as specified by
RFC 3986. This class is primarily used with cgi scripts.
Note that the string to parse is exactly the one produced by
the get-query method of the Uri class.
Predicate
uri-query-p
Inheritance
Plist
Constructors
UriQuery
(none)
The UriQuery constructor creates an empty uri query
object.
UriQuery
(String)
The UriQuery constructor create a uri object by value. The
string argument is the uri query string to parse at the
object construction. The query string is the one obtained
from the get-query method of the Uri class.
Methods
parse ->
none (String)
The parse method reset the uri query object, parses the
string argument and fill the property list object with the
result.
get-query
-> String (none)
The get-query method returns the original query string.
UriPath
The UriPath class is a class designed for the management of
file system path associated with a uri. Typically, this
class will be used with a http server or client when an
association between a uri and a file name needs to be made.
The general operation principle is to associate a path with
a uri authority. The uri path is then concatanated to
produce a new path. If the uri path is empty, it can be
eventually replaced by a file name, known as the diretory
index in the http terminology.
Predicate
uri-path-p
Inheritance
Object
Constructors
UriPath
(none)
The UriPath constructor creates an empty uri path
object.
UriPath
(String)
The UriPath constructor create a uri object by root path.
The string argument is the uri root path.
UriPath
(String String)
The UriPath constructor create a uri object by root and
index. The first string argument is the uri root path and
the second string argument is the directory index path.
UriPath
(String String String)
The UriPath constructor create a uri object by root, index
and authority. The first string argument is the uri root
path, the second string argument is the directory index path
and the third argument is the authority.
Methods
get-root
-> String (none)
The get-root method returns the root path.
get-index
-> String (none)
The get-index method returns the index path.
get-authority
-> String (none)
The get-authority method returns the uri authority.
map-request-uri
-> String (none)
The map-request-uri map a request uri into a system path.
The string argument is the request uri. The request uri must
be an absolute path. The result string is the system path
build with the root path.
normalize
-> String (none)
The normalize method build a system from a request path. The
request path is associated with the root path and then
normalized to produce a complete system path.
HttpProto
The HttpProto class is a base class that ease the deployment
of the http protocol. The base class is built with a
property list which is used to define the message header.
The class also defines the write methods which are used to
write a message either on an output stream or into a
buffer.
Predicate
http-proto-p
Inheritance
Object
Methods
reset ->
none (none)
The reset method resets the http protocol object by clearing
the protocol version and header.
parse ->
none (none)
The parse method parse the input stream bound to the http
protocol. In order to operate, an input stream must be
associated with the protocol object or an exception is
raised. After a stream has been parsed, the protocol version
and the header are set.
write ->
none (none|OutputStream|Buffer)
The write method formats and writes the http protocol object
to an output stream or a buffer. Without argument, the
default output stream is used. With an argument, an output
stream or a buffer object can be used.
header-length
-> Integer (none)
The header-length method returns the number of properties in
the header.
header-exists-p
-> Boolean (String)
The header-exists-p predicate returns true if the property
exists in the header. The string argument is the property
name.
header-set
-> none (String Literal)
The header-set method sets a new property to the http
header. The first argument is the property name. The second
argument is a literal object which is internally converted
to a string.
header-get
-> Property (Integer)
The header-get method returns a property object by
index.
header-map
-> String (String)
The header-map method returns a property value by name. The
string argument is the property name.
header-find
-> Property (String)
The header-find method returns a property object by name.
The string argument is the property name. If the property is
not found, the nil object is returned.
header-lookup
-> Property (String)
The header-lookup method returns a property object by name.
The string argument is the property name. If the property is
not found, an exception is raised.
header-plist
-> Plist (none)
The header-plist method returns the header in the form of a
property list.
content-length-p
-> Boolean (none)
The content-length-p predicate returns true if the content
length is defined in the protocol header.
get-content-length
-> Integer (none)
The get-content-length method returns the content length
defined in the protocol header. If the content length is not
defined in the header, the null value is returned.
media-type-p
-> Boolean (none)
The media-type-p predicate returns true if the content type
is defined in the protocol header.
get-media-type
-> String (none)
The get-media-type method returns the media type defined in
the protocol header. If the media type is not defined in the
header, the default media type is returned.
encoding-mode-p
-> Boolean (none)
The encoding-mode-p predicate returns true if the encoding
mode is defined in the protocol header.
get-encoding-mode
-> String (none)
The get-encoding-mode method returns the protocol encoding
mode. If the encoding mode is not defined in the protocol
header, the default encoding mode is returned.
HttpRequest
The HttpRequest class is a base class designed to handle a
http request. The class operates with the protocol version
1.1 as defined by RFC 2616. For a server request, the
request is built by reading an input stream and setting the
request command with its associated header. For a client
request, the request is formatted with a request command and
a eventually a uri. In both cases, the header is filled
automatically depending on the request side.
Predicate
http-request-p
Inheritance
HttpProto
Constructors
HttpRequest
(none)
The HttpRequest constructor creates a default http request.
By default, the request object is built with the GET method
and the request uri set to the root value.
HttpRequest
(String)
The HttpRequest constructor creates a http request object
with a specific command. By default, the request uri is set
to root, except for the OPTIONS method
HttpRequest
(Uri)
The HttpRequest constructor creates a http request object
with a uri. The default request method is GET.
HttpRequest
(InputStream)
The HttpRequest constructor creates a http request object
with a specific input stream. At construction, the request
header is cleared and the input stream is bound to the
object.
HttpRequest
(String String)
The HttpRequest constructor creates a http request object
with a specific method and a uri name. The first string
argument is the request method to use. The second string
argument is the uri attached to the command. Note that the
term uri should be understood as a request uri.
HttpRequest
(String Uri)
The HttpRequest constructor creates a http request object
with a specific method and a uri. The first string argument
is the request method to use. The second argument is the uri
attached to the method.
Methods
set-method
-> none (String)
The set-method method sets the request method. This method
does not check that the command is a valid HTTP method and
thus leaves plenty of room for server development. As a
matter of fact, RFC 2616 does not prohibit the existence of
such extension.
get-method
-> String (none)
The get-method method returns the request method string.
set-uri
-> none (String)
The set-uri method sets the request uri. The argument string
does not have to be a valid uri string since some commands
might accept special string such like "*" to
indicate all applicable uri.
get-uri
-> String (none)
The get-uri method returns the request uri string.
HttpResponse
The HttpResponse class is a base class designed to handle a
http response. The class operates with the protocol version
1.1 as defined by RFC 2616. For a client response, the
response is built by reading an input stream and setting the
response status code with its associated header. For a
server response, the response is formatted with a response
status and additional header information. In both cases, the
header is filled automatically depending on the response
side. On the other hand, trying to set some header with an
input stream bound to the response object might render the
response object unusable.
Predicate
http-response-p
Inheritance
HttpProto
Constructors
HttpResponse
(none)
The HttpResponse constructor creates a default http response
object. The response is marked valid with a default
text/plain media type.
HttpResponse
(Integer)
The HttpResponse constructor creates a http response object
with a status code. The response code is associated with the
default text/plain media type.
HttpResponse
(InputStream)
The HttpResponse constructor creates a http response object
with a specific input stream. At construction, the response
header is cleared and the input stream is bound to the
object.
HttpResponse
(Integer String)
The HttpResponse constructor creates a http response object
with a status code and a media type. The first argument is
the status code. The second argument is the associated media
type.
Methods
set-status-code
-> none (Integer)
The set-status-code method sets the response status
code.
get-status-code
-> Integer (none)
The get-status-code method returns the response status
code.
map-status-code
-> String (none)
The map-status-code method returns a string representation
of the response status code.
status-ok-p
-> Boolean (none)
The status-ok-p predicate returns true if the response
status code is valid (aka status 200).
status-error-p
-> Boolean (none)
The status-error-p predicate returns true if the response
status code is an error code.
location-p
-> Boolean (none)
The location-p predicate returns true is the response status
code indicates that a request should be made at another
location. The location can be found with the get-location
method.
get-location
-> String (none)
The get-location method returns the location uri found in
the response header. This method is equivalent to a header
query.
set-location
-> none (String)
The set-location method set the redirect location in the
response header. The string argument is the location
uri.
set-cookie
-> none (Cookie)
The set-cookie method sets a cookie object to the http
header. The cookie version is properly handled by the
method.
Cookie
The Cookie class is a special class designed to handle
cookie setting within a http transaction. A cookie is
name/value pair that is set by the server and stored by the
http client. Further connection with the client will result
with the cookie value transmitted by the client to the
server. A cookie has various parameters that controls its
existence and behavior. The most important one is the cookie
maximum age that is defined in seconds. A null value tells
the client to discard the cookie. A cookie without maximum
age is valid only during the http client session. A cookie
can be added to the HttpReply object with the set-cookie
method. A cookie can be constructed with a name/value pair.
An optional third argument is the maximum age. The default
cookie version is 1 as specified by RFC 2965. With a version
1, the maximum age is interpreted as the number of seconds
before the cookie expires. With version 0, the maximum age
is the absolute time.
Predicate
cookie-p
Inheritance
Object
Constructors
Cookie
(String String)
The Cookie constructor creates a cookie with a name value
pair. The first argument is the cookie name. The second
argument is the cookie value.
Cookie
(String String Integer)
The Cookie constructor creates a cookie with a name value
pair and a maximum age. The first argument is the cookie
name. The second argument is the cookie value. The third
argument is the cookie maximum age.
Methods
get-version
-> Integer (none)
The get-version method returns the cookie version.
set-version
-> none (Integer)
The set-version method sets the cookie version. The version
number can only be 0 or 1.
get-name
-> String (none)
The get-name method returns the cookie name. This is the
name store on the http client.
set-name
-> none (String)
The set-name method sets the cookie name. This is the name
store on the http client.
get-value
-> String (none)
The get-value method returns the cookie value. This is the
value stored on the http client bounded by the cookie
name.
set-value
-> none (String)
The set-value method sets the cookie value. This is the
value store on the http client bounded by the cookie
name.
get-maximum-age
-> Integer (none)
The get-maximum-age method returns the cookie maximum age.
The default value is -1, that is, no maximum age is set and
the cookie is valid only for the http client session.
set-maximum-age
-> none (Integer)
The set-maximum-age method sets the cookie maximum age. A
negative value is reset to -1. A 0 value tells the http
client to discard the cookie. A positive value tells the
http client to store the cookie for the remaining
seconds.
get-path
-> String (none)
The get-path method returns the cookie path value. The path
determines for which http request the cookie is valid.
set-path
-> none (String)
The set-path method sets the cookie path value. The path
determines for which http request the cookie is valid.
get-domain
-> String (none)
The get-domain method returns the cookie domain value.
set-domain
-> none (String)
The set-domain method sets the cookie domain value. It is
string recommended to use the originator domain name since
many http client can reject cookie those domain name does
not match the originator name.
get-port
-> Integer (none)
The get-port method returns the cookie port number.
set-port
-> none (Integer)
The set-port method sets the cookie port number. This value
is not used with a cookie version 0.
get-comment
-> String (none)
The get-comment method returns the cookie comment value.
set-comment
-> none (String)
The set-comment method sets the cookie comment value.
get-comment-url
-> String (none)
The get-comment-url method returns the cookie comment url
value.
set-comment-url
-> none (String)
The set-comment-url method sets the cookie comment url
value. This value is not used with cookie version 0.
get-discard
-> Boolean (none)
The get-discard method returns the cookie discard flag.
set-discard
-> none (Boolean)
The set-discard method sets the cookie discard flag. The
discard flag the tells the user agent to destroy the cookie
when it terminates. This value is not used with cookie
version 0.
get-secure
-> Boolean (none)
The get-secure method returns the cookie secure flag.
set-secure
-> none (Boolean)
The set-secure method sets the cookie secure flag. When a
cookie is secured, it is only returned by the http client if
a connection has been secured (i.e use https).
to-string
-> String (none)
The to-string method returns a string formatted for the http
reply header. Normally this method should not be called
since the set-cookie method of the httpReply takes care of
such thing.
Functions
mime-extension-p
-> Boolean (String)
The mime-extension-p predicates returns true if a media type
extension - mime extension - is defined. Most of the time,
media type extension can be seen as a file extension.
mime-value-p
-> Boolean (String)
The mime-value-p predicates returns true if a media type -
mime value - is defined.
extension-to-mime
-> String (String [Boolean])
The extension-to-mime function converts a media type
extension into a media type. In the first form, without a
second argument, if the media type extension does not exist,
an exception is raised. In the second form, with the second
argument set to true, if the media type extension does not
exist, the default media type is returned. If the flag is
set to false, an exception is raised like the first
form.
string-uri-p
-> Boolean (String)
The string-uri-p predicates returns true if the string
argument is a uri.
normalize-uri-name
-> String (String)
The normalize-uri-name function normalizes the string
argument by adding a uri scheme if missing in the original
string. If the function detects that the name starts with a
host name, the "http" scheme is added. If the
function detects that the string starts with a path, the
"file" scheme is added. otherwise, the name
argument is left untouched.
system-uri-name
-> String (String)
The system-uri-name function normalizes the string argument
by prioritizing the system name. The function attempts to
find a file that match the string argument and eventually
build a uri file scheme. If the file is not fond, the
normalization process occurs with the normalize-uri-name
function.
path-uri-name
-> String (String)
The path-uri-name function normalizes the string argument by
extracting a path associated with the uri string. If the
string is a valid uri string, the path is the uri path
component. If the uri path is empty, it is normalized to a
/. If the string argument is not a uri string, the string is
assumed to be a partial uri and both query and fragment
parts are removed if present.
normalize-uri-host
-> String (String)
The normalize-uri-host function normalizes the string
argument uri host name. This function is useful with certain
class of host representation which uses extra
characters.
normalize-uri-port
-> String (String)
The normalize-uri-port function normalizes the string
argument uri port value. This function is useful with
certain class of host representation which uses extra
characters.