Als Fragmentbezeichner (englischfragment identifier) ist ein optionaler Teil einer URL und wird dazu benutzt, eine Untereinheit oder einen Teil einer Ressource zu spezifizieren oder zu adressieren.
Im Gegensatz zum Query-String werden Fragmentbezeichner bei client-server-basierten Systemen nicht an den Server übermittelt. Es wird also stets die komplette Ressource vom Server angefordert. Die Auswertung des Fragmentbezeichners erfolgt allein im Client (und kann im Beispiel von Webbrowsern auch von clientseitigen Skripten ausgewertet werden) und seine Interpretation und Bedeutung hängt unter anderem vom Typ der angeforderten Ressource ab.
Da der Server den Fragmentbezeichner nicht kennt, kann er auch keine Fehlermeldungen oder Redirects an den Client zurückgeben, falls z. B. ein – über den Fragmentbezeichner spezifizierte – Abschnitt eines Dokumentes nicht mehr existiert oder in ein anderes Dokument verschoben wurde.
Syntax
Der Fragmentbezeichner ist – sofern vorhanden – stets der letzte Teil einer URL. Er wird durch ein Doppelkreuz (#) eingeleitet und erstreckt sich bis zum Ende der URL. Das Doppelkreuz selbst gehört dabei nicht zum Fragmentbezeichner, sondern nur der Teil danach.
syntaktische Beispiele
URL
Bedeutung
https://example.org/path/to/resource#fragment
Der Fragmentbezeichner ist fragment
https://example.org/path/to/resource#
Der Fragmentbezeichner ist leer, es ist die gesamte Ressource gemeint. Beide URLs sind gleichbedeutend
https://example.org/path/to/resource
Gemäß RFC 2396 Abschnitt 4.1[1] in Verbindung mit Abschnitt 2 dürfen folgende Zeichen in einem Fragmentbezeichner enthalten sein:
unreserved Zeichen: a-z A-Z 0-9 . ~ _ -
sub-delims: ! $ & ' ( ) * + , ; =
sonstige erlaubte Zeichen: : @ / ?
alle anderen Zeichen müssen prozent-kodiert werden, wobei für Nicht-ASCII-Zeichen im Allgemeinen kein Zeichensatz vorgegeben ist, jedoch UTF-8 inzwischen als Quasi-Standard gilt.
Je nach Typ der referenzierten Ressource kann der Fragmentbezeichner ein bestimmtes, genormtes Format haben. Üblich sind beispielsweise (hier zur Veranschaulichung mit Doppelkreuz dargestellt, wie es am Ende einer URL dargestellt wird):
(menschenlesbarer) Name: z. B. Kapitelnamen (ggf. abgekürzt): #Form_und_Gr%C3%B6%C3%9Fe
opaquer, automatisch generierter Hash oder fortlaufende Nummer: #b95d534fe38e
Paar aus Name und Wert, bzw. Folge von Name-Wert-Paaren, oft durch & oder ; voneinander getrennt, ähnlich wie bei einem Query-String: #line=10,20;length=9876,UTF-8[2]
Es gibt aber auch komplexere Formate und Webframeworks, die umfangreiche Daten in den Fragmentbezeichner kodieren.
Beispiele
Fragmentbezeichner werden üblicherweise einer URI (also auch einer URL) hinzugefügt, um Teile eines Dokuments zu adressieren. Der Fragmentbezeichner wird in diesem Fall mit dem Rautezeichen (#) in der URI gekennzeichnet. Er steht optional am Ende einer URI.
Die Interpretation des Fragmentbezeichners ist abhängig von der Art der Ressource und dem Parser. Beispiele:
In HTML verweist http://example.com/document.html#anker1 auf das HTML-Element in document.html, das das Anker-Attribut name="anker1" (oder id="anker1") enthält.
In XML sollte sich mit http://example.com/document.xml#xpointer(//Kamel) ein XPointer einsetzen lassen, der alle XML-Elemente mit Namen „Kamel“ aus der Datei document.xml als Ergebnis liefert.
Für PDF-Dokumente beschreibt http://example.com/document.pdf#page=123 die S. 123 in document.pdf.
Für Webvideos und andere audiovisuelle Medien kann ein Zeitpunkt, Ausschnitt oder Kapitel bestimmt werden. Es gibt unterschiedliche Paarungen Schlüsselwort=Wert, wobei das Schlüsselwort beispielsweise track oder t oder auch id heißen könnte.[3] Das erforderliche Schlüsselwort wie auch die Interpretation des zugewiesenen Wertes hängt von der Art des Mediums ab. So soll http://example.com/video.mp4#t=40 zur 40. Sekunde des Videos auf video.mp4 springen.
Die Scalable-Vector-Graphics-Spezifikation (SVG) erlaubt den Zugriff auf verschiedene Elemente innerhalb derselben Vektorgrafik über Fragmentbezeichner. Dadurch ist es beispielsweise möglich, verschiedene Icons einer grafischen Benutzeroberfläche in einer gemeinsamen SVG-Datei vorzuhalten und bei Bedarf nur das gewünschte Icon zu referenzieren.[4] Der Fragmentbezeichner wird auch in diesem Fall mit einem Doppelkreuz vom Namen der Ressource abgetrennt, muss aber kein Teil einer URI sein.