Функции мультимедиа языка HTML позволяют авторам включать в свои страницы изображения, апплеты (программы, которые автоматически загружаются и выполняются на машине пользователя), видеоклипы и другие документы в формате HTML.
Например, чтобы включить в документ изображение в формате PNG, авторы могут использовать следующий код:
<BODY> <P>Около Большого Каньона: <OBJECT data="canyon.png" type="image/png"> <EM>Около</EM> Большого Каньона. </OBJECT> </BODY>
В предыдущих версиях HTML авторы могли включать изображения (с помощью IMG) и апплеты (с помощью APPLET). Эти элементы имеют несколько ограничений:
Для решения всех этих вопросов в HTML 4.0 вводится элемент OBJECT, обеспечивающий всестороннее решение для включения объектов. Элемент OBJECT позволяет авторам документов в формате HTML указывать всю информацию, необходимую для представления объекта агентом пользователя: исходный код, начальные значения и рабочие данные. В данной спецификации термин "объект" используется для описания всех объектов, которые Вы захотите включить в HTML-документы; другие термины: апплеты, подключаемые модули (plug-ins), дескрипторы устройств и т.д.
Новый элемент OBJECT, таким образом, subsumes некоторые задачи, выполняемые существующими элементами. Рассмотрим следующую классификацию функций:
Тип включения | Конкретный элемент | Общий элемент |
---|---|---|
Изображение | IMG | OBJECT |
Апплет | APPLET (Нежелателен.) | OBJECT |
Другой документ HTML | IFRAME | OBJECT |
Из таблицы видно, что каждый тип включения имеет конкретное и общее решение. Общий элемент OBJECT служит решением для использования возможных в будущем типов устройств.
Для включения изображений авторы могут использовать элемент OBJECT или элемент IMG.
Для включения апплетов авторам следует использовать элемент OBJECT, поскольку использование элемента APPLETнежелательно.
Для включения одного документа HTML в другой авторы могут использовать новый элемент IFRAME или элемент OBJECT. В обоих случаях внедренный документ не зависит от основного документа. Визуальные агенты пользователей могут представлять внедренный документ в виде отдельного окна в основном документе. Для сравнения элементов OBJECT и IFRAME обратитесь к замечаниям о внедряемых документов.
С изображениями и другими включаемыми объектами могут быть связаны ссылки, с помощью стандартных механизмов ссылок, а также и с помощью навигационных карт (image maps). На навигационной карте задаются геометрические области включаемого объекта, и каждой из них назначается ссылка. При активизации эти ссылки могут вызывать загрузку документа, запускать программу на сервере и т.д.
В следующих разделах мы обсудим различные механизмы, которые авторы могут использовать для включения мультимедиа и создания навигационных карт для этих объектов.
<!-Во избежание проблем с текстовыми агентами пользователей, а также для того, чтобы включение изображений было понятно пользователям невизуальных агентов и могло использоваться ими, Вы должны указывать описания в элементе ALT и избегать использования Серверных навигационных карт--> <!ELEMENT IMG - O EMPTY -- Внедренное изображение --> <!ATTLIST IMG %attrs; -- %coreattrs, %i18n, %events -- src %URI; #REQUIRED -- URI внедряемого изображения -- alt %Text; #REQUIRED -- краткое описание -- longdesc %URI; #IMPLIED -- ссылка на длинное описание (дополняет alt) -- height %Length; #IMPLIED -- переопределение высоты -- width %Length; #IMPLIED -- переопределение ширины -- usemap %URI; #IMPLIED -- использовать клиентскую навигационную карту -- ismap (ismap) #IMPLIED -- использовать серверную навигационную карту -- >
Начальный тег: обязателен, Конечный тег: запрещен
Определения атрибутов
Атрибуты, определенные в другом месте
Элемент IMG внедряет изображение в текущий документ по адресу из определения элемента. Элемент IMG не имеет содержимого; обычно он замещается изображением, назначаемым атрибутом src, исключение при этом составляют выровненные влево или вправо изображения, которые "floated" out of line.
В приведенном ранее примере мы определили ссылку на семейную фотографию. Здесь мы вставим фотографию непосредственно в текущий документ:
<BODY> <P>Я только что вернулся из отпуска! Вот фотография моей семьи на озере: <IMG src="http://www.somecompany.com/People/Ian/vacation/family.png" alt="Фотография моей семьи на озере."> </BODY>
Этого же эффекта можно достичь с помощью элемента OBJECT следующим образом:
<BODY> <P>Я только что вернулся из отпуска! Вот фотография моей семьи на озере: <OBJECT data="http://www.somecompany.com/People/Ian/vacation/family.png" type="image/png"> Фотография моей семьи на озере. </OBJECT> </BODY>
Атрибут alt задает альтернативный текст, который генерируется, если изображение невозможно отобразить (информацию о том, как указать альтернативный текст, см. ниже ). Агенты пользователей должны генерировать альтернативный текст, если они не поддерживают изображение, если они не поддерживают определенный тип изображений или если они сконфигурированы так, чтобы не выводить изображений.
В следующем примере показано, как можно использовать атрибут longdesc для ссылки на более подробное описание:
<BODY> <P> <IMG src="sitemap.gif" alt="Карта узла лабораторий HP" longdesc="sitemap.html"> </BODY>
Атрибут alt задает краткое описание изображения. Его должно быть достаточно для того, чтобы пользователи могли решить, хотят ли они следовать по ссылке, определяемой атрибутом longdesc для более получения подробного описания, здесь это ссылка "sitemap.html".
Информацию о размере изображения, выравнивании и границах см. в разделе о визуальном представлении объектов, изображений и апплетов.
<!ELEMENT OBJECT - - (PARAM | %flow;)* -- общий внедренный объект --> <!ATTLIST OBJECT %attrs; -- %coreattrs, %i18n, %events -- declare (declare) #IMPLIED -- объявить, но не instantiate флаг -- classid %URI; #IMPLIED -- определяет применение -- codebase %URI; #IMPLIED -- базовый URI для classid, data, archive-- data %URI; #IMPLIED -- ссылка на данные объекта -- type %ContentType; #IMPLIED -- тип содержимого для данных -- codetype %ContentType; #IMPLIED -- тип содержимого для кода -- archive %URI; #IMPLIED -- разделенный пробелами список архивов -- standby %Text; #IMPLIED -- сообщение, отображаемое при загрузке -- height %Length; #IMPLIED -- переопределение высоты -- width %Length; #IMPLIED -- переопределение ширины -- usemap %URI; #IMPLIED -- использовать клиентскую навигационную карту -- name CDATA #IMPLIED -- представить в качестве части формы -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- >
Начальный тег: обязателен, Конечный тег: обязателен
Определения атрибутов
Атрибуты, определенные в другом месте
В большинстве агентов пользователей имеются встроенные механизмы для генерации основных типов данных, таких как текст, изображения в формате GIF, цвета, шрифты и ряд графических элементов. Для генерации типов данных типов данных, которые агенты пользователей не поддерживают по умолчанию, они обычно запускают внешние приложения. Элемент OBJECT позволяет авторам ууправлять генерацией данных - задавать внешнюю генерацию или использование некоторой определяемой автором программы, генерирующей данные в агенте пользователя.
В более общем случае автор должен будет определить три типа информации:
Элемент OBJECT позволяет авторам указать все три типа данных объекта, но авторы не обязательно должны указывать их все. Например, некоторым объектам не требуются данные (например, апплет, выполняющий анимацию). Другим может быть не нужна инициализация. Другим же может не понадобиться дополнительная информация о реализации, то есть сам агент пользователя может уже знать, как генерировать этот тип данных (например, изображения в формате GIF).
Авторы задают реализацию объекта и местоположение данных, генерируемых с помощью элемента OBJECT. Однако для указания рабочих значений авторы используют элемент PARAM, обсуждаемый в разделе об инициализации объекта.
Элемент OBJECT может также присутствовать внутри элемента HEAD. Поскольку агенты пользователей обычно не генерируют элементы в HEAD, авторам следует убедиться, что во всех элементах OBJECT в HEAD нет содержимого, которое можно генерировать. Пример включения элемента OBJECT в элемент HEAD см. в разделе о совместном использовании данных кадра.
Информацию об элементе OBJECT в формах см. в разделе об управлении формами.
Агент пользователя должен интерпретировать элемент OBJECT в соответствии со следующими правилами старшинства:
Авторам не следует включать содержимое в элементы OBJECT, расположенные в элементе HEAD.
В следующем примере мы вставляем в документ апплет, представляющий часы, с помощью элемента OBJECT. Апплету, написанный на языке Python, не нужны дополнительные и рабочие значения. Атрибут classid определяет местоположение апплета:
<P><OBJECT classid="http://www.miamachina.it/analogclock.py"> </OBJECT>
Обратите внимание на то, что часы будут генерироваться, как только агент пользователя интерпретирует это объявление OBJECT. Можно отложить генерацию объекта, начав с объявления объекта (описывается ниже).
Авторы должны выполнять объявление, включая альтернативный текст в качестве содержимого элемента OBJECT в случае, если агент пользователя не может сгенерировать часы.
<P><OBJECT classid="http://www.miamachina.it/analogclock.py"> Часы с анимацией. </OBJECT>
Одним важным последствием создания элемента OBJECT является то, что он предлагает механизм задания альтернативной генерации объектов; в каждом внедренном объявлении OBJECT могут задаваться альтернативные типы содержимого. Если агент пользователя не может сгенерировать outermost OBJECT, он пытается сгенерировать содержимое, которое может юыть другим элементом OBJECT и т.д.
В следующем примере мы внедряем несколько объявлений OBJECT для того, чтобы показать работу альтернативной генерации. Агент пользователя попытается сгенерировать первый элемент OBJECT, который он может, в следующем порядке: (1) апплет Earth, написанный на языке Python, (2) клип Земли в формате MPEG, (3) изображение Земли в формате GIF, (4) альтернативный текст.
<P> <!- Сначала попробовать апплет на языке Python --> <OBJECT title="Вид Земли из космоса" classid="http://www.observer.mars/TheEarth.py"> <!- Затем попробовать воспроизвести видеоклип в формате MPEG --> <OBJECT data="TheEarth.mpeg" type="application/mpeg"> <!- Затем попробовать изображение в формате GIF --> <OBJECT data="TheEarth.gif" type="image/gif"> <!- Затем сгенерировать текст --> Вид <STRONG>Земли</STRONG> из космоса. </OBJECT> </OBJECT> </OBJECT>
Внешнее объявление определяет апплет, которому не нужны данные или начальные значения. Второе объявление определяет клип в формате MPEG и, поскольку местоположение обработчика формата MPEG не указано, предполагается, что клип будет обрабатываться агентом пользователя. Мы также установили атрибут type, так что агент пользователя, который знает, что он не может сгенерировать клип в формате MPEG, не будет загружать файл "TheEarth.mpeg" из сети. В третьем объявлении задается местоположение файла в формате GIF и определяется альтернативный текст на случай, если все прочие механизмы не сработают.
Встроенные и внешние данные. Данные, которые должны генерироваться, могут указываться двумя способами: в виде встроенного или внешнего ресурса. Последний метод обычно обеспечивает более быструю генерацию, но неудобен при генерации большого объема данных.
Ниже приводится пример, показывающий, как встроенные данные могут be fed to an OBJECT:
<P> <OBJECT id="clock1" classid="clsid:663C8FEF-1EF9-11CF-A3DB-080036F12502" data="data:application/x-oleobject;base64, ...данные base64..."> Часы. </OBJECT>
Информацию о размере, выравнивании и границах объекта см. в разделе визуальное представление объектов, изображений и апплетов.
<!ELEMENT PARAM - O EMPTY -- значение именованного свойства --> <!ATTLIST PARAM id ID #IMPLIED -- идентификатор в пределах документа -- name CDATA #REQUIRED -- имя свойства -- value CDATA #IMPLIED -- значение свойства -- valuetype (DATA|REF|OBJECT) DATA -- Как интерпретировать значение -- type %ContentType; #IMPLIED -- тип содержимого для значения, если valuetype=ref -- >
Начальный тег: обязателен, Конечный тег: запрещен
Определения атрибутов
Атрибуты, определенные в другом месте
Элементы PARAM определяют набор значений, которые могут понадобиться объекту во время работы. В элементах OBJECT или APPLET может присутствовать любое число атрибутов PARAM в любом порядке, но они должны помещаться в начале тела включающего элемента OBJECT или APPLET.
Синтаксис имен и значений считается понятным обработчику объекта. Данный документ не указывает, как агенты пользователей должны загружать пары имя/значение, а также того, как они должны интерпретировать повторяющиеся имена параметров.
Вернемся к примеру с часами и покажем использование элемента PARAM: предположим, что апплет может принимать два рабочих параметра, определяющих его начальную высоту и ширину. Мы можем установить исходные размеры 40x40 пикселов с помощью двух элементов PARAM.
<P><OBJECT classid="http://www.miamachina.it/analogclock.py"> <PARAM name="height" value="40" valuetype="data"> <PARAM name="width" value="40" valuetype="data"> Этот агент пользователя не может сгенерировать приложение на языке Python. </OBJECT>
В следующем примере рабочие данные для параметра "Init_values" объекта задаются в виде внешнего ресурса (файл GIF). Таким образом для атрибута valuetype устанавливается значение "ref", а атрибутом value является адрес URI ресурса.
<P><OBJECT classid="http://www.gifstuff.com/gifappli" standby="Загрузка Элвиса..."> <PARAM name="Init_values" value="./images/elvis.gif"> valuetype="ref"> </OBJECT>
Обратите внимание, что мы также установили атрибут standby, так что агент пользователя может отобразить сообщение во время загрузки генерирующего механизма.
Когда элемент OBJECT сгенерирован, агенты пользователя должны выполнить поиск содержимого только для тех элементов PARAM, которые являются их прямыми дочерними элементами и "feed" их to the OBJECT.
Таким образом, в следующем примере, если сгенерирован "obj1", "param1" применяется к "obj1" (и не применяется к "obj2"). Если "obj1" не сгенерирован, а "obj2" сгенерирован, "param1" игнорируется, а "param2" применяется к "obj2". Если ни один OBJECT не сгенерирован, ни один PARAM не применяется.
<P> <OBJECT id="obj1"> <PARAM name="param1"> <OBJECT id="obj2"> <PARAM name="param2"> </OBJECT> </OBJECT>
Местоположение обработчика объекта задается адресом URI. Как было сказано во введении в URI, первый сегмент абсолютного адреса URI задает схему именования, используемую для передачи данных, назначаемых адресом URI. Для документов в формате HTML этой схемой часто является "http". Некоторые апплеты могут использовать внешние схемы именования. Например, при указании апплета Java авторы могут использовать адреса URI, начинающиеся с "java", я для аппелтов ActiveX авторы могут использовать "clsid".
В следующем примере мы вставляем апплет на языке Java в документ в формате HTML.
<P><OBJECT classid="java:program.start"> </OBJECT>
Установив атрибут codetype, агент пользователя может определить, нужно ли загружать ли приложение Java, в зависимости от своих возможностей.
<OBJECT codetype="application/java-archive" classid="java:program.start"> </OBJECT>
Некоторым схемам генерации для определения обработки необходима дополнительная информация, поэтому им необходимо указать, где находится эта информация. Авторы могут указать путь к обработчику объекта с помощью атрибута codebase.
<OBJECT codetype="application/java-archive" classid="java:program.start"> codebase="http://foooo.bar.com/java/myimplementation/" </OBJECT>
В следующем примере (с помощью атрибута classid) задается объект ActiveX в виде адреса URI, начинающегося со схемы именования "clsid". Атрибут data определяет местоположение генерируемых данных (еще одни часы).
<P><OBJECT classid="clsid:663C8FEF-1EF9-11CF-A3DB-080036F12502" data="http://www.acme.com/ole/clock.stm"> Это приложение не поддерживается. </OBJECT>
Чтобы объявить объект так, чтобы он не обрабатывался агентом пользователя при чтении, установите логический атрибут declare элемента OBJECT. В то же время авторы должны идентифицировать объявление, установив уникальное значение для атрибута id в элементе OBJECT. Инициализация объекта позже будет ссылаться на этот идентификатор.
Объявленный OBJECT должен присутствовать в документе до первого экземпляра OBJECT.
Объект, определенный с атрибутом declare, инициализируется каждый раз, когда необходима генерация элемента, ссылающегося на этот объект (например, активизируется ссылка на него, активизируется объект, ссылающийся на него и т.д.).
В следующем примере мы объявляем OBJECT и вызываем его инициализацию, указав его в ссылке. Таким образом объект можно активизировать, щелкнув, например, на выделенном тексте.
<P><OBJECT declare id="earth.declaration" data="TheEarth.mpeg" type="application/mpeg"> Вид <STRONG>Земли</STRONG> из космоса. </OBJECT> ...далее в документе... <P>Красивое<A href="#earth.declaration"> анимационное изображение Земли!</A>
В следующем примере показано, как указать рабочие значения, являющиеся другими объектами. В этом примере мы отправляем текст (стихотворение) гипотетическому механизму для просмотра стихотворений. Объект распознает рабочий параметр с именем "font" (скажем, для генерации текста стихотворения с использованием определенного шрифта). Значение этого параметра само является объектом, вставляющим (но не генерирующим) объект шрифта. Отношение между объектом шрифта и объектом механизма просмотра стихотворений достигается с помощью (1) назначения атрибута id в объявлении объекта шрифта и (2) ссылки на него в элементе PARAM объекта механизма просмотра стихотворений (с помощью valuetype и value).
<P><OBJECT declare id="tribune" type="application/x-webfont" data="tribune.gif"> </OBJECT> ...просмотр стихотворения из файла KublaKhan.txt... <P><OBJECT classid="http://foo.bar.com/poem_viewer" data="KublaKhan.txt"> <PARAM name="font" valuetype="object" value="#tribune"> <P>У вас нет такой классной программы просмотра стихотворений... </OBJECT>
Агенты пользователей, не поддерживающие атрибут declare, должны генерировать содержимое объявления OBJECT.
Формальное определение см. в Transitional DTD.
Определения атрибутов
Если апплет "deserialized", метод start() вызывается вместо метода init(). Атрибуты, допустимые при serialized исходного объекта, не восстанавливаются. Атрибуты, переданные в этот экземпляр APPLET, будут доступны апплету. Авторам следует очень осторожно использовать это свойство. Перед serialized вапплет должен быть остановлен.
Должен присутствовать один из атрибутов code или object. Если даны оба атрибута code и object, и в них указаны разные имена классов, это является ошибкой.
Атрибуты, определенные в другом месте
Этот элемент, поддерживаемый всеми программами просмотра с поддержкой Java, позволяет дизайнерам внедрять апплеты Java в документы HTML. Он является нежелательным, и вместо него следует использовать элемент OBJECT.
Содержимое элемента APPLET служит альтернативной информацией для агентов пользователей, не поддерживающих этот элемент или не сконфигурированных для поддержки апплетов. В противном случае агенты пользователей должны игнорировать содержимое.
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
В следующем примере элемент APPLET включает в документ апплет на языке Java. Поскольку атрибут codebase не установлен, предполагается, что апплет находится в том же каталоге, что и сам документ.
<APPLET code="Bubbles.class" width="500" height="500"> Java-апплет, рисующий движущиеся пузыри. </APPLET>
Этот пример можно переписать с использованием элемента OBJECT следующим образом:
<P><OBJECT codetype="application/java" classid="java:Bubbles.class" width="500" height="500"> Java-апплет, рисующий движущиеся пузыри. </OBJECT>
Задать для апплета исходные значения можно с помощью элемента PARAM.
ПРИМЕР НЕЖЕЛАТЕЛЬНОГО ИСПОЛЬЗОВАНИЯ:
Следующий апплет на языке Java:
<APPLET code="AudioItem" width="15" height="15"> <PARAM name="snd" value="Hello.au|Welcome.au"> Java-апплет, воспроизводящий звуковой файл приветствия. </APPLET>
можно определить с использованием элемента OBJECT следующим образом:
<OBJECT codetype="application/java" classid="AudioItem" width="15" height="15"> <PARAM name="snd" value="Hello.au|Welcome.au"> Java-апплет, воспроизводящий звуковой файл приветствия. </OBJECT>
Внедренный документ полностью независим от документа, в который он внедрен. Например, относительные адреса URI во внедренном документе разрешаются в соответствии с базовым адресом URI, указанным во внедренном документе, а не в основном документе. Внедренный документ только генерируется в другом документе (например, во вложенном окне); it во всех остальных отношениях он остается независимым.
Например, следующая строка внедряет содержимое файла embed_me.html в то место документа, в котором встречено определение OBJECT.
...предшествующий текст... <OBJECT data="embed_me.html"> Внимание: невозможно внедрить файл embed_me.html. </OBJECT> ...последующий текст...
Вспомните, что содержимое элемента OBJECT должно генерироваться, только если файл, задаваемый атрибутом data, невозможно загрузить.
Поведение агента пользователя в случаях, когда файл включает сам себя, не определено.
Навигационная карта создается путем назначения объекта с указанием соответствующих геометрических областей.
Имеется два типа навигационных карт:
Клиентские навигационные карты являются предпочтительными по отношению к серверным по крайней мере по двум причинам: они доступны пользователям неграфических агентов и позволяют незамедлительно определить, находится ли указатель в активной области.
<!ELEMENT MAP - - ((%block;)+ | AREA+) - клиентская навигационная карта --> <!ATTLIST MAP %attrs; -- %coreattrs, %i18n, %events -- name CDATA #REQUIRED - для ссылки usemap -- >
Начальный тег: обязателен, Конечный тег: обязателен
<!ELEMENT AREA - O EMPTY -- область клиентской навигационной карты --> <!ATTLIST AREA %attrs; -- %coreattrs, %i18n, %events -- shape %Shape; rect -- управляет интерпретацией координат -- coords %Coords; #IMPLIED -- разделенный запятыми список длин -- href %URI; #IMPLIED -- адрес URI связанного ресурса -- nohref (nohref) #IMPLIED -- для этого региона действие не назначено -- alt %Text; #REQUIRED -- краткое описание -- tabindex NUMBER #IMPLIED -- положение в последовательности перехода -- accesskey %Character; #IMPLIED -- символ доступа -- onfocus %Script; #IMPLIED -- элемент получил фокус -- onblur %Script; #IMPLIED -- элемент потерял фокус -- >
Начальный тег: обязателен, Конечный тег: запрещен
Определения атрибутов элемента MAP
Определения атрибутов элемента AREA
Координаты задаются относительно верхнего левого угла объекта. Все значения являются длинами. Все значения отделяются друг от друга запятыми.
Атрибут для установления связи навигационной карты с элементом
Атрибуты, определенные в другом месте
Элемент MAP определяет клиентскую навигационную карту, которая может быть связана с одним или несколькими элементами (IMG, OBJECT или INPUT). Навигационная карта связывается с элементом с помощью атрибута usemap этого элемента.
Наличие атрибута usemap в элементе OBJECT подразумевает, что объект включается в виде изображения. Более того, если с элементом OBJECT связана клиентская навигационная карта, агенты пользователей могут интерпретировать взаимодействие пользователя с элементом OBJECT исключительно в терминах клиентской навигационной карты. Это позволяет агентам пользователей (например, звуковым браузерам или роботам) взаимодействовать с элементом OBJECT, не обрабатывая его; агент пользователя может даже не загружать (или не обрабатывать) объект. Если с элементом OBJECT связана навигационная карта, авторы не могут быть уверены, что этот объект будет загружаться и обрабатываться всеми агентами пользователей.
Каждый элемент MAP может содержать следующее:
Если несколько определенных регионов перекрываются, приоритет имеет элемент, указанный в документе первым (т.е. на ввод пользователя отвечает именно этот элемент).
Агенты пользователей и авторы должны обеспечивать текстовые альтернативы графических навигационных карт на случай, если графика недоступна или пользователь не может получить к ней доступ. Например, агенты пользователей могут использовать текст атрибута alt для создания текстовых ссылок вместо графической навигационной карты. Такие ссылки могут активизироваться различными способами (клавиатура, голос и т.д.).
Примечание. Элемент MAP не совместим с агентами пользователей для языка HTML версии 2.0.
В следующем примере мы создаем клиентскую навигационную карту для элемента OBJECT. Сы не хотим генерировать содержимое карты при генерации элемента OBJECT, поэтому мы "скроем" элемент MAP в содержимом элемента OBJECT. Затем содержимое элемента MAP будет генерироваться, только если нельзя сегенировать содержимое элемента OBJECT.
<HTML> <HEAD> <TITLE>Крутая страница!</TITLE> </HEAD> <BODY> <P><OBJECT data="navbar1.gif" type="image/gif" usemap="#map1"> <MAP name="map1"> <P>Перемещение по узлу: <A href="guide.html" shape="rect" coords="0,0,118,28">Руководство по доступу</a> | <A href="shortcut.html" shape="rect" coords="118,0,184,28">Переход</A> | <A href="search.html" shape="circle" coords="184,200,60">Поиск</A> | <A href="top10.html" shape="poly" coords="276,0,373,28,50,50,276,0">Первые десять</A>< </MAP> </OBJECT> </BODY> </HTML>
Нам может понадобиться генерация содержимого карты, даже если агент пользователя может сгенерировать элемент OBJECT. Например, мы хотим связать навигационную карту с элементом OBJECT и включить текстовую навигационную панель внизу страницы. Чтобы это сделать, определим элемент MAP вне элемента OBJECT:
<HTML> <HEAD> <TITLE>Крутая страница!</TITLE> </HEAD> <BODY> <P><OBJECT data="navbar1.gif" type="image/gif" usemap="#map1"> </OBJECT> ...продолжение страницы... <MAP name="map1"> <P>Перемещение по узлу: <A href="guide.html" shape="rect" coords="0,0,118,28">Руководство по доступу</a> | <A href="shortcut.html" shape="rect" coords="118,0,184,28">Переход</A> | <A href="search.html" shape="circle" coords="184,200,60">Поиск</A> | <A href="top10.html" shape="poly" coords="276,0,373,28,50,50,276,0">Первые десять</A> </MAP> </BODY> </HTML>
В следующем примере мы создаем сходную навигационную карту, на этот раз используя элемент AREA. Обратите внимание на использование текста alt:
<P><OBJECT data="navbar1.gif" type="image/gif" usemap="#map1"> <P>Это навигационная панель. </OBJECT> <MAP name="map1"> <AREA href="guide.html" alt="Руководство по доступу" shape="rect" coords="0,0,118,28"> <AREA href="search.html" alt="Поиск" shape="rect" coords="184,0,276,28"> <AREA href="shortcut.html" alt="Переход" shape="circle" coords="184,200,60"> <AREA href="top10.html" alt="Первые десять" shape="poly" coords="276,0,373,28,50,50,276,0"> </MAP>
Вот версия с использованием элемента IMG вместо элемента OBJECT (с тем же самым объявлением MAP):
<P><IMG src="navbar1.gif" usemap="#map1" alt="навигационная панель">
В следующем примере показано, как элементы могут совместно использовать навигационные карты.
Вложенные элементы OBJECT полезны для обеспечения fallbacks в случае, если агент пользователя не поддерживает определенные форматы. Например:
<P> <OBJECT data="navbar.png" type="image/png"> <OBJECT data="navbar.gif" type="image/gif"> текст с описанием изображения... </OBJECT> </OBJECT>
Если агент пользователя не поддерживает формат PNG, он пытается сгенерировать изображение в формате GIF. Если он не поддерживает GIF (например, это речевой агент пользователя), он воспроизводит текстовое описание, указанное в содержимсом внутреннего элемента OBJECT. Если элементы OBJECT вложены таким образом, авторы могут обеспечивать совместное использование этими элементами навигационных карт:
<P> <OBJECT data="navbar.png" type="image/png" usemap="#map1"> <OBJECT data="navbar.gif" type="image/gif" usemap="#map1"> <MAP name="map1"> <P>Перемещение по узлу: <A href="guide.html" shape="rect" coords="0,0,118,28">Руководство по доступу</a> | <A href="shortcut.html" shape="rect" coords="118,0,184,28">Переход</A> | <A href="search.html" shape="circle" coords="184,200,60">Поиск</A> | <A href="top10.html" shape="poly" coords="276,0,373,28,50,50,276,0">Первые десять</A> </MAP> </OBJECT> </OBJECT>
В следующем примере показано, как можно указать anchors для создания неактивных зон в навигационной карте. Первый anchor определяет небольшую круглую область, с которой не связана ссылка. Второй anchor определяет круглую область большего размера с той же координатой центра. Обе они вместе образуют кольцо, центр которого неактивен, а внешняя часть активна. Порядок определения anchor важен, поскольку меньший круг должен иметь приоритет над большим.
<MAP name="map1"> <P> <A shape="circle" coords="100,200,50">Я неактивная.</A> <A href="outer-ring-link.html" shape="circle" coords="100,200,250">Я активная.</A> </MAP>
Точно так же атрибут nohref элемента AREA объявляет, что с геометрической областью не связана ссылка.
Серверные навигационные карты представляют интерес в случаях, когда карта слишком сложна.
Определить серверную навигационную карту можно только для элементов IMG и INPUT. В случае элемента IMG этот элемент должен быть включен в элемент A. В случае элемента INPUT он должен иметь тип "image". В обоих случаях для элемента должен быть установлен логический атрибут ismap [CI].
Когда пользователь активизирует ссылку, щелкнув на изображении, экранные координаты отправляются непосредственно на сервер, на котором располагается документ. Экранные координаты выражаются в виде пикселов относительно изображения. Нормативную информацию об определении пикселов и об их масштабировании см. в [CSS1].
В следующем примере активная область определяет серверную ссылку. Таким образом щелчок в любой точке изображения вызовет передачу координат на сервер.
<P><A href="http://www.acme.com/cgi-bin/competition"> <IMG src="game.gif" ismap alt="target"></A>
Координаты области, в которой произошел щелчок, передаются на сервер следующим образом. Агент пользователя получает новый адрес URI из адреса URI, указанного в атрибуте href элемента A, добавляя `?', за которым следуют координаты x и y, разделенные запятой. Затем происходит переход по ссылке с использованием нового адреса URI. Например, в данном примере, если пользователь щелкает в точке с координатами x=10, y=27, то новый адрес URI - "http://www.acme.com/cgi-bin/competition?10,27".
Агенты пользователей, не предлагающие пользователям средств выбора определенных координат (например, неграфические агенты пользователей, зависящие от ввода с клавиатуры, речевые агенты пользователей и т.д.) должны при активизации ссылки передавать на сервер координаты "0,0".
Определения атрибутов
Если указаны атрибуты width и height, они сообщают агентам пользователя о необходимости переопределения исходного размера изображения или объекта этими значениями.
Если объектом является изображение, оно масштабируется. Агенты пользователей должны наилучшим образом масштабировать объект или изображение, чтобы они соответствовали ширине и высоте, определенным автором. Обратите внимание, что длины, выраженные в процентах, зависят от доступного горизонтального или вертикального пространства, а не от исходного размера изображения, объекта или апплета.
Атрибуты height и width дают агентам пользователей представление о размере изображения или объекта, чтобы они могли зарезервировать соответствующее пространство и продолжать генерацию документа, ожидая данных об изображении.
Атрибуты vspace и hspace определяют свободное пространство слева и справа (hspace) и над и под (vspace) IMG, APPLET, OBJECT. По умолчанию значение этого атрибута не определено, но обычно это небольшое ненулевое значение. Оба атрибута имеют значение типа длина.
Изображение или объект может окружать граница (например, если она указана пользователем или изображение имеет содержимое элемента A).
Определения атрибутов
Атрибут align определяет положение IMG, OBJECT или APPLET относительно его содержимого.
Следующие значения атрибута align относятся к положению объекта относительно окружающего текста:
Два других значения, left и right, приводят к перемещению изображения к текущему левому или правому полю. Они обсуждаются в разделе о плавающих объектах.
Различие интерпретаций атрибута align. Агенты пользователей по-разному интерпретируют атрибут align. Некоторые принимают в расчет только текстовую строку, находящуюся перед элементом, некоторые учитывают текст по обеим сторонам элемента.
Определения атрибутов
Для некоторых нетекстовых элементов (IMG, AREA, APPLET и INPUT) авторы должны указывать альтернативный текст, служащий содержимым, если элемент нельзя нормально сгенерировать. Задание альтернативного текста помогает пользователям, не имеющих графических дисплеев, пользователям, браузеры которых не поддерживают формы, visually impaired users, пользователям синтезаторов речи, пользователям, графический агент которых сконфигурирован так, чтобы не выводить изображения и т.д.
Атрибут alt должен быть указан для элементов IMG и AREA. Он не является обязательным для элементов INPUT и APPLET.
В то время как альтернативный текст может быть очень полезным, использовать его нужно осторожно. Авторы должны иметь в виду следующее:
Информацию об обработке случаев, когда альтернативный текст отсутствует, разработчики могут найти в разделе о генерации альтернативного текста.
Примечание. Подробнее о создании доступных документов HTML см. [WAIGUIDE].