Emacs для начинающих

       

Объявления SGML и DTD


PSGML не требует, обязательного включения в документ объявления SGML. Даже если такое SGML-объявление будет включено, PSGML проигнорирует его. PSGML использует Reference Concrete Syntax, но не поддерживает ограничения, накладываемые этим документом, на длину имени типа элемента.

PSGML должен знать, где обнаружить описания элементов DTD. Сообщить PSGML о местоположении описания элементов DTD можно тремя способами:

  • Через идентификатор SYSTEM в объявлении DOCTYPE.
  • Через идентификатор PUBLIC в объявлении DOCTYPE.
  • Через установку соответствующей переменной PSGML в Emacs.

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

Идентификатор SYSTEM - самый простой метод. Он вставляется в DOCTYPE определение, подобное приведенному ниже

<!DOCTYPE chapter SYSTEM "mybook.dtd">


ключевое слово SYSTEM сообщает программному обеспечению, что DTD находятся в файле "mybook.dtd". При использовании вышеупомянутого объявления в большинстве операционных систем программное обеспечение ищет данный файл в каталоге файла документа. В некоторых системах можно задать полное имя файла:

<!DOCTYPE chapter system "\dev\sgml\dtds\mybook.dtd">

Некоторое программное обеспечение SGML более придирчиво относится к имени пути, ожидая встретить в имени пути прямые слеши "/", характерные для UNIX, вместо обратных "\", даже если используется система DOS или Windows. У PSGML не возникает никаких проблем со стилем DOS.

Идентификатор PUBLIC популярен при использовании известных элементов DTD. Объявление DOCTYPE включает строку после слова PUBLIC, как, например, в случае с DocBook DTD:

<!DOCTYPE chapter PUBLIC "-//Davenport//DTD DocBook V3.0//EN">

Тем не менее приложение SGML (в данном случае PSGML) все же должно знать, где лежит копия этого "общественного" DTD. Наиболее общий способ сообщить приложению данную информацию - через файл каталога в формате, определенном SGML Open Technical Resolution 9401:1995. Каждый вход этого файла (обычно называемый каталогом(catalog)), начинающийся с ключевого слова PUBLIC, идентифицирует DTD и фактическое имя файла системной копии DTD, а, в случае необходимости, его местоположение. Ниже приводятся примеры входов для DocBook и DTD HTML:


PUBLIC "-//Davenport//DTD DocBook V3.0//EN" "DOCBOOK.DTD" PUBLIC "-//IETF//DTD HTML//EN" "\WEBSTUFF\HTML.DTD"
Обратите внимание, что вход DocBook не содержит никакого имени пути, указывая тем самым, что файл docbook.dtd находится в том же самом каталоге, что и файл catalog, в то время как вход HTML включает полное имя файла.

Таким образом, необходимо указать SGML и всем его приложениям местоположение файла catalog, чтобы они имели возможность использовать элементы DTD через объявления PUBLIC. Чтобы сообщить PSGML местоположение этого файла, нужно присвоить переменной SGML_CATALOG_FILES значение, содержащее полное имя файла catalog. Если файл имеет имя catalog и расположен в директории \dev\sgml\dtds\ (в синтаксисе DOS/Windows), то следующая команда сообщит PSGML, где найти файл catalog:

set SGML_CATALOG_FILES=\dev\sgml\dtds\catalog
ПРИМЕЧАНИЕ: При установке окружения переменной синтаксис UNIX зависит от используемой оболочки shell.

Учтите, что элемент DTD может содержать объявления для установок объекта (ENTITY), которые он сам же использует, и что нужно сообщить приложениям, где найти эти установки объекта. Например, элемент DTD включает следующее объявление объекта, чтобы позволить использование в документах набора символов ISO:

<!ENTITY % ISOchars PUBLIC "-//ENTITIES Public ISO Character Entity Declarations//EN" "iso-public">
Тогда в файле catalog нужно сделать вход, чтобы указать местоположение этого символьного объекта. В файл catalog нужно добавить следующую запись:

PUBLIC "-//ENTITIES Public ISO Character Entity Declarations//EN" "ISOPUB.ENT"

Содержание раздела