Содержание
Мультимедиа возможности HTML позволяют авторам включать в свои страницы изображения, аплеты (программы, которые автоматически загружаются и запускаются на выполнение на машине пользователя), видеоклипы и другие документы HTML.
Например, чтобы включить в документ изображение в формате PNG, автор может записать:
<BODY> <P>Here's a closeup of the Grand Canyon: <OBJECT data="canyon.png" type="image/png"> This is a <EM>closeup</EM> of the Grand Canyon. </OBJECT> </BODY>
Предыдущие версии HTML позволяли авторам включать изображения (с помощью IMG) и аплеты (с помощью APPLET). Эти элементы имели несколько ограничений:
Для адресации этих вопросом HTML 4 ввёл элемент OBJECT, предлагающий общий способ включения объектов. Элемент OBJECT позволяет авторам HTML специфицировать всё необходимое для представления объектов в ПА (пользовательских агентах): код, начальные значения и данные процесса выполнения. В этой спецификации термин "object/объект" используется для описания предметов, которые человек может поместить в документы HTML; другие обычные термины для обозначения этих предметов: аплеты, plug-ins/плагины и т.д.
Новый элемент OBJECT соединяет некоторые задачи,
выполняемые существующими элементами.
Посмотрите на эту таблицу функциональности:
Тип объекта | Специфический элемент | Общий элемент |
---|---|---|
Изображение | IMG | OBJECT |
Аплет | APPLET (не рекомендуется) | OBJECT |
Другой документ HTML | IFRAME | OBJECT |
Таблица показывает, что вставка каждого объекта имеет специфическое и общее решение. Общий элемент OBJECT послужит решением для включения в будущем новых типов носителя.
Чтобы вставить изображение, автор может использовать элементы OBJECT или IMG.
Чтобы вставить аплет, автор должен использовать элемент OBJECT, так как элемент APPLET не рекомендуется использовать.
Чтобы включить один документ HTML в другой, авторы могут использовать новый элемент IFRAME или элемент OBJECT. В обоих случаях, внедрённый документ остаётся независимым от главного документа. Визуальные ПА могут представлять внедрённый документ в отдельном окне внутри главного документа. См. замечания о внедрённых документах, чтобы сравнить вставку документов элементами OBJECT и IFRAME.
Изображения и другие включённые объекты могут иметь ассоциированные с ними гиперссылки, используя стандартные механизмы ссылок, а также посредством карт изображений. Карта изображений определяет активные геометрические регионы включённого объекта и назначает гиперссылку каждому такому региону. При активации эти ссылки могут вызвать запрос документа, запустить программу на сервере и т.д.
В следующих разделах мы обсудим различные доступные авторам механизмы вставки мультимедиа и создания карт изображений для таких вставок.
<!-- Чтобы исключить проблемы с только-текстовыми ПА, а также чтобы сделать содержимое изображения более понятным и доступным для пользователей с невизуальными ПА, Вы должны предоставить описание в элементе ALT и исключить использование серверных карт изображений --> <!ELEMENT IMG - O EMPTY -- Внедрённое изображение --> <!ATTLIST IMG %attrs; -- %coreattrs, %i18n, %events -- src %URI; #НЕОБХОДИМ -- URI изображения для вставки -- alt %Text; #НЕОБХОДИМ -- краткое описание -- longdesc %URI; #ПРЕДПОЛАГАЕТСЯ -- ссылка на полное описание (дополняет alt) -- name CDATA #ПРЕДПОЛАГАЕТСЯ -- имя изображения (для скриптов) -- height %Length; #ПРЕДПОЛАГАЕТСЯ -- переопределить высоту -- width %Length; #ПРЕДПОЛАГАЕТСЯ -- переопределить ширину -- usemap %URI; #ПРЕДПОЛАГАЕТСЯ -- использовать клиентские карты изображений -- ismap (ismap) #ПРЕДПОЛАГАЕТСЯ -- использовать серверные карты изображений -- >
Начальный тег: необходим, Конечный тег: запрещён
Определения атрибутов
Атрибуты, определённые в другом месте
Элемент IMG внедряет изображение в текущий документ в месте определения элемента. Элемент IMG не имеет содержимого; обычно он замещается на ходу изображением, указанным в атрибуте src, исключение составляют изображения, выровненные влево или вправо, которые "обтекаются" по контуру.
В предыдущем примере мы определили ссылку на семейное фото. Здесь мы вставим фото непосредственно в текущий документ:
<BODY> <P>I just returned from vacation! Here's a photo of my family at the lake: <IMG src="http://www.somecompany.com/People/Ian/vacation/family.png" alt="A photo of my family at the lake."> </BODY>
Это включение может быть выполнено также элементом OBJECT:
<BODY> <P>I just returned from vacation! Here's a photo of my family at the lake: <OBJECT data="http://www.somecompany.com/People/Ian/vacation/family.png" type="image/png"> A photo of my family at the lake. </OBJECT> </BODY>
Атрибут alt устанавливает альтернативный текст, который отображается, если изображение не может быть выведено (см. ниже как установить альтернативный текст). ПА должны отображать альтернативный текст, если они не поддерживают изображения, не поддерживают изображения определённых типов или если сконфигурированы так, чтобы не показывать изображения.
Следующий пример показывает, как атрибут longdesc можно использовать для ссылки на полное описание:
<BODY> <P> <IMG src="sitemap.gif" alt="HP Labs Site Map" longdesc="sitemap.html"> </BODY>
Атрибут alt предоставляет краткое описание изображения. Этого должно быть достаточно, чтобы пользователь мог решить, перейти ли по ссылке, заданной атрибутом longdesc для полного описания, здесь - "sitemap.html".
См. раздел визуальное представление объектов, изображений и аплетов для получения информации о размерах изображения, выравнивании и рамках.
<!ELEMENT OBJECT - - (PARAM | %flow;)* -- общий внедрённый объект --> <!ATTLIST OBJECT %attrs; -- %coreattrs, %i18n, %events -- declare (declare) #ПРЕДПОЛАГАЕТСЯ -- объявляет, но не устанавливает флаг -- classid %URI; #ПРЕДПОЛАГАЕТСЯ -- идентифицирует класс -- codebase %URI; #ПРЕДПОЛАГАЕТСЯ -- базовый URI для classid, data, archive-- data %URI; #ПРЕДПОЛАГАЕТСЯ -- ссылка на данные объекта -- type %ContentType; #ПРЕДПОЛАГАЕТСЯ -- тип содержимого данных -- codetype %ContentType; #ПРЕДПОЛАГАЕТСЯ -- тип содержимого кода -- archive CDATA #ПРЕДПОЛАГАЕТСЯ -- список разделённых пробелами URI -- standby %Text; #ПРЕДПОЛАГАЕТСЯ -- сообщение для показа во время загрузки -- height %Length; #ПРЕДПОЛАГАЕТСЯ -- переопределить высоту -- width %Length; #ПРЕДПОЛАГАЕТСЯ -- переопределить ширину -- usemap %URI; #ПРЕДПОЛАГАЕТСЯ -- использовать клиентские карты -- name CDATA #ПРЕДПОЛАГАЕТСЯ -- отправить как часть формы -- tabindex NUMBER #ПРЕДПОЛАГАЕТСЯ -- позиция в порядке табуляции -- >
Начальный тег: необходим, Конечный тег: необходим
Определения атрибутов
Атрибуты, определённые в другом месте
Большинство ПА имеют встроенные механизмы для отображения данных обычных типов, таких как рисунки GIF, цвета, шрифты и небольшое количество графических элементов. Чтобы иметь возможность отображать данные, изначально не поддерживаемые, ПА обычно запускают внешние приложения. Элемент OBJECT позволяет авторам контролировать, должны ли данные просматриваться независимо (вне ПА) или программой определённой автором для просмотра внутри ПА.
В самом общем случае, автору необходимо специфицировать три типа информации:
Элемент OBJECT позволяет авторам специфицировать данные всех трёх типов, но не всегда необходимо определять все три. Например, некоторым объектам не нужны данные (аплет, выполняющий небольшую анимацию). Другие не требуют инициализации при выполнении. Наконец, третьи могут не требовать дополнительной информации о выполнении, т.е. ПА может уже сам "знать", как отображать данные такого типа (напр., рисунки GIF).
Авторы определяют реализацию объекта и размещение данных, отображаемых элементом OBJECT. Чтобы определить значения времени выполнения, авторы используют элемент PARAM, который рассматривается в разделе инициализация объекта.
Элемент OBJECT может также появляться в содержимом элемента HEAD. Поскольку ПА обычно не отображают элементы в HEAD, авторы должны удостовериться, что любой элемент OBJECT в HEAD не специфицирует содержимое, которое может отображаться. См. в разделе разделение данных фрэйма пример включения элемента OBJECT в элемент HEAD.
См. раздел элементы управления (ЭУ) формы об элементе OBJECT в формах.
Этот документ не специфицирует поведение элементов OBJECT, использующих как атрибут classid для идентификации реализации, так и атрибут data для определения данных для этой реализации. Чтобы обеспечить переносимость, авторы должны использовать элемент PARAM для того, чтобы сообщить в реализацию, где находятся дополнительные данные.
ПА должны интерпретировать элемент 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"> An animated clock. </OBJECT>
Важным следствием дизайна элементов OBJECT является то, что он предоставляет механизм альтернативного представления объектов; каждое объявление внедрённого OBJECT может специфицировать альтернативные типы содержимого. Если ПА не может отобразить наиболее удалённые OBJECT, он пытается отобразить содержимое, которое может быть другим элементом OBJECT и т.д.
В следующем примере мы внедряем несколько
объявлений OBJECT,
чтобы проиллюстрировать, как работают
альтернативные представления.
ПА будет
пытаться отобразить первый элемент OBJECT,
который он сможет, в следующем порядке:
(1) аплет Earth, написанный на языке Python,
(2) MPEG-анимацию Earth,
(3) GIF-рисунок Earth,
(4) альтернативный текст.
<P> <!-- Сначала пытается выполнить аплет Python --> <OBJECT title="The Earth as seen from space" classid="http://www.observer.mars/TheEarth.py"> <!-- В противном случае, MPEG video --> <OBJECT data="TheEarth.mpeg" type="application/mpeg"> <!-- В противном случае, рисунок GIF --> <OBJECT data="TheEarth.gif" type="image/gif"> <!-- В противном случае отображает текст --> The <STRONG>Earth</STRONG> as seen from space. </OBJECT> </OBJECT> </OBJECT>
Самое внешнее объявление специфицирует аплет, который не требует дополнительных данных или начальных значений. Второе объявление специфицирует анимацию MPEG и, поскольку не определяется размещение программы обработки MPEG, обращается к ПА для обработки анимации. Мы также установили атрибут type, чтобы ПА, "знающий", что он не может обработать MPEG, не загружал "TheEarth.mpeg" из сети. Третье объявление специфицирует размещение файла GIF и определяет альтернативный текст на тот случай, если все остальные механизмы не сработают.
Инлайн или внешние данные. Отображаемые данные могут быть получены двумя путями: инлайн (т.е. из самого документа) и из внешнего источника. Хотя предыдущий метод обычно приводит к более быстрому отображению, это не всегда бывает удобно при выводе данных большого объёма.
Вот пример, иллюстрирующий, как инлайн-данные могут быть поданы в OBJECT:
<P> <OBJECT id="clock1" classid="clsid:663C8FEF-1EF9-11CF-A3DB-080036F12502" data="data:application/x-oleobject;base64, ...base64 data..."> A clock. </OBJECT>
Информацию о размере объекта, выравнивании и рамках см. в визуальном представлении объектов, изображений и аплетов.
<!ELEMENT PARAM - O EMPTY -- именованное значение свойства --> <!ATTLIST PARAM id ID #ПРЕДПОЛАГАЕТСЯ -- уникальный id документа -- name CDATA #НЕОБХОДИМ -- имя свойства -- value CDATA #ПРЕДПОЛАГАЕТСЯ -- значение свойства -- valuetype (DATA|REF|OBJECT) DATA -- как интерпретировать значение -- type %ContentType; #ПРЕДПОЛАГАЕТСЯ -- тип содержимого для значения, если valuetype=ref -- >
Начальный тег: необходим, Конечный тег: запрещён
Определения атрибутов
Атрибут, определённый в другом месте
Элементы PARAM определяют набор значений, которые могут потребоваться объекту на этапе выполнения. Элементы PARAM могут появляться в содержимом элементов OBJECT или APPLET в любом количестве, в любом порядке, но должны размещаться в начале содержимого элементов 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"> This user agent cannot render Python applications. </OBJECT>
В следующем примере, данные этапа выполнения для параметра "Init_values" определены как внешний ресурс (файл GIF). Значение атрибута valuetype, таким образом, установлено в "ref", а value - это URI, указывающий на ресурс.
<P><OBJECT classid="http://www.gifstuff.com/gifappli" standby="Loading Elvis..."> <PARAM name="Init_values" value="./images/elvis.gif"> valuetype="ref"> </OBJECT>
Обратите внимание, что мы установили также атрибут standby для того, чтобы ПА мог отобразить сообщение, пока загружается механизм представления.
Если элемент OBJECT отображён, ПА должен искать содержимое только тех элементов PARAM, которые являются прямыми потомками и "снабдить" ими 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"> анимация Earth!</A>
Следующий пример иллюстрирует, как
специфицировать значения этапа выполнения,
которые являются другими объектами. Здесь
мы посылаем текст (стих) гипотетическому
механизму просмотра стихов. Объект
распознаёт параметр этапа выполнения под
названием "font" (для отображения текста стиха
определённым шрифтом). Значение этого
параметра само по себе является объектом,
которое вставляет (но не отображает) объект
шрифта. Соотношение между объектом font и
объектом просмотра стиха достигается путём
(1) установки id "tribune" в
объявлении объекта font и
(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>You're missing a really cool poem viewer ... </OBJECT>
ПА, не поддерживающие атрибут declare, должны отображать содержимое объявления OBJECT.
См. формальное определение в Переходном ОТД.
Определения атрибутов
Если аплет "десериализован", вызывается метод start(), но не метод init(). Значения атрибутов после сериализации оригинального объекта не восстанавливаются. Любые атрибуты, передаваемые в инстанцию APPLET, будут доступны аплету. Авторы должны предельно осторожно пользоваться этой возможностью. Аплет должен быть остановлен перед тем, как будет сериализован.
Атрибуты code или object должны присутствовать. Если задан и code, и object, то будет считаться ошибкой, если они будут задавать разные имена класса.
Атрибуты, определённые в другом месте
Этот элемент, поддерживаемый всеми браузерами с поддержкой Java, позволяет дизайнерам внедрять аплет Java в документ HTML. Он не рекомендуется. Вместо него следует применять элемент OBJECT.
Содержимое APPLET функционирует как альтернативная информация для ПА, не поддерживающих этот элемент или сконфигурированных так, чтобы не поддерживать аплеты. В противном случае ПА должны игнорировать содержимое.
НЕ РЕКОМЕНДУЕТСЯ:
В этом примере элемент APPLET вставляет аплет Java
в документ. Поскольку отсутствует codebase,
предполагается, что аплет находится в той
же директории, что и текущий документ.
<APPLET code="Bubbles.class" width="500" height="500"> Java applet that draws animated bubbles. </APPLET>
Этот пример можно переписать с использованием OBJECT:
<P><OBJECT codetype="application/java" classid="java:Bubbles.class" width="500" height="500"> Java applet that draws animated bubbles. </OBJECT>
Начальные значения могут быть переданы аплету элементом PARAM.
НЕ РЕКОМЕНДУЕТСЯ:
Этот участок аплета Java:
<APPLET code="AudioItem" width="15" height="15"> <PARAM name="snd" value="Hello.au|Welcome.au"> Java applet that plays a welcoming sound. </APPLET>
можно переписать с OBJECT:
<OBJECT codetype="application/java" classid="AudioItem" width="15" height="15"> <PARAM name="snd" value="Hello.au|Welcome.au"> Java applet that plays a welcoming sound. </OBJECT>
Внедрённый документ полностью независим от документа, в который он внедрён. Например, относительные URI внутри внедрённого документа разрешаются в соответствии с базовым URI внедрённого документа, а не с базовым URI главного документа. Внедрённый документ отображается только внутри другого документа (напр., в дочернем окне), в то же время, он остаётся независимым.
К примеру, следующие строки внедряют содержимое файла embed_me.html в то место, где появляется определение OBJECT:
...текст до... <OBJECT data="embed_me.html"> Warning: embed_me.html could not be embedded. </OBJECT> ...текст после...
Напоминаем, что содержимое OBJECT должно отображаться только в том случае, если файл, определённый в атрибуте data не может быть загружен.
Поведение ПА в тех случаях, когда файл внедряет сам себя, не определено.
Карта изображений (image map) создаётся путём ассоциирования объекта со спецификацией сенситивного геометрического региона на объекте.
Существуют карты двух типов:
Клиентские карты изображений предпочтительнее, нежели серверные по двум (как минимум) причинам: они доступны для людей, просматривающих документ в неграфических браузерах, и немедленно реагируют при перемещении указателя над активным регионом.
<!ELEMENT MAP - - ((%block;) | AREA)+ -- клиентская карта изображений --> <!ATTLIST MAP %attrs; -- %coreattrs, %i18n, %events -- name CDATA #НЕОБХОДИМ -- для ссылок usemap -- >
Начальный тег: необходим, Конечный тег: необходим
<!ELEMENT AREA - O EMPTY -- регион клиентской карты --> <!ATTLIST AREA %attrs; -- %coreattrs, %i18n, %events -- shape %Shape; rect -- управляет интерпретацией coords -- coords %Coords; #ПРЕДПОЛАГАЕТСЯ -- список разделённых запятыми размеров -- href %URI; #ПРЕДПОЛАГАЕТСЯ -- URI связанного ресурса -- nohref (nohref) #ПРЕДПОЛАГАЕТСЯ -- этот регион не имеет action -- alt %Text; #НЕОБХОДИМ -- краткое описание -- tabindex NUMBER #ПРЕДПОЛАГАЕТСЯ -- позиция в порядке табуляции -- accesskey %Character; #ПРЕДПОЛАГАЕТСЯ -- символ быстрого доступа -- onfocus %Script; #ПРЕДПОЛАГАЕТСЯ -- элемент получил фокус -- onblur %Script; #ПРЕДПОЛАГАЕТСЯ -- элемент потерял фокус -- >
Начальный тег: необходим, Конечный тег: запрещён
Определения атрибутов элемента MAP
Определения атрибутов элемента AREA
Координаты относительны к верхнему левому углу объекта. Все значения являются размерами. Все значения разделены запятыми.
Атрибут для ассоциирования карты с элементом
Атрибуты, определённые в другом месте