SGML 和 DocBook 没有受到过多的开放源码写作工具的影响。 最常用的工具集是带有合适编辑模式的 Emacs/Xemacs 编辑器。 在一些系统上 这些工具在典型的完全安装时是一并安装的。
PSGML 是最常用和最强大的编辑 SGML 文档的工具。 如果正确的做了配置,它将允许你使用 Emacs 插入标签和检查标记一致性。 你也可以把它用于 HTML。看看 PSGML web 站点 获取下载,安装指导,以及详细文档。
关于PSGML有一件比较重要的事情要注意: 它的作者假设你的主 SGML DTD 目录是 /usr/local/lib/sgml。 如果你象本文的例子那样放在 /usr/local/share/sgml, 你就得补偿这个问题,要么是设置 SGML_CATALOG_FILES 环境变量,要么是客户化你的 PSGML 安装(它的手册告诉你怎么做)。
把下面这几行放到你的 ~/.emacs 环境文件里(根据你的系统调整路径名):
; ********** for SGML mode (psgml) (setq sgml-omittag t) (setq sgml-shorttag t) (setq sgml-minimize-attributes nil) (setq sgml-always-quote-attributes t) (setq sgml-indent-step 1) (setq sgml-indent-data t) (setq sgml-parent-document nil) (setq sgml-default-dtd-file "./reference.ced") (setq sgml-exposed-tags nil) (setq sgml-catalog-files '("/usr/local/share/sgml/catalog")) (setq sgml-ecat-files nil) (autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t )
并且在同一个文件里增加一条记录,把 SGML 加入(现存的)自动模式别名的定义中 (auto-mode-alist):
(setq auto-mode-alist '(("\\.sgml$" . sgml-mode) ))
目前,每个 SGML 源文件在末尾都有下面的块:
<!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t sgml-parent-document:nil sgml-default-dtd-file:"./reference.ced" sgml-exposed-tags:nil sgml-local-catalogs:("/usr/lib/sgml/catalog") sgml-local-ecat-files:nil End: -->
这些东西会给你设置一些编辑模式参数 — 即使你没有设置你的 ~/.emacs 文件,不过有点糟糕的是, 因为你遵循的是上面的安装步骤,那么此目录路径将和你的位置不匹配。 因此你可能需要关闭本地变量:
(setq inhibit-local-variables t)
PostgreSQL 的发布版包含一个已经分析好了的 DTD 定义文件 reference.ced。 当使用 PSGML 时,有一个让自己在这些分离的文件上干活方便些的办法: 就是你在编辑它们的时候插入合适的 DOCTYPE 定义。 例如,如果你在这个源文件上干活, 这是一个附录章节,因此你将通过把第一行标记成象下面的样子从而把这个文档声明为一个 DocBook 文档的"附录"(appendix):
<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
这意味着任何或所有读取 SGML 的软件将能正确读取这份文件,并且我可以用 nsgmls -s docguide.sgml 校验此文档。 (不过你在制作整个文档集的时候要把这行拿走。)
GNU Emacs 带有不同的 SGML 模式, 不过并不象 PSGML 那么强大, 但是它比较少让人混淆的东西而且比较小巧。同样, 它也提供语法高亮(字体锁),也是很有帮助的。
Norm Walsh 提供一个用于 DocBook 的主模式, 也有字体锁和一些可以减少击键的特性。