SGML 和 DocBook 没有受到过多的开放源码写作工具的影响. 最常用的工具集是带有合适编辑模式的 Emacs/Xemacs 编辑器. 在一些系统上(例如.RedHat Linux) 这些工具在典型的完全安装时是一并安装的.
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 V3.1//EN">这意味着任何或所有读取 SGML 的软件将能正确读取这份文件,并且我可以用 nsgmls -s docguide.sgml 校验此文档. (不过你在制作整个文档集的时候要把这行拿走.)
GNU Emacs 带有不同的 SGML 模式, 不过并不象 PSGML 那么强大, 但是它比较少让人混淆的东西而且比较小巧.同样, 它也提供语法高亮(字体锁),也是很有帮助的.
Norm Walsh 提供一个 用于 DocBook 的主模式,也有字体锁和一些可以减少击键的特性.