5. Reference Resolution
This section describes the algorithm for resolving URI references into absolute form.
5.1. Establishing a Base URI
Resolution of relative references requires a base URI. The base URI can be established through various methods.
5.1.1. Base URI Embedded in Content
Mechanisms such as HTML's <base> tag can specify the base URI within content.
5.1.2. Base URI from the Encapsulating Entity
An encapsulating entity (such as a MIME message) may define the base URI.
5.1.3. Base URI from the Retrieval URI
If no other base URI is available, use the URI from which the document was retrieved.
5.1.4. Default Base URI
Applications may define a default base URI.
5.2. Relative Resolution
Pseudocode for the relative reference resolution algorithm:
if R.scheme is defined then
T.scheme = R.scheme
T.authority = R.authority
T.path = remove_dot_segments(R.path)
T.query = R.query
else
if R.authority is defined then
T.authority = R.authority
T.path = remove_dot_segments(R.path)
T.query = R.query
else
if R.path is empty then
T.path = Base.path
if R.query is defined then
T.query = R.query
else
T.query = Base.query
else
if R.path starts-with "/" then
T.path = remove_dot_segments(R.path)
else
T.path = merge(Base, R.path)
T.path = remove_dot_segments(T.path)
T.query = R.query
T.authority = Base.authority
T.scheme = Base.scheme
T.fragment = R.fragment
5.3. Component Recomposition
Recombine the resolved components into a URI string.
5.4. Reference Resolution Examples
Base URI: http://a/b/c/d;p?q
| Relative Reference | Resolved Result |
|---|---|
g | http://a/b/c/g |
./g | http://a/b/c/g |
g/ | http://a/b/c/g/ |
/g | http://a/g |
//g | http://g |
?y | http://a/b/c/d;p?y |
g?y | http://a/b/c/g?y |
#s | http://a/b/c/d;p?q#s |
../g | http://a/b/g |
../../g | http://a/g |
Next Chapter: 6. Normalization and Comparison - URI normalization techniques