Из Википедии, бесплатной энциклопедии
  (Перенаправлено с идентификатора фрагмента )
Перейти к навигации Перейти к поиску

В компьютерной гипертекст , 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".
    • Графические веб-браузеры обычно выполняют прокрутку, чтобы расположить страницы так, чтобы верх элемента, идентифицированного идентификатором фрагмента, был выровнен с верхом области просмотра; таким образом, идентификаторы фрагментов часто используются в таблицах содержания и постоянных ссылках .
    • Внешний вид идентифицированного элемента можно изменить с :target помощью псевдокласса CSS ; Википедия использует это, чтобы выделить выбранную ссылку. Примечательно, что CSS display: blockможно использовать для отображения содержимого только в том случае, если оно является целью, и в противном случае скрыто display: none.
    • Устаревший nameатрибут (разрешенный только для некоторых элементов) имел аналогичное назначение в устаревших браузерах. Если есть nameи idдолжны быть идентичными.
  • Во всех типах документов XML, включая фрагменты XHTML, соответствующие одному xml:idили подобным idатрибутам, следуйте Nameсинтаксису и начинаются с буквы, подчеркивания или двоеточия. Примечательно, что они не могут начинаться с цифры или дефиса. [6]
    • xml:idявляется одним из немногих общих атрибутов XML, например xml:lang, который можно использовать без явного объявления пространства имен. [7] В XHTML idдолжен использоваться, потому что 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
  • Эрик Уайлд и Марсель Башнагель из 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
  • Единый указатель ресурсов

Ссылки [ править ]

  1. ^ «RFC 3986 Uniform Resource Identifier (URI): Общий синтаксис» . Инженерная группа Интернета. Январь 2005 . Проверено 6 марта 2012 .
  2. ^ «Типы представлений и семантика идентификаторов фрагментов» . Архитектура всемирной паутины, Том первый . W3C . 2004 . Проверено 13 июля 2011 .
  3. ^ «Прокрутите до фрагмента текста» . Статус платформы Chrome . Google Chrome . Проверено 18 мая 2020 .
  4. ^ Келли, Гордон. «Google Chrome 80 выпущен с неоднозначным обновлением глубоких ссылок» . Forbes . Проверено 4 июня 2020 .
  5. ^ "WICG / scroll-to-text-fragment: Предложение, позволяющее указывать фрагмент текста во фрагменте URL" . GitHub . Группа сообщества инкубатора WebPlatform.org в W3C . Проверено 18 мая 2020 .
  6. ^ "Ограничение действительности: ID" . XML 1.0 (пятое издание) . W3C . 2008 . Проверено 13 июля 2011 .
  7. ^ "xml: id Версия 1.0" . W3C . 2005 . Проверено 13 июля 2011 .
  8. ^ "Проблема 77024" . Хром . 2011 . Проверено 13 июля 2011 .
  9. ^ «Обзор типа СМИ» . Рабочая группа W3C Media Fragments . 2009 . Проверено 29 апреля 2009 .
  10. ^ «Новая функция: ссылка в видео» . 2006-07-19 . Проверено 13 июля 2011 .
  11. ^ Ссылка на конкретный контент в Gmail , Google Blogoscoped, 2007-11-17
  12. ^ «Параметры для открытия файлов PDF - Указание параметров в URL-адресе» (PDF) . Adobe. Апрель 2007 . Проверено 20 сентября 2017 .
  13. ^ «RFC 3778 - Тип носителя application / pdf» . Интернет-сообщество. Май 2004 . Проверено 20 сентября 2017 .
  14. ^ «Связывание - SVG 1.1 (второе издание)» .
  15. ^ "Медиа-фрагменты URI 1.0 (базовая) Рекомендация W3C" . Проверено 25 сентября 2012 .
  16. ^ "Поддержка проверки Pypi md5" . Проверено 13 июля 2011 . Pypi имеет привычку добавлять фрагмент md5 к своим URL-адресам яиц, мы будем использовать его для проверки уже имеющихся файлов дистрибутива в кеше.
  17. ^ a b «URI хэша» . Блог W3C . 2011-05-12 . Проверено 13 июля 2011 .
  18. ^ «HTML 5.1 2-е издание» . W3C . 2017 . Проверено 3 августа 2018 .
  19. ^ "Предложение сделать AJAX доступным для сканирования" . 2009-10-07 . Проверено 13 июля 2011 .
  20. ^ "(Технические характеристики) Обеспечение возможности сканирования приложений AJAX" . Google Inc . Проверено 4 мая 2013 .
  21. ^ «Управление историей браузера» . Сеть разработчиков Mozilla . Проверено 23 февраля 2017 .
  22. ^ «Прекращение поддержки нашей схемы сканирования AJAX» . Официальный блог Центра веб-мастеров Google . Проверено 23 февраля 2017 .
  23. ^ Поиск фрагментов , gerv.net
  24. ^ Идентификаторы фрагментов для текстовых файлов, Эрик Уайльд и Марсель Башнагель, Швейцарский федеральный технологический институт (ETH Zürich), Труды шестнадцатой конференции ACM по гипертексту и гипермедиа doi : 10.1145 / 1083356.1083398
  25. ^ Идентификаторы фрагментов текстового поиска , К. Йи, сетевая рабочая группа, институт предвидения, март 1998 г.
  26. ^ Проект LiveURLs
  27. ^ Технология, лежащая в основе LiveURLs , по состоянию на 13 марта 2011 г.
  28. ^ Надстройка "Web Marker" для Firefox , дата обращения 13 марта 2011 г.
  29. ^ «Канонические идентификаторы фрагментов EPUB 1.1» . idpf.org . Проверено 3 июня 2020 .

Внешние ссылки [ править ]

  • Рабочая группа W3C Media Fragments , устанавливающая синтаксис и семантику URI для обращения к медиа-фрагментам в аудиовизуальном материале (например, области изображения или суб-клипа видео)
  • Портал сообщества MediaMixer собирает презентации, учебные пособия, примеры использования и демонстраторы, связанные с использованием технологии Media Fragment.