5. Referenzauflösung (Reference Resolution)
Dieser Abschnitt beschreibt den Algorithmus zur Auflösung von URI-Referenzen in absolute Form.
5.1. Festlegung eines Basis-URI (Establishing a Base URI)
Die Auflösung relativer Referenzen erfordert einen Basis-URI. Der Basis-URI kann auf verschiedene Weise festgelegt werden.
5.1.1. Im Inhalt eingebetteter Basis-URI (Base URI Embedded in Content)
Mechanismen wie das <base>-Tag von HTML können den Basis-URI im Inhalt angeben.
5.1.2. Basis-URI von der kapselnden Entität (Base URI from the Encapsulating Entity)
Eine kapselnde Entität (wie eine MIME-Nachricht) kann den Basis-URI definieren.
5.1.3. Basis-URI vom Abruf-URI (Base URI from the Retrieval URI)
Wenn kein anderer Basis-URI verfügbar ist, verwenden Sie den URI, von dem das Dokument abgerufen wurde.
5.1.4. Standard-Basis-URI (Default Base URI)
Anwendungen können einen Standard-Basis-URI definieren.
5.2. Relative Auflösung (Relative Resolution)
Pseudocode für den Algorithmus zur Auflösung relativer Referenzen:
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. Komponenten-Rekonstruktion (Component Recomposition)
Kombinieren Sie die aufgelösten Komponenten wieder zu einer URI-Zeichenfolge.
5.4. Beispiele für Referenzauflösung (Reference Resolution Examples)
Basis-URI: http://a/b/c/d;p?q
| Relative Referenz | Aufgelöstes Ergebnis |
|---|---|
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 |
Nächstes Kapitel: 6. Normalisierung und Vergleich (Normalization and Comparison) - URI-Normalisierungstechniken