3 Про SGML і HTML

В цьому розділі документа Ви познайомитеся з SGML і дізнаєтеся про його ставлення до HTML. Повний опис SGML не входить в цей стандарт (див. [ISO8879] ).

3.1 Введення в SGML

SGML - це система визначення мов розмітки . Автори розмічають свої документи, представляючи інформацію про структуру, поданні і семантиці в одному документі. HTML є одним із прикладів мови розмітки. Ось приклад документа на мові HTML:

  <! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.0 // EN"
  "Http://www.w3.org/TR/REC-html40/strict.dtd">
 <HTML>
  <HEAD>
  <TITLE> Мій перший документ на мові HTML </ TITLE>
  </ HEAD>
  <BODY>
  <P> Всім привіт!
  </ BODY>
 </ HTML>

Документ HTML складається з розділу заголовка (тут - між тегами <HEAD> і </ HEAD>) і тіла (тут - між заголовками <BODY> і </ BODY>). Заголовок документа відображається в заголовку (разом з іншою інформацією про документ), а вміст документа знаходиться в тілі. У цьому прикладі тіло документа складається тільки з одного абзацу, позначеного <P>.

Кожна мова розмітки, певний в SGML, називається додатком SGML. Додаток SGML характеризується:

  1. Оголошенням SGML . SGML Оголошення вказує, які символи і роздільники можуть відображатися в додатку.
  2. Визначення типу документа (DTD) (DTD) . DTD визначає синтаксис конструкцій розмітки. DTD може включати додаткові визначення, наприклад, посилання на комбінації символів .
  3. Специфікація, що описує семантику, яка використовується в розмітці. Ця специфікація також накладає синтаксичні обмеження, які неможливо виразити за допомогою DTD.
  4. Примірники документа містять дані (вміст) і розмітку. Кожен екземпляр містить посилання на DTD, яке повинно використовуватися для інтерпретації.

Специфікація HTML 4.0 включає оголошення SGML , три визначення типу документів (опис їх див. Розділ інформація про версії HTML ) і список посилань на символи .

3.2 Конструкції SGML, використовувані в HTML

У наступних розділах Ви познайомитеся з конструкціями SGML, використовуваними в HTML.

У додатку перераховані деякі функції SGML , які не підтримуються засобами HTML і агентами користувачів, і використання яких слід уникати.

3.2.1 Елементи

Визначення типу документа SGML оголошує типи елементів , що представляють структури або бажана поведінка. HTML включає типи елементів, що представляють абзаци, гіпертекстові посилання, списки, таблиці, зображення і т.д.

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

Ім'я елемента відображається в початковому тегу (пишеться <ім'я-елемента>) і в кінцевому тегу (пишеться </ ім'я-елемента>); не забувайте про слеш перед ім'ям елемента в кінцевому тегу. Наприклад, початкові і кінцеві теги елементу UL визначають список:

  <UL>
 <LI> <P> ... елемент списку 1 ... <LI> <P> ... елемент списку 2 ... </ UL>

Деякі типи елементів HTML дозволяють авторам опускати кінцеві теги (наприклад, типи елементів P and LI ). Кілька типів елементів також дозволяють опускати початкові теги ; наприклад, HEAD і BODY . HTML DTD вказує для кожного типу елемента, чи є початковий і кінцевий теги обов'язковими.

Деякі типи елементів HTML не мають вмісту. Наприклад, елемент переходу на наступний рядок BR не має вмісту; його роль - переривання рядка тексту. Такі порожні елементи ніколи не мають кінцевих тегів. Визначення типу документа і текст специфікації вказують, чи є тип елемента порожнім (не має вмісту) або, якщо він може мати вміст, що є допустимим вмістом.

Імена елементів завжди враховують регістр.

Інформацію про правила, які керують елементами, (наприклад, що вони можуть бути вкладеними відповідним чином, кінцевий тег закриває всі опущені початкові теги аж до відповідного йому початкового тега (розділ 7.5.1) і т.д.) см. В стандарті SGML.

Наприклад, наступний абзац:

  <P> Це перший абзац. </ P>
 ... елемент блоку ...
 

можна перезаписати без кінцевого тега:

  <P> Це перший абзац.
 ... елемент блоку ...
 

оскільки початковий тег <P> закривається наступним елементом блоку. Точно так же, якщо абзац включений в елемент блоку, наприклад:

  <DIV>
 <P> Це абзац.
 </ DIV>

кінцевий тег включає елементи блоку (тут - </ DIV>) служить також кінцевим тегом відкритого початкового тега <P>.

Елементи - це не теги. Деякі люди називають елементи тегами (наприклад, "тег P"). Пам'ятайте, що елемент - це одне, а тег (початку або кінця, неважливо) - інше. Наприклад, елемент HEAD завжди присутній, навіть якщо початковий і кінцевий теги HEAD відсутні.

Всі типи елементів, оголошені в цій специфікації, перераховані в покажчику елементів .

3.2.2 Атрибути

З елементами можуть бути пов'язані властивості, звані атрибутами , які можуть мати значення (стандартні або встановлюються авторами або сценаріями). Пари атрибут / значення поміщаються перед закриваючою дужкою ">" початкового тега елемента. У початковому тегу елемента може бути будь-яке число (допустимих) пар атрибут / значення, розділених пробілами. Вони можуть зазначатися в будь-якому порядку.

В даному прикладі для елемента H1 встановлений атрибут id :

 <H1 id = "section1">
 Це певний заголовок, спасибі атрибуту id
 </ H1> 

За замовчуванням в SGML необхідно, щоб всі значення атрибутів були розділені за допомогою подвійних (десятковий код ASCII 34) або одинарних лапок (десятковий код ASCII 39). Одинарні лапки можуть включатися в значення атрибуту, якщо значення відділяється подвійними лапками, і навпаки. Автори можуть також використовувати цифрові посилання на символи для подання подвійних (& # 34;) і одинарних лапок (& # 39;). Для подвійних лапок автори можуть також використовувати комбінацію посилань на символи & quot ;.

У певних випадках автори можуть вказувати значення атрибута без лапок. Значення атрибута може включати тільки букви (az і AZ), цифри (0-9), знаки переносу (десятковий код ASCII 45) і точки (десятковий код ASCII 46). Рекомендується завжди використовувати лапки.

Імена атрибутів завжди враховують регістр

Значення атрибутів зазвичай враховують регістр. Визначення кожного атрибута в списку атрибутів вказується, чи враховує значення регістр.

Список всіх атрибутів, визначених у цій специфікації, наводиться в покажчику атрибутів .

3.2.3 Посилання на символи

Посилання на символи - це числові або символьні імена символів, які можуть бути включені в документ HTML. Вони зручні для звернення до рідко використовуваних символів або до символів, які важко або неможливо вводити в засобах розробки документів. Ви побачите посилання на символи в цьому документі; вони починаються зі знака "&" і закінчуються крапкою з комою (;). Ось деякі приклади:

  • "& Lt;" представляє знак <.
  • "& Gt;" представляє знак>.
  • "& Quot;" представляє знак ".
  • "& # 229;" (Десяткове число) представляє букву "a" з гуртком зверху.
  • "& # +1048;" (Десяткове число) представляє кириличну букву "I".
  • "& # X6C34;" (Шістнадцяткове число) представляє китайський знак води.

Посилання на символи в HTML детально обговорюються далі в цьому розділі під заголовком набір символів документа HTML . У специфікації також міститься список посилань на символи , які можуть використовуватися в документах у форматі HTML 4.0.

3.2.4 Коментарі

Коментарі в HTML мають наступний синтаксис:

 <! - Це коментар ->
 <! - Це теж коментар,
  він займає кілька рядків ->

Проблеми між відкриває роздільником розмітки ( "<!") І відкриває роздільником коментаря ( "-") неприпустимі, але їх можна використовувати між закриває роздільником коментаря ( "-") і закриває роздільником розмітки ( ">"). Поширеною помилкою є включення рядка символів переносу ( "---") в коментар. Слід уникати використання в коментарях двох або більше символів переносу.

Інформація в коментарях не має спеціального значення (наприклад, посилання на символи Не брати до уваги).

3.3 Як читати HTML DTD

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

3.3.1 Коментарі DTD

В DTD коментарі можуть займати кілька рядків. В DTD коментарі відділяються парою міток "-", наприклад,

 <! ELEMENT PARAM - O EMPTY - значення іменованого властивості ->
Тут коментар "значення іменованого властивості" пояснює використання типу елемента PARAM . Коментарі в DTD носять інформативний характер.

3.3.2 Визначення комбінацій параметрів

HTML DTD починається з ряду визначень комбінацій параметрів. Визначення комбінації параметрів визначає макрос, на який можна посилатися в будь-якому місці DTD. Ці макроси не відображаються в документах HTML, вони відображаються тільки в DTD. Інші типи макросів, звані посиланнями на символи , можуть використовуватися в тексті документа в форматі HTML або в значеннях атрибутів.

Коли на комбінацію параметрів посилаються в DTD по імені, вона розгортається в рядок.

Визначення комбінації параметрів починається з ключового слова <! ENTITY%, за яким слідує ім'я entity, рядок в лапках, в якому розгортається entity і нарешті закриває>. Примірники комбінацій параметрів в DTD починаються зі знака "%", потім йде ім'я комбінації і закінчується необов'язковим символом ";".

У наступному прикладі визначається, в який рядок буде розгортатися "% fontstyle;".

 <! ENTITY% fontstyle "TT | I | B | BIG | SMALL">

Рядок, в якому розгортається комбінація параметрів, може містити інші імена комбінацій параметрів. Ці імена розгортаються рекурсивно. У наступному прикладі "% inline;" комбінація параметрів включає комбінації "% fontstyle;", "% phrase;", "% special;" і "% formctrl;".

 <! ENTITY% inline "#PCDATA |% fontstyle; |% phrase; |% special; |% formctrl;">

Ви часто будете зустрічати в HTML DTD два DTD entities: "% block;" "% inline;". Вони використовуються, якщо модель вмісту включає елементи рівня блоку і вбудовані елементи відповідно (визначені в розділі глобальна структура документа HTML ).

3.3.3 Оголошення елементів

HTML DTD складається з оголошень типів елементів і їх атрибутів. Оголошення починається з ключового слова <! ELEMENT і закінчується символом>. Між ними вказуються:

  1. Ім'я елемента.
  2. Обов'язковий чи кінцевий тег елемента. Два символи перенесення після імені елемента означають, що початковий і кінцевий теги є обов'язковими. Один символ перенесення, за яким слідує буква "O", вказує, що кінцевий тег можна опустити. Дві букви "O" вказують на те, що можна опустити як початковий, так і кінцевий теги.
  3. Вміст елемента, якщо таке є. Допустимим вмістом елемента називається його модель вмісту. Типи елементів, що не мають вмісту, називаються порожніми елементами . Модель вмісту для таких типів елементів оголошується за допомогою ключового слова "EMPTY".

У цьому прикладі:

  <! ELEMENT UL - - (LI) +>
  • Оголошується тип елемента UL.
  • Два знака переносу вказують, що початковий тег <UL> і кінцевий тег </ UL> для цього елемента обов'язкові.
  • Модель вмісту для цього типу елемента - "принаймні один елемент LI". Нижче пояснюється, як задати модель вмісту.

Цей приклад демонструє оголошення порожнього типу елемента:

  <! ELEMENT IMG - O EMPTY>
  • Оголошується тип елемента IMG.
  • Знак переносу, за яким слідує буква "O", вказує, що кінцевий тег можна опустити, але якщо модель вмісту - "EMPTY", це правило посилюється, і кінцевий тег повинен бути опущений.
  • Ключове слово "EMPTY" означає, що екземпляри цього типу не повинні мати вмісту.

Визначення моделі вмісту  

Модель вмісту описує, що може міститися в екземплярі типу елемента. Визначення моделі вмісту можуть включати:

  • Імена допустимих або заборонених типів елементів (наприклад, елемент UL містить екземпляри типу елемента LI , а тип елемента P не може включати інші елементи P ).
  • Комбінації DTD (наприклад, елемент LABEL включають екземпляри певних налаштувань "% inline;").
  • Текст документа (указується SGML-конструкцією "#PCDATA"). Текст може містити посилання на символи . Пам'ятайте, що вони починаються з & і закінчуються крапкою з комою (наприклад, "Herg & eacute; 's adventures of Tintin" містить посилання на комбінацію символів для відображення символу "e зі знаком наголоси").

Модель вмісту елемента вказується з використанням наступного синтаксису:

(...)
Розділяє групи.
A | B
Відбувається A або B, але не обидва.
A, B
Відбуваються A і B в зазначеному порядку.
A & B
Відбуваються A і B в будь-якому порядку.
A?
A відбувається нуль або один раз.
A *
A відбувається нуль або більше разів.
A +
A відбувається один або кілька разів.

Ось деякі приклади HTML DTD:

  <! ELEMENT UL - - (LI) +>

Елемент UL повинен містити один або кілька елементів LI .

  <! ELEMENT DL - - (DT | DD) +>

Елемент DL повинен містити один або кілька елементів DT або DD в будь-якому порядку.

  <! ELEMENT OPTION - O (#PCDATA)>

Елемент OPTION може містити тільки текст і такі entities як & amp; - Це визначається типом даних SGML #PCDATA.

Деякі типи елементів HTML використовують додаткову функцію SGML для виключення елементів з моделі вмісту. Виключеним елементам передує символ перенесення. Явні винятки мають пріоритет по відношенню до допустимих елементів.

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

  <! ELEMENT A - - (% inline;) * - (A)>

Пам'ятайте, що тип елемента A є частиною DTD комбінації параметрів "% inline;", але явно виключається виразом - (A).

Точно так же таке оголошення типу елемента FORM забороняє вкладені форми:

  <! ELEMENT FORM - - (% block; | SCRIPT) + - (FORM)>

3.3.4 Оголошення атрибутів

Оголошення атрибутів , які може мати елемент, починається з ключового слова <! ATTLIST. За ним слідує ім'я елемента зі знаком, список визначень атрибутів і закриває символ>. Кожне визначення атрибута - це трійка, яка визначає:

  • Ім'я атрибута.
  • Тип значення атрибуту або явний набір допустимих значень. Значення, визначені явно за допомогою DTD, враховують регістр. Детальніше про типи значень атрибутів см. В розділі основні типи даних HTML .
  • Чи є значення атрибута за замовчуванням неявним (ключове слово "#IMPLIED"), тобто значення за замовчуванням встановлюється агентом користувача (в деяких випадках з використанням успадкування від батьківських елементів); завжди обов'язковим (ключове слово "#REQUIRED"); або фіксованим даними значенням (ключове слово "#FIXED"). Деякі визначення атрибутів явно вказують значення атрибута за замовчуванням.

У цьому прикладі атрибут ім'я визначено для елемента MAP . Атрибут на є обов'язковим для цього елемента.

 <! ATTLIST MAP
  name CDATA #IMPLIED
  >

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

Детальніше про типи даних "CDATA", "NAME", "ID" та ін., Див. Розділ типи даних HTML .

У наступних прикладах показано кілька визначень атрибутів:

 rowspan NUMBER 1 - число рядків, які охоплюються осередком -
 http-equiv NAME #IMPLIED - Ім'я заголовка відповіді HTTP -
 id ID #IMPLIED - унікальний ІД в межах документа - 
 valign (top | middle | bottom | baseline) #IMPLIED

Для атрибута rowspan необхідні значення типу NUMBER. Значення за замовчуванням дається явно - "1". Для необов'язкового атрибута http-equiv необхідні значення типу NAME. Для необов'язкового атрибута id необхідні значення типу ID. Необов'язковий атрибут valign обмежений значеннями з набору {top, middle, bottom, baseline}.

Комбінації DTD в визначеннях атрибутів  

Визначення атрибутів можуть також містити посилання на комбінації параметрів.

У цьому прикладі ми бачимо, що список визначень атрибутів для елемента LINK починається з комбінації параметрів "% attrs;".

  <! ELEMENT LINK - O EMPTY - посилання, незалежна від нього ->
 <! ATTLIST LINK
  % attrs;
  - % Coreattrs , % i18n , % events -
  charset % Charset;
  #IMPLIED - Кодування пов'язаного документа -
  href % URI;
  #IMPLIED - URI для пов'язаного документа -
  hreflang % LanguageCode;
  #IMPLIED - Код мови -
  type % ContentType;
  #IMPLIED - Рекомендований тип вмісту -
  rel % LinkTypes;
  #IMPLIED - Типи посилань для переходу вперед -
  rev % LinkTypes;
  #IMPLIED - Типи посилань для переходу назад -
  media % MediaDesc;
  #IMPLIED - Для генерації на цьому пристрої -
  >

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

Комбінація параметрів "% attrs;" визначена в такий спосіб:

  <! ENTITY% attrs " % coreattrs; % i18n; % events; ">

Комбінація "% coreattrs;" у визначенні "% attrs;" розгортається таким чином:

  <! ENTITY% coreattrs
  " Id ID #IMPLIED - унікальний ІД в межах документа -
  class CDATA #IMPLIED - список класів, розділених пробілами -
  style % StyleSheet;
  #IMPLIED - Інформація про стилі -
  title % Text;
  #IMPLIED - Рекомендований заголовок / поширення - "
  >

Комбінація параметрів "% attrs;" визначена для зручності, оскільки ці атрибути визначені для більшості типів елементів HTML.

Таким же чином DTD визначає комбінацію параметрів "% URI;" як розширення рядка "CDATA".

  <! ENTITY% URI " CDATA "
  - Універсальний ідентифікатор ресурсів, см. [URI]

  ->

Як показано в цьому прикладі, комбінація параметрів "% URI;" надає читачам DTD більше інформації, ніж для типу даних, очікуваного для цього атрибута. Схожі entities визначені для "% Color;", "% Charset;", "% Length;", "% Pixels;" і т.д.

Логічні атрибути  

Деякі атрибути грають роль логічних змінних (наприклад, атрибут selected для елемента OPTION ). Їх наявність в початковому тегу елемента має на увазі, що значенням атрибута є "істина". Их отсутствие означает "ложь".

Логические атрибуты могут принимать только одно значение: собственно имя атрибута (например, selected="selected" ).

В этом примере атрибут selected определяется как булев.

selected (selected) #IMPLIED -- уменьшенный интервал между элементами --

Для атрибута устанавливается значение "истина", поскольку он находится в начальном тэге элемента:

  <OPTION selected = "selected">
...contents...
<OPTION>

В HTML логические атрибуты могут быть в минимизированной форме -- в начальном тэге элемента находится только значение атрибута. Таким образом, selected можно установить, написав:

<OPTION selected>

вместо:

 <OPTION selected = "selected">

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