1. Einführung (Introduction)
Dieses Kapitel stellt die grundlegenden Konzepte von URIs, Designüberlegungen und Syntaxnotation vor.
Überblick
Ein Uniform Resource Identifier (URI) bietet ein einfaches und erweiterbares Mittel zur Identifizierung einer Ressource.
Historischer Hintergrund:
- Abgeleitet von Konzepten, die durch die World Wide Web globale Informationsinitiative eingeführt wurden
- Die Verwendung dieser Identifikatoren geht auf 1990 zurück
- Dieses Dokument ersetzt RFC 2396 und führt URL- und relative URL-Spezifikationen zusammen
Diese Spezifikation:
- Definiert eine einzelne, generische Syntax für alle URIs
- Führt IPv6-Adresssyntax ein
- Schließt spezifische Syntax einzelner URI-Schemas aus (wird in separaten Dokumenten aktualisiert)
1.1. Überblick über URIs
Merkmale von URIs
Die Merkmale von URIs können durch drei Wörter zusammengefasst werden: Uniform, Resource, Identifier
Uniform (Einheitlich)
Vorteile der Einheitlichkeit:
-
Kontextunabhängigkeit: Ermöglicht die Verwendung verschiedener Arten von Ressourcenidentifikatoren im selben Kontext, auch wenn sich die Zugriffsmechanismen unterscheiden
-
Semantische Konsistenz: Ermöglicht einheitliche semantische Interpretation gemeinsamer syntaktischer Konventionen über verschiedene Arten von Ressourcenidentifikatoren hinweg
-
Erweiterbarkeit: Ermöglicht die Einführung neuer Arten von Ressourcenidentifikatoren, ohne die Verwendung bestehender Identifikatoren zu beeinträchtigen
-
Wiederverwendbarkeit: Ermöglicht die Wiederverwendung von Identifikatoren in vielen verschiedenen Kontexten, wodurch neue Anwendungen oder Protokolle einen vorhandenen, großen und weit verbreiteten Satz von Ressourcenidentifikatoren nutzen können
Beispiel:
http://example.com/page
ftp://example.com/file
mailto:[email protected]
Alle verwenden dieselbe generische Syntaxstruktur
Resource (Ressource)
Umfang der Ressourcen: Diese Spezifikation beschränkt nicht, was eine Ressource sein könnte; der Begriff „Ressource" wird in einem allgemeinen Sinn für alles verwendet, was durch einen URI identifiziert werden könnte.
Vertraute Beispiele:
- 📄 Elektronische Dokumente
- 🖼️ Bilder
- 📊 Informationsquellen mit konsistentem Zweck (z.B. „heutiger Wetterbericht für Los Angeles")
- 🔧 Dienste (z.B. HTTP-zu-SMS-Gateway)
- 📚 Sammlungen anderer Ressourcen
Breitere Ressourcen:
- 🧑 Menschen
- 🏢 Unternehmen
- 📖 Gebundene Bücher in einer Bibliothek
- 🔢 Abstrakte Konzepte (mathematische Operatoren, Beziehungstypen, numerische Werte)
Wichtiger Punkt: Ressourcen sind nicht notwendigerweise über das Internet zugänglich
Identifier (Identifikator)
Definition: Ein Identifikator verkörpert die Informationen, die erforderlich sind, um das Identifizierte von allen anderen Dingen innerhalb seines Identifikationsbereichs zu unterscheiden.
Bedeutung von „Identifizieren":
- Bezieht sich auf den Zweck, eine Ressource von allen anderen zu unterscheiden
- Berücksichtigt nicht, wie dieser Zweck erreicht wird (z.B. durch Name, Adresse oder Kontext)
- Sollte nicht als Identifikator missverstanden werden, der die Identität des referenzierten Inhalts definiert oder verkörpert
- Sollte nicht annehmen, dass Systeme, die den URI verwenden, auf die identifizierte Ressource zugreifen
URI-Definition: Ein URI ist ein Identifikator, der aus einer Zeichenfolge besteht, die mit der Syntaxregel <URI> in Abschnitt 3 übereinstimmt.
Globale Natur von URIs
Globaler Geltungsbereich: URIs haben einen globalen Geltungsbereich und werden unabhängig vom Kontext konsistent interpretiert
Beispiel:
http://localhost/
Hat für jeden Benutzer, der diese Referenz verwendet, dieselbe Interpretation
Obwohl die Netzwerkschnittstelle, die „localhost" entspricht, unterschiedlich sein kann
Die Interpretation ist unabhängig vom Zugriff
Kontextrelativität:
- Auf der Referenz basierende Aktionen werden relativ zum Kontext des Endbenutzers ausgeführt
- Operationen, die auf global eindeutige Dinge verweisen sollen, müssen URIs verwenden, die die Ressource von allen anderen unterscheiden
Lokaler Kontext-URI:
file:///etc/hosts
Wird nur verwendet, wenn der Kontext selbst ein ressourcendefinierender Aspekt ist
Z.B. Online-Hilfehandbücher, die auf Dateien im Dateisystem des Endbenutzers verweisen
1.1.1. Generische Syntax
Schema-Namen
Jeder URI beginnt mit einem Schema-Namen (definiert in Abschnitt 3.1), der sich auf eine Spezifikation für die Zuweisung von Identifikatoren innerhalb dieses Schemas bezieht.
Föderiertes Benennungssystem: Die URI-Syntax ist ein föderiertes und erweiterbares Benennungssystem, bei dem die Spezifikationen jedes Schemas die Syntax und Semantik von Identifikatoren, die dieses Schema verwenden, weiter einschränken können.
Generische Elemente
Diese Spezifikation definiert die Elemente der URI-Syntax, die:
- ✅ Von allen URI-Schemas benötigt werden
- ✅ Für viele URI-Schemas gemeinsam sind
Vorteile:
- Schema-unabhängige Analyse: Definiert die Syntax und Semantik, die zur Implementierung eines schema-unabhängigen URI-Referenz-Analysemechanismus erforderlich sind
- Verzögerte Verarbeitung: Ermöglicht das Aufschieben der schema-abhängigen Verarbeitung eines URI, bis sie benötigt wird
- Protokollunabhängigkeit: Protokolle und Datenformate, die URI-Referenzen verwenden, können auf diese Spezifikation als Definition des zulässigen Syntaxbereichs verweisen
- Vorwärtskompatibilität: Enthält noch nicht definierte Schemas
Entkoppelte Evolution: Entkoppelt die Evolution von Identifikationsschemas von der Evolution von Protokollen, Datenformaten und Implementierungen, die URIs verwenden.
Generischer Parser
Parsing-Fähigkeit: Ein Parser für die generische URI-Syntax kann jede URI-Referenz in ihre Hauptkomponenten analysieren
Zweistufige Analyse:
- Generische Analyse: Schema und Hauptkomponenten bestimmen
- Schema-spezifische Analyse: Weitere schema-spezifische Analyse der Komponenten durchführen
Obermenge-Beziehung: Die generische URI-Syntax ist eine Obermenge der Syntax aller URI-Schemas
1.1.2. Beispiele
URI-Beispiele
Die folgenden URI-Beispiele veranschaulichen mehrere URI-Schemas und Variationen in ihren gemeinsamen Syntaxkomponenten:
ftp://ftp.is.co.za/rfc/rfc1808.txt
- Schema:
ftp - Autorität:
ftp.is.co.za - Pfad:
/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
- Schema:
http - Autorität:
www.ietf.org - Pfad:
/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
- Schema:
ldap - Autorität:
[2001:db8::7](IPv6-Adresse) - Pfad:
/c=GB - Abfrage:
objectClass?one
mailto:[email protected]
- Schema:
mailto - Pfad:
[email protected]
news:comp.infosystems.www.servers.unix
- Schema:
news - Pfad:
comp.infosystems.www.servers.unix
tel:+1-816-555-1212
- Schema:
tel - Pfad:
+1-816-555-1212
telnet://192.0.2.16:80/
- Schema:
telnet - Autorität:
192.0.2.16:80 - Pfad:
/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
- Schema:
urn - Pfad:
oasis:names:specification:docbook:dtd:xml:4.1.2
1.1.3. URI, URL und URN
Konzeptionelle Unterscheidung
URI-Klassifizierung: Ein URI kann weiter als Lokator, Name oder beides klassifiziert werden
URL (Uniform Resource Locator)
Definition: Die Teilmenge von URIs, die zusätzlich zur Identifizierung einer Ressource ein Mittel zur Lokalisierung der Ressource bereitstellen, indem sie ihren primären Zugriffsmechanismus beschreiben (z.B. ihren Netzwerk-„Standort")
Merkmale:
- Bietet Zugriffsmethode
- Beschreibt Netzwerkstandort
- Kann sich ändern, wenn die Ressource verschoben wird
Beispiele:
http://www.example.com/index.html
ftp://ftp.example.com/file.txt
URN (Uniform Resource Name)
Definition: Historisch verwendet, um sich auf URIs unter dem „urn"-Schema [RFC2141] zu beziehen, die global eindeutig und persistent bleiben müssen, auch wenn die Ressource nicht mehr existiert oder nicht verfügbar wird
Merkmale:
- Persistenter Identifikator
- Standortunabhängig
- Bleibt gültig, auch wenn die Ressource verschwindet
Beispiele:
urn:isbn:0-486-27557-4
urn:ietf:rfc:3986
Beziehungsdiagramm
URI (Uniform Resource Identifier)
/ \
URL URN
(Wie man die Ressource findet) (Persistenter Name)
(Standortabhängig) (Standortunabhängig)
Zeitgenössische Verwendung
Terminologievereinfachung: Derzeit ist es am besten, die Begriffe „URL" und „URN" als Merkhilfen innerhalb des URI-Raums zu betrachten
Praktische Anleitung:
- Verwenden Sie „URI" statt „URL" oder „URN"
- Alle URLs sind URIs
- Alle URNs sind URIs
- Aber nicht alle URIs sind URLs oder URNs
1.2. Designüberlegungen
Das URI-Design muss mehrere, manchmal widersprüchliche Ziele in Einklang bringen.
1.2.1. Transkription
Ziel: URIs sollten von Menschen mit verschiedenen Techniken und Medien transkribiert werden können
Einschränkungen:
- Sollten kurz sein
- Sollten einprägsam sein
- Sollten leicht einzugeben sein
Konflikte mit anderen Zielen:
Kürze vs. Lesbarkeit
http://x.co/a vs http://example.com/article
Einprägsamkeit vs. globale Eindeutigkeit
http://blog vs http://username.blog.example.com
Praktische Überlegungen:
- Begrenzter Zeichensatz (ASCII)
- Groß-/Kleinschreibung-unabhängige Systeme
- Behandlung von Sonderzeichen
Transkriptionsfehler:
Häufige Fehler:
- Verwechslung von 0 (Null) und O (Buchstabe)
- Verwechslung von 1 (Eins) und l (kleines L)
- Verwechslung von - (Bindestrich) und _ (Unterstrich)
1.2.2. Trennung von Identifikation und Interaktion
Prinzip: URI identifiziert eine Ressource unabhängig davon, wie auf diese Ressource zugegriffen wird
Vorteile:
- Identifikationspersistenz: Identifikatoren können unverändert bleiben, wenn sich Zugriffsmethoden ändern
- Protokollunabhängigkeit: Auf dieselbe Ressource kann über mehrere Methoden zugegriffen werden
- Referenzintegrität: Kann auf nicht zugängliche Ressourcen verweisen
Beispiel:
Identifikation: urn:isbn:0-486-27557-4
Zugriff 1: http://amazon.com/dp/0486275574
Zugriff 2: http://barnesandnoble.com/...
Zugriff 3: Lokale Bibliothek
Nicht-Zugriffs-Verwendungen:
- 📝 Dokumentreferenzen
- 🏷️ Metadaten-Tags
- 🔗 Link-Beziehungen
- 📊 Datenidentifikation
1.2.3. Hierarchische Identifikatoren
Hierarchische Struktur: Die URI-Syntax unterstützt hierarchische Namensräume
Organisationsform:
http://example.com/products/electronics/phones/model-x
└─Autorität─┘ └────────Pfadhierarchie─────────┘
Vorteile:
- Delegierte Verwaltung: Ermöglicht die Delegation der Benennungsautorität
- Relative Referenzen: Unterstützt relative URI-Referenzen
- Logische Organisation: Spiegelt die logische Organisation von Ressourcen wider
Hierarchie-Beispiel:
/products/
/electronics/
/phones/
/model-x
/model-y
/laptops/
/clothing/
1.3. Syntaxnotation
Diese Spezifikation verwendet Erweiterte Backus-Naur-Form (ABNF) [RFC2234] zur Definition von URI-Syntaxregeln.
ABNF-Grundlagen
Regelformat:
rulename = elements
Grundelemente:
ALPHA = A-Z / a-z
DIGIT = 0-9
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
Operatoren:
/: Alternation (oder)*: Wiederholung (null oder mehr)[ ]: Optional( ): Gruppierung
Beispiel:
scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
Interpretation:
- Beginnt mit einem Buchstaben
- Gefolgt von null oder mehr (Buchstabe/Ziffer/+/-/.)
Zusammenfassung der Schlüsselkonzepte
Drei Merkmale von URIs
- Uniform: Konsistente Syntax und Semantik
- Resource: Kann alles identifizieren
- Identifier: Fähigkeit zu unterscheiden und zu identifizieren
URI vs URL vs URN
| Konzept | Fokus | Persistenz | Beispiel |
|---|---|---|---|
| URI | Identifikation | Nicht garantiert | Alle URIs |
| URL | Standort | Standortabhängig | http://example.com/page |
| URN | Name | Persistent | urn:isbn:0-486-27557-4 |
Designprinzipien
- Transkribierbarkeit: Menschen können leicht eingeben und sich erinnern
- Trennung der Anliegen: Identifikation ist unabhängig vom Zugriff
- Hierarchie: Unterstützt Delegation und Organisation
Nächstes Kapitel: 2. Zeichen (Characters) - Zeichenbehandlung und Kodierung in URIs