[an error occurred while processing this directive]

 

12   Гиперссылки


12.1
  Гиперссылки и якоря.  Введение

HTML предлагает большое количество согласованных публичных идиом для создания сложных структурированных документов, но что отличает его от большинства других языков разметки, так это богатые возможности гипертекста и интерактивные документы.
В этом разделе вводится понятие ссылки (или гиперссылки, ссылки Web), базовой конструкции гипертекста. Ссылка это соединение одного Web-ресурса с другим. Несмотря на простоту концепции, ссылка является одной из фундаментальных сил, приведших к успешному развитию Web.

Ссылка  имеет два конца - называемых якорями - и направление. Ссылка начинается от якоря "источника" и указывает на якорь "назначения", который может быть любым ресурсом Web (напр., изображением, видеоклипом, аудиофрагментом, программой, документом HTML, элементом в документе HTML и т.д.).

12.1.1  "Посещение" связанного ресурса

Акцией по умолчанию, ассоциированной со ссылкой, является запрос другого ресурса Web. Такое действие является обычным и неявно подразумевается при выборе гиперссылки (напр., щелчком на ней мышью, вводом с клавиатуры и т.д.).

Следующий отрывок HTML содержит две ссылки, якорь одной из которых указывает на документ HTML с названием "chapter2.html", а якорь другой - на GIF-изображение в файле "forest.gif":

<BODY>
...текст...
<P>Вы найдёте многое на  <A href="chapter2.html">chapter two</A>. 
См. также здесь <A href="../images/forest.gif">карту леса.</A>
</BODY>

Активировав эту ссылку (щелчком мыши, вводом с клавиатуры, голосовой командой и т.п.), пользователь может посетить этот ресурс. Заметьте, что атрибут href в каждом якоре специфицирует адрес якоря назначения с применением URI.

Якорь назначения для гиперссылки может быть элементом в документе HTML. Якорю назначения должно быть дано имя, и любой URI, адресующий этот якорь, должен включать это имя как идентификатор фрагмента.

Якоря назначения в документах HTML могут быть специфицированы  элементом A (атрибутом name)  или любым другим элементом (атрибутом id).

Так, например, автор может создать оглавление, вхождения которого связаны с элементами H2, H3  и т.д. в этом же документе. Используя элемент A для создания якоря назначения, мы могли бы написать:

<H1>Оглавление</H1>
<P><A href="#section1">Введение</A><BR>
<A href="#section2">Фон</A><BR>
<A href="#section2.1">Несколько заметок</A><BR>
...остальная часть оглавления...
...тело документа...
<H2><A name="section1">Введение</A></H2>
...раздел 1...
<H2><A name="section2">Фон</A></H2>
...раздел 2...
<H3><A name="section2.1">Несколько заметок</A></H3>
...раздел 2.1...

Того же эффекта можно достичь, сделав элементы-заголовки якорями:

<H1>Оглавление</H1>
<P><A href="#section1">Введение</A><BR>
<A href="#section2">Фон</A><BR>
<A href="#section2.1">Несколько заметок</A><BR>
...остальная часть оглавления...
...тело документа...
<H2 id="section1">Introduction</H2>
...раздел 1...
<H2 id="section2">Фон</H2>
...раздел 2...
<H3 id="section2.1">Несколько заметок</H3>
...раздел 2.1...

12.1.2  Другие соотношения гиперссылок

Чаще всего гиперссылки используются для запроса другого ресурса Web, как в предыдущих примерах. Однако, авторы могут включать в свои документы гиперссылки, которые не только выполняют действия типа "активировать эту ссылку для посещения соответствующего ресурса". Гиперссылки, выражающие соотношения других типов, имеют тот или иной тип ссылок, специфицированный в якоре этого ресурса.

Роли гиперссылки, определяемые A или LINK, установлены атрибутами rel и rev.

Например, ссылки, определённые элементом LINK, могут описывать позицию документа в серии документов. В следующем отрывке гиперссылки в документе, озаглавленном "Chapter 5", указывают на следующую и предыдущую главы:

<HEAD>
...другая информация "шапки"...
<TITLE>Chapter 5</TITLE>
<LINK rel="prev" href="chapter4.html">
<LINK rel="next" href="chapter6.html">
</HEAD>

Тип первой ссылки  - "prev", а второй - "next" (два из нескольких распознаваемых типов ссылок). Гиперссылки, специфицированные в LINK, не рассматриваются как содержимое документов, хотя ПА могут отображать их другими способами (напр., утилитами навигации).

Даже если они не используются для навигации, эти гиперссылки могут интерпретироваться интересными способами. Например, ПА, печатающий серию документов HTML как единый документ, может использовать информацию этих ссылок как базис связного линеарного документа. Ниже дана информация о гиперссылках для использования возможностей поисковых машин.

12.1.3  Спецификация якорей и гиперссылок

Хотя гиперссылки на другие ресурсы создаются разными элементами и атрибутами (напр., элемент IMG, элемент FORM и т.д.), в этом разделе рассматриваются гиперссылки и якоря, создаваемые элементами LINK и A.
Элемент LINK может появляться только в "шапке" документа.
Элемент A может появляться только в теле документа.

Если в элементе A установлен атрибут href, этот элемент определяет якорь-источник гиперссылки, который может быть активирован пользователем для запроса Web-ресурса. Якорь источника это размещение объекта A, а якорь назначения - это ресурс Web.

Запрошенный ресурс может быть обработан ПА различными способами:

  • открытие нового документа HTML в том же окне ПА,
  • открытие нового документа HTML в другом окне,
  • запуск другой программы для обработки ресурса и т.д.

Поскольку элемент A имеет содержимое (текст, изображения и т.п.), ПА могут обозначить наличие этого содержимого, например, подчёркиванием гиперссылки.

Если атрибуты name или id элемента A установлены, данный элемент определяет якорь, который может служить якорем назначения других гиперссылок.

Авторы могут установить атрибуты name и href одновременно в одном и том же A.

Элемент LINK определяет взаимоотношение между текущим документом и другим ресурсом. Хотя LINK не имеет содержимого, взаимоотношения, определяемые им, могут воспроизводиться некоторыми ПА.

12.1.4   Заголовки гиперссылок

Атрибут title может быть установлен элементами A и LINK для добавления информации о ссылке. Эта информация может произноситься ПА, может быть показана как подсказка, вызывать изменение вида курсора и т.д.

Таким образом, мы можем расширить предыдущий пример, добавив заголовок к каждой ссылке:

<BODY>
...текст...
<P>Вы найдёте многое на <A href="chapter2.html"
       title="Go to chapter two">chapter two</A>.
<A href="./chapter2.html"
       title="Get chapter two.">chapter two</A>. 
См. также здесь <A href="../images/forest.gif"
       title="GIF image of enchanted forest">карту леса.</A>
</BODY>

12.1.5  Интернационализация и гиперссылки

Поскольку гиперссылки могут указывать на документ, имеющий другой набор символов, элементы A и LINK поддерживают атрибут charset. Этот атрибут даёт авторам возможность уведомлять ПА о кодировке, дате и других данных.

Атрибут hreflang снабжает ПА информацией о языке ресурса гиперссылки так же, как атрибут lang даёт информацию о языке содержимого элемента или значениях атрибутов.

Вооружённые новыми данными, ПА должны исключить показ пользователю различного "мусора". Вместо этого они могут или указать на ресурсы, необходимые для корректного воспроизведения документа, или, при невозможности размещения ресурса, как минимум предупредить пользователя о том, что документ не будет прочитан и указать причину.

12.2  Элемент  A

<!ELEMENT A - - (%inline;)* -(A)       -- якорь -->
<!ATTLIST A
  %attrs;                              -- %coreattrs, %i18n, %events --
  charset     %Charset;      #ПРЕДПОЛАГАЕТСЯ  -- набор символов связанного ресурса --
  type        %ContentType;  #ПРЕДПОЛАГАЕТСЯ  -- информативный тип содержимого --
  name        CDATA          #ПРЕДПОЛАГАЕТСЯ  -- имя целевой ссылки --
  href        %URI;          #ПРЕДПОЛАГАЕТСЯ  -- URI связанного ресурса --
  hreflang    %LanguageCode; #ПРЕДПОЛАГАЕТСЯ  -- код языка --
  rel         %LinkTypes;    #ПРЕДПОЛАГАЕТСЯ  -- типы ссылок вперёд --
  rev         %LinkTypes;    #ПРЕДПОЛАГАЕТСЯ  -- типы ссылок назад --
  accesskey   %Character;    #ПРЕДПОЛАГАЕТСЯ  -- символ быстрого доступа --
  shape       %Shape;        rect             -- для использования с клиентскими картами --
  coords      %Coords;       #IПРЕДПОЛАГАЕТСЯ  -- для использования с клиентскими картами --
  tabindex    NUMBER         #ПРЕДПОЛАГАЕТСЯ  -- позиция в порядке табуляции --
  onfocus     %Script;       #ПРЕДПОЛАГАЕТСЯ  -- элемент получил фокус --
  onblur      %Script;       #ПРЕДПОЛАГАЕТСЯ  -- элемент потерял фокус --
  >

Конечный тег: необходим, Конечный тег: необходим

Определения атрибутов

name = cdata [CS]
Этот атрибут именует текущий якорь, который может стать якорем назначения  для другой гиперссылки. Значением этого атрибута должно быть уникальное имя якоря. Областью видимости этого имени является текущий документ. Обратите внимание, что этот атрибут использует то же пространство имён, что и атрибут id.
href = uri [CT]
Определяет размещение ресурса Web, определяя таким образом ссылку с текущего элемента (якоря-источника) на якорь назначения, определённый этим атрибутом.
hreflang = langcode [CI]
Определяет базовый язык ресурса, обозначенного в href, и может использоваться, только если href определён.
type = content-type [CI]
Определяет уведомляющую подсказку, к примеру, о типе содержимого, находящегося по целевому адресу гиперссылки. Она позволяет ПА решить, использовать ли fallback-механизм, или получить содержимое, получив предупреждение о том, что это содержимое имеет тип, не поддерживаемый ПА.
Авторы, используя этот атрибут, несут ответственность за обслуживание риска наличия несоответствия  с реальным содержимым, находящимся на конечном адресе гиперссылки.
Текущий список зарегистрированных типов содержимого см. в [MIMETYPES].
rel = типы ссылок [CI]
Описывает соотношение между текущим документом и якорем, определённым атрибутом href. Значением этого атрибута является список разделённых пробелами типов ссылок.
rev = типы ссылок [CI]
Этот атрибут используется для описания ссылки возврата от якоря, специфицированного атрибутом href, к текущему документу. Значением этого атрибута является разделённый пробелами список типов ссылок.
charset = charset [CI]
Определяет набор символов ресурса, на который указывает гиперссылка. См. детали в разделе кодировка символов.

Каждый элемент A определяет якорь:

  1. Содержимое элемента A определяет местонахождение якоря.
  2. Атрибут name именует якорь так, что он может быть якорем назначения 0 или более ссылок (см. также якоря с атрибутом  id).
  3. Атрибут href делает этот якорь источником одной конкретной гиперссылки.

Авторы могут также создать элемент A, который не специфицирует никаких якорей, т.е. не специфицирует href, name или id. Значения этих атрибутов могут быть установлены позже с помощью скриптов.

В следующем примере элемент A определяет гиперссылку. Якорь-источник - это текст "W3C Web site", а якорь-назначение - это "http://www.w3.org/":

Дополнительную информацию о W3C см. на  
<A href="http://www.w3.org/">W3C Web сайте</A>.

Эта гиперссылка указывает на домашнюю страницу World Wide Web Consortium. Если пользователь активирует эту гиперссылку в ПА, ПА запросит соответствующий ресурс, в данном случае - документ HTML.

ПА обычно отображают гиперссылки так, чтобы сделать их явно видимыми для пользователя (подчёркиванием, обратной прокруткой видео и т.п.). Конкретный вариант зависит от ПА. Вид может зависеть от того, посетил ли уже пользователь ссылку или нет. Предыдущая ссылка может выглядеть так

Дополнительную информацию о W3C см. на W3C Web сайте.

Чтобы явно указать ПА набор символов страницы назначения, установите значение атрибута charset:

Дополнительную информацию о W3C см. на 
<A href="http://www.w3.org/" charset="ISO-8859-1">W3C Web сайте</A> 

Предположим, мы определили якорь "anchor-one" в файле "one.html".

...текст перед якорем...
<A name="anchor-one">This is the location of anchor one.</A>
...текст после якоря...

Так создаётся якорь вокруг текста "This is the location of anchor one.". Обычно содержимое A не отображается, если A определяет только якорь.

Определив якорь, мы можем ссылаться на него из этого же или другого документа.
URI, обозначающие якорь, содержат символ "#" и следующее за ним имя якоря (идентификатор фрагмента). Вот несколько примеров таких URI:

  • Абсолютный URI: http://www.mycompany.com/one.html#anchor-one
  • Относительный URI: ./one.html#anchor-one or one.html#anchor-one
  • Если ссылка определена в том же документе, где определён якорь: #anchor-one

Таким образом, гиперссылка, определённая в файле "two.html" в той же директории, что и "one.html", будет ссылаться на якорь так:

...текст перед ссылкой...
Дополнительную информацию см. на <A href="./one.html#anchor-one"> anchor one</A>.
...текст после ссылки...

Элемент A в следующем примере определяет гиперссылку (с помощью href) и одновременно создаёт именованный якорь (с помощью name):

I just returned from vacation! Here's a
<A name="anchor-two" 
   href="http://www.somecompany.com/People/Ian/vacation/family.png">
photo of my family at the lake.</A>.

Этот пример содержит ссылку на Web-ресурс другого типа (изображение PNG). Активация гиперссылки должна вызвать получение ресурса из Web (и, возможно, отображение его, если система сконфигурирована соответствующим образом).

Примечание. ПА должны уметь находить якоря, созданные пустыми элементами A, но некоторые ПА не делают этого. Например, некоторые ПА могут не обнаруживать "empty-anchor" в следующем фрагменте HTML:

<A name="empty-anchor"></A>
<EM>...some HTML...</EM>
<A href="#empty-anchor">Link to empty anchor</A>

12.2.1  Синтаксис имён якорей

Имя якоря - это значение атрибута name или id, когда используется в контексте якорей. Имена якорей должны соблюдать следующие правила:

Таким образом, следующий пример корректен в отношении совпадения строк и должен рассматриваться ПА как совпадение:

<P><A href="#xxx">...</A>
...документ...
<P><A name="xxx">...</A>

 НЕВЕРНОЕ ИСПОЛЬЗОВАНИЕ:
Это пример неверного использования имён, поскольку имена одинаковы и различаются только регистром:

<P><A name="xxx">...</A>
<P><A name="XXX">...</A>

Хотя следующий отрывок HTML верен, поведение ПА в этом случае не определено; некоторые ПА могут  (некорректно) рассматривать это как совпадение, а другие - нет.

<P><A href="#xxx">...</A>
...документ...
<P><A name="XXX">...</A>

Имена якорей должны быть указаны в символах ASCII. См. в приложении дополнительную информацию о не-ASCII символах в значениях атрибутов URI.

12.2.2  Вложение ссылок не допускается

Ссылки и якоря, определённые элементом A, не могут вкладываться; элемент A не должен содержать других элементов A.

Поскольку ОТД определяет элемент LINK как пустой, элементы LINK также не могут вкладываться.

12.2.3 Якоря с атрибутом  id

Атрибут id может использоваться для создания якоря в начальном теге любого элемента (включая элемент A).

Этот пример иллюстрирует использование атрибута id для размещения якоря в элементе H2. Якорь связан посредством элемента A.

Об этом Вы можете узнать больше в <A href="#section2">Section Two</A>.
...позже в документе
<H2 id="section2">Раздел 2</H2>
...позже в документе
<P>Смотрите <A href="#section2">Раздел 2</A> выше по тексту.

В следующем примере якорь назначения именован с помощью атрибута id:

I just returned from vacation! Here's a
<A id="anchor-two">photo of my family at the lake.</A>.

Атрибуты id и name используют общее пространство имён. Это означает, что они не могут одновременно определять якорь с одним именем в одном и том же документе. Допускается использовать оба атрибута для определения уникальных идентификаторов следующих элементов: A, APPLET, FORM, FRAME, IFRAME, IMG и MAP. Если оба атрибута использованы в одном элементе, их значения должны быть идентичны.

ПРИМЕР НЕПРАВИЛЬНОГО ИСПОЛЬЗОВАНИЯ:
Следующий отрывок HTML неверен, поскольку эти атрибуты объявляют одно имя дважды в одном документе:

<A href="#a1">...</A>
...
<H1 id="a1">
...страницы документа...
<A name="a1"></A>

Следующий пример показывает, что id и name должны быть идентичными, если оба появляются в начальном теге элемента:

<P><A name="a1" id="a1" href="#a1">...</A>

В соответствии со своей спецификацией в ОТД HTML, атрибут name может содержать символьные мнемоники. Так, значение D&#xfc;rst является верным значением атрибута name, как и D&uuml;rst. Атрибут id, однако, не может содержать символьных мнемоник.

Использовать id или name? Авторы должны учитывать следующие обстоятельства при решении вопроса использования для именования якоря id или name:

  • Атрибут id может действовать не только как имя якоря (напр., селектор таблиц стилей, идентификатор процесса и т.д.).
  • некоторые старые ПА не поддерживают якоря, созданные атрибутом id.
  • Атрибут name допускает расширенные имена якорей (с мнемониками).

12.2.4  Недоступные и неидентифицируемые ресурсы

Ссылка не недоступный или неидентифицируемый ресурс является ошибкой. Хотя ПА могут по разному обрабатывать такие ошибки, мы рекомендуем следующее поведение ПА:

  • Если ПА не может обнаружить связанный ресурс, он должен предупредить пользователя.
  • Если ПА не может идентифицировать тип связанного ресурса, он должен попытаться обработать его. Он должен предупредить пользователя и может дать ему (пользователю) возможность доступа для идентификации типа документа.


12.3
  Взаимосвязи документов: элемент  LINK

<!ELEMENT LINK - O EMPTY               -- медиа-независимая ссылка -->
<!ATTLIST LINK
  %attrs;                              -- %coreattrs, %i18n, %events --
  charset     %Charset;      #ПРЕДПОЛАГАЕТСЯ  -- набор символов связанного ресурса --
  href        %URI;          #ПРЕДПОЛАГАЕТСЯ  -- URI связанного ресурса --
  hreflang    %LanguageCode; #ПРЕДПОЛАГАЕТСЯ  -- код языка --
  type        %ContentType;  #ПРЕДПОЛАГАЕТСЯ  -- информативный тип содержимого --
  rel         %LinkTypes;    #ПРЕДПОЛАГАЕТСЯ  -- типы ссылок вперёд --
  rev         %LinkTypes;    #ПРЕДПОЛАГАЕТСЯ  -- типы ссылок назад --
  media       %MediaDesc;    #ПРЕДПОЛАГАЕТСЯ  -- для представления на данном носителе --
  >

Начальный тег: необходим, Конечный тег: запрещён