- From: Sebastian Pipping <webmaster@hartwork.org>
- Date: Wed, 05 Sep 2007 04:21:54 +0200
- To: Mike Brown <mike@skew.org>
- CC: uri@w3.org
I felt like starting some pseudocode for reference creation
my own. The code below aims to convert an absolute URI to
relative given a base URI if possible (meaning if scheme
and host are equal to those in the base URI).
Or was there pseudocode already and I forgot about it?
Here is what I currently have:
== Variables ==
Base - [IN] Base to cut off if possible
A - [IN] Absolute URI that we would like relative instead
T - [OUT] Transformation result (relative if possible, absolute if necessary)
== Example ==
BASE = http://ex/x/y/z?one
A = http://ex/r?two
T = ../../r?two
== Algorithm ==
if (A.scheme != Base.scheme) then
T.scheme = A.scheme;
T.authority = A.authority;
T.path = A.path;
T.query = A.query;
T.fragment = A.fragment;
else
undef(T.scheme);
if (A.authority != Base.authority) then
T.authority = A.authority;
T.path = A.path;
T.query = A.query;
T.fragment = A.fragment;
else
undef(last(Base.path));
T.path = "";
while (first(A.path) == first(Base.path)) do
A.path++;
Base.path++;
endwhile;
bool pathNaked = true;
while defined(first(Base.path)) do
Base.path++;
T.path += "../";
pathNaked = false;
endwhile;
while defined(first(A.path)) do
if pathNaked then
if (first(A.path) contains ":") then
T.path += "./";
endif;
endif;
T.path += first(A.path);
pathNaked = false;
A.path++;
if defined(first(A.path)) then
T.path += + "/";
endif;
endwhile;
T.query = A.query;
T.fragment = A.fragment;
endif;
endif;
I hope it's more useful than braindead, I'm not too awake anymore ;-)
Sebastian
Received on Wednesday, 5 September 2007 02:22:11 UTC