Текст после # в URI ресурса
В компьютерном гипертексте фрагмент URI — это строка символов , которая ссылается на ресурс , подчиненный другому, первичному ресурсу. Первичный ресурс идентифицируется унифицированным идентификатором ресурса (URI), а идентификатор фрагмента указывает на подчиненный ресурс.
Идентификатор фрагмента, представленный знаком решетки, #
является необязательной последней частью URL-адреса документа. Обычно он используется для идентификации части этого документа. Общий синтаксис указан в RFC 3986. [1] Разделитель в виде знака решетки в URI не является частью идентификатора фрагмента.
Основы
В URI знак решетки #
вводит необязательный фрагмент около конца URL. Общий синтаксис RFC 3986 для URI также допускает необязательную часть запроса, вводимую вопросительным знаком ?
. В URI с запросом и фрагментом фрагмент следует за запросом. Части запроса зависят от схемы URI и оцениваются сервером, например, http:
поддерживает запросы в отличие от . Фрагменты зависят от типа MIMEftp:
документа и оцениваются клиентом ( веб-браузером ). Клиенты не должны отправлять фрагменты URI на серверы при извлечении документа. [1] [2]
URI, заканчивающийся на , #
разрешен общим синтаксисом и является своего рода пустым фрагментом. В типах документов MIME, таких как text/html
или любой тип XML, пустые идентификаторы для соответствия этой синтаксически допустимой конструкции не допускаются. Веб-браузеры обычно отображают верхнюю часть документа для пустого фрагмента.
Идентификатор фрагмента функционирует иначе, чем остальная часть URI: его обработка выполняется исключительно на стороне клиента без участия веб-сервера , хотя сервер обычно помогает определить тип MIME, а тип MIME определяет обработку фрагментов. Когда агент (например, веб-браузер) запрашивает веб-ресурс с веб-сервера, агент отправляет URI на сервер, но не отправляет фрагмент. Вместо этого агент ждет, пока сервер отправит ресурс, а затем обрабатывает ресурс в соответствии с типом документа и значением фрагмента. [3]
На веб-странице HTML агент будет искать якорь, идентифицированный с помощью тега HTML, который включает атрибут id=
или, name=
равный идентификатору фрагмента.
Примеры
- В URI для
text/html
страниц MIME, таких как http://www.example.org/foo.html#bar
фрагмент, к элементу относится id="bar"
.- Графические веб-браузеры обычно прокручивают страницы, чтобы расположить их так, чтобы верхняя часть элемента, идентифицированного идентификатором фрагмента, была выровнена с верхней частью области просмотра; [4] поэтому идентификаторы фрагментов часто используются в оглавлениях.
- Внешний вид идентифицированного элемента можно изменить с помощью псевдокласса
:target
CSS . [5] Википедия использует это для выделения выбранной ссылки. В частности, CSS display: block
можно использовать для отображения контента, только если он является целью, а в противном случае скрыть с помощью display: none
. - Атрибут
name
элемента <a>
служил той же цели, но теперь устарел в пользу id
атрибута , который может быть применен к любому элементу. [6]
- Во всех типах документов XML , включая фрагменты XHTML , соответствующие
xml:id
или подобным id
атрибутам, следуют Name
синтаксису - и начинаются с буквы, подчеркивания или двоеточия. В частности, они не могут начинаться с цифры или дефиса. [7]xml:id
является одним из немногих общих атрибутов XML, например, xml:lang
, который можно использовать без явного объявления пространства имен. [8] В XHTML id
также может использоваться и, по-видимому, является предпочтительным, [9] [10] поскольку XHTML был указан до того , как xml:id
появился.
- В приложениях XML идентификаторы фрагментов в определенном синтаксисе могут быть XPointers ; [11] [12] например, идентификатор фрагмента в URI
http://www.example.org/foo.xml#xpointer(//Rube)
ссылается на все элементы XML с именем «Rube» в документе, идентифицированном URI http://www.example.org/foo.xml. Процессор XPointer, учитывая этот URI, получит представление документа (например, запросив его из Интернета) и вернет представление элементов «Rube» документа. - В словарях RDF , таких как RDFS , OWL или SKOS , идентификаторы фрагментов используются для идентификации ресурсов в том же пространстве имен XML , но не обязательно соответствуют определенной части документа. Например,
http://www.w3.org/2004/02/skos/core#broader
определяет концепцию "шире" в словаре SKOS Core, но не ссылается на определенную часть ресурса, идентифицированного http://www.w3.org/2004/02/skos/core
, полный файл RDF, в котором объявлена семантика этой конкретной концепции, наряду с другими концепциями в том же словаре. - В URI для документов MIME
text/plain
RFC 5147 определяет идентификатор фрагмента для позиций символов и строк и диапазонов в документе с использованием ключевых слов " char
" и " line
", а также может быть добавлена проверка целостности, либо " length
", либо " md5
". [13] Поддержка браузеров, по-видимому, отсутствует. [14] Следующий пример идентифицирует строки с 11 по 20 текстового документа:http://example.com/document.txt#line=10,20
- В URI для
text/csv
документов MIME RFC 7111 определяет идентификатор фрагмента как селектор для строк, столбцов и ячеек с использованием ключевых слов " row
" , " col
" и " cell
", [15] Например:http://example.com/data.csv#row=4
– Выбирает 4-ю строку.http://example.com/data.csv#col=2
– Выбирает 2-й столбец.http://example.com/data.csv#row=5-7
– Выбирает три последовательные строки, начиная с 5-й строки.http://example.com/data.csv#row=5-*
– Выбирает все строки, начиная с 5-й.http://example.com/data.csv#cell=4,1-6,2
– Выбирает область, которая начинается с 4-й строки и 1-го столбца и заканчивается 6-й строкой и 2-м столбцом.
- В URI для документов MIME audio/*, image/*, video/* очень немногие имеют определенные фрагменты или семантику фрагментов. [16] Синтаксис Media Fragments URI 1.0 (базовый) поддерживает адресацию медиаресурса по двум измерениям (временному и пространственному) с использованием ключевых слов
t
и xywh
, а Media Fragments 1.0 URI (расширенный) добавляет track
и id
. [17] Таким образом, можно использовать следующие URI медиафрагментов в src
атрибуте элемента audio
или video
HTML5 :http://example.com/foo.mp4#t=10,20
(это указывает на временной интервал, начинающийся с 10 секунд и заканчивающийся до 20 секунд)http://example.com/bar.webm#t=40,80&xywh=160,120,320,240
- Спецификация также позволяет указывать часы, минуты (должно быть 2 цифры) и секунды (должно быть 2 цифры) с помощью двоеточий и миллисекунды с помощью десятичной точки. Другие временные схемы также могут быть указаны с помощью префиксов, при этом
npt:
(Normal Play Time) является значением по умолчанию. - Другие веб-сайты используют фрагментную часть для передачи некоторой дополнительной информации скриптам, работающим на них, — например, Google Video понимает постоянные ссылки в формате ,
#01h25m30s
чтобы начать воспроизведение с указанной позиции, [18] а YouTube использует похожий код, такой как #t=3m25s
. [19]
- В JavaScript идентификатор фрагмента текущей страницы HTML или XHTML может быть доступен в свойстве "hash"
location.hash
[20] – JavaScript может также использоваться с другими типами документов. С появлением AJAX некоторые веб-сайты используют идентификаторы фрагментов для эмуляции поведения кнопки "Назад" браузеров для смены страниц, не требующей перезагрузки, или для эмуляции подстраниц.- Например, Gmail использует один URL-адрес почти для каждого интерфейса — почтовых ящиков, отдельных писем, результатов поиска, настроек — фрагмент используется для того, чтобы сделать эти интерфейсы напрямую связанными. [21]
- Веб-сайты Adobe Flash могут использовать фрагментную часть для информирования пользователя о состоянии веб-сайта или веб-приложения, а также для упрощения создания глубоких ссылок , обычно с помощью библиотеки JavaScript SWFAddress.
- URI, ссылающийся на документ JSON , может указывать указатель на определенное значение. [22]
- Например, URL-адрес, заканчивающийся на,
#/foo
можно использовать для извлечения значения из пары ключ-значение в документе, начинающемся с{ "foo": ["bar", "baz"], ... }
- В URI для
application/pdf
документов MIME программы просмотра PDF распознают ряд идентификаторов фрагментов. [23] [24] Например, URL, заканчивающийся на , .pdf#page=35
заставит большинство читателей открыть PDF и прокрутить до страницы 35. Возможны несколько других параметров, включая #nameddest=
(аналогично якорям HTML), #search="word1 word2"
, #zoom=
и т. д. Несколько параметров можно комбинировать с амперсандом:http://example.org/doc.pdf#view=fitb&nameddest=Chapter3
.
- В SVG фрагментам разрешено указывать такие аргументы, как
viewBox()
, preserveAspectRatio()
, и transform()
. [25]
Предложения
Было сделано несколько предложений по использованию идентификаторов фрагментов с обычными текстовыми документами (которые не могут хранить метаданные привязок) или для ссылки на места в HTML-документах, в которых автор не использовал теги привязок:
- По состоянию на сентябрь 2012 года Media Fragments URI 1.0 (базовый) является рекомендацией W3C . [26]
- Chrome версии 80 и выше [27] [28] и Firefox версии 131 и выше [29] реализуют WICG Text Fragments W3C , [30] поэтому браузер будет искать , выделять соответствующий текст и прокручивать к нему. Помимо начала и конца, фрагмент может также указывать контекст: текст, который должен предшествовать или следовать, но не будет выделен ( пример, который использует для поиска 'vision', которому предшествует 'night' ).
#:~:text=foo
foo
foo
#:~:text=night-,vision
- Индекс пакетов Python добавляет хэш MD5 файла к URL-адресу в качестве идентификатора фрагмента. [31] Если бы MD5 был неразрушен (это разрушённая хэш-функция ), его можно было бы использовать для обеспечения целостности пакета.
https://pypi.python.org ... zodbbrowser-0.3.1.tar.gz#md5=38dc89f294b24691d3f0d893ed3c119c
- Фрагмент hash-bang [32] — это фрагмент, начинающийся с восклицательного знака
!
. Он использовался в ныне устаревшем подходе к индексированию динамических одностраничных приложений . Восклицательный знак недопустим в идентификаторах HTML4 , XHTML и XML, предоставляя определенную степень отделения от этой функциональности. Однако он разрешен в HTML5 . [33]- В период с 2009 по 2015 год Google Webmaster Central предложил, а затем рекомендовал «схему сканирования AJAX» [34] [35], использующую начальный восклицательный знак в идентификаторах фрагментов для страниц AJAX с сохранением состояния :
http://example.com/page?query#!state
- Другой реализацией стала замена на
#!
[ ?_escaped_fragment_=
34] - Hash-bang URI считались проблемными рядом авторов, включая Джени Теннисон из W3C, поскольку они делают страницы недоступными для тех, у кого в браузере не активирован JavaScript . Они также нарушают заголовки HTTP-рефереров , поскольку браузерам не разрешено отправлять идентификатор фрагмента в заголовке Referer. [32]
- В 2015 году Google отменил свое предложение по сканированию AJAX с хэш-бангом, рекомендовав вместо этого использовать прогрессивное улучшение и метод HTML5
history.pushState()
[36] . [37] - Сотрудник Mozilla Foundation Джервас Маркхэм предложил идентификатор фрагмента для поиска в форме
#!s!search terms
. Добавление числа после s ( #!s10!
) указывает, что браузер должен искать n -ное вхождение поискового термина. Отрицательное число ( #!s-3!
) начинает поиск в обратном направлении с конца документа. Для добавления этой функциональности в совместимые браузеры доступен скрипт Greasemonkey . [38]http://example.com/index.html#!s3!search terms
- Эрик Уайлд и Марсель Башнагель из ETH Zurich расширяют это, чтобы также идентифицировать фрагменты в простых текстовых документах, используя регулярные выражения , с ключевым словом "
match
". [39] Они также описывают реализацию прототипа как расширение для браузера Firefox . Например, следующий код найдет текст "RFC" без учета регистра в любом месте документа:http://example.com/document.txt#match=[rR][fF][cC]
- K. Yee из Foresight Institute предлагает «расширенные идентификаторы фрагментов», разделенные двоеточиями и ключевым словом, чтобы отличать их от идентификаторов якорей. Идентификатор фрагмента текстового поиска с «схемой спецификации фрагмента» id «
words
» является первым предложением в этой схеме. [40] Следующий пример будет искать документ на предмет первого вхождения строки «некоторый контекст для поискового термина», а затем выделять слова «поисковый термин»:http://example.com/index.html#:words:some-context-for-a-(search-term)
- Вышеуказанная схема была реализована в Chrome версии 80. [41]
- Проект LiveURLs [42] предложил формат идентификатора фрагмента для ссылки на область текста на странице в форме
#FWS+C
, где F — длина первого слова (до пяти символов), W — само первое слово, S — длина выделенного текста, а C — 32-битный CRC выделенного текста. [43] Они реализовали вариант этой схемы в качестве расширения для браузера Firefox, [44] используя форму #LFWS+C
, где L — длина самого фрагмента в двух шестнадцатеричных цифрах. Ссылка на слово «Фрагмент» с использованием реализованного варианта даст:http://example.com/index.html#115Fragm8+-52f89c4c
- До Firefox 5 Firefox поддерживал ссылки XPath, такие как #xpath:/html/body/div[3], которые можно было использовать вместе с букмарклетом, таким как http://antimatter15.com/wp/2009/11/xpath-bookmark-bookmarklet/, для ссылок в HTML-документах, в которых отсутствовали надлежащие идентификаторы. Эта функция была удалена в рамках очистки кода в https://bugzilla.mozilla.org/show_bug.cgi?id=457102
- В формате электронной книги ePub канонический идентификатор фрагмента EPUB (epubcfi, [45] 2011-2017) определяет стандартизированный W3C / IDPF метод ссылки на произвольный контент с использованием идентификаторов фрагментов для поиска не привязанных текстовых диапазонов через структуру документа и сопоставление с шаблоном. Эти динамические глубокие ссылки помогают находить контент после обновления текста и используются, например, в Apple Books .
Смотрите также
Ссылки
- ^ ab "RFC 3986 Uniform Resource Identifier (URI): Generic Syntax". Internet Engineering Task Force. Январь 2005 г. Получено 2012-03-06 .
- ^ R. Fielding, Ed., Adobe; J. Reschke, Ed., greenbytes (июнь 2014 г.). "Протокол передачи гипертекста (HTTP/1.1): синтаксис и маршрутизация сообщений". Internet Engineering Task Force (IETF) . Получено 2023-12-27 .
Целевой URI исключает фрагментный компонент ссылки, если таковой имеется, поскольку идентификаторы фрагментов зарезервированы для обработки на стороне клиента.
{{cite web}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ "Типы представления и семантика идентификатора фрагмента". Архитектура Всемирной паутины, том первый . W3C . 2004. Получено 13 июля 2011 г.
- ^ Coyier, Chris (2012-04-09) [последнее обновление 13 января 2022 г.]. "Использование селектора CSS :target". CSS-Tricks . Получено 2024-10-07 .
- ^ Участники MDN (2024-08-08). "target". CSS: каскадные таблицы стилей . MDN . Получено 2024-10-07 .
- ^ "Устаревшие функции". HTML Living Standard . WHATWG . 2024-08-07 . Получено 2024-08-08 .
- ^ "Ограничение действительности: ID". XML 1.0 (пятое издание) . W3C . 2008. Получено 13 июля 2011 г.
- ^ "xml:id Version 1.0". W3C . 2005 . Получено 2011-07-13 .
- ^ Бирбек, Марк; Джиллинг, Маркус; Маккаррон, Шейн; Пембертон, Стивен; и др., ред. (2010-12-16) [Copyright © 2001-2010]. "12. Модуль основных атрибутов XHTML: 12.1. Коллекция основных атрибутов" (Черновик редактора W3C, часть Заметки рабочей группы W3C) . XHTML™ 2.0 . Консорциум World Wide Web (W3C) . Получено 2024-10-07 .
- ^ Аксельссон, Джонни; Эпперсон, Бет; Ишикава, Масаясу; Маккаррон, Шейн; Наварро, Энн; Пембертон, Стивен, ред. (2003-05-06). "6. Коллекции атрибутов XHTML: 6.1. Основная коллекция атрибутов" (рабочий проект W3C) . XHTML™ 2.0 . Консорциум World Wide Web (W3C) . Получено 2024-10-07 .
- ^ Дэниел, Рон, младший; ДеРоуз, Стив; Малер, Ив, ред. (2000-06-07). "XML Pointer Language (XPointer) Version 1.0" (рекомендация W3C Candidate) . Консорциум World Wide Web (W3C) . Получено 2024-10-07 .
{{cite web}}
: CS1 maint: несколько имен: список редакторов ( ссылка ) - ^ Møller, Anders; Schwartzbach, Michael I. (октябрь 2003 г.) [Впервые опубликовано: март 2000 г.]. "XPointer fragment identifiers". XML tutorial : The XML Revolution : Technologies for the future Web . BRICS, Aarhus University . Получено 2024-10-07 .
ПРИМЕЧАНИЕ: Эти слайды не обновлялись с 2003 года. Они были заменены книгой
An Introduction to XML and Web Technologies
Addison-Wesley и сопутствующими онлайн-материалами. Более подробную информацию см. по адресу http://www.brics.dk/ixwt/.
- ^ Дюрст, Мартин Дж.; Уайлд, Эрик (апрель 2008 г.). Идентификаторы фрагментов URI для типа носителя text/plain (RFC — предлагаемый стандарт). Запрос на комментарии сетевой рабочей группы. Internet Engineering Task Force. doi :10.17487/RFC5147.
- ^ "Выпуск 77024". Chromium . 2011 . Получено 2011-07-13 .
- ^ Хаузенблас, Майкл; Уайлд, Эрик; Теннисон, Джени (январь 2014 г.). Идентификаторы фрагментов URI для типа носителя text/csv (RFC - информационный). Независимый запрос на представление комментариев. (Не одобрен) Целевой группой по инженерии Интернета. doi : 10.17487/RFC7111. ISSN 2070-1721.
- ^ "Обзор типа носителя". Рабочая группа W3C по фрагментам носителя . 2009. Получено 29.04.2009 .
- ^ Хаузенблас, Майкл; Ягенстедт, Филип; Янсен, Джек; Лафон, Ив; Паркер, Конрад; Штайнер, Томас (25 сентября 2012 г.). Тронси, Рафаэль; Манненс, Эрик; Пфайффер, Сильвия; Ван Дерсен, Дэви (ред.). «Медиа-фрагменты URI 1.0 (базовый)» (рекомендация W3C) . Рабочая группа W3C по медиафрагментам, Консорциум Всемирной паутины.
- ^ "Новая функция: ссылка внутри видео". 2006-07-19 . Получено 2011-07-13 .
- ^ "Ссылка на лучшие части ваших видео". YouTube . 2008-10-30 . Получено 2011-07-13 .
- ^ Участники MDN (2024-07-18). "Расположение: свойство хэша". Веб-API . MDN . Получено 2024-10-07 .
- ^ Ссылка на определенный контент в Gmail, Google Blogoscoped, 2007-11-17
- ^ Брайан, П. (2013-04-02). "RFC 6901 – JavaScript Object Notation (JSON) Pointer". The Internet Society . Получено 2022-07-14 .
- ^ «Параметры открытия файлов PDF – Указание параметров в URL» (PDF) . Adobe. Апрель 2007 . Получено 20 сентября 2017 г. .
- ^ Taft, E.; Pravetz, J.; Zilles, S.; Masinter, L. (май 2004 г.). "RFC 3778 – Тип носителя application/pdf". tools.ietf.org . The Internet Society. doi :10.17487/RFC3778 . Получено 20 сентября 2017 г.
- ^ «Связывание – SVG 1.1 (Второе издание)».
- ^ "Рекомендация W3C по медиа-фрагментам URI 1.0 (базовая)" . Получено 25.09.2012 .
- ^ "Прокрутить до фрагмента текста". Статус платформы Chrome . Google Chrome . Получено 2020-05-18 .
- ^ Келли, Гордон. «Google Chrome 80 выпущен с противоречивым обновлением Deep Linking». Forbes . Получено 04.06.2020 .
- ^ "Заметки о выпуске Firefox 131.0". mozilla.org . Получено 2024-11-12 .
- ^ "WICG/scroll-to-text-fragment: Предложение разрешить указание фрагмента текста во фрагменте URL". GitHub . Группа сообщества инкубатора WebPlatform.org в W3C . Получено 18.05.2020 .
- ^ "Pypi md5 check support" . Получено 2011-07-13 .
Pypi имеет привычку добавлять фрагмент md5 к своим egg url, мы будем использовать его для проверки уже имеющихся файлов дистрибутива в кэше
- ^ ab "Hash URI". Блог W3C . 2011-05-12 . Получено 2011-07-13 .
- ^ "HTML 5.1 2nd Edition". W3C . 2017 . Получено 2018-08-03 .
- ^ ab "Предложение сделать AJAX сканируемым". 2009-10-07 . Получено 2011-07-13 .
- ^ "(Спецификации) Создание приложений AJAX, пригодных для сканирования". Google Inc. Получено 2013-05-04 .
- ^ "Манипуляция историей браузера". Mozilla Developer Network . Получено 23.02.2017 .
- ^ "Устаревание нашей схемы сканирования AJAX". Официальный блог Google Webmaster Central . Получено 23.02.2017 .
- ^ Поиск фрагментов, gerv.net
- ^ Идентификаторы фрагментов для простых текстовых файлов, Эрик Уайлд и Марсель Башнагель, Швейцарский федеральный технологический институт (ETH Zürich), Труды шестнадцатой конференции ACM по гипертексту и гипермедиа doi :10.1145/1083356.1083398
- ^ Идентификаторы фрагментов текстового поиска, К. Йи, Сетевая рабочая группа, Институт Форсайта, март 1998 г.
- ^ bmcquade; bokan; nburris (2022-03-24). "Функция: Прокрутка до фрагмента текста". Статус платформы Chrome . chromium.org . Получено 2022-05-03 .
- ^ Проект LiveURLs
- ^ Технология, лежащая в основе LiveURL, дата обращения 2011-03-13
- ^ "Web Marker" Дополнение Firefox, получено 13.03.2011
- ^ "EPUB Canonical Fragment Identifiers 1.1". idpf.org . Получено 2020-06-03 .
Внешние ссылки
- Рабочая группа W3C по фрагментам мультимедиа, устанавливающая синтаксис и семантику URI для обращения к фрагментам мультимедиа в аудиовизуальном материале (например, к области изображения или фрагменту видео)
- Портал сообщества MediaMixer собирает презентации, учебные пособия, примеры использования и демонстрационные материалы, связанные с использованием технологии Media Fragment.