В компьютерной гипертекст , A фрагмент URI является строкой из символов , который ссылается на ресурс , который является подчиненным к другому, первичным ресурсом. Первичный ресурс идентифицируется универсальным идентификатором ресурса (URI), а идентификатор фрагмента указывает на подчиненный ресурс.
Идентификатор фрагмента, обозначенный решеткой, #
является необязательной последней частью URL-адреса документа. Обычно он используется для идентификации части этого документа. Общий синтаксис указан в RFC 3986. Разделитель хэш-меток в URI не является частью идентификатора фрагмента.
Основы [ править ]
В URI хэш-метка #
вводит необязательный фрагмент в конце URL-адреса. Общий синтаксис RFC 3986 для URI также позволяет вводить необязательную часть запроса в виде вопросительного знака ?
. В URI с запросом и фрагментом фрагмент следует за запросом. Части запроса зависят от схемы URI и оцениваются сервером - например, http:
поддерживает запросы в отличие от ftp:
. Фрагменты зависят от типа MIME документа и оцениваются клиентом ( веб-браузером ). Клиенты не должны отправлять фрагменты URI на серверы при получении документа, и без помощи локального приложения (см. Ниже) фрагменты не участвуют в перенаправлениях HTTP . [1]
URI, заканчивающийся на #
, разрешен общим синтаксисом и представляет собой своего рода пустой фрагмент. В типах документов MIME, таких как text/html
или любой тип XML, пустые идентификаторы, соответствующие этой синтаксически допустимой конструкции, не разрешены. Веб-браузеры обычно отображают верхнюю часть документа для пустого фрагмента.
Идентификатор фрагмента функционирует иначе, чем остальная часть URI: его обработка осуществляется исключительно на стороне клиента без участия веб-сервера , хотя сервер обычно помогает определить тип MIME, а тип MIME определяет обработку фрагментов. Когда агент (например, веб - браузер) запрашивает на веб - ресурс с веб - сервера, агент отправляет URI на сервер, но не отправляет фрагмент. Вместо этого агент ожидает, пока сервер отправит ресурс, а затем агент обрабатывает ресурс в соответствии с типом документа и значением фрагмента. [2]
На веб-странице HTML агент будет искать привязку, идентифицированную тегом HTML, который включает атрибут id=
или, name=
равный идентификатору фрагмента.
Примеры [ править ]
- В URI для
text/html
страниц MIME, например,http://www.example.org/foo.html#bar
фрагмент относится к элементу с расширениемid="bar"
.- Графические веб-браузеры обычно выполняют прокрутку, чтобы расположить страницы так, чтобы верх элемента, идентифицированного идентификатором фрагмента, был выровнен с верхом области просмотра; таким образом, идентификаторы фрагментов часто используются в таблицах содержания и постоянных ссылках .
- Chrome версии 80 и выше [3] [4] реализуют W3C «s WICG Текстовые фрагменты, [5] , так
#:~:text=foo
будет вызывать браузер для поискаfoo
, выделите текст соответствия, и свиток к нему. Помимо начала и конца, фрагмент также может указывать контекст: текст, который должен предшествовать или следовать,foo
но не будет выделен ( пример, который выполняет поиск по запросу «видение», которому предшествует «ночь» ).
- Chrome версии 80 и выше [3] [4] реализуют W3C «s WICG Текстовые фрагменты, [5] , так
- Внешний вид идентифицированного элемента можно изменить с
:target
помощью псевдокласса CSS ; Википедия использует это, чтобы выделить выбранную ссылку. Примечательно, что CSSdisplay: block
можно использовать для отображения содержимого только в том случае, если оно является целью, и в противном случае скрытоdisplay: none
. - Устаревший
name
атрибут (разрешенный только для некоторых элементов) имел аналогичное назначение в устаревших браузерах. Если естьname
иid
должны быть идентичными.
- Графические веб-браузеры обычно выполняют прокрутку, чтобы расположить страницы так, чтобы верх элемента, идентифицированного идентификатором фрагмента, был выровнен с верхом области просмотра; таким образом, идентификаторы фрагментов часто используются в таблицах содержания и постоянных ссылках .
- Во всех типах документов XML, включая фрагменты XHTML, соответствующие одному
xml:id
или подобнымid
атрибутам, следуйтеName
синтаксису и начинаются с буквы, подчеркивания или двоеточия. Примечательно, что они не могут начинаться с цифры или дефиса. [6]xml:id
является одним из немногих общих атрибутов XML, напримерxml:lang
, который можно использовать без явного объявления пространства имен. [7] В 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 для
text/plain
документов MIME RFC 5147 определяет идентификатор фрагмента для позиций и диапазонов символов и строк в документе, используя ключевые слова «char
» и «line
». Поддержка браузера отсутствует. [8] В следующем примере идентифицируются строки с 11 по 20 текстового документа:http://example.com/document.txt#line=10,20
- В URI для
text/csv
документов MIME RFC 7111 определяет идентификатор фрагмента в качестве селектора для строк, столбцов и ячеек, используя ключевые слова "row
", "col
" и "cell
", например: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 / * очень немногие имеют определенные фрагменты или семантику фрагментов. [9] Синтаксис 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
чтобы начать воспроизведение с указанной позиции [10], а YouTube использует аналогичный код, такой как#t=3m25s
. [11]
- В JavaScript к идентификатору фрагмента текущей HTML- или XHTML-страницы можно получить доступ в свойстве «hash»
location.hash
- обратите внимание, что Javascript также можно использовать с другими типами документов. С появлением AJAX некоторые веб-сайты используют идентификаторы фрагментов для имитации поведения кнопки «Назад» в браузерах для изменений страниц, которые не требуют перезагрузки, или для имитации подстраниц.- Например, Gmail использует один URL-адрес почти для каждого интерфейса - почтовых ящиков, отдельных писем, результатов поиска, настроек - фрагмент используется, чтобы сделать эти интерфейсы напрямую связанными. [12]
- Веб-сайты Adobe Flash могут использовать фрагмент, чтобы информировать пользователя о состоянии веб-сайта или веб-приложения, а также для облегчения глубинных ссылок , обычно с помощью библиотеки SWFAddress JavaScript.
- В URI для
application/pdf
документов MIME программы просмотра PDF распознают ряд идентификаторов фрагментов. [13] [14] Например, 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()
. [15]
Предложения [ править ]
Было сделано несколько предложений для идентификаторов фрагментов для использования с текстовыми документами (которые не могут хранить метаданные привязки) или для ссылки на места в документах HTML, в которых автор не использовал теги привязки:
- По состоянию на сентябрь 2012 года URI 1.0 мультимедийных фрагментов (базовый) является Рекомендацией W3C . [16]
- Индекс пакета Python добавляет хэш MD5 файла к URL-адресу в качестве идентификатора фрагмента. [17] Если бы MD5 не был нарушен (это неработающая хеш-функция ), его можно было бы использовать для обеспечения целостности пакета.
https://pypi.python.org ... zodbbrowser-0.3.1.tar.gz#md5=38dc89f294b24691d3f0d893ed3c119c
- Фрагмент hash-bang [18] - это фрагмент, начинающийся с восклицательного знака
!
. Он использовался в устаревшем подходе для индексирования динамических одностраничных приложений . Восклицательный знак является незаконным в HTML4 (но не в HTML5 [19] ), XHTML и XML - идентификаторы, предоставляя определенную степень отделения от этой функциональности.- В период с 2009 по 2015 год Центр веб-мастеров Google предложил, а затем рекомендовал «схему сканирования AJAX» [20] [21] с использованием начального восклицательного знака в идентификаторах фрагментов для страниц AJAX с отслеживанием состояния :
http://example.com/page?query#!state
- Некоторые авторы, в том числе Джени Теннисон из W3C, сочли URI-адреса хеш-бэнг проблемными, поскольку они делают страницы недоступными для тех, у кого в браузере не активирован JavaScript . Они также нарушают заголовки HTTP-рефералов, поскольку браузерам не разрешено отправлять идентификатор фрагмента в заголовке Referer. [18]
- В 2015 году Google устаревшим их хэш-бах АЯКС ползет предложение, вместо того, чтобы рекомендовать использование прогрессивного улучшения и HTML5 S»
history.pushState()
[22] метода. [23] - Сотрудник Mozilla Foundation Джервас Маркхэм предложил идентификатор фрагмента для поиска в форме
#!s!search terms
. Добавление числа после s (#!s10!
) означает, что браузер должен искать n- е вхождение поискового запроса. Отрицательное число (#!s-3!
) начинает поиск в обратном направлении от конца документа. Greasemonkey скрипт можно добавить эту функциональность для совместимых браузеров. [24]http://example.com/index.html#!s3!search terms
- В период с 2009 по 2015 год Центр веб-мастеров Google предложил, а затем рекомендовал «схему сканирования AJAX» [20] [21] с использованием начального восклицательного знака в идентификаторах фрагментов для страниц AJAX с отслеживанием состояния :
- Эрик Уайлд и Марсель Башнагель из ETH Zurich расширили это, чтобы также идентифицировать фрагменты в текстовых документах с использованием регулярных выражений с ключевым словом "
match
". [25] Они также описывают реализацию прототипа как расширение для браузера Firefox . Например, в любом месте документа можно найти текст RFC без учета регистра:http://example.com/document.txt#match=[rR][fF][cC]
- К. Йи из Foresight Institute предлагает «расширенные идентификаторы фрагментов», разделенные двоеточиями, и ключевое слово, чтобы отличать их от идентификаторов привязки. Идентификатор фрагмента текстового поиска с «id схемы спецификации фрагмента
words
» является первым предложением в этой схеме. [26] В следующем примере выполняется поиск в документе первого появления строки «некоторый контекст для поискового запроса», а затем выделение слов «поисковый запрос»:http://example.com/index.html#:words:some-context-for-a-(search-term)
- Проект LiveURLs [27] предложил формат идентификатора фрагмента для ссылки на область текста на странице в форме
#FWS+C
, где F - длина первого слова (до пяти символов), W - само первое слово, S - длина выделенного текста, а C - 32-битная CRC выделенного текста. [28] Они реализовали вариант этой схемы как расширение для браузера Firefox, [29] используя форму#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 Каноническое Фрагмент Идентификатор (epubcfi, [30] 2011-2017) определяет W3C / IDPF -standardized метод для ссылки на произвольное содержимое , используя идентификаторы фрагмента , чтобы найти не-привязанный диапазонов текста с помощью структуры документа и сопоставления с образцом. Эти динамические глубокие ссылки помогают находить контент после обновления текста и используются, например, в Apple Books .
См. Также [ править ]
- Нормализация URL
- Единый указатель ресурсов
Ссылки [ править ]
- ^ «RFC 3986 Uniform Resource Identifier (URI): Общий синтаксис» . Инженерная группа Интернета. Январь 2005 . Проверено 6 марта 2012 .
- ^ «Типы представлений и семантика идентификаторов фрагментов» . Архитектура всемирной паутины, Том первый . W3C . 2004 . Проверено 13 июля 2011 .
- ^ «Прокрутите до фрагмента текста» . Статус платформы Chrome . Google Chrome . Проверено 18 мая 2020 .
- ^ Келли, Гордон. «Google Chrome 80 выпущен с неоднозначным обновлением глубоких ссылок» . Forbes . Проверено 4 июня 2020 .
- ^ "WICG / scroll-to-text-fragment: Предложение, позволяющее указывать фрагмент текста во фрагменте URL" . GitHub . Группа сообщества инкубатора WebPlatform.org в W3C . Проверено 18 мая 2020 .
- ^ "Ограничение действительности: ID" . XML 1.0 (пятое издание) . W3C . 2008 . Проверено 13 июля 2011 .
- ^ "xml: id Версия 1.0" . W3C . 2005 . Проверено 13 июля 2011 .
- ^ "Проблема 77024" . Хром . 2011 . Проверено 13 июля 2011 .
- ^ «Обзор типа СМИ» . Рабочая группа W3C Media Fragments . 2009 . Проверено 29 апреля 2009 .
- ^ «Новая функция: ссылка в видео» . 2006-07-19 . Проверено 13 июля 2011 .
- ^ "Ссылка на лучшие части ваших видео" . YouTube . 2008-10-30 . Проверено 13 июля 2011 .
- ^ Ссылка на конкретный контент в Gmail , Google Blogoscoped, 2007-11-17
- ^ «Параметры для открытия файлов PDF - Указание параметров в URL-адресе» (PDF) . Adobe. Апрель 2007 . Проверено 20 сентября 2017 .
- ^ «RFC 3778 - Тип носителя application / pdf» . Интернет-сообщество. Май 2004 . Проверено 20 сентября 2017 .
- ^ «Связывание - SVG 1.1 (второе издание)» .
- ^ "Медиа-фрагменты URI 1.0 (базовая) Рекомендация W3C" . Проверено 25 сентября 2012 .
- ^ "Поддержка проверки Pypi md5" . Проверено 13 июля 2011 .
Pypi имеет привычку добавлять фрагмент md5 к своим URL-адресам яиц, мы будем использовать его для проверки уже имеющихся файлов дистрибутива в кеше.
- ^ a b «URI хэша» . Блог W3C . 2011-05-12 . Проверено 13 июля 2011 .
- ^ «HTML 5.1 2-е издание» . W3C . 2017 . Проверено 3 августа 2018 .
- ^ "Предложение сделать AJAX доступным для сканирования" . 2009-10-07 . Проверено 13 июля 2011 .
- ^ "(Технические характеристики) Обеспечение возможности сканирования приложений AJAX" . Google Inc . Проверено 4 мая 2013 .
- ^ «Управление историей браузера» . Сеть разработчиков Mozilla . Проверено 23 февраля 2017 .
- ^ «Прекращение поддержки нашей схемы сканирования AJAX» . Официальный блог Центра веб-мастеров Google . Проверено 23 февраля 2017 .
- ^ Поиск фрагментов , gerv.net
- ^ Идентификаторы фрагментов для текстовых файлов, Эрик Уайльд и Марсель Башнагель, Швейцарский федеральный технологический институт (ETH Zürich), Труды шестнадцатой конференции ACM по гипертексту и гипермедиа doi : 10.1145 / 1083356.1083398
- ^ Идентификаторы фрагментов текстового поиска , К. Йи, сетевая рабочая группа, институт предвидения, март 1998 г.
- ^ Проект LiveURLs
- ^ Технология, лежащая в основе LiveURLs , по состоянию на 13 марта 2011 г.
- ^ Надстройка "Web Marker" для Firefox , дата обращения 13 марта 2011 г.
- ^ «Канонические идентификаторы фрагментов EPUB 1.1» . idpf.org . Проверено 3 июня 2020 .
Внешние ссылки [ править ]
- Рабочая группа W3C Media Fragments , устанавливающая синтаксис и семантику URI для обращения к медиа-фрагментам в аудиовизуальном материале (например, области изображения или суб-клипа видео)
- Портал сообщества MediaMixer собирает презентации, учебные пособия, примеры использования и демонстраторы, связанные с использованием технологии Media Fragment.