13 Об'єкти, зображення і аплети

13.1 Введення в об'єкти, зображення і аплети

Функції мультимедіа мови HTML дозволяють авторам включати в свої сторінки зображення, аплети (програми, які автоматично завантажуються і виконуються на машині користувача), та інші документи в форматі HTML.

Наприклад, щоб включити в документ зображення у форматі PNG, автори можуть використовувати наступний код:

 <BODY>
 <P> Близько Великого Каньйону:
 <OBJECT data = "canyon.png" type = "image / png">
 <EM> Близько </ EM> Великого Каньйону.
 </ OBJECT>
 </ BODY>

У попередніх версіях HTML автори могли включати зображення (за допомогою IMG ) і аплети (за допомогою APPLET ). Ці елементи мають кілька обмежень:

  • Вони не можуть вирішити більш загальної проблеми - включення нових і можливих в майбутньому типів пристроїв.
  • Елемент APPLET працює тільки з апплетами мови Java. Цей елемент тепер небажаний , замість нього використовується елемент OBJECT .
  • Вони викликають проблеми доступності.

Для вирішення всіх цих питань в HTML 4.0 вводиться елемент OBJECT , що забезпечує всебічне вирішення для включення об'єктів. Елемент OBJECT дозволяє авторам документів в форматі HTML вказувати всю інформацію, необхідну для представлення об'єкта агентом користувача: вихідний код, початкові значення і робочі дані. В даній специфікації термін "об'єкт" використовується для опису всіх об'єктів, які Ви захочете включити в HTML-документи; інші терміни: аплети, Plug-in (plug-ins), дескриптори пристроїв і т.д.

Новий елемент OBJECT , таким чином, subsumes деякі завдання, що виконуються існуючими елементами. Розглянемо наступну класифікацію функцій:

Тип включення конкретний елемент Загальний елемент
зображення IMG OBJECT
аплет APPLET ( Небажаний .) OBJECT
Інший документ HTML IFRAME OBJECT

З таблиці видно, що кожен тип включення має конкретне і загальне рішення. Загальний елемент OBJECT служить рішенням для використання можливих в майбутньому типів пристроїв.

Для включення зображень автори можуть використовувати елемент OBJECT або елемент IMG .

Для включення аплетів авторам слід використовувати елемент OBJECT , оскільки використання елемента APPLET небажано .

Для включення одного документа HTML в інший автори можуть використовувати новий елемент IFRAME або елемент OBJECT . В обох випадках впроваджений документ не залежить від основного документа. Візуальні агенти користувачів можуть представляти впроваджений документ у вигляді окремого вікна в основному документі. Для порівняння елементів OBJECT і IFRAME зверніться до зауважень про впроваджуваних документів .

З зображеннями та іншими включаються об'єктами можуть бути пов'язані посилання, за допомогою стандартних механізмів посилань , а також і за допомогою навігаційних карт (image maps) . На навігаційній карті задаються геометричні області включається об'єкта, і кожної з них призначається посилання. При активізації ці посилання можуть викликати завантаження документа, запускати програму на сервері і т.д.

У наступних розділах ми обговоримо різні механізми, які автори можуть використовувати для включення мультимедіа та створення навігаційних карт для цих об'єктів.

13.2 Включення зображення: елемент IMG

  <! - Щоб уникнути проблем з текстовими агентами користувачів, 
  а також для того, щоб включення зображень було зрозуміло
  користувачам невізуальних агентів і могло використовуватися ними, 
  Ви повинні вказувати опису в елементі 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 - використовувати серверну 
  навігаційну карту -
  >

Початковий тег: обов'язковий, Кінцевий тег: заборонений

визначення атрибутів

src = uri [CT]
Цей атрибут задає місце розташування зображення. Прикладами широко підтримуваних форматів є GIF, JPEG і PNG.
longdesc = uri [CT]
Цей атрибут визначає посилання на довгий опис зображення. Це опис має доповнювати короткий опис, що задається атрибутом alt . Якщо з зображенням пов'язана навігаційна карта , в цьому атрибуті має наводитися інформація про її вміст. Це особливо важливо для серверних навігаційних карт.

Елемент 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.shtml">
 </ BODY>

Атрибут alt задає короткий опис зображення. Його має бути достатньо для того, щоб користувачі могли вирішити, чи хочуть вони йти за посиланням, яка визначається атрибутом longdesc для більш отримання докладного опису, тут це посилання "sitemap.shtml".

Інформацію про розмір зображення, вирівнюванні і кордони см. В розділі про візуальному поданні об'єктів, зображень і аплетів .

13.3 Загальна включення: елемент OBJECT

  <! 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 - положення в послідовності переходу -
  >

Початковий тег: обов'язковий, Кінцевий тег: обов'язковий

визначення атрибутів

classid = uri [CT]
Цей атрибут може використовуватися для вказівки місця розташування об'єкта за допомогою URI. Він може використовуватися разом з атрибутом data або як альтернатива йому, в залежності від типу об'єкта.
codebase = uri [CT]
Цей атрибут визначає базовий шлях, який використовується для дозволу відносних адрес URI, що задаються в атрибутах classid , data і archive . Якщо цей атрибут відсутній, значенням за замовчуванням є базовий адреса URI поточного документа.
codetype = content-type [CI]
Цей атрибут визначає тип вмісту даних, отримання яких слід очікувати при завантаженні об'єкта, що задається атрибутом classid . Цей атрибут не є обов'язковим, але рекомендується, якщо використовується атрибут classid , оскільки він дозволяє агенту користувача уникнути завантаження інформації для типу вмісту, який він не підтримує. Якщо цей атрибут відсутній, за замовчуванням використовується значення атрибута type.
data = uri [CT]
Цей атрибут може використовуватися для вказівки місця розташування даних об'єкта, наприклад, даних зображення для об'єктів, що визначають зображення, або в більш загальному випадку - serialized форми об'єкта, який може використовуватися для повторного його створення. Якщо дається відносна адреса URI, він повинен інтерпретуватися щодо атрибута codebase.
type = content-type [CI]
Цей атрибут визначає тип вмісту для даних, що задаються атрибутом data . Цей атрибут не є обов'язковим, але рекомендується, якщо використовується атрибут data , оскільки він дозволяє агенту користувача уникнути завантаження інформації для типу вмісту, який вони не підтримують.
archive = uri list [CT]
Цей атрибут може використовуватися для визначення розділеного пробілами списку адрес URI архівів, що містять які стосуються об'єкту ресурси, який може включати ресурси, що задаються атрибутами classid і data . Попереднє завантаження архівів призведе до зменшення часу завантаження об'єкта. Архіви, зазначені у вигляді відносних адрес URI, повинні інтерпретуватися щодо атрибута codebase.
declare [CI]
Якщо цей логічний атрибут зазначений, він робить поточне визначення OBJECT тільки оголошенням. Об'єкт повинен бути instantiated подальшим визначенням OBJECT , що посилаються на це оголошення.
standby = text [CS]
Цей атрибут визначає повідомлення, яке агент користувача може генерувати при завантаженні implementation і даних об'єкта.

У більшості агентів користувачів є вбудовані механізми для генерації основних типів даних, таких як текст, зображення у форматі GIF, кольору, шрифти і ряд графічних елементів. Для генерації типів даних типів даних, які агенти користувачів не підтримують за умовчанням, вони зазвичай запускають зовнішні додатки. Елемент OBJECT дозволяє авторам ууправлять генерацією даних - задавати зовнішню генерацію або використання деякої визначається автором програми, що генерує дані в агента користувача.

У більш загальному випадку автор повинен буде визначити три типи інформації:

  • Реалізація включеного об'єкта. Наприклад, якщо включений об'єкт - аплет, автор повинен вказати місце розташування виконуваного коду аплету.
  • Генеруються дані. Наприклад, якщо включений об'єкт є програмою, яка генерує дані шрифту, автор повинен вказати місце розташування цих даних.
  • Додаткові значення, необхідні об'єкту. Наприклад, деяким апплетам можуть бути потрібні вихідні значення для їх параметрів.

Елемент OBJECT дозволяє авторам вказати всі три типи даних об'єкта, але автори не обов'язково повинні вказувати їх все. Наприклад, деяким об'єктам зайві дані (наприклад, аплет, який виконує анімацію). Іншим може бути не потрібна ініціалізація. Іншим же може не знадобитися додаткова інформація про реалізацію, тобто сам агент користувача може вже знати, як генерувати цей тип даних (наприклад, зображення у форматі GIF).

Автори ставлять реалізацію об'єкта і місце розташування даних, що генеруються за допомогою елемента OBJECT . Однак для вказівки робочих значень автори використовують елемент PARAM , обговорюваний в розділі про ініціалізації об'єкта.

Елемент OBJECT може також бути присутнім усередині елемента HEAD . Оскільки агенти користувачів зазвичай не генерують елементи в HEAD , авторам слід переконатися, що у всіх елементах OBJECT в HEAD немає вмісту, яке можна генерувати. Приклад включити його OBJECT в елемент HEAD см. В розділі про спільне використання даних кадру .

Інформацію про елемент OBJECT в формах см. В розділі про управлінні формами .

13.3.1 Правила генерації об'єктів

Агент користувача повинен інтерпретувати елемент OBJECT у відповідності з наступними правилами старшинства:

  1. Спочатку агент користувача повинен спробувати згенерувати об'єкт. Він не повинен генерувати вміст елемента, але повинен перевірити його на випадок, якщо елемент містить додаткові дочірні елементи PARAM (див. Ініціалізація об'єкта ) або елементи MAP (див. Клієнтські навігаційні карти ).
  2. Якщо агент користувача з якої-небудь причини не може згенерувати об'єкт (НЕ налаштований для цього, недостатньо ресурсів, помилкова архітектура і т.д.), він повинен спробувати згенерувати його вміст.

Авторам не слід включати вміст у елементи 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>

Інформацію про розмір, вирівнювання і межах об'єкта см. В розділі візуальне уявлення об'єктів, зображень і аплетів .

13.3.2 Ініціалізація об'єкта: елемент PARAM

  <! 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 -
  >

Початковий тег: обов'язковий, Кінцевий тег: заборонений

визначення атрибутів

name = cdata
Цей атрибут визначає ім'я робочого параметра, яке повинно бути зрозуміло вставляється об'єкту. Чи враховує ім'я властивості регістр, залежить від конкретної реалізації об'єкта.
value = cdata
Цей атрибут визначає значення робочого параметра, що задається атрибутом name . Значення властивостей не мають значення в HTML; їх значення визначається об'єктом.
valuetype = data | ref | object [CI]
Цей атрибут визначає тип атрибута value. Можливі значення:
  • data: Це значення використовується за умовчанням. Воно означає, що значення, що задається атрибутом value, буде визначатися і передаватися в об'єкт у вигляді рядка.
  • ref: Значення, що задається атрибутом value, є адресою URI ресурсу, де зберігаються робочі значення. Це дозволяє засобам підтримки ідентифікувати адреси URI, дані в якості параметрів. Адреса URI повинен передаватися в об'єкт як є, то є невирішеним.
  • object: Значення, що задається атрибутом value, є ідентифікатором, що посилаються на оголошення OBJECT в цьому ж документі. Ідентифікатором повинно бути значення атрибута id для оголошеного елемента OBJECT .
type = content-type [CI]
Цей атрибут задає тип вмісту ресурсу, якого призначає атрибутом value тільки в разі, якщо значенням атрибута valuetype є "ref". Таким чином, цей атрибут визначає для агента користувача тип значень, які будуть перебувати за адресою URI, призначеного атрибутом value.

Атрибути, визначені в іншому місці

Елементи 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>

13.3.3 Глобальні схеми іменування об'єктів

Місцезнаходження обробника об'єкта задається адресою 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>

13.3.4 Оголошення і ініціалізація об'єкта

У наведених вище прикладах були показані окремі визначення об'єктів. Якщо в документі має міститися кілька примірників одного і того ж об'єкта, оголошення і ініціалізацію об'єкта можна розділити. Такий спосіб має кілька переваг:
  • Дані можуть завантажуватися агентом користувача з мережі один раз (під час оголошення) і повторно використовуватися в кожній ініціалізації.
  • Ініціалізувати об'єкт можна з розташування, відмінного від того, в якому об'єкт оголошувався, наприклад, із заслання.
  • Об'єкти можна визначати як робочу силу даних для інших об'єктів.

Щоб оголосити об'єкт так, щоб він не оброблявся агентом користувача при читанні, встановіть логічний атрибут 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 .

13.4 Включення аплету : елемент APPLET

Елемент APPLET є небажаним (як і всі атрибути цього елемента) , замість нього слід використовувати елемент OBJECT .

Формальне визначення см. В Transitional DTD .

визначення атрибутів

codebase = uri [CT]
Цей атрибут визначає базову адресу URI аплету. Якщо цей атрибут не вказаний, за замовчуванням використовується базовий адреса URI, який використовується для всього документа. Значеннями цього атрибута можуть бути тільки підкаталоги каталогу, в якому розташований поточний документ.
code = cdata [CS]
Цей атрибут визначає ім'я файлу класу, що містить скомпільований підклас аплету або шлях, по якому можна отримати клас, включаючи сам файл класу. Він інтерпретується з урахуванням коду аплету. Для цього повинен бути вказаний один з атрибутів code або object .
name = cdata [CS]
Цей атрибут визначає ім'я екземпляра аплету, що дає можливість апплетам на одній сторінці знаходити один одного і взаємодіяти один з одним.
archive = uri-list [CT]
Цей атрибут визначає розділений комами список адрес URI архівів, що містять класи та інші ресурси, які будуть "попередньо завантажуватися". Класи завантажуються за допомогою примірника AppletClassLoader з заданим codebase . Відносні адреси URI архівів інтерпретуються щодо codebase аплету. Попереднє завантаження ресурсів може істотно збільшити продуктивність аплетів.
object = cdata [CS]
Цей атрибут визначає ім'я ресурсу, що містить serialized уявлення стану аплету. Він інтерпретується щодо codebase аплету. serialized дані містять ім'я класу аплета, але не обробника. Ім'я класу використовується для завантаження обробника з файлу класу або архіву.

Якщо аплет "deserialized", метод start () викликається замість методу init (). Атрибути, допустимі при serialized вихідного об'єкта, не відновлюються. Атрибути, передані в цей екземпляр APPLET , будуть доступні аплету. Авторам слід дуже обережно використовувати цю властивість. Перед serialized вапплет повинен бути зупинений.

Повинен бути присутнім один з атрибутів code або object . Якщо дані обидва атрибута code і object , і в них вказані різні імена класів, це є помилкою.

width = довжина [CI]
Цей атрибут визначає початкову ширину області відображення аплета (не включаючи вікна і діалоги, створювані апплетом).
height = довжина [CI]
Цей атрибут визначає початкову висоту області відображення аплета (не включаючи вікна і діалоги, створювані апплетом).

Цей елемент, підтримуваний всіма програмами перегляду з підтримкою 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>

13.5 Зауваження про впроваджені документах

Іноді замість посилання на документ автору потрібно впровадити його безпосередньо в первинний документ HTML. Автори можуть використовувати для цього елемент IFRAME або OBJECT , але ці елементи трохи різні. Ці два елементи не тільки мають різні моделі вмісту, але також елемент IFRAME може бути цільовим кадром (докладніше див. Розділ про надання інформації про цільове кадрі ) і може бути "виділений" агентом користувача для друку, перегляду коду HTML і т.д. Агенти користувача можуть генерувати виділені кадри способом, відмінним від генерації невиділених кадрів (наприклад, відображати кордон навколо виділеного кадру).

Впроваджений документ повністю незалежний від документа, в який він впроваджений. Наприклад, відносні адреси URI у впровадженому документі вирішуються відповідно до базового адресою URI, зазначеним у впровадженому документі, а не в основному документі. Впроваджений документ тільки генерується в іншому документі (наприклад, у вкладеному вікні); it стосується решти, то він залишається незалежним.

Наприклад, наступний рядок впроваджує вміст файлу embed_me.shtml в те місце документа, в якому зустрінуте визначення OBJECT .

  ... попередній текст ... <OBJECT data = "embed_me.shtml">
 Увага: неможливо впровадити файл embed_me.shtml.
 </ OBJECT>
 ... наступний текст ...

Згадайте, що вміст елемента OBJECT має генеруватися, тільки якщо файл, що задається атрибутом data , неможливо завантажити.

Поведінка агента користувача у випадках, коли файл включає сам себе, не визначено.

13.6 Навігаційні карти

Навігаційні карти дозволяють авторам визначати області зображення або об'єкта і призначати кожній області певну дію (наприклад, завантаження документа, запуск програми і т.д.) Коли область активізується користувачем, виконується дія.

Навігаційна карта створюється шляхом призначення об'єкта із зазначенням відповідних геометричних областей.

Є два типи навігаційних карт:

  • Клієнтська. Коли користувач активізує область клієнтської навігаційної карти за допомогою миші, координати точки інтерпретуються агентом користувача. Агент користувача вибирає посилання, зазначену для активізованою області, і виконує її.
  • Серверна. Коли користувач активізує область серверної навігаційної карти за допомогою миші, координати точки клацання передаються агенту на сервері, визначеному за допомогою атрибута href елемента A . Агент на сервері інтерпретує координати і виконує відповідні дії.

Клієнтські навігаційні карти є кращими по відношенню до серверних принаймні з двох причин: вони доступні користувачам неграфічних агентів і дозволяють негайно визначити, чи знаходиться покажчик в активній області.

13.6.1 Клієнтські навігаційні карти: елементи MAP і AREA

  <! 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

name = cdata [CI]
Цей атрибут призначає ім'я навігаційної карти, яка визначається елементом MAP .

Визначення атрибутів елемента AREA

shape = default | rect | circle | poly [CI]
Цей атрибут визначає форму області. Можливі значення:
  • default: Задає всю область.
  • rect: Визначає прямокутну область.
  • circle: Визначає круглу область.
  • poly: Визначає многокутну область.
coords = координати [CN]
Цей атрибут визначає положення форми на екрані. Число і порядок значень залежать від певної форми. Можливі комбінації:
  • rect: x лівої межі, y верхньої межі, x правої межі, y нижньої межі.
  • circle: x центру, y центру, радіус. Примітка. Якщо радіус вказано у відсотках, агенти користувача повинні обчислювати остаточне значення радіуса в залежності від призначених об'єкту ширини і висоти. Радіус повинен бути найменшим з цих двох значень.
  • poly: x1, y1, x2, y2, ..., xN, yN.

Координати задаються щодо верхнього лівого кута об'єкта. Всі значення є довжинами . Всі значення відокремлюються один від одного комами.

nohref [CI]
Якщо цей логічний атрибут встановлений, він вказує, що з цією областю посилання не пов'язана.

Атрибут для встановлення зв'язку навігаційної карти з елементом

usemap = uri [CT]
Цей атрибут пов'язує навігаційну карту з елементом. Навігаційна карта визначається за допомогою елемента MAP . Значення атрибута usemap має збігатися зі значенням атрибута name пов'язаного елемента MAP .

Елемент MAP визначає клієнтську навігаційну карту, яка може бути пов'язана з одним або декількома елементами ( IMG , OBJECT або INPUT ). Навігаційна карта зв'язується з елементом за допомогою атрибута usemap цього елемента.

Наявність атрибута usemap в елементі OBJECT має на увазі, що об'єкт включається у вигляді зображення. Більш того , якщо з елементом OBJECT пов'язана клієнтська навігаційна карта, агенти користувачів можуть інтерпретувати взаємодію користувача з елементом OBJECT виключно в термінах клієнтської навігаційної карти. Це дозволяє агентам користувачів (наприклад, звуковим браузерам або роботам) взаємодіяти з елементом OBJECT , що не обробляючи його; агент користувача може навіть не завантажувати (або не обробляти) об'єкт. Якщо з елементом OBJECT пов'язана навігаційна карта, автори не можуть бути впевнені, що цей об'єкт буде завантажуватися і оброблятися всіма агентами користувачів.

Кожен елемент MAP може містити наступне:

  1. Один або кілька елементів AREA . Ці елементи не мають вмісту, але визначають геометричні області навігаційної карти та посилання, пов'язані з кожною областю. Зверніть увагу, що при використанні цього методу елемент MAP не має генерується вмісту. Таким чином, автори повинні змінювати текст для кожного елемента AREA за допомогою атрибута alt (див. Далі інформацію про те, як вказати альтернативний текст ).
  2. Вміст рівня блоку. Сюди повинні включатися елементи A , що визначають геометричні області навігаційної карти, і посилання, пов'язані з кожною областю. Зверніть увагу, що при використанні цього методу вміст елемента 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.shtml" shape="rect" coords="0,0,118,28"> Керівництво по доступу </a> |
  <A Href="shortcut.shtml" shape="rect" coords="118,0,184,28"> Перехід </A> |
  <A Href="search.shtml" shape="circle" coords="184,200,60"> Пошук </A> |
  <A Href="top10.shtml" 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.shtml" shape="rect" coords="0,0,118,28"> Керівництво по доступу </a> |
  <A Href="shortcut.shtml" shape="rect" coords="118,0,184,28"> Перехід </A> |
  <A Href="search.shtml" shape="circle" coords="184,200,60"> Пошук </A> |
  <A Href="top10.shtml" 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.shtml" 
  alt = "Керівництво по доступу" 
  shape = "rect" 
  coords = "0,0,118,28">
  <AREA href = "search.shtml" 
  alt = "Пошук" 
  shape = "rect" 
  coords = "184,0,276,28">
  <AREA href = "shortcut.shtml" 
  alt = "Перехід" 
  shape = "circle"
  coords = "184,200,60">
  <AREA href = "top10.shtml" 
  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.shtml" shape="rect" coords="0,0,118,28"> Керівництво по доступу </a> |
  <A Href="shortcut.shtml" shape="rect" coords="118,0,184,28"> Перехід </A> |
  <A Href="search.shtml" shape="circle" coords="184,200,60"> Пошук </A> |
  <A Href="top10.shtml" 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.shtml" shape="circle" coords="100,200,250"> Я активна. </A>
 </ MAP>

Точно так же атрибут nohref елемента AREA оголошує, що з геометричною областю не пов'язана посилання.

13.6.2 Серверні навігаційні карти

Серверні навігаційні карти представляють інтерес у випадках, коли карта занадто складна.

Визначити серверну навігаційну карту можна тільки для елементів 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".

13.7 Візуальне представлення зображень, об'єктів і аплетів

Всі атрибути елементів IMG і OBJECT , що відносяться до візуального вирівнювання і поданням, є застарілими , замість них слід використовувати таблиці стилів.

13.7.1 Ширина і висота

визначення атрибутів

width = довжина [CN]
Перевизначення ширини зображення і об'єкта.
height = довжина [CN]
Перевизначення для зображення і об'єкта.

Якщо вказані атрибути width і height , вони повідомляють агентам користувача про необхідність перевизначення вихідного розміру зображення або об'єкта цими значеннями.

Якщо об'єктом є зображення, воно масштабується. Агенти користувачів повинні найкращим чином масштабувати об'єкт або зображення, щоб вони відповідали ширині і висоті, певним автором. Зверніть увагу, що довжини, виражені у відсотках, залежать від доступного горизонтального або вертикального простору, а не від вихідного розміру зображення, об'єкта чи аплету.

Атрибути height і width дають агентам користувачів уявлення про розмір зображення або об'єкта, щоб вони могли зарезервувати відповідне простір і продовжувати генерацію документа, чекаючи даних про зображення.

13.7.2 Простір навколо зображень і об'єктів

Атрибути vspace і hspace визначають вільний простір зліва і справа (hspace) і над і під (vspace) IMG , APPLET , OBJECT . За замовчуванням значення цього атрибута не визначено, але зазвичай це невелике нульове значення. Обидва атрибута мають значення типу довжина .

13.7.3 Межі

Зображення або об'єкт може оточувати межа (наприклад, якщо вона вказана користувачем або зображення має вміст елемента A ).

визначення атрибутів

border = пікселі
Небажаний. Атрибут border визначає ширину кордону в пікселах. Значення цього атрибута, що використовується за умовчанням, залежить від агента користувача.

13.7.4 Вирівнювання

Атрибут align визначає положення IMG , OBJECT або APPLET щодо його вмісту.

Наступні значення атрибута align відносяться до положення об'єкта відносно навколишнього тексту:

  • bottom: означає, що вікно об'єкта має бути вертикально вирівняно щодо поточної базової лінії. Це значення використовується за умовчанням.
  • middle: означає, що центр об'єкта повинен бути вирівняний вертикально щодо поточної базової лінії.
  • top: означає, що верх об'єкта повинен бути вертикально вирівняний щодо верху поточного текстового рядка.

Два інших значення, left і right, призводять до переміщення зображення до поточного лівому або правому краю. Вони обговорюються в розділі про плаваючих об'єктах .

Різниця інтерпретацій атрибута align. Агенти користувачів по-різному інтерпретують атрибут align . Деякі беруть до уваги тільки текстову рядок, що знаходиться перед елементом, деякі враховують текст по обидва боки елемента.

13.8 Як вказати альтернативний текст

визначення атрибутів

alt = текст [CS]
Для агентів користувачів, які не мають можливості вивести зображення, форми або аплети, цей атрибут визначає альтернативний текст. Мова альтернативного тексту визначається атрибутом lang .

Для деяких нетекстових елементів ( IMG , AREA , APPLET і INPUT ) автори повинні вказувати альтернативний текст, службовець вмістом, якщо елемент не можна нормально згенерувати. Завдання альтернативного тексту допомагає користувачам, які не мають графічних дисплеїв, користувачам, браузери яких не підтримують форми, visually impaired users, користувачам синтезаторів мови, користувачам, графічний агент яких налаштований так, щоб не виводити зображення і т.д.

Атрибут alt повинен бути вказаний для елементів IMG і AREA . Він не є обов'язковим для елементів INPUT і APPLET .

У той час як альтернативний текст може бути дуже корисним, використовувати його потрібно обережно. Автори повинні мати на увазі наступне:

  • Не вказуйте невідповідний альтернативний текст, включаючи зображення, призначені для форматування сторінки, наприклад, alt = "red ball" не відповідає зображенню, що визначає червоний коло для позначки заголовка абзацу. У цих випадках в якості альтернативного тексту слід вказати порожній рядок ( ""). Авторам в будь-якому випадку рекомендується не використовувати зображення для форматування сторінок; замість цього слід використовувати таблиці стилів.
  • Не вказуйте безглуздий альтернативний текст (наприклад, "dummy text"). Він не тільки буде frustrate користувачів, але також буде сповільнювати агенти користувачів, що перетворюють текст в мову або текст Бройля.

Інформацію про обробку випадків, коли альтернативний текст відсутній, розробники можуть знайти в розділі про генерації альтернативного тексту .

Примітка. Детальніше про створення доступних документів HTML см. [WAIGUIDE] .