URI -Fragment

Im Computer Hypertext, a URI -Fragment ist ein Saite von Figuren das bezieht sich auf a Ressource Das ist einer anderen primären Ressource untergeordnet. Die primäre Ressource wird durch a identifiziert Einheitliche Ressourcenkennung (URI) und die Fragment -Kennung zeigt auf die untergeordnete Ressource.

Die von einer Hash -Marke eingeführte Fragment -Kennung # ist der optionale letzte Teil von a URL für ein Dokument. Es wird normalerweise verwendet, um einen Teil dieses Dokuments zu identifizieren. Die generische Syntax ist in RFC 3986 angegeben. Die Hash-Mark Der Separator in URIs ist nicht Teil des Fragmentkennung.

Grundlagen

In URIs eine Hash -Marke # führt das optionale Fragment gegen Ende der URL ein. Die generische RFC 3986 -Syntax für URIs ermöglicht auch eine optionale Anfrage Teil durch ein Fragezeichen eingeführt ?. In URIs mit einer Abfrage und einem Fragment folgt das Fragment der Abfrage. Abfrageteile hängen vom URI -Schema ab und werden vom Server ausgewertet - z. http: Unterstützt Abfragen im Gegensatz zu FTP:. Fragmente hängen vom Dokument ab Mime Typ und werden vom Kunden bewertet (Webbrowser). Clients dürfen keine URI -Fragmente an Server senden, wenn sie ein Dokument abrufen, und ohne Hilfe von einer lokalen Anwendung (siehe unten) nehmen Fragmente nicht teil Http Umleitungen.[1]

Ein Uri, der mit endet mit # ist von der generischen Syntax zulässig und ist eine Art leeres Fragment. In MIME -Dokumenttypen wie z. Text/HTML oder ein XML -Typ, leere Kennungen, die diesem syntaktisch rechtlichen Konstrukt entsprechen, sind nicht zulässig. Webbrowser zeigen normalerweise die Oberseite des Dokuments für ein leeres Fragment an.

Das Fragment -Identifikator funktioniert anders als den Rest des URI: Seine Verarbeitung ist ausschließlich kundenseitig ohne Teilnahme von der WebserverObwohl der Server normalerweise dazu beiträgt, den MIME -Typ zu bestimmen, und der MIME -Typ die Verarbeitung von Fragmenten bestimmt. Wenn ein Agent (wie ein Webbrowser) Anfragen a Webressource Von einem Webserver sendet der Agent den URI an den Server, sendet das Fragment jedoch nicht. Stattdessen wartet der Agent darauf, dass der Server die Ressource sendet, und dann verarbeitet der Agent die Ressource gemäß dem Dokumenttyp und dem Fragmentwert.[2]

In einer HTML -Webseite sucht der Agent nach einem Anker, der mit einem HTML -Tag identifiziert wird, das eine enthält id = oder Name = Attribut entspricht der Fragmentkennung.

Beispiele

  • In URIs für Mime Text/HTML Seiten wie http://www.example.org/foo.html#bar Das Fragment bezieht sich auf das Element mit id = "bar" ".
    • Grafische Webbrowser scrollen in der Regel auf die Position von Seiten, so dass die Oberseite des von der Fragment -ID identifizierten Elements mit der Oberseite des Ansichtsfensters ausgerichtet ist. Somit werden Fragmentidentifikatoren häufig in Inhaltstabellen und in verwendet Permalinks.
    • Das Erscheinungsbild des identifizierten Elements kann durch die geändert werden :Ziel CSS Pseudoklas; Wikipedia Verwendet dies, um die ausgewählte Referenz hervorzuheben. Insbesondere CSS Bildschirmsperre kann verwendet werden, um Inhalte nur anzuzeigen, wenn es das Ziel ist, und ansonsten versteckt von Anzeige: Keine.
    • Die veralteten Name Attribut (nur für einige Elemente zulässig) hatte einen ähnlichen Zweck in jetzt veralteten Browsern. Falls vorhanden Name und Ich würde muss identisch sein.
  • Insgesamt Xml Dokumenttypen einschließlich Xhtml Fragmente, die einem entsprechen xml: id oder ähnliches Ich würde Attribute folgen dem Name-Syntax und beginnen Sie mit einem Brief, einem Unterstrich oder einem Dickdarm. Insbesondere können sie nicht mit einer Ziffer oder einem Bindestrich beginnen.[3]
    • xml: id ist eine der wenigen generischen XML -Attribute, z. B., XML: Lang, die verwendet werden können, ohne explizit einen Namespace zu deklarieren.[4] In xhtml Ich würde muss verwendet werden, da XHTML zuvor angegeben wurde xml: id existiert.
  • In XML -Anwendungen können Fragmentidentifikatoren in einer bestimmten Syntax sein Xpointers; Zum Beispiel die Fragmentkennung im URI http://www.example.org/foo.xml#xpointer(//rube) Bezieht sich auf alle XML -Elemente mit dem Namen "Rube" im Dokument, das vom URI http://www.example.org/foo.xml identifiziert wurde. Ein Xpointer -Prozessor, der vorgegangen ist, würde eine Darstellung des Dokuments erhalten (z.
  • Im RDF Vokabularien wie RDFS, EULE, oder Skos, Fragment -Identifikatoren werden verwendet, um Ressourcen im selben zu identifizieren XML -Namespace, sind aber nicht unbedingt einem bestimmten Teil eines Dokuments entsprechen. Zum Beispiel, http://www.w3.org/2004/02/skos/core#broader identifiziert das Konzept "breiter" im Skos -Kernvokabular, bezieht sich jedoch nicht auf einen bestimmten Teil der Ressource, die von identifiziert wurde http://www.w3.org/2004/02/skos/core, Eine vollständige RDF -Datei, in der die Semantik dieses spezifischen Konzepts zusammen mit anderen Konzepten im selben Vokabular deklariert wird.
  • In URIs für Mime Text/einfach Dokumente RFC 5147 Gibt eine Fragmentkennung für die Zeichen- und Zeilenpositionen und -bereiche innerhalb des Dokuments mithilfe der Schlüsselwörter an. "verkohlen" und "Linie". Browserunterstützung scheint zu fehlen.[5] Das folgende Beispiel identifiziert Zeilen 11 bis 20 eines Textdokuments:
    • http://example.com/document.txt#line=10,20
  • In URIs für Mime Text/CSV Dokumente, RFC 7111, gibt einen Fragmentkennung als Selektor für Zeilen, Spalten und Zellen an, die unter Verwendung der Schlüsselwörter verwendet werden. "die Zeile","col", und "Zelle", zum Beispiel:
    • http://example.com/data.csv#row=4 - Wählt die 4. Zeile aus.
    • http://example.com/data.csv#col=2 - Wählt die 2. Spalte aus.
    • http://example.com/data.csv#row=5-7 - Wählt drei aufeinanderfolgende Zeilen aus, beginnend mit der 5. Reihe.
    • http://example.com/data.csv#row=5-* - Wählt alle Zeilen aus, beginnend mit der 5. Reihe.
    • http://example.com/data.csv#cell=4,1-6,2 - Wählt einen Bereich aus, der in der 4. Zeile und der 1. Spalte beginnt und in der 6. Zeile und der 2. Spalte endet.
  • In URIs für MIME -Audio/*, Image/*, Video/*Dokumente haben nur sehr wenige Fragmente oder Fragmentsemantik definiert.[6] Die Medienfragmente URI 1.0 (Basic) -Syntax unterstützt die Adressierung einer Medienressource entlang von zwei Dimensionen (zeitlich und räumlich) mit den Schlüsselwörtern t und xywh. Daher kann man die folgenden Medienfragmente URI in der verwenden src Attribut der Audio- oder Video HTML5 Element:
    • http://example.com/foo.mp4#t=10,20
    • http://example.com/bar.webm#t=40,80&xywh=160,120,320,240
    • Andere Websites verwenden den Fragmententeil, um einige zusätzliche Informationen an Skripte zu übergeben, die auf ihnen ausgeführt werden - zum Beispiel, Google Video versteht Permalinks im Format von #01H25M30S an der angegebenen Position zu spielen,[7] und Youtube Verwendet ähnlichen Code wie z. #t = 3m25s.[8]
  • Im JavaScriptAuf die Fragmentkennung der aktuellen HTML- oder XHTML -Seite kann in der Eigenschaft "Hash" zugegriffen werden Ort.Hash - Beachten Sie, dass JavaScript auch mit anderen Dokumenttypen verwendet werden kann. Mit dem Aufstieg von AjaxEinige Websites verwenden Fragment -Kennungen, um das Verhalten von Browsern von Backtaste für Seitenänderungen zu emulieren, für die kein Nachladen erforderlich ist, oder um Unterseite zu emulieren.
    • Zum Beispiel, Google Mail Verwendet eine einzelne URL für fast jede Schnittstelle - Mailboxen, einzelne E -Mails, Suchergebnisse, Einstellungen - mit dem Fragment werden diese Schnittstellen direkt verknüpft.[9]
    • Adobe Flash Websites können den Fragment -Teil verwenden, um den Benutzer über den Status der Website oder Webanwendung zu informieren und zu erleichtern, und um zu erleichtern Deep Links, üblicherweise mit Hilfe der Swfaddress JavaScript -Bibliothek.
  • Ein URI, der zu a verknüpft ist JSON Dokument kann einen Zeiger auf einen bestimmten Wert angeben.[10]
    • Zum Beispiel eine URL, die in endet #/foo könnte verwendet werden, um den Wert aus einem Schlüsselwertpaar in einem Dokument zu extrahieren, der mit dem mit {"foo": ["Bar", "Baz"], ...}
  • In URIs für Mime Anwendung/PDF Dokumente PDF -Zuschauer erkennen eine Reihe von Fragmentkennungen.[11][12] Zum Beispiel eine URL, die in endet .pdf#Seite = 35 veranlasst die meisten Leser, die PDF zu öffnen und zu Seite 35 zu scrollen. Mehrere andere Parameter sind möglich, einschließlich #nameddest = (ähnlich wie HTML -Anker), #Search = "Word1 Word2", #Zoom =usw. Mehrere Parameter können mit Ampersands kombiniert werden:
    • http://example.org/doc.pdf#view=fitb&NamedDest=chapter3.
  • Im SVGFragmente dürfen Argumente wie z. viewbox (), PreserveSpectratio (), und verwandeln().[13]

Vorschläge

Für Fragmentkennungen für die Verwendung mit Klartextdokumenten (die keine Ankermetadaten speichern können) wurden mehrere Vorschläge gemacht oder sich auf Orte innerhalb von HTML -Dokumenten verweisen, in denen der Autor keine Anker -Tags verwendet hat:

  • Ab September 2012 ist die Medienfragmente URI 1.0 (Basic) a W3c Empfehlung.[14]
  • Chromversionen 80 und höher[15][16] implementieren W3c's Wicg Textfragmente,[17] Also #: ~: text = foo wird den Browser suchen FooMarkieren Sie den passenden Text und scrollen Sie darauf. Neben dem Start und Ende kann der Ausschnitt auch einen Kontext angeben: Text, der vorausgehen oder folgen muss Foo wird aber nicht hervorgehoben (Beispiel, dass die Suche nach "Vision" von "Nacht" vorausgeht).
  • Das Python Der Paketindex findet die an MD5 Hash einer Datei zur URL als Fragmentkennung.[18] Wenn MD5 ungebrochen wäre (es ist eine gebrochene Hash -Funktion), könnte es verwendet werden, um das zu gewährleisten Integrität des Pakets.
    https://pypi.python.org ... Zodbbrowser-0.3.1.tar.gz#Md5 = 38dc89f294b24691d3f0d893ed3c119c
  • A Hash-Bang[19] Fragment ist ein Fragment, das mit einem Ausrufezeichen beginnt !. Es wurde in einem inzwischen repräsentierten Ansatz zur Indexdynamik verwendet Einseitige Anwendungen. Ein Ausrufezeichen ist illegal in Html4, XHTML- und XML -Identifikatoren, die einen gewissen Grad der Trennung von dieser Funktionalität gewähren. Es ist jedoch in erlaubt HTML5.[20]
    • Zwischen 2009 und 2015, Google Webmaster Central Vorgeschlagen und empfahl dann ein "Ajax Crawlling -Schema"[21][22] Verwenden eines anfänglichen Ausrufezeichens in Fragment -Identifikatoren für staatlich Ajax Seiten:
      http://example.com/page?query#!state
    • Eine weitere Implementierung war der Ersatz von #! mit ? _escaped_fragment_ =[21]
    • Hash-Bang-URIs wurden von einer Reihe von Schriftstellern, darunter Jeni Tennison im W3C JavaScript in ihrem Browser aktiviert. Sie brechen auch HTTP Referer Header als Browser dürfen die Fragment -Kennung nicht im Referer -Header senden.[19]
    • Im Jahr 2015 veraltete Google seinen Hash-Bang Ajax Crawling-Vorschlag und empfahl stattdessen die Verwendung von Progressive Enhancement und HTML5's history.pushstate ()[23] Methode.[24]
    • Mozilla Foundation Mitarbeiter Gervase Markham hat einen Fragmentkennung für die Suche vorgeschlagen, die Form der Form #! S! Suchbegriffe. Hinzufügen einer Zahl nach dem s (#! S10!) zeigt an, dass der Browser nach dem suchen sollte nDas Auftreten des Suchbegriffs. Eine negative Zahl (#! S-3!) Suchen Sie vom Ende des Dokuments rückwärts. EIN Fettaffe Das Skript steht zur Verfügung, um diese Funktionalität zu kompatiblen Browsern hinzuzufügen.[25]
      http://example.com/index.html# !S3 !Search -Begriffe
  • Erik Wilde und Marcel Bochnagel der Eth Zürich Erweitern Sie dies, um auch Fragmente in einfachen Textdokumenten zu identifizieren Reguläre Ausdrückemit dem Schlüsselwort "passen".[26] Sie beschreiben auch eine Prototyp -Implementierung als Erweiterung für die Feuerfuchs Browser. Beispielsweise würde das Folgende den von Fall unempfindlichen Text "RFC" überall im Dokument finden:
    http://example.com/document.txt#match=...;rr]...
  • K. yee der Foresight Institute schlägt "erweiterte Fragmentidentifikatoren" vor Kolons und ein Schlüsselwort, um sie von Ankerkennungen zu unterscheiden. Eine Textsuche Fragment -Kennung mit "Fragment -Spezifikationsschema" ID "Wörter"Ist der erste Vorschlag in diesem Schema.[27] Das folgende Beispiel würde ein Dokument nach dem ersten Auftreten der Zeichenfolge "Ein Kontext für einen Suchbegriff" durchsuchen und dann die Wörter "Suchbegriff" hervorheben:
    http://example.com/index.html#:words:Some-Context-for-a -(Search-mateur)
    • Textfragmente wurden im Dezember 2021 als Bericht der Gemeinschaftsgruppe vorgeschlagen.[28] Dieses Schema verwendet die Richtlinie : ~: text = Um den Suchbegriff vorzustellen.
      https://en.wikipedia.org/wiki/history_of_computing#:~:text=The%20First%20Recorded,.Williams
    • Das obige Schema wurde in Chrome Version 80 implementiert.[29]
  • Das LiveURLS -Projekt[30] schlug ein Fragment -Identifikator -Format vor, um sich auf einen Textbereich innerhalb einer Seite des Formulars zu beziehen #FWS+C., wo F ist die Länge des ersten Wortes (bis zu fünf Zeichen), W ist das erste Wort selbst, S ist die Länge des ausgewählten Textes und C ist ein 32-Bit CRC des ausgewählten Textes.[31] Sie implementierten eine Variante dieses Schemas als Erweiterung für den Firefox -Browser.[32] Verwenden des Formulars #LFWS+C., wo L ist die Länge des Fragments selbst in zwei verhexen Ziffern. Die Verknüpfung mit dem Wort "Fragment" unter Verwendung der implementierten Variante würde ergibt:
    http://example.com/index.html#115fragm8+-52f89c4c
  • Bis zum Firefox 5 unterstützte Firefox XPath -Links wie #xpath:/html/body/div [3], die in Verbindung mit einem Lesezeichen wie verwendet werden könnten, z. http://antimatter15.com/wp/2009/11/xpath-bookmark-bookmarklet/ Um in HTML -Dokumenten zu verknüpfen, bei denen die richtigen IDs fehlten. Diese Funktion wurde im Rahmen einer Codereinigung in entfernt https://bugzilla.mozilla.org/show_bug.cgi?id=457102
  • Im Epub elektronisches Buchformat, das epub kanonische Fragment -Identifier (epubcfi,[33] 2011-2017) definiert a W3c/Idpf-Standardisierte Methode zur Referenzierung beliebiger Inhalt mit Fragment-Identifikatoren, um nicht verankerte Textbereiche über Dokumentstruktur und Musteranpassung zu lokalisieren. Diese dynamischen Deep -Links helfen beim Auffinden von Inhalten nach dem Aktualisieren des Textes und werden beispielsweise in verwendet Apfelbücher.

Siehe auch

Verweise

  1. ^ "RFC 3986 Einheitliche Ressourcenkennung (URI): generische Syntax". Internettechnik-Arbeitsgruppe. Januar 2005. Abgerufen 2012-03-06.
  2. ^ "Repräsentationstypen und Fragment -Identifier -Semantik". Architektur des World Wide Web, Band 1. W3c. 2004. Abgerufen 2011-07-13.
  3. ^ "Gültigkeitsbeschränkung: ID". XML 1.0 (fünfte Ausgabe). W3c. 2008. Abgerufen 2011-07-13.
  4. ^ "XML: ID Version 1.0". W3c. 2005. Abgerufen 2011-07-13.
  5. ^ "Ausgabe 77024". Chrom. 2011. Abgerufen 2011-07-13.
  6. ^ "Media Type Review". W3C Medienfragmente Arbeitsgruppe. 2009. Abgerufen 2009-04-29.
  7. ^ "Neue Funktion: Link in einem Video". 2006-07-19. Abgerufen 2011-07-13.
  8. ^ Link zu bestimmten Inhalten in Google Mail, Google Blogoscoped, 2007-11-17
  9. ^ Bryan, P. "RFC 6901 - JavaScript -Objekt Notation (JSON) Zeiger". Die Internet Society. Abgerufen 2022-07-14.
  10. ^ "Parameter zum Öffnen von PDF -Dateien - Angabe der Parameter in einer URL" (PDF). Adobe. April 2007. Abgerufen 2017-09-20.
  11. ^ "RFC 3778 - Die Anwendung/PDF -Medientyp". Die Internet Society. Mai 2004. Abgerufen 2017-09-20.
  12. ^ "Verknüpfung - SVG 1.1 (zweite Ausgabe)".
  13. ^ "Medienfragmente URI 1.0 (Basic) W3C -Empfehlung". Abgerufen 2012-09-25.
  14. ^ "Scrollen Sie zum Textfragment". Chrome -Plattformstatus. Google Chrome. Abgerufen 2020-05-18.
  15. ^ Kelly, Gordon. "Google Chrome 80 mit kontroverser Deep -Verknüpfungs -Upgrade veröffentlicht". Forbes. Abgerufen 2020-06-04.
  16. ^ "WICG/Scroll-to-Text-Fragment: Vorschlag, um ein Textausschnitt in einem URL-Fragment anzugeben". GitHub. Webplatform.org Inkubator -Community -Gruppe bei W3c. Abgerufen 2020-05-18.
  17. ^ "PYPI MD5 Check Support". Abgerufen 2011-07-13. PYPI hat die Gewohnheit, ein MD5 -Fragment an seine Eier -URLs anzuhängen. Wir werden es verwenden, um die bereits vorhandenen Verteilungsdateien im Cache zu überprüfen
  18. ^ a b "Hash uris". W3C -Blog. 2011-05-12. Abgerufen 2011-07-13.
  19. ^ "HTML 5.1 2. Auflage". W3c. 2017. Abgerufen 2018-08-03.
  20. ^ a b "Vorschlag, Ajax zu kriechbar zu machen". 2009-10-07. Abgerufen 2011-07-13.
  21. ^ "(Spezifikationen) Ajax -Anwendungen kriechbar machen". Google Inc. Abgerufen 2013-05-04.
  22. ^ "Manipulation der Browsergeschichte". Mozilla Developer Network. Abgerufen 2017-02-23.
  23. ^ "Abbau unseres Ajax Crawling -Schema". Offizieller Google Webmaster Central Blog. Abgerufen 2017-02-23.
  24. ^ Fragmentsuche, Gerv.net
  25. ^ Fragment -Identifikatoren für Klartextdateien, Erik Wilde und Marcel Bochnagel, Schweizer Federal Institute of Technology (ETH Zürich), Proceedings der Sechzehnten ACM -Konferenz über Hypertext und Hypermedia doi:10.1145/1083356.1083398
  26. ^ Text-Suchfragment-Identifikatoren, K. Yee, Netzwerkarbeitsgruppe, Foresight Institute, März 1998
  27. ^ Nick Burris (Google); David Bokan (Google) (2021-12-29). "Textfragmente - Entwurf der Community Group Report, 29. Dezember 2021". Abgerufen 2022-05-03. {{}}: |author1= hat generischen Namen (Hilfe)
  28. ^ bmcquade; Bokan; NBURRIS (2022-03-24). "Feature: Scrollen Sie zum Textfragment". Chrome -Plattformstatus. chromium.org. Abgerufen 2022-05-03.
  29. ^ LiveURLS -Projekt
  30. ^ Die Technologie hinter Liveurls, abgerufen 2011-03-13
  31. ^ "Web Marker" Firefox-Add-On, abgerufen 2011-03-13
  32. ^ "EPUB Canonical Fragment Identifiers 1.1". idpf.org. Abgerufen 2020-06-03.

Externe Links

  • W3c Medienfragmente Arbeitsgruppe, Einrichtung einer URI-Syntax und Semantik zur Behandlung von Medienfragmenten im audiovisuellen Material (z.
  • MediaMixer Community -Portal Sammelt Präsentationen, Tutorials, Anwendungsfälle und Demonstranten im Zusammenhang mit der Verwendung von Medienfragmenttechnologie