URI фрагмента
В компьютерном гипертексте фрагмент URI представляет собой строку символов , которая ссылается на ресурс , подчиненный другому, основному ресурсу. Основной ресурс идентифицируется унифицированным идентификатором ресурса (URI), а идентификатор фрагмента указывает на подчиненный ресурс.
Идентификатор фрагмента, представленный решеткой #
— необязательная последняя часть URL -адреса документа. Обычно он используется для идентификации части этого документа. Общий синтаксис указан в RFC 3986. [1] Разделитель хэш-метки в URI не является частью идентификатора фрагмента.
Основы
[ редактировать ]В URI хэш-метка #
вводит необязательный фрагмент в конце URL-адреса. Общий синтаксис RFC 3986 для URI также допускает необязательную часть запроса , представленную вопросительным знаком. ?
. В URI с запросом и фрагментом фрагмент следует за запросом. Части запроса зависят от схемы URI и оцениваются сервером, например: http:
поддерживает запросы в отличие от ftp:
. документа Фрагменты зависят от типа MIME и оцениваются клиентом ( веб-браузером ). Клиенты не должны отправлять фрагменты URI на серверы при получении документа. [1] [2]
URI, заканчивающийся на #
разрешено общим синтаксисом и представляет собой своего рода пустой фрагмент. В типах документов MIME, таких как text/html
или любого типа XML, пустые идентификаторы, соответствующие этой синтаксически допустимой конструкции, не допускаются. Веб-браузеры обычно отображают верхнюю часть документа как пустой фрагмент.
Идентификатор фрагмента функционирует иначе, чем остальная часть URI: его обработка происходит исключительно на стороне клиента без участия веб-сервера , хотя сервер обычно помогает определить тип MIME, а тип MIME определяет обработку фрагментов. Когда агент (например, веб-браузер) запрашивает с веб-ресурс веб-сервера, агент отправляет URI на сервер, но не отправляет фрагмент. Вместо этого агент ждет, пока сервер отправит ресурс, а затем обрабатывает ресурс в соответствии с типом документа и значением фрагмента. [3]
На веб-странице HTML агент будет искать привязку, идентифицируемую тегом HTML, который включает в себя id=
или name=
атрибут, равный идентификатору фрагмента.
Примеры
[ редактировать ]- В URI для MIME
text/html
такие страницы, какhttp://www.example.org/foo.html#bar
фрагмент относится к элементу сid="bar"
.- Графические веб-браузеры обычно прокручивают страницы, чтобы расположить их так, чтобы верхняя часть элемента, идентифицируемого идентификатором фрагмента, была совмещена с верхней частью области просмотра; таким образом, идентификаторы фрагментов часто используются в таблицах содержания и в постоянных ссылках .
- Внешний вид идентифицированного элемента можно изменить с помощью
:target
псевдокласс CSS ; Arc.Ask3.Ru использует это, чтобы выделить выбранную ссылку. В частности CSSdisplay: block
может использоваться для отображения контента, только если он является целью, и в противном случае скрытdisplay: none
. - Устаревший
name
Атрибут (разрешенный только для некоторых элементов) имел аналогичную цель в устаревших браузерах. Если присутствуетname
иid
должны быть идентичными.
- Во всех XML, типах документов включая фрагменты XHTML, соответствующие
xml:id
или подобноеid
атрибуты следуют заName
-синтаксис и начинаются с буквы, подчеркивания или двоеточия. Примечательно, что они не могут начинаться с цифры или дефиса. [4]xml:id
является одним из немногих общих атрибутов XML, например,xml:lang
, который можно использовать без явного объявления пространства имен. [5] В XHTMLid
необходимо использовать, поскольку XHTML был указан ранееxml:id
существовал.
- В приложениях XML идентификаторами фрагментов в определенном синтаксисе могут быть XPointers ; например, идентификатор фрагмента в 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
". Кажется, поддержка браузера отсутствует. [6] В следующем примере идентифицируются строки с 11 по 20 текстового документа:http://example.com/document.txt#line=10,20
- В URI для MIME
text/csv
документов, RFC 7111 определяет идентификатор фрагмента в качестве селектора для строк, столбцов и ячеек с использованием ключевых слов "row
" , "col
", и "cell
", например:http://example.com/data.csv#row=4
– Выбирает 4-ю строку.http://example.com/data.csv#col=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/* очень немногие имеют определенные фрагменты или семантику фрагментов. [7] Синтаксис Media Fragments URI 1.0 (базовый) поддерживает адресацию медиа-ресурса в двух измерениях (временном и пространственном) с использованием ключевых слов.
t
иxywh
. Таким образом, можно использовать следующие URI медиафрагментов вsrc
атрибутaudio
илиvideo
HTML5 -элемент:http://example.com/foo.mp4#t=10,20
http://example.com/bar.webm#t=40,80&xywh=160,120,320,240
- Другие веб-сайты используют фрагментную часть для передачи дополнительной информации скриптам, выполняющимся на них. Например, Google Video понимает постоянные ссылки в формате
#01h25m30s
чтобы начать играть с указанной позиции, [8] и YouTube использует аналогичный код, например#t=3m25s
. [9]
- В JavaScript идентификатор фрагмента текущей страницы HTML или XHTML можно получить в свойстве «hash».
location.hash
– JavaScript также можно использовать с другими типами документов. С появлением AJAX некоторые веб-сайты используют идентификаторы фрагментов для эмуляции поведения кнопки «Назад» в браузерах при изменениях страниц, не требующих перезагрузки, или для эмуляции подстраниц.- Например, Gmail использует один URL-адрес почти для каждого интерфейса — почтовых ящиков, отдельных писем, результатов поиска, настроек — этот фрагмент используется для прямой связи между этими интерфейсами. [10]
- Веб-сайты Adobe Flash могут использовать фрагментную часть для информирования пользователя о состоянии веб-сайта или веб-приложения, а также для облегчения глубоких ссылок , обычно с помощью библиотеки JavaScript SWFAddress.
- URI, который ссылается на документ JSON , может указывать указатель на определенное значение. [11]
- Например, URL-адрес, заканчивающийся на
#/foo
может использоваться для извлечения значения из пары ключ-значение в документе, начинающемся с{ "foo": ["bar", "baz"], ... }
- Например, URL-адрес, заканчивающийся на
- В URI для MIME
application/pdf
Программы просмотра документов PDF распознают ряд идентификаторов фрагментов. [12] [13] Например, 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()
. [14]
Предложения
[ редактировать ]Было сделано несколько предложений по идентификаторам фрагментов для использования с обычными текстовыми документами (которые не могут хранить метаданные привязки) или для ссылки на места в документах HTML, в которых автор не использовал теги привязки:
- По состоянию на сентябрь 2012 года URI медиафрагментов 1.0 (базовый) является рекомендацией W3C . [15]
- Chrome версии 80 и выше [16] [17] реализовать W3C WICG текстовые фрагменты , [18] так
#:~:text=foo
заставит браузер искатьfoo
, выделите соответствующий текст и прокрутите до него. Помимо начала и конца, фрагмент также может указывать контекст: текст, который должен предшествовать или следовать за ним.foo
но не будет выделен ( пример, в котором используется#:~:text=night-,vision
найти «видению», которому предшествует «ночь» ). - Индекс пакета Python добавляет хэш MD5 файла к URL-адресу в качестве идентификатора фрагмента. [19] Если бы MD5 был целым (это сломанная хэш-функция ), его можно было бы использовать для обеспечения целостности пакета.
https://pypi.python.org ... zodbbrowser-0.3.1.tar.gz#md5=38dc89f294b24691d3f0d893ed3c119c
- хэш -бэнг [20] фрагмент — фрагмент, начинающийся с восклицательного знака
!
. Он использовался в ныне устаревшем подходе к индексированию динамических одностраничных приложений . недопустим Восклицательный знак в идентификаторах HTML4 , XHTML и XML, что обеспечивает определенную степень отделения от этой функциональности. Однако это разрешено в HTML5 . [21]- В период с 2009 по 2015 год Центр веб-мастеров Google предложил, а затем рекомендовал «схему сканирования AJAX». [22] [23] использование начального восклицательного знака в идентификаторах фрагментов для страниц AJAX с отслеживанием состояния :
http://example.com/page?query#!state
- Другой реализацией была замена
#!
с?_escaped_fragment_=
[22] - Ряд авторов, в том числе Джени Теннисон из W3C, считали URI хэш-bang проблематичными, поскольку они делают страницы недоступными для тех, у кого JavaScript в браузере не активирован . Они также нарушают заголовки HTTP-реферера , поскольку браузерам не разрешено отправлять идентификатор фрагмента в заголовке Referer. [20]
- В 2015 году Google отказался от своего предложения по сканированию AJAX, рекомендуя вместо этого использовать прогрессивное улучшение и HTML5 .
history.pushState()
[24] метод. [25] - Сотрудник Mozilla Foundation Джервас Маркхэм предложил для поиска идентификатор фрагмента вида
#!s!search terms
. Добавление числа после s (#!s10!
) указывает, что браузер должен выполнить поиск по n- му вхождению поискового запроса. Отрицательное число (#!s-3!
) начинает поиск назад с конца документа. браузеры . Доступен сценарий Greasemonkey, позволяющий добавить эту функцию в совместимые [26]http://example.com/index.html#!s3!search terms
- В период с 2009 по 2015 год Центр веб-мастеров Google предложил, а затем рекомендовал «схему сканирования AJAX». [22] [23] использование начального восклицательного знака в идентификаторах фрагментов для страниц AJAX с отслеживанием состояния :
- Эрик Уайлд и Марсель Башнагель из ETH Zurich расширили это, чтобы также идентифицировать фрагменты в текстовых документах с использованием регулярных выражений с ключевым словом «
match
". [27] Они также описывают реализацию прототипа как расширение для браузера Firefox . Например, следующая команда обнаружит нечувствительный к регистру текст «RFC» в любом месте документа:http://example.com/document.txt#match=[rR][fF][cC]
- К. Йи из Института Форсайта предлагает «расширенные идентификаторы фрагментов», разделенные двоеточиями и ключевым словом, чтобы отличать их от идентификаторов привязки. Идентификатор фрагмента текстового поиска с идентификатором "схемы спецификации фрагмента"
words
" — первое предложение в этой схеме. [28] В следующем примере будет выполнен поиск в документе по первому вхождению строки «некоторый контекст для поискового запроса», а затем выделение слов «поисковый запрос»:http://example.com/index.html#:words:some-context-for-a-(search-term)
- Приведенная выше схема была реализована в Chrome версии 80. [29]
- Проект LiveURL [30] предложил формат идентификатора фрагмента для ссылки на область текста на странице в форме
#FWS+C
, где F — длина первого слова (до пяти символов), W — само первое слово, S — длина выделенного текста, а C — 32-битная CRC выделенного текста. [31] Вариант этой схемы они реализовали как расширение для браузера Firefox. [32] используя форму#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, [33] 2011-2017) определяет стандартизированный W3C / IDPF метод ссылки на произвольный контент с использованием идентификаторов фрагментов для поиска незакрепленных текстовых диапазонов посредством структуры документа и сопоставления с образцом. Эти динамические глубокие ссылки помогают находить контент после обновления текста и используются, например, в Apple Books .
См. также
[ редактировать ]- Строка запроса
- Нормализация URI
- URL (унифицированный указатель ресурсов)
- Очистить URL-адрес
- схемы URI
Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Унифицированный идентификатор ресурса (URI) RFC 3986: общий синтаксис» . Рабочая группа по интернет-инжинирингу. Январь 2005 года . Проверено 6 марта 2012 г.
- ^ Р. Филдинг, редактор, Adobe; Дж. Решке, редактор, greenbytes (июнь 2014 г.). «Протокол передачи гипертекста (HTTP/1.1): синтаксис сообщений и маршрутизация» . Целевая группа инженеров Интернета (IETF) . Проверено 27 декабря 2023 г.
Целевой URI исключает компонент фрагмента ссылки, если таковой имеется, поскольку идентификаторы фрагментов зарезервированы для обработки на стороне клиента.
{{cite web}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ «Типы представления и семантика идентификаторов фрагментов» . Архитектура Всемирной паутины, том первый . W3C . 2004 . Проверено 13 июля 2011 г.
- ^ «Ограничение действительности: идентификатор» . XML 1.0 (пятое издание) . W3C . 2008 год . Проверено 13 июля 2011 г.
- ^ «xml:id версии 1.0» . W3C . 2005 . Проверено 13 июля 2011 г.
- ^ «Выпуск 77024» . Хром . 2011 . Проверено 13 июля 2011 г.
- ^ «Обзор типов СМИ» . Рабочая группа W3C по медиафрагментам . 2009 . Проверено 29 апреля 2009 г.
- ^ «Новая функция: ссылка внутри видео» . 19 июля 2006 г. Проверено 13 июля 2011 г.
- ^ «Ссылка на лучшие моменты ваших видео» . Ютуб . 30 октября 2008 г. Проверено 13 июля 2011 г.
- ^ Ссылка на конкретный контент в Gmail , Google Blogographyd, 17 ноября 2007 г.
- ^ Брайан, П. (2 апреля 2013 г.). «RFC 6901 — Указатель нотации объектов JavaScript (JSON)» . Интернет-сообщество . Проверено 14 июля 2022 г.
- ^ «Параметры открытия PDF-файлов – Указание параметров в URL-адресе» (PDF) . Adobe. Апрель 2007 года . Проверено 20 сентября 2017 г.
- ^ Тафт, Э.; Правец, Дж.; Зиллес, С.; Масинтер, Л. (май 2004 г.). «RFC 3778 – Тип носителя приложения/pdf» . www.tools.ietf.org . Интернет-сообщество. дои : 10.17487/RFC3778 . Проверено 20 сентября 2017 г.
- ^ «Связывание — SVG 1.1 (второе издание)» .
- ^ «Медиа-фрагменты URI 1.0 (базовая) Рекомендация W3C» . Проверено 25 сентября 2012 г.
- ^ «Перейти к фрагменту текста» . Статус платформы Chrome . Гугл Хром . Проверено 18 мая 2020 г.
- ^ Келли, Гордон. «Выпущен Google Chrome 80 с противоречивым обновлением глубоких ссылок» . Форбс . Проверено 4 июня 2020 г.
- ^ «WICG/scroll-to-text-fragment: предложение разрешить указание фрагмента текста во фрагменте URL-адреса» . Гитхаб . WebPlatform.org Группа сообщества инкубаторов в W3C . Проверено 18 мая 2020 г.
- ^ «Поддержка проверки Pypi md5» . Проверено 13 июля 2011 г.
Pypi имеет привычку добавлять фрагмент md5 к URL-адресам яиц, мы будем использовать его для проверки уже имеющихся файлов дистрибутива в кеше.
- ^ Перейти обратно: а б «Хеш-URI» . Блог W3C . 12 мая 2011 г. Проверено 13 июля 2011 г.
- ^ «HTML 5.1 2-е издание» . W3C . 2017 . Проверено 3 августа 2018 г.
- ^ Перейти обратно: а б «Предложение по обеспечению возможности сканирования AJAX» . 07.10.2009 . Проверено 13 июля 2011 г.
- ^ «(Спецификации) Обеспечение возможности сканирования приложений AJAX» . Гугл Инк . Проверено 4 мая 2013 г.
- ^ «Управление историей браузера» . Сеть разработчиков Mozilla . Проверено 23 февраля 2017 г.
- ^ «Устаревшая наша схема сканирования AJAX» . Официальный блог Центра веб-мастеров Google . Проверено 23 февраля 2017 г.
- ^ Поиск фрагментов , gerv.net
- ^ Идентификаторы фрагментов для простых текстовых файлов, Эрик Уайльд и Марсель Башнагель, Швейцарский федеральный технологический институт (ETH Zürich), Материалы шестнадцатой конференции ACM по гипертексту и гипермедиа. дои : 10.1145/1083356.1083398
- ^ Идентификаторы фрагментов текстового поиска , К. Йи, Сетевая рабочая группа, Институт прогнозирования, март 1998 г.
- ^ bmcquade; Бокан; Нбуррис (24 марта 2022 г.). «Функция: прокрутить до фрагмента текста» . Статус платформы Chrome . хромиум.орг . Проверено 3 мая 2022 г.
- ^ Проект LiveURLs
- ^ Технология, лежащая в основе LiveURL , по состоянию на 13 марта 2011 г.
- ^ Дополнение Firefox «Web Marker» , по состоянию на 13 марта 2011 г.
- ^ «Канонические идентификаторы фрагментов EPUB 1.1» . idpf.org . Проверено 3 июня 2020 г.
Внешние ссылки
[ редактировать ]- Рабочая группа W3C по медиафрагментам , устанавливающая синтаксис и семантику URI для обращения к медиафрагментам в аудиовизуальном материале (например, к области изображения или фрагменту видео).
- MediaMixer Портал сообщества собирает презентации, учебные пособия, примеры использования и демонстрационные материалы, связанные с использованием технологии Media Fragment.