- 浏览: 462240 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (178)
- linux (25)
- java (31)
- eclipse (3)
- web (19)
- database (11)
- framework (7)
- spring (1)
- jbpm (1)
- error and solution (3)
- struts2 (3)
- hibernate (12)
- other (15)
- ubuntu (2)
- build tools (1)
- 服务器配置 (3)
- extjs (2)
- ssl相关 (1)
- 项目管理 (0)
- 软件测试 (0)
- java maven2 (2)
- Windows Server 2003 (1)
- glassfish (1)
- build tools,maven (2)
- Heritrix3 (1)
最新评论
-
lbs1026:
您好,卸载后怎么再装上去呢?
java中dll文件的加载和卸载。 -
mp19901204:
请教下,能通过js播放指定的影片吗。不刷新网页,用js直接调用 ...
Flv播放器 Vcastr3.0的用法参考 -
wiflish:
hanmiao 写道试了第壹個,好用。
使maven2在下载依赖包的同时下载其源代码包。 -
hanmiao:
试了第壹個,好用。
使maven2在下载依赖包的同时下载其源代码包。 -
chuanwang66:
请问Heritrix 3.1.0 你是怎么配置进Eclipse ...
Heritrix3.1.0RC1使用Cookie不能自动登录问题的一个解决办法
原文链接:http://blog.csdn.net/mickeyrat/archive/2005/02/08/284270.aspx
制作Docbook文档
1. 制作Docbook文档需要了解的知识:
1) XML - 这是最基本的,如果这个都不懂的话,最好先找本入门级的书看看;
2) DTD - 有助于你理解Docbook的结构;
3) XSL - 有助于定制自己的Docbook;
4) XSL-FO - 最好了解一点,有助于更好的定制自己的PDF输出。
2. 制作Docbook文档的最简单的过程包括以下的步骤:
1) 编辑XML文件;
2) 对XML文件进行处理,生成HTML或者PDF文档。
2.1. 编辑XML文件
如果使用纯文本编辑器来完成这项工作,我敢打赌一天之后你就做不下去了,直接编辑XML可是一件苦差事。使用类似XMLSPY这样的工具,提供自动填充功能,并且随时可以进行有效性检查,不容易出错,可以让工作轻松不少。
Docbook文档分两类:书(book)和文章(article)。article就是一般的文章,不包含章(chapter),只有节 (section)。book比较完整,可以包含前言(preface),部分(part),章(chapter),文章(article)等等。以上描 述的都是Docbook DTD定义的元素,这里不可能给出详细的说明,具体每个元素的结构参见Docbook DTD。
让我们先来看一个book类型文档的典型定义:
list 1. 典型的book类型文档
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<book>
<bookinfo>
<title>My Book</title>
<author>
<firstname>My First Name</firstname>
<surname>My Last Name</surname>
</author>
<publisher>
<publishername>CSDN</publishername>
</publisher>
<isbn>ISBN#</isbn>
<copyright>
<year>2005</year>
</copyright>
</bookinfo>
<part>
<title>My Part</title>
<chapter>
<title>My Chapter</title>
<sect1>
<title>My Section1</title>
<para>This is a demo of a book.</para>
</sect1>
</chapter>
</part>
</book>
该文档声明使用的DTD为http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd, 所有的内容都包含在book元素中,bookinfo元素包含书名(title)、作者(author)、出版社(publisher)、书号 (isbn)和版权(copyright)。接着part元素包含的内容是该书的一个部分,下面有一章,接着有一节(sect1),当然都有各自的标题。
怎么样,各个元素的含义是不是很显而易见,根据元素的名称,你就能知道自己的内容该包含在什么元素里面。
在上面的例子里面,有些元素不是必须的。譬如bookinfo,可以没有或者有一个,看Docbook DTD就可以知道。
下面我以article类型的文档为例子,说明Docbook文档的制作过程。
首先是XML声明,说明文档的一些基本信息:
<?xml version="1.0" encoding="UTF-8"?>
紧接着是文档的DTD声明,说明文档使用的DTD还有根元素。典型的docbook文档的DTD声明如下:
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
这个声明表明,文档的根元素是<article>,使用外部DTD,该DTD用一个公共标识符"-//OASIS//DTD DocBook XML V4.2//EN"标识,该DTD位于网络的某处。标识符必须是全球唯一的,其形式为:
prefix//owner-identifier//text-class text-description//language//display-version
第一个prefix为“+/-”,“+”表示是已注册的标识,“-”则相反。其他各部分的含义自己对照。
接着就可以添加内容了。首先是根元素:
<article>
</article>
article必须有一个标题:
<article>
<title>My Article</title>
</article>
标题之后必须有内容,不可能有无内容的文章:
<article>
<title>My Article</title>
<sect1>
</sect1>
</article>
这里我们添加一个小节,“sect1”是小节的最顶层元素,其编排方式与MS Word的“heading 1”类似。
与article相同,sect1也必须有标题:
<article>
<title>My Article</title>
<sect1>
<title>My Section</title>
</sect1>
</article>
sect1也不允许无内容:
<article>
<title>My Article</title>
<sect1>
<title>My Section</title>
<para>This is my first article.</para>
</sect1>
</article>
正文的内容一般用<para>元素封装,para即段落(paragraph)的意思。
现在就有了一个最简单的Docbook文档。list 2是完整的代码。
list 2. 一个简单的article文档
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<article>
<title>My Article</title>
<sect1>
<title>My Section</title>
<para>This is my first article.</para>
</sect1>
</article>
编辑完成之后,保存为myarticle.xml,接着就可以生成HTML或者PDF了。
2.2 生成HTML
关于如何安装配置工具,参见“安装配置Docbook”。
我使用cygwin下的xsltproc来生成HTML,在cygwin的shell中输入命令:
xsltproc --nonet --output myarticle.html c:/docbook-xsl-1.67.2/html/docbook.xsl myarticle.xml
--nonet表示我不希望从网络获取DTD,这样可以节省时间。
--output指定我希望输出的文件名,这里指定的是myarticle.html。
紧接着是用来转换XML文件的XSL样式单,需要注意,使用的是html目录下的XSL样式单。
最后是要处理的Docbook文档。
没有意外的话,现在你就可以用浏览器打开myarticle.html看看效果了。
2.3 生成PDF文件
下面使用FOP生成PDF文件。关于如何安装配置FOP,参见http://blog.csdn.net/mickeyrat/archive/2005/02/06/283471.aspx。
在控制台输入命令:
fop -xml myarticle.xml -xsl C:\docbook-xsl-1.67.2\fo\docbook.xsl myarticle.pdf
Linux的命令类似,注意docbook.xsl的路径。
-xml指定需要转换的docbook文档。
-xsl指定使用的样式单,注意,这里使用的fo目录下的样式单,这是专为转换XSL-FO开发的。
最后是输出文档的文件名。
在FOP处理过程中,会输出许多诸如
property - "background-position-horizontal" is not implemented yet.
的信息。不用理会,这是因为FOP还在开发中,许多XSL-FO的特性都不支持。这样的问题并不影响最终文档的生成。
快打开myarticle.pdf看看效果吧,是不是很专业的PDF文档?
是不是觉得制作docbook文档很简单呢?这么想可就错了,本文剩余的部分介绍制作Docbook文档的高级技巧。
3. 定制自己的XSL样式单
当你开始正式制作自己的docbook文档之后,你会发现生成的文档并不能完全满足你对格式的要求,譬如章节号、页码、字体等等。这一节就告诉你如何定制自己的XSL样式单,生成满足特定需求的文档。下面的内容会涉及XSL和XSL-FO。
有人可能会想通过修改Docbook DTD达到定制目的,但是这种方式是不建议采用的,因为修改Docbook DTD之后,你的文档就不再是Docbook文档。
因为Docbook把内容与样式完全分开,所以修改XSL样式单,就能够改变输出结果。
为了修改样式单,你需要有自己的定制层,也就是基于Docbook XSL样式单之上开发自己的样式单。千万不要直接修改Docbook XSL样式单,这样做有两个缺点:
1) 不易维护:你的修改可能会分散在几十个文件中,过几天,你就会忘记自己修改过的地方。
2) 不易升级:如果你想升级样式到新的版本,你不得不把你所做的所有修改合并到新的版本中,合并的过程中肯定要处理大量的冲突,并且容易出错。
我想你应该知道<xsl:include>与<xsl:import>的区别:使用<xsl: include>引入的元素,如果有重复定义的,第一次出现的有效;使用<xsl:import>引入的元素,最后一个有效。定制层其 实是依赖于XSL这样的一个特性,使用<xsl:import>引入Docbook XSL样式单的起点文件,然后添加自己的修改。list 3给出一个定制层文件的框架。
list 3 customization.xsl
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="html/docbook.xsl"/>
...
modifications
...
</xsl:stylesheet>
定制层是XSL文件,因此需要引入xsl的名字空间。在第三行,引入转换HTML的XSL样式单的起点文件docbook.xsl,如果是XSL-FO的定制层,起点文件在fo目录下。然后就可以添加自己的修改了。
定制分为两类,一类是修改样式单参数,一类是修改模板。
3.1 修改样式单参数
打开html/param.xsl或者fo/param.xsl,可以找到所有的样式单参数。看下面这个例子
<xsl:param name="section.autolabel" select="0"/>
参数的名字是“section.autolabel”,值为“0”。这个参数的作用是控制生成文档的时候是否对小节自动编号,譬如“1”,“1.1”等等。“0”表示关闭自动编号。你可以看一下前面生成的文档,是不是没有章节号?
要打开自动编号,只需要这样修改:
<xsl:param name="section.autolabel" select="1"/>
你不是直接在param.xsl里面改的吧?如果是的话,赶紧改回来!千万记得,所有的修改都写在前面生成的customization.xsl。现在重新生成HTML,
xsltproc --nonet --output myarticle.html c:/docbook-xsl-1.67.2/customization.xsl myarticle.xml
或生成PDF
fop -xml myarticle.xml -xsl C:\docbook-xsl-1.67.2\customization.xsl myarticle.pdf
注意,这个参数对HTML和XSL-FO都有效,但是你必须在customization.xsl中用<xsl:import>引入对应的起点文件,否则会报错。现在新的文档是不是出现章节号了?
再来一个。看你的PDF文档,肯定没有bookmark,因为在fo/param.xsl中,bookmark的功能被关闭了。在customization.xsl里添加:
<xsl:param name="fop.extensions" select="1"/>
这样FOP在处理的时候就会生成bookmark。注意这个参数的名字,“fop.extensions”,表示这个参数属于FOP的扩展,只对FOP有效。如果你使用PassiveTeX,那么需要设置“passivetex.extensions”。
再来一个复杂点的:
<xsl:param name="formal.title.placement">
figure after
example before
equation before
table before
procedure before
task before
</xsl:param>
这个参数作用于文章中的图、表等等元素的标题,控制标题的位置在前面(before)还是后面(after),param.xsl预定义的都是 “before”,这里把figure的标题放在图的后面。这个参数对HTML和XSL-FO都有效。在你的文档中添加<figure>元 素,重新生成文档,就可以看到效果。
3.2 修改模板
Docbook XSL提供很多的参数控制输出的效果。但是有时候,仅仅修改参数并不能满足所有的要求,这时,你就需要修改模板。
我们来看一个很现实的例子。XSL-FO定义了一类以“keep-”开头的属性,譬如“keep-with-next”,表示前面的内容与后面的内容必须在同一页,不能断开在两页上。但是除了table,
FOP目前不支持这样的属性。所以当文档比较长的时候,在FOP生成的PDF文档中,你会发现有某些小节的标题在一页的底部,而内容却在下一页,其他有标题的内容,譬如图,都会出现这样的情况。这当然是不合理的,可是无论你怎么添加“keep-”类的参数,都无济于事。
对于这样的情况,FOP的FAQ告诉你的就是,“对不起,我们还没有实现”,至于什么时候实现,“你别问,我也不知道”。
所以只能采取一个变通的方式。前面我说过,FOP对于table支持这样的属性,那么是否可以考虑把这样的内容放在table里面呢?当然可以,
FOP有一个“blind table”的概念,这样的表除了其中的内容是不可见的,正符合我们的要求。现在的问题就是,Docbook
XSL样式单生成的是通用的XSL-FO文件,不会把像<sect2>这种元素的内容放到“blind
table”里面。那就只剩一条路了(其实还有一条,用商业产品^_^,RenderX的XEP支持“keep-”类属性),修改样式单模板。list
4的代码把<sect2>的内容放到一个“blind table”里面。
list 4. blindtable.xsl
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
version="1.0">
<xsl:import href="docbook.xsl"/>
<xsl:template match="sect2">
<xsl:variable name="id">
<xsl:call-template name="object.id"/>
</xsl:variable>
<fo:table table-layout="fixed" width="100%">
<fo:table-column column-number="1"/>
<fo:table-body>
<fo:table-row keep-with-next="always">
<fo:table-cell id="{$id}" xsl:use-attribute-sets="section.level2.properties">
<xsl:call-template name="sect2.titlepage"/>
</fo:table-cell>
</fo:table-row>
<xsl:variable name="toc.params">
<xsl:call-template name="find.path.params">
<xsl:with-param name="table" select="normalize-space($generate.toc)"/>
</xsl:call-template>
<xsl:if test="contains($toc.params, 'toc') and $generate.section.toc.level >= 2">
<xsl:call-template name="section.toc"/>
<xsl:call-template name="section.toc.separator"/>
</xsl:if>
</xsl:variable>
<fo:table-row>
<fo:table-cell>
<xsl:apply-templates select="*[2]"/>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<xsl:apply-templates select="*[position() > 2]"/>
</xsl:template>
</xsl:stylesheet>
对于这段代码就不多做解释了,总的来说其作用就是覆盖了sections.xsl中定义的名为“sect2”的模板,在生成XSL-FO文件的时 候,把<sect2>的标题和内容分别放到一个单列表的两行。因为这里用到了fo名字空间,所以在开始要引入fo名字空间。
重新生成PDF文件:
fop -xml yourarticle.xml -xsl C:\docbook-xsl-1.67.2\blindtable.xsl yourarticle.pdf
你会发现所有<sect2>的内容没有标题与内容断开在两页上的情况了。
4. 总结
到此为止,你已经了解制作Docbook的完整过程:
1) 编辑XML文档;
2) 生成HTML/PDF;
3) 定制XSL样式单。
定制XSL样式单不能直接修改Docbook XSL样式单,需要创建一个新的XSL文件作为定制层。
XSL样式单定制有两类:
1) 修改XSL参数;
2) 修改XSL模板。
总之Docbook是十分强大的工具,可以用来制作非常专业漂亮的技术文档,甚至是其他文档。
参考文章:
DocBook XSL: The Complete Guide
发表评论
-
Windows Server 2003 忘记密码的一个解决办法。
2011-07-06 18:43 4486Windows Server 2003忘记Administra ... -
Redmine的windows服务安装方法
2010-07-15 16:51 3226Redmine的windows服务安装方法 Ruby提供一个 ... -
非常诡异的字:弢
2010-02-26 19:10 1064非常诡异的字: 弢 弢 【拼音】:[tāo] 【字义】 ... -
股票数据的获取方法
2009-02-21 10:40 6126股票数据的获取目前有 ... -
我的小窝
2006-05-10 10:48 838我的小窝 -
[原创]安装phpMyAdmin
2006-05-29 16:30 1025软件环境(windowsXP):Apache2.0.55 + ... -
[转]Log4j比较全面的配置
2006-07-18 16:17 817log4j.rootLogger=DEBUG,CO ... -
[转]安装配置Docbook工具
2006-08-22 17:12 2492[转]安装配置Docbook工具原文链接:http://blo ... -
笔记本购机测试软件推荐
2007-01-22 16:54 960主机篇:http://www.ccw.com.cn/noteb ... -
取色小工具
2007-02-09 10:22 1483简单小巧的取色工具,w ... -
IE开发工具插件
2007-02-09 10:39 1657IEDevToolBar,微软提供的免费网页开发IE插件。主要 ... -
【原创】JIRA安装(windows)
2007-04-01 21:49 1966JIRA安装 1、环境:Windows XP,tomcat5. ... -
什么是康宝光驱
2006-10-16 16:06 2246COMBO在英文里的意思是“结合物”,而康宝(COMBO)驱动 ... -
在换与不换之间的徘徊
2006-10-10 11:21 1423决定换上新ID..
相关推荐
关于DocBook文档的法律声明,提供了复制、分发和/或修改文档的权限,这些都基于GNU自由文档许可证(GNU Free Documentation License),版本1.1或任何后续版本。使用本书进行教育、商业或销售宣传用途都是被允许的。...
《docbook自定义xsl》 在IT领域,DocBook是一种广泛应用的XML文档格式,用于编写技术手册、书籍、教程等技术文档。...通过不断学习和实践,我们可以更好地掌握这一工具,提高文档制作的效率和质量。
3. **测试字体显示**:创建一个包含中文文本的简单DocBook文档,然后使用XSLT处理器将其转换为PDF,检查中文字体是否正确显示。 #### 三、测试文件分析 根据提供的文件内容,可以总结出以下关键信息: 1. **文档...
2. **可移植性**: 由于基于XML标准,DocBook文档可以轻松地转换为多种格式,如PDF、HTML、EPUB等。 3. **灵活性**: 用户可以通过自定义样式表来控制文档的最终外观,满足不同的出版需求。 4. **扩展性**: 可以通过...
### Docbook-Ant-Tools-Guide 知识点解析 #### 一、概述 **Docbook-Ant-Tools** 是一套旨在简化从 DocBook XML 源码...通过本文介绍的基础知识和详细配置方法,用户可以快速掌握如何利用该工具集来提升文档制作效率。
"docbook-utils" 是一个基于 Raku 语言的工具集,专门用于处理 DocBook 文档格式。DocBook 是一种广泛使用的 XML 架构...熟悉 docbook-utils 的使用,不仅可以提升文档制作的效率,还能保证输出文档的专业性和一致性。
FOP(Formatting Objects Processor)是Apache软件基金会的XSL-FO处理器,用于将XSL-FO(XSL格式化对象)文档转换成各种输出格式,如...正确配置和使用FOP,结合DocBook的强大功能,可以实现高效、专业的技术文档制作。
LaTeX是一种基于TeX的排版系统,被誉为科学和技术文档制作的最佳选择,因为它能够生成高质量的公式、图表和复杂的页面布局。 Perl是一种功能强大的脚本语言,因其灵活和强大的文本处理能力而被广泛用于各种任务,...
总的来说,Asciidoctor是Ruby生态系统中一个强大的文档处理工具,它提供了简单易用的文本格式和丰富的输出选项,无论你是技术作家还是开发者,都可以借助它提高文档制作的效率和质量。通过掌握Asciidoctor,你可以...
### 使用EPUB制作数字图书 #### 一、EPUB简介 EPUB是一种基于XML的开放式电子图书格式,由国际数字出版论坛(International Digital Publishing Forum, IDPF)制定,并于2007年10月正式采纳。EPUB以其灵活性和跨...
DocBook是一种XML格式,广泛用于技术文档的编写,而Rdoc则是Ruby项目的标准文档生成工具。Deplate能够将Wiki标记转换为这两种格式,进一步扩大了其适用范围。 8. **Viki(维基)风格**: Deplate的灵感来源于维基...
从给定的文件信息来看,这是一份关于FreeBSD文档项目的详细介绍,主要涵盖了FreeBSD的版权信息、文档获取途径以及文档格式的制作和分发规则。以下是对这些知识点的详细解读: ### FreeBSD文档项目 #### 版权声明 ...
标题:"制作Help菜单:系统指南" 在现代软件开发中,创建易于理解和使用的Help菜单对于提升用户体验至关重要。Help菜单不仅仅是为了提供技术文档或教程,它还是一个直观的导航工具,帮助用户快速找到所需的信息和...
Docbook是一种XML文档格式,用于制作技术文档,它能够帮助文档制作者将内容转换为多种格式,如HTML、PDF、CHM等,以适应不同平台的阅读需求。 以上内容只是对文档《USB基础知识概论》的简要摘录和总结,详细的USB...
在IT行业中,生成高质量的文档是至关重要的,无论是开发者为了理解代码,还是团队成员之间进行协作,或者是对外提供API的说明...正确安装和配置后,`docflex-doclet`可以大大提高文档制作的效率,提升团队的协作体验。
文档还提到了生产文档的技术,如Maple和DocBook的使用,这些信息对于深入理解Maple用户手册的制作过程也是非常有价值的。 综上所述,Maple用户手册2019版本对Maple软件的功能和操作提供了详尽的介绍,是用户了解和...
DocBook则常用于XML文档的制作,适合技术手册和在线帮助系统;HTML适合网页发布,而“html-slides”则可以将文档转换为交互式的幻灯片,非常适合在线讲座或教学。 至于开源软件标签,这意味着deplate的源代码对公众...
嵌入式,Zend,Docbook文档,MySQL E. 基于Zend的,PHP,图像,HTML **答案:** B **解析:** PHP是一种基于Zend引擎的脚本语言,这意味着它是在Zend引擎的基础上实现的,这是一组用于解释和执行PHP代码的核心组件...