编辑DocBook XML文档

ArticleCategory: [Artikel Kategorie]

Applications

AuthorImage:[Bild des Autors]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Egon Willighagen

en to zh chiesa

AboutTheAuthor:[Über den Autor]

作者获得了Nijmegen大学化学硕士学位,并正在同一所大学进行分子表示方面的博士学位研究。爱好打篮球和java编程。

Abstract:[Zusammenfassung]

这篇文章介绍了工具Kate和它的XML插件在编辑DocBook XML文档方面的使用。

ArticleIllustration:[Titelbild des Artikels]

[Illustration]

ArticleBody:[Der eigentliche Artikel]

介绍

使用开放源码的工具进行XML编辑一直以来就是一个话题。人们需要一个编辑器有效的制作XML文档,并且直观的看到输出。一些编辑器已经可以做到这些,但是它们是私有版权的。在开放源码的世界里,有那么几个工具,它们不提供漂亮的图形预览,却可以用来有效的制作XML文档,并且能向你建议,在文档的特殊位置里那些元素(elements)是可供使用的。

带有DocBook辅助模式的Emacs就是其中的一个,很管用(参看以前的DocBook 文章). 这种特殊的模式能根据文档中已有的元素提供允许放置的子元素供你选择。同时也基于这个知识提供tab键自动完成功能(就象你在linux控制台模式下输入命令时一样,译者注)。

不过本文并不介绍Emacs,而是另一种DocBook XML编辑器Kate。

Kate

Kate 是KDE桌面环境下的一个编辑器。 它相当小巧,支持多个打开的文件,和语法高亮度(包括XML语法)。此外,去年Daniel Naber为它编写了一个XML插件,可以帮助你有效的书写XML文档。在 KDE 3.0中, Kate的这个XML插件已经被包含入KDE的附加包(kde-addone)中。如果KDE 3.0 的附加包还没有安装,那么就下载一个源代码包编译,方法如下:
./configure --prefix=/path/where/your/kde3/is/installed
make
sudo make install

当插件安装好后,需要通知Kate。方法是,选择"Settings"菜单的"Configure Kate"项,在"Plugins"管理器中把XML插件放入已装载插件列表中:

[Kate's plugin manager]

创建元DTD(Meta DTD)

Meta DTD 由Norman Walsh 的dtdparser生成, 可以从SourceForge.net下载.

我使用的是一个少许修改了的2.0 beta6版本。 比如:我把dtdparse程序第一行中的路径做了修改,以正确的表明我的perl安装路径。现在运行dtdparse程序,输出如下:

> ./dtdparse /path/to/docbookx.dtd
Public ID: unknown
System ID: /usr/share/sgml/docbook/dtd/xml/4.1.2/docbookx.dtd
SGML declaration: unknown, using defaults for xml and namecase
Loading dbnotnx.mod
Loading dbcentx.mod
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOamsa.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOamsb.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOamsc.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOamsn.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOamso.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOamsr.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISObox.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOcyr1.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOcyr2.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOdia.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOgrk1.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOgrk2.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOgrk3.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOgrk4.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOlat1.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOlat2.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOnum.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOpub.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOtech.ent
Loading dbpoolx.mod
Loading calstblx.dtd
Loading dbhierx.mod
Loading dbgenent.mod
Parse complete.
Writing docbookx.dtd.xml...
Done.

注意,有大量的实体(entity)此刻被载入。这个因素部分的导致了生成的元DTD有1.63M 大。不过使用象xsltproc这样的XSLT处理器,利用kde附加包(kde-addon)中simplify_dtd.xsl样式表,可以把它的大小减小到0.96M:

> xsltproc simplify_dtd.xsl docbookx.dtd.xml > docbook-xml-4.1.2.dtd.xml

然后就可以把生成的docbook-xml-4.1.2.dtd.xml拷贝到/path/to/kde3/share/apps/katexmltools/,注意将/path/to改成KDE3的实际安装路径。不过拷贝到你的home目录也可以,因为当你配置一个新的元DTD的时候,XML插件会询问具体的文件名(见下文)。

编辑

当开始编辑一个新的DocBook XML文档的时候,需要指派一个元DTD。方法是,选择"XML Plugin"菜单中的"Assign Meta DTD"项,这时候会弹出一个文件选择对话框,你可以选择你想使用的DTD。这里,我们选择的是DocBook XML 4.1.2 Meta DTD。新的对话框就会显示出来开始处理:

[Meta DTD parsing dialog]

在新的空白文档中,我们输入"<book>"。要使这个元素自动封闭(close the element),按F11即可。如果语法高亮度(syntax highlighting)特色还没有打开,你可以在"Document"菜单中选择"Highlight Mode"项,手动完成。XML 语法高亮度在"Markup"子菜单中。

如果我们忘记了元素book有那些属性,我们可以把光标移到开始标签(tag)中的word一词的结尾,按Ctrl+Return键。一个弹出窗口就会显示当前元素的可用属性列表:

[Inserting an attribute]

将光标放到引号之间(译者注:当插入属性xx后,会自动生成xx=""的属性格式,属性值在引号之间添加),按Ctrl+Return,还会提示你定义在DTD中的可供使用的属性值。不过属性id没有这种功能。

插入属性之后,我们得到如下DocBook XML代码:

<book id="SomeID">
</book>

放置光标到元素book的开始标签和结束标签之间,按Ctrl+Return,我们得到一个新的弹出列表, 这时显示的是book的所有可能的子元素.我们选择元素title作为例子:

[Inserting an attribute]

这个插件的一个不足是,它仅知道允许的子元素,而不知道子元素允许出现的顺序或次数。比如: DTD不允许title元素出现两次或两次以上,但是XML插件并不警告你这一点。由于插件也没有有效性验证 选项(至少目前还没有),所以很容易生成有错的文档。

这个插件的功能摘要如下表:

任务 命令
插入XML(元素 属性) Ctrl+Return
插入实体 F10
封闭标签(Close Tag) F11

KDE DocBook

KDE项目本身也使用DocBook作为他们的一种文档格式。因此这个XML插件默认带有KDE定制过的DocBook元DTD版本。如果你要书写KDE文档的话,首选当然就是使用这个元DTD,而不是DocBook XML 4.1.2的元DTD。

MathML and SVG

如今DocBook也支持MathML,以便在文档中加入数学算式。 一个混合后支持MathMl代码的DocBook DTD可以在 这个邮件消息中找到.

SVG(译者注:参见这里)的DTD不幸还没有写成一种可以包含进DocBook的方式。不过人们正在努力使之成为可能。

使用Kate的XML插件要求用dtdparse在组合的DTD的基础上制作一个新的元DTD(通过这种方式为其提供更多的功能支持,比如:MathML。译者注)。

Conclusion

Kate的XML插件可以在你编辑DocBook XML文档时起很大的帮助作用。它不完美,不过毕竟,它是最近才开发出来的。随着KDE3.0的出现,大量的人将会有机会使用它。

译者注

DTD的一些相关概念可以参考http://www.delfan.com/xml/study3.html