SGML 和 DocBook 没有受到过多的开放源码写作工具的影响。最常用的工具集是带有合适编辑模式的 Emacs/Xemacs 编辑器。在一些系统上这些工具在典型的完全安装时是一并安装的。
PSGML 是最常用和最强大的编辑 SGML 文档的工具。如果正确的做了配置,它将允许你使用 Emacs 插入标签和检查标记一致性。你也可以把它用于 HTML。看看 PSGML 站点 获取下载、安装指导、详细文档。
关于 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) ))
PostgreSQL 的发布版包含一个已经分析好了的 DTD 定义文件 reference.ced 。当使用 PSGML 时,有一个让自己在这些分离的文件上干活方便些的办法:就是你在编辑它们的时候插入合适的 DOCTYPE 定义。例如,如果你在这个源文件上干活,这是一个附录章节,因此你将通过把第一行标记成像下面的样子从而把这个文档声明为一个 DocBook 文档的"附录":
<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
这意味着任何或所有读取 SGML 的软件将能正确读取这份文件,并且我可以用 nsgmls -s docguide.sgml 校验此文档(不过你在制作整个文档集的时候要把这行拿走)。
GNU Emacs 带有不同的 SGML 模式,不过并不像 PSGML 那么强大,但是它比较少让人混淆的东西而且比较小巧。同样,它也提供语法高亮(字体锁),也是很有帮助的。
Norm Walsh 提供一个用于 DocBook 的 major mode ,也有字体锁和一些可以减少击键的特性。