3.3. Декларация DOCTYPE

В начале каждого создаваемого вами документа должно указываться название DTD, которому он соответствует. Это нужно для того, чтобы лексические анализаторы SGML могли узнать DTD и определить, соответствует ли документ этому DTD.

Эта информация обычно выражается в одной строке, в виде декларации DOCTYPE.

Типичная декларация того, что документ написан в соответствии с версией 4.0 HTML DTD выглядит таким образом;

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN">

В этой строки содержится несколько различных компонент.

<!

Индикатор, который указывает, что это декларация SGML. Эта строка декларирует тип документа.

DOCTYPE

Показывает, что это декларация типа документа SGML.

html

Именует первый элемент, который появится в документе.

PUBLIC "-//W3C//DTD HTML 4.0//EN"

Указывает Формальный Публичный Идентификатор (Formal Public Identifier - FPI) для DTD, которому соответствует этот документ. Ваш лексический анализатор SGML будет использовать его для поиска нужного DTD при обработке этого документа.

PUBLIC не является частью FPI, но указывает процессору SGML, как найти DTD, на который ссылается FPI. Другие способы указания анализатору SGML, как найти DTD, будут показаны позже.

>

Возвращение к документу.

3.3.1. Идентификаторы FPI

Замечание: Вам не нужно это знать, но это полезная информация, которая может помочь вам решить проблемы, когда вам процессор SGML не может найти используемый вами DTD.

FPI должны следовать определенному синтаксису. Этот синтаксис имеет следующий вид;

"Владелец//Ключевое слово Описание//Язык"
Владелец

Указывает владельца FPI.

Если эта строка начинается с ''ISO'', то этим FPI владеет ISO. К примеру, FPI "ISO 8879:1986//ENTITIES Greek Symbols//EN" задает ISO 8879:1986 как владельца набора определений для греческих символов. ISO 8879:1986 является номером ISO для стандарта SGML.

В противном случае эта строка будет выглядеть либо как -//Владелец или +//Владелец (отметьте единственное отличие в начальном + или -).

Если строка начинается с -, то информация о владельце не является зарегистрированной, со знаком + она идентифицируется как зарегистрированная.

ISO 9070:1991 определяет, как генерируются регистрированные имена; они могут порождаться от номера публикации ISO, кода ISBN или кода организации, назначаемого в соответствии с ISO 6523. Кроме того, для назначения регистрированных имен может быть созван регистрационный комитет. Совет ISO передал это в American National Standards Institute (ANSI).

Так как Проект FreeBSD не был зарегистрирован, то строка владельца имеет вид -//FreeBSD. И как вы можете видеть, W3C еще не является регистрированным владельцем.

Ключевое слово

Имеется несколько ключевых слов, которые указывают на тип информации в файле. Некоторыми из наиболее часто употребляемых ключевых слов являются DTD, ELEMENT, ENTITIES и TEXT. DTD используется только для файлов DTD, ELEMENT обычно используется для фрагментов DTD, которые содержат только объекты или декларации элемента. TEXT используется для содержимого SGML (текст и метки).

Описание

Любое описание, которым вы захотите сопроводить содержимое этого файла. Сюда можно включить номер версии или любой краткий текст, который имеет смысл для вас и уникален для системы SGML.

Язык

Это двухсимвольный код ISO, который идентифицирует естественный язык файла. EN применяется для английского языка.

3.3.1.1. Файлы catalog

Если вы используете указанный выше синтаксис и пытаетесь обработать этот документ при помощи процессора SGML, то процессор каким-то образом преобразовать FPI в имя файла вашего компьютера, в котором находится DTD.

Для этого он может использовать файл каталога. Файл каталога (обычно называемый catalog) состоит из строк, ставящих FPI в соответствие с именами файлов. К примеру, пусть в файле каталога содержится строка;

PUBLIC "-//W3C//DTD HTML 4.0//EN"             "4.0/strict.dtd"

Процессор SGML определит, что нужно взять DTD из файла strict.dtd в подкаталоге 4.0 того каталога, в котором находится файл catalog, содержащий эту строку.

Посмотрите на содержимое файла /usr/local/share/sgml/html/catalog. Это файл каталога, для HTML DTD, которые были установлены как часть порта textproc/docproj.

3.3.1.2. SGML_CATALOG_FILES

Для того, чтобы он нашел файл catalog, вашему процессору SGML нужно указать, где искать. Во многом для этого служат параметры командной строки для указания пути к одному или более каталогам.

Вдобавок вы можете задать переменную SGML_CATALOG_FILES для указания на файлы. Эта переменная окружения должна состоять из списка файлов каталогов, разделенных двоеточиями (включая их полные маршруты).

Как правило, вам будет нужно включить следующие файлы;

  • /usr/local/share/sgml/docbook/4.1/catalog

  • /usr/local/share/sgml/html/catalog

  • /usr/local/share/sgml/iso8879/catalog

  • /usr/local/share/sgml/jade/catalog

У вас это уже должно быть сделано.

3.3.2. Альтернативы FPI

Вместо использования PFI для указания DTD, которому соответствует документ (и указания таким образом файла системы, в котором находится DTD), вы можете задать имя файла явным образом.

Применяемый при этом синтаксис несколько отличается:

<!DOCTYPE html SYSTEM "/path/to/file.dtd">

Ключевое слово SYSTEM указывает, что процессор SGML должен найти DTD способом, зависящим от системы. Обычно (но не всегда) это означает, что DTD будет задано как имя файла.

Использование FPI предпочтительно по соображениям переносимости. Вам не нужно будет передавать копию DTD вместе с вашим документом, а если же вы используете механизм SYSTEM, то всем потребуется размещать DTD в том же самом месте.

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.