Fragmentbezeichner

Als Fragmentbezeichner (englisch fragment identifier) ist ein optionaler Teil eines URI und wird dazu benutzt, eine Untereinheit oder einen Teil einer Ressource zu spezifizieren oder zu adressieren.

Verwendung

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 eines URI. Er wird durch ein Doppelkreuz (#) eingeleitet und erstreckt sich bis zum Ende des URI. 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 https://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 https://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 https://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 https://example.com/video.mp4#t=40 zur 40. Sekunde des Videos auf video.mp4 springen.
  • Über ein sogenanntes Textfragment kann ein Webbrowser, der die Fähigkeit dazu besitzt, angewiesen werden, diesen Text hervorzuheben – auf welche Weise, ist browserabhängig. Beispiel: https://example.org/path/to/resource#:~:text=illustrative%20examples markiert im Webdokument die Textstelle illustrative examples.[4]

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.[5] Der Fragmentbezeichner wird auch in diesem Fall mit einem Doppelkreuz vom Namen der Ressource abgetrennt, muss aber kein Teil einer URI sein.

  • RFC: 2396 – Uniform Resource Identifier. 1998 (aktualisiert durch RFC 3986, englisch).
  • RFC: 3986 – Uniform Resource Identifier (URI). Januar 2005, Abschnitt 3.5: Fragment. (englisch).
  • RFC: 5147 – URI Fragment Identifiers for the text/plain Media Type. (englisch).
  • HTML 4.01 Specification – Links in HTML documents (W3C, englisch)
  • URL – Living Standard(WHATWG, englisch)
  • PDF Open Parameters (Memento vom 15. November 2016 im Internet Archive; englisch, PDF, 157 kB, für Adobe Acrobat)
  • Textfragmente - URIs (MDN Web Docs)

Einzelnachweise

  1. RFC: 2396 – Uniform Resource Identifier. 1998, Abschnitt 4.1: Fragment Identifier. (englisch).
  2. RFC: 5147 – URI Fragment Identifiers for the text/plain Media Type. 2008, Abschnitt 5: Examples. (englisch).
  3. Media Fragments URI 1.0 (basic), W3C
  4. URL Fragment Text Directives, W3C
  5. Chris Coyier: How SVG Fragment Identifiers Work. In: CSS Tricks. 29. Januar 2017, abgerufen am 16. Januar 2019 (englisch).