DocBook

hide
DocBook
hide
前言:我的 DocBook 之旅
hide
我为什么选择了 DocBook
hide
2001下半年,负责撰写防火墙API参考
leaf
一个需要持久维护的文档,Word文档很难
leaf
一个可以在 Web 上生成表现一致且美观的文档
hide
榜样的力量
hide
DocBook 推广受阻
hide
学习曲线陡峭,公司内部难以推广
leaf
技术人员的“专利”
hide
人员流动频繁,培训跟不上
leaf
不付费的培训难以维持 ;-)
hide
协同著作能力较差
hide
需要依靠版本控制系统建立协同著作功能
leaf
可能还需要建立邮件列表提供邮件通知功能
hide
需要建立可行的内部网站管理规范,以便通过网站对文档的展示
leaf
文档的自动编译
leaf
新文档的加入
leaf
文档的分类
leaf
Wiki 在协同著作上面具有先天的优势
hide
DocBook 生命力依旧
hide
出版领域上的优势
leaf
包括个人发表作品
leaf
DocBook 满足多种格式需要。主要是可打印版本的需求
leaf
和 Wiki 比起来,DocBook 撰写的文档可以下载,本地浏览
leaf
DocBook 的文档可署名、和分发,更有成就感
hide
我的文档写作模式
leaf
Wiki 是协同著作的首选,也可以作为日志系统
leaf
FreeMind 整理思路,针对大文档
leaf
DocBook,产品文档,个人著作出版
hide
什么是 DocBook
hide
What is Docbook
leaf
一种标识语言
leaf
技术文档撰写
leaf
独立机构维护
hide
技术上说,DocBook是一个XML DTD或者 SGML DTD
leaf
以 SGML DTD 描述,历史最久,XML DTD 则后来居上
hide
DocBook 文档描述语意,而非表现
leaf
表现交给样式表处理,因此文档具有相似的外观
leaf
文档撰写更加关注内容本身,而非表现
hide
与传统字处理软件的不同
leaf
倒是有点像字处理软件之前
leaf
作者提供手稿,编辑识别文档结构,录入,修饰格式,出版
hide
优点
leaf
Single Sourcing (单一源文件维护)
leaf
可版本控制
leaf
通用、开放的XML格式
hide
缺点
leaf
协同协作方面,不如 Wiki
leaf
格式排版,不如 latex
hide
样式表
leaf
要理解为工具而非类似 CSS 一样的语言
hide
SGML/XML 标记语言基础
hide
Why SGML?
leaf
SGML 用于 DocBook 有更长久的历史
leaf
SGML 的工具也比较完善,比如一直在用 DSSSL 进行 DocBook 到 rtf 的转换
leaf
XML 则比较新,但后来居上
hide
SGML/XML 共性
leaf
共性?您是说 SGML/XML 语言的交集么?这么说可就有点问题,因为 XML 是 SGML 子集
hide
structured, semantic markup
leaf
数据结构,与表现分开
leaf
而 HTML 则离开的太远
leaf
elements
leaf
attributes
hide
实体 (entities)
leaf
简单的说:类似于宏定义,用一个名称标识一块数据,引用该名称就引入该数据
hide
复杂因为有多种分类方法
hide
可以用在两种不同文件中
leaf
DTD 和 文档中
leaf
一般实体和参数实体
leaf
一般实体和参数实体
leaf
一般实体又分为内部一般实体和外部一般实体
hide
两种不同类型的实体
leaf
已析和未析
leaf
两种或三种不同的引用方法
hide
一般实体和外部实体
hide
一般实体
leaf
一般实体声明位于文档的序言中
leaf
一般实体的声明可以引用一般实体,除非出现循环调用
leaf
常用的一般实体的定义可以放在 DTD 中,实现声明一次,多处使用
hide
外部实体
hide
可以在一个文档中引用另外的文档
leaf
如: 将一篇文章分为几个部分,用外部实体方式定义、包含
leaf
如: 引用图片文件
hide
可析实体
leaf
外部数据是需要直接包含进来的文本数据,称为 parsed entities
hide
例如
leaf
声明:

<!ENTITY ch01 SYSTEM "ch01.sgm">

<!ENTITY ch02 SYSTEM "ch02.sgm">

<!ENTITY ch03 SYSTEM "ch03.sgm">

<!ENTITY ch04 SYSTEM "ch04.sgm">



引用

<book>

&ch01;

&ch02;

&ch03;

&ch04;

</book>
hide
非析实体
leaf
外部数据是一个图片,则称为 unparsed entities
hide
例如
leaf
声明:

<!ENTITY tree SYSTEM "tree.eps" NDATA EPS>

引用:

<graphic entityref="tree"></graphic>
hide
字符实体
hide
特殊字符
hide
<, >, &
leaf
会被误认为元素或者实体
leaf
因此需要
leaf
其它字符,如非打印字符,Unicode 字符,中文等
hide
SGML
leaf
特殊字符由第三方实体分类文件定义,也称数据实体
hide
xml
hide
XML 可以用形如 &#xhhhh; 的数字字符对照表示 Unicode 字符
leaf
而 SGML 则必须进行定义
hide
参数实体
leaf
仅出现于 DTD 当中
hide
SGML 还可以出现于文档当中的标记块中
leaf
<![keyword[ and end with ]]>
hide
常见的标记块
leaf
INCLUDE
Arrow Link
leaf
IGNORE
Arrow Link
leaf
CDATA
hide
以 % 开始而非 & 符号
hide
示例
leaf
参数实体定义

<!ENTITY % draft "IGNORE">

引用参数实体,实现对文本块的控制

<![%draft;[

<para>

This paragraph only appears in the draft version.

</para>

]]>
leaf
参数实体定义

<!ENTITY % draft "INCLUDE">

引用参数实体,实现对文本块的控制

<![%draft;[

<para>

This paragraph only appears in the draft version.

</para>

]]>
leaf
注释
leaf
处理指令
leaf
好形与有效性
hide
SGML 的特征
hide
文档结构
hide
序言
leaf
SGML 文档必须有一个序言
hide
SGML Declaration (可选)
leaf
一个可选的 SGML Declaration(SGML声明)
leaf
但一般和 DTD 一起存放在外部的文件中,命名为“docbook.dcl”;
leaf
在 catalog 文件中:

SGMLDECL "dtd/4.2/docbook.dcl"
hide
Document Type Declaration (必选)
hide
例如:
leaf
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
leaf
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [

<!ENTITY nwalsh "Norman Walsh">

<!ENTITY chap1 SYSTEM "chap1.sgm">

<!ENTITY chap2 SYSTEM "chap2.sgm">

]>
hide
声明根元素是什么
leaf
book
hide
声明使用的 DTD
hide
内部子集
leaf
<!ENTITY nwalsh "Norman Walsh">

<!ENTITY chap1 SYSTEM "chap1.sgm">

<!ENTITY chap2 SYSTEM "chap2.sgm">
hide
外部子集
leaf
例如: PUBLIC "-//OASIS//DTD DocBook V3.1//EN"
hide
如何引用外部子集?

public/system 标志符

catalog 文件
leaf
可以用 Public 或者 SYSTEM 标志符
hide
SGML 多用 PUBLIC 标志符,因为有更好的移植性
leaf
XML 降低了 Public 标志符地位。

XML 必须有 System 标志符,而不必有 Public 标志符
hide
实际上 Public 标志符依赖 Catalog 文件
Arrow Link
leaf
使用外部的 Catalog 文件,建立 Public 标志符到本地的文件映射
hide
SYSTEM 标志符格式不限
leaf
在 SGML 中通常是直接指向本地的文件名, 因在移植上的问题,一般多用 Public 标志符
leaf
如: /usr/local/sgml/docbook/3.1/docbook.dtd
leaf
内部子集的声明优先于外部子集
hide
根元素
leaf
根元素紧接着序言部分(当然注释、处理指令(processing instructions)除外)
hide
与 XML 兼容性问题
hide
大小写问题
leaf
SGML中 元素、属性大小写不敏感
leaf
但是,实体名称大小写敏感
leaf
为向 XML 移植方便,请都用小写字母
hide
属性是否用引号的问题
leaf
除非属性值包含空格,否则可以不用引号将属性值括起来;
leaf
XML必须用引号将属性值扩起来
hide
如何将文章分解成几块

(利用外部实体)
leaf
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [

<!ENTITY chap1 SYSTEM "chap1.sgm">

<!ENTITY chap2 SYSTEM "chap2.sgm">

<!ENTITY chap3 SYSTEM "chap3.sgm">

<!ENTITY appa SYSTEM "appa.sgm">

<!ENTITY appb SYSTEM "appb.sgm">

]>

<book><title>My First Book</title>

&chap1;

&chap2;

&chap3;

&appa;

&appb;

</book>
hide
<chapter id="ch1"><title>My First Chapter</title>

<para>My first paragraph.</para>

...
leaf
注意不要在该文档文件头加入 DTD!
hide
XML 的特征
hide
文档结构
hide
序言
hide
XML Declaration (可选)
leaf
<?xml version="1.0" standalone="no"?>
leaf
如果没有 XML Declaration,则版本为1.0,编码为 utf-8
hide
Document Type Declaration (可选)
leaf
严格的说,XML 并不需要一个 DTD
hide
例如:
leaf
<!DOCTYPE book PUBLIC "-//Norman Walsh//DTD DocBk XML V3.1.4//EN"

"http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd">
hide
声明根元素是什么
leaf
如: book
hide
声明使用的 DTD
hide
内部子集
leaf
<!ENTITY nwalsh "Norman Walsh">

<!ENTITY chap1 SYSTEM "chap1.sgm">

<!ENTITY chap2 SYSTEM "chap2.sgm">
hide
如何引用外部子集?

public/system 标志符

catalog 文件
leaf
例如: PUBLIC "-//OASIS//DTD DocBook V3.1//EN"
hide
如何引用外部子集?
hide
SYSTEM 标志符(必选)
leaf
降低了 Public 标志符的作用
leaf
SYSTEM 标志符在 XML 中必须是 URI 格式
leaf
可以是 URL
leaf
也可以是本地文件: file:///usr/local/sgml/docbook/3.1/docbook.dtd
leaf
PUBLIC 标志符(可选)
leaf
内部子集的声明优先于外部子集
hide
根元素
hide
根元素紧接着序言部分
leaf
当然注释、处理指令(processing instructions)除外
hide
其它
hide
XML所有的标记大小写敏感
leaf
DocBook 的元素、属性、实体最好都用小写
leaf
所有属性的值无论有空格与否,都要用引号括起来
leaf
空元素要如下写法:<br/>
hide
处理指令格式: <?pitarget data?>
leaf
而 SGML 的处理指令没有最后一个问号,形如:<?pitarget data>
hide
Catalog 文件
leaf
The catalog file format was defined in 1994 by SGML Open (now OASIS). The formal specification is contained in OASIS Technical Resolution 9401:1997.
hide
优点
leaf
增加了可移植性,因为不同机器的 DTD, Entities, DSSSL/XSL 可以存放于不同位置;
leaf
避免了对带宽占用。XML 格式的 DocBook,SYSTEMID 格式为 URI,可以直接到网络上抓取,通过 catalog 建立本地映射,提高加载速度,以及减小对带宽占用
leaf
可以通过 SYSTEM sysid1 sysid2 建立本地文件映射,可以写出可移植的 Makefile
leaf
方便 DTD、样式表升级
hide
SGML 格式的 Catalog 文件
hide
语法
hide
由一系列 Ket/Value 对组成
leaf
如: PUBLIC, SYSTEM, SGMLDECL, DTDDECL, CATALOG, OVERRIDE, DELEGATE, and DOCTYPE.
hide
SGMLDECL 定义 SGML 声明
hide
SGMLDECL sysid
leaf
定义 SGML Declaration。很多工具具有默认的 SGML Declare
leaf
SGMLDECL "docbook/3.1/docbook.dcl"
hide
对不同文档设置不同 SGMLDecl
hide
DTDDECL pubid sysid
leaf
如果一个文档的 DocType 符合 pubid, 则使用 sysid 作为 SGMLDecl
hide
如: 在一个 catalog 文件中既定义 DTD 的

声明文件,又定义XML的声明文件
leaf
SGMLDECL "dtd/docbook-4.5/docbook.dcl"

DTDDECL "-//OASIS//DTD DocBook XML V4.5CR1//EN" "dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl"

DTDDECL "-//OASIS//DTD DocBook XML V4.2//EN" "dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl"

DTDDECL "-//OASIS//DTD DocBook XML V3.1//EN" "dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl"
hide
PUBLIC/SYSTEM 定位 DTD 位置
hide
PUBLIC pubid sysid
leaf
<html>PUBLIC 关键字用于 public identifiers 到 system identifiers 的映射:

<div><blockquote><i>

PUBLIC "-//OASIS//DTD DocBook V3.1//EN" "docbook/3.1/docbook.dtd"

</i></blockquote></div>



hide
SYSTEM sysid1 sysid2
leaf
<html>SYSTEM 关键字用于 system identifiers 到 system identifiers 的映射:

<div><blockquote><i>

SYSTEM "http://nwalsh.com/docbook/xml/1.3/db3xml.dtd"<br>

<blockquote><i>

"docbook/xml/1.3/db3xml.dtd"

</blockquote></i>

</i></blockquote></div>
hide
OVERRIDE bool
leaf
默认 System 标志符优先 于 Public 标志符
leaf
OVERRIDE YES,则Public 标志符优先
hide
DOCTYPE name sysid
leaf
如: DOCTYPE BOOK n:/share/sgml/docbook/3.1/docbook.dtd
leaf
定义缺省的 Doctype, 当文档没有指定 public/system 标识,或者没有定义DocType 时
leaf
CATALOG 实现 catalog 文件的级联
hide
其它
hide
DELEGATE 实现条件 catalog 级联
leaf
如: DELEGATE "-//OASIS" "/usr/sgml/oasis/catalog"
leaf
引用到 "-//OASIS" 后,采取读取相应的 catalog 文件
hide
ENTITY name sysid
leaf
实体
hide
ENTITY %name sysid
leaf
参数实体
hide
示例
leaf
-- Comments are delimited by pairs of double-hyphens,

as in SGML and XML comments. --



OVERRIDE YES



SGMLDECL "n:/share/sgml/docbook/3.1/docbook.dcl"



DOCTYPE BOOK n:/share/sgml/docbook/3.1/docbook.dtd



PUBLIC "-//OASIS//DTD DocBook V3.1//EN"

n:/share/sgml/docbook/3.1/docbook.dtd



SYSTEM "http://nwalsh.com/docbook/xml/1.3/db3xml.dtd"

n:/share/sgml/Norman_Walsh/db3xml/db3xml.dtd
hide
工具
leaf
openjade, opensp 可以利用该格式的 catalog 文件
leaf
可以在 openjade, opensp 等工具中用命令行 -c catalogfile 指定位置
leaf
也可以通过环境变量 SGML_CATALOG_FILES 指定Catalog 文件,多个catalog文件可以用冒号分隔
hide
XML格式的 Catalog 文件
hide
语法
hide
public/system 定位 DTD 位置
leaf
<?xml version="1.0"?>

<!DOCTYPE catalog

PUBLIC "-//OASIS/DTD Entity Resolution XML Catalog V1.0//EN"

"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">

<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">

<group prefer="public" xml:base="file:///usr/share/xml/" >



<public

publicId="-//OASIS//DTD DocBook XML V4.4//EN"

uri="docbook44/docbookx.dtd"/>



<system

systemId="http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"

uri="docbook44/docbookx.dtd"/>



<system

systemId="docbook4.4.dtd"

uri="docbook44/docbookx.dtd"/>

</group>

</catalog>
hide
uri 定位 XSL 样式表位置

(本地到本地)
leaf
<?xml version="1.0"?>

<!DOCTYPE catalog

PUBLIC "-//OASIS/DTD Entity Resolution XML Catalog V1.0//EN"

"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">



<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">

<uri

name="docbook.xsl"

uri="file:///usr/share/xml/docbook-xsl-1.68.1/html/docbook.xsl"/>

</catalog>
hide
uri 将 web 地址对应本地文件

(URL 到本地)
leaf
<?xml version="1.0"?>

<!DOCTYPE catalog

PUBLIC "-//OASIS/DTD Entity Resolution XML Catalog V1.0//EN"

"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">



<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">



<system

systemId="http://www.oasis-open.org/docbook/xml/4.4/"

uri="file:///usr/share/xml/docbook44/" />

<uri

name="http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl"

uri="file:///usr/share/xml/docbook-xsl-1.68.1/html/docbook.xsl" />

<uri

name="http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl"

uri="file:///usr/share/xml/docbook-xsl-1.68.1/html/chunk.xsl" />

</catalog>
hide
rewriteSystem 建立重写规则,

简化、合并 URI 项
leaf
<?xml version="1.0"?>

<!DOCTYPE catalog

PUBLIC "-//OASIS/DTD Entity Resolution XML Catalog V1.0//EN"

"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">

<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">

<rewriteSystem

systemIdStartString="http://www.oasis-open.org/docbook/xml/4.4/"

rewritePrefix="file:///usr/share/xml/docbook44/" />

<rewriteURI

uriStartString="http://docbook.sourceforge.net/release/xsl/current/"

rewritePrefix="file:///usr/share/xml/docbook-xsl-1.68.1/" />

</catalog>
hide
nextCatalog 实现 catalog 文件级联
leaf
For DocBook 4.4:

<nextCatalog catalog="/usr/share/xml/docbook44/catalog.xml" />



For DocBook 4.1.2:

<nextCatalog catalog="/usr/share/xml/docbook412/docbook.cat" />
leaf
示例
hide
工具
leaf
xsltproc, Saxon, Xalan 可以利用该格式的 catalog 文件
leaf
除了 xsltproc 是使用 环境变量 XML_CATALOG_FILES 外, Java 工具有自己的方式,参见后面的介绍
Arrow Link
hide
SGML 时代的 DocBook
hide
DTD
leaf
定义 DocBook SGML 文档结构的 Schema Languages
hide
SGML 和 XML 格式的 DTD 区别:
leaf
ISO 字符实体集 (ISO character entity sets)格式不同,需要对应不同的 Entities 文件
hide
内部定义的 ISO charset entities 格式
hide
sgml
leaf
<!ENTITY euro SDATA "[euro ]"><!-- euro sign -->
hide
xml
leaf
<!ENTITY euro "&#x20AC;"><!-- euro sign, U+20AC NEW -->
hide
定义 DTD 时,ho,hh 参数实体不同
hide
sgml
leaf
<!ENTITY % ho "- O">

<!ENTITY % hh "- -">
hide
xml
leaf
<!ENTITY % ho "">

<!ENTITY % hh "">
hide
对参数实体的引用
hide
引用 %ho; 的有 401 处
leaf
<!ELEMENT title %ho; (%title.char.mix;)*>
leaf
引用 %hh; 的有 0 处
leaf
DTD 中可能没有包含所需的 Entities,参见:
Arrow Link
leaf
如今,DTD 已经不是唯一选择,还有 XML Schema, RELAX NG
hide
DSSSL
hide
DSSSL
hide
what is it
leaf
a kind of Scheme (which is a kind of Lisp)
hide
OpenJade
hide
可以将 SGML/XML 转换为
leaf
html
leaf
rtf
leaf
text
leaf
Tex - DVI - PS - PDF
hide
关于处理 XML 文件
leaf
If you handle XML with OpenJade, OpenJade will by default complain bitterly about any character outside the basic 32 to 128 ASCII range. That can be avoided by setting the following three environment variables:



SP_CHARSET_FIXED=YES

SP_ENCODING=XML

SGML_CATALOG_FILES=/usr/share/sgml/jade_dsl/xml.soc

hide
有效性验证
hide
onsgmls
leaf
onsgmls.exe -sv -c /share/catalog.sgml index.xml

onsgmls.exe -sv -c /share/catalog.sgml index.sgml
hide
OpenSP
hide
编译 OpenSP 之前
hide
补丁: gcc3.4 下编译补丁
leaf
参见 Cygwin OpenSP 源代码包中的补丁
hide
Cygwin OpenSP 补丁不再需要设置 LIBS 环境变量
leaf
export LIBS=-lintl
hide
OpenSP 补丁
hide
isSgmlChar
leaf
文件: include/Syntax.h



diff -r -u OpenSP-1.5.1/include/Syntax.h OpenSP-1.5.1-new/include/Syntax.h

--- OpenSP-1.5.1/include/Syntax.h 2005-12-18 10:38:50.890625000 +0800

+++ OpenSP-1.5.1-new/include/Syntax.h 2005-12-18 10:44:20.703125000 +0800

@@ -389,7 +389,7 @@



inline Boolean Syntax::isSgmlChar(Xchar c) const

{

- return c >= 0 && set_[sgmlChar].contains(Char(c));

+ return c >= 256 || c >= 0 && set_[sgmlChar].contains(Char(c));

}



inline const StringC &Syntax::reservedName(ReservedName i) const
hide
允许中文注释
leaf
文件: lib/parseCommon.cxx



diff -r -u OpenSP-1.5.1/lib/parseCommon.cxx OpenSP-1.5.1-new/lib/parseCommon.cxx

--- OpenSP-1.5.1/lib/parseCommon.cxx 1999-11-04 16:36:13.000000000 +0800

+++ OpenSP-1.5.1-new/lib/parseCommon.cxx 2005-12-18 10:46:41.781250000 +0800

@@ -541,14 +541,12 @@

Token token;

while ((token = getToken(mode)) != tokenCom)

switch (token) {

- case tokenUnrecognized:

- if (!reportNonSgmlCharacter())

- message(ParserMessages::sdCommentSignificant,

- StringMessageArg(currentToken()));

- break;

case tokenEe:

message(ParserMessages::commentEntityEnd, startLoc);

return 0;

+ case tokenUnrecognized:

+ if (reportNonSgmlCharacter())

+ break;

default:

if (markup)

markup->addCommentChar(currentChar());
leaf
清除 INCLUDE, LIBS 等环境变量
hide
编译 OpenSP
leaf
./configure --prefix=/usr/local/opensp
leaf
make && make install
leaf
echo /usr/local/lib/opensp/lib >> /etc/ld.so.conf
hide
catalog
leaf
SGMLDECL "/home/JiangXin/work/docbook/dtd/4.5/docbook.dcl"

CATALOG "/home/JiangXin/work/docbook/dtd/4.5/docbook.cat"



DOCTYPE book /home/JiangXin/work/docbook/dtd/4.5/docbook.dtd

DOCTYPE article /home/JiangXin/work/docbook/dtd/4.5/docbook.dtd

DOCTYPE chapter /home/JiangXin/work/docbook/dtd/4.5/docbook.dtd
hide
应用
hide
准备
hide
创建一个 catalog 文件
hide
catalog 文件
leaf
OVERRIDE YES
leaf
SGMLDECL "/home/JiangXin/work/docbook/dtd/4.5/docbook.dcl"
leaf
CATALOG "/home/JiangXin/work/docbook/dtd/4.5/docbook.cat"
leaf
DOCTYPE book /home/JiangXin/work/docbook/dtd/4.5/docbook.dtd

DOCTYPE article /home/JiangXin/work/docbook/dtd/4.5/docbook.dtd

DOCTYPE chapter /home/JiangXin/work/docbook/dtd/4.5/docbook.dtd
hide
示例
leaf
-- ...................................................................... --

-- "export SGML_CATALOG_FILES=/PATH/catalog" --

OVERRIDE YES



SGMLDECL "/home/JiangXin/work/docbook/dtd/4.5/docbook.dcl"



CATALOG "/home/JiangXin/work/docbook/dtd/4.5/docbook.cat"

CATALOG "/home/JiangXin/work/docbook/style/dsssl-1.79/catalog"



-- CATALOG "dtd/openjade/catalog" --

-- CATALOG "/home/JiangXin/work/docbook/dtd/entities/catalog.sgml" --



DOCTYPE book /home/JiangXin/work/docbook/dtd/4.5/docbook.dtd

DOCTYPE article /home/JiangXin/work/docbook/dtd/4.5/docbook.dtd

DOCTYPE chapter /home/JiangXin/work/docbook/dtd/4.5/docbook.dtd
hide
docbook.dcl 补丁
hide
- LCNMCHAR ".-_"

- UCNMCHAR ".-_"

+ LCNMCHAR ".-_:"

+ UCNMCHAR ".-_:"
hide
否则:



onsgmls:/home/JiangXin/work/docbook/dtd/4.5/htmltblx.mod:102:9:E: character ":"

invalid: only "CDATA", "ENTITIES", "ENTITY", "ID", "IDREF", "IDREFS", "NAME", "N

AMES", "NMTOKEN", "NMTOKENS", "NOTATION", "NUMBER", "NUMBERS", "NUTOKEN", "NUTOK

ENS" and parameter separators allowed

onsgmls:/home/JiangXin/work/docbook/dtd/4.5/htmltblx.mod:110:9:E: character ":"

invalid: only "CDATA", "ENTITIES", "ENTITY", "ID", "IDREF", "IDREFS", "NAME", "N

AMES", "NMTOKEN", "NMTOKENS", "NOTATION", "NUMBER", "NUMBERS", "NUTOKEN", "NUTOK

ENS" and parameter separators allowed
hide
主要是如下参数实体中出现了 :
leaf
<!ENTITY % xml-space.attrib

"xml:space (preserve) #IMPLIED">



<!ENTITY % xml-base.attrib

"xml:case CDATA #IMPLIED">



<!ENTITY % i18n

"xml:lang NMTOKEN #IMPLIED">
hide
示例文档
hide
gb2312.sgml
leaf
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.2//EN">

<article>

<articleinfo>

<title>Hello World!</title>

<author><firstname>名</><surname>姓</></author>

</articleinfo>

<!-- 这里是注释 -->



<sect1><title>Hello World!</title>

<para>

Hello world! 这是我的第一个 DocBook 文档。

</para>

</sect1>

</article>
leaf
utf8.sgml
hide
编码问题
leaf
多个环境变量用于处理多字节以及宽字符编码的 SGML/XML,如下:
hide
SP_CHARSET_FIXED
leaf
只有当 SP_CHARSET_FIXED 设置为 1 或者 YES 时,OpenSP进入 固定字符集模式
hide
SP_ENCODING
hide
当处于固定字符集模式时,的缺省字符集
leaf
可以是: utf-8, utf-16, gb2312, big5, cn-gb, euc-cn, cn-big5, is8859-n, ...

xml 含义为 作为输入时,由XML 定义确定其编码,作为输出时,为 UTF-
hide
SP_BCTF
hide
当不处于固定字符集模式时,的缺省字符集
leaf
可用的有: utf-8, euc, big5, identity, fixed-2, fixed-4, sjis
hide
onsgmls
hide
功能
leaf
验证有效性
hide
SP 环境变量
leaf
export SP_CHARSET_FIXED=1

export SP_ENCODING=utf-8

onsgmls.exe -s -c catalog.sgml utf8.sgml
hide
命令行参数
hide
-s 关闭输出
leaf
export SGML_CATALOG_FILES=/share/catalog.sgml

onsgmls.exe -s index.sgml
hide
-c catalog 文件
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 onsgmls.exe -s -c catalog.sgml gb2312.sgml
hide
-i NAME
leaf
如同在文档的 DTD 最开始,声明了 <!ENTITY % name "INCLUDE">
hide
ospam
leaf
整理 SGML 标记(markup)
hide
命令行
leaf
ospam.exe -p -m shorttag -c catalog.sgml index.sgml
hide
osgmlnorm
hide
格式化 sgml 文档
leaf
--comments 输出注释
leaf
-d 输出 prolog
hide
示例
leaf
SP_ENCODING=utf-8 SP_CHARSET_FIXED=yes osgmlnorm -c catalog.sgml utf8.sgml 2>/dev/null | iconv -f utf-8 -t gb2312
leaf
SP_ENCODING= SP_CHARSET_FIXED= osgmlnorm --comments -c catalog.sgml gb2312.sgml
hide
Bug
leaf
--comments 对于 UTF-8 编码的文件,当 SP_ENCODING=utf-8 时无效
leaf
需要安装“中文注释”补丁
hide
osx
leaf
SGML->XML转换工具
hide
示例
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=YES osx -x preserve-case -x comment \

-c catalog.sgml gb2312.sgml | iconv -f utf-8 -t gb2312
leaf
SP_ENCODING=utf-8 SP_CHARSET_FIXED=YES osx -x preserve-case -x comment \

-c catalog.sgml utf8.sgml | iconv -f utf-8 -t gb2312
leaf
ospent
leaf
ospcat
hide
XML 文件的验证
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=yes onsgmls.exe -s -c catalog.sgml gb2312.xml
hide
OpenJade
hide
编译 OpenJade 之前
leaf
参见 Cygwin OpenJade 源代码包中的补丁
leaf
OpenSP 的补丁参见:
Arrow Link
leaf
清除 INCLUDE, LIBS 等环境变量
hide
编译 OpenJade
leaf
./configure --prefix=/usr/local/openjade \

--enable-spincludedir=/usr/local/opensp/include/OpenSP \

--enable-splibdir=/usr/local/opensp/lib
leaf
make && make install
leaf
# 将 dsssl 目录(dsssl的 DTD 声明)拷贝到适当的目录下

# 并将 dsssl 目录下的 catalog 文件加入到 SGML_CATALOG_FILES

# 环境变量,或者加入到 CATALOG 文件中;

cp -R dsssl /docbook-dtd-dsssl-directory/openjade
leaf
echo /usr/local/lib/openjade/lib >> /etc/ld.so.conf
hide
测试(参见 dsssl-doc 的例子)
hide
测试 openjade:
leaf
openjade -t rtf -d jtest.dsl jtest.sgm
hide
可能出现的错误
leaf
openjade:jtest.dsl:1:72:W: cannot generate system identifier for public text "-//James Clark//DTD DSSSL Style Sheet//EN"

openjade:jtest.dsl:1:72:E: reference to entity "STYLE-SHEET" for which no system identifier could be generated

openjade:jtest.dsl:1:0: entity was defined here

openjade:E: specification document does not have the DSSSL architecture as a base architecture
leaf
原因是没有找到 Public 标志符 "-//James Clark//DTD DSSSL Style Sheet//EN" 的位置,

需要通过 catalog 文件建立 Public 标志符到 system 标志符的映射,

该 catalog 文件名,可以通过环境变量 SGML_CATALOG_FILES 指出,

或者通过 openjade 命令行的 -c 参数指明。
hide
设置环境变量 SGML_CATALOG_FILES
leaf
export SGML_CATALOG_FILES=openjade/dsssl/catalog
leaf
openjade -t rtf -d jtest.dsl jtest.sgm
hide
或者通过 -c 参数
leaf
openjade -c openjade/dsssl/catalog -t rtf -d jtest.dsl jtest.sgm
hide
测试 DocBook DTD&DSSSL
hide
设置环境变量 SGML_CATALOG_FILES
leaf
export SGML_CATALOG_FILES=dtd/catalog:dsssl/catalog:openjade/catalog
leaf
openjade -t rtf -d d:\where-you-unpacked-the-stylesheets\docbook\print\docbook.dsl test.sgm
leaf
openjade -t sgml -d d:\where-you-unpacked-the-stylesheets\docbook\html\docbook.dsl test.sgm
hide
中文文档测试
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 \

openjade -t sgml -d d:\where-you-unpacked-the-stylesheets\docbook\html\docbook.dsl \

-V nochunks gb2312.sgml
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 \

openjade -t rtf -d d:\where-you-unpacked-the-stylesheets\docbook\print\docbook.dsl \

gb2312.sgml
hide
catalog
Arrow Link
leaf
语法参见前面的介绍
Arrow Link
hide
DSSSL
leaf
CATALOG "/home/JiangXin/work/docbook/style/dsssl-1.79/catalog"
hide
DTD for DSSSL
leaf
CATALOG "~/work/docbook/bin/openjade-1.3.3-pre1/dsssl/catalog"
hide
如何指定 DSSSL 样式表
hide
通过 prolog 或者 DTD 中的 PI 声明位置。(两种格式)
leaf
格式1: <?stylesheet href="sysid" type="text/dsssl">
leaf
格式2: <?dsssl sysid>
hide
openjade -d systemid
leaf
DSSSL systemid,声明 DSSSL 位置
leaf
和输入文件同名的,扩展名为 .dsl
hide
一个DSSSL样式表文件可能包含

多个样式,如何指定?
hide
两种方式定义的多样式DSSSL文件
hide
仅通过参数进行实体控制,

只包含一个 style-specification
leaf
<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [

<!ENTITY % html "IGNORE">

<![%html;[

<!ENTITY % print "IGNORE">

<!ENTITY docbook.dsl PUBLIC "-//Norman Walsh//DOCUMENT DocBook HTML Stylesheet//EN" CDATA dsssl>

]]>

<!ENTITY % print "INCLUDE">

<![%print;[

<!ENTITY docbook.dsl PUBLIC "-//Norman Walsh//DOCUMENT DocBook Print Stylesheet//EN" CDATA dsssl>

]]>

]>

<style-sheet>

<style-specification use="docbook">

<style-specification-body>



;; common customization can go here



<![%print;[



;; customize the print stylesheet here



]]>



<![%html;[



;; customize the html stylesheet here



]]>



</style-specification-body>

</style-specification>

<external-specification id="docbook" document="docbook.dsl">

</style-sheet>
hide
不同的 style-specification 具有不同的 ID,

另外还有参数实体控制
leaf
<!DOCTYPE style-sheet PUBLIC

"-//James Clark//DTD DSSSL Style Sheet//EN" [

<!ENTITY % html "IGNORE">

<![%html;[

<!ENTITY % print "IGNORE">

<!ENTITY docbook.dsl PUBLIC

"-//Norman Walsh//DOCUMENT DocBook HTML Stylesheet//EN"

CDATA dsssl>

]]>

<!ENTITY % print "INCLUDE">

<![%print;[

<!ENTITY docbook.dsl PUBLIC

"-//Norman Walsh//DOCUMENT DocBook Print Stylesheet//EN"

CDATA dsssl>

]]>

]>



<style-sheet>



<style-specification id="print" use="docbook">

<style-specification-body>



;; customize the print stylesheet

...



</style-specification-body>

</style-specification>





<!--

;; customize the html stylesheet; parts borrowed from

;; Cygnus at http://sourceware.cygnus.com/ (cygnus-both.dsl)

-->



<style-specification id="html" use="docbook">

<style-specification-body>



... ...



</style-specification-body>

</style-specification>



<external-specification id="docbook" document="docbook.dsl">



</style-sheet>

hide
-d 参数或者 PI 中设置 的 systemid,在文件名的结尾用 #id

可以指定 DSSSL 文件中特定的 style-specification.
leaf
openjade -d systemid#print
hide
-i 参数,设定特定的实体参数为 INCLUDE
leaf
openjade -i html -d systemid#html
hide
DSSSL 定制
leaf
DSSSL 是一个遵从 DSSSL 规范的 SGML 文档
hide
default schema
leaf
/usr/local/openjade/share/openjade/builtins.dsl
leaf
一个包含了打印和HTML两种格式的样式表
Arrow Link
hide
www.tldp.org 对 dsssl 的定制
hide
定制
leaf
修改作者名称显示方式,姓在前
leaf
为 HTML 输出增加编码设置,两个参数实体: charset.gb2312, charset.utf-8
leaf
其它参见 ldp.dsl 的 differ
hide
命令行参数
leaf
-d dsssl_spec
Arrow Link
leaf
-c catalog_file
hide
-t output_type
leaf
支持的输出格式有:
hide
fot
leaf
flow object tree
hide
rtf, rtf-95
leaf
rtf-95 produces output optimized for Word 95 rather than Word 97
leaf
tex
hide
sgml, sgml-raw
leaf
sgml-raw 不在 tag 中插入换行符
hide
xml, xml-raw
leaf
xml-raw 不在 tag 中插入换行符
leaf
html
leaf
mif
leaf
-o output_file
hide
-i Entity_Name
hide
相当于在 DSSSL 样式表中定义实体 Entity_Name 为 INCLUDE
leaf
<!ENTITY % Entity_Name "INCLUDE">
hide
-V variable
leaf
相当于在 DSSSL 样式表中定义 (define variable #t)
hide
-V variable=value
leaf
相当于在 DSSSL 样式表中定义 (define variable "value")
hide
-V (define variable value)
leaf
相当于在 DSSSL 样式表中定义 (define variable value)
hide
-wtype
leaf
定义错误类型
hide
环境变量
hide
SP_CHARSET_FIXED 和 SP_SYSTEM_CHARSET 被忽略
leaf
如同 SP_CHARSET_FIXED 设置为 1 以及 SP_SYSTEM_CHARSET 未设置
hide
SP_ENCODING
leaf
控制输入文件的字符集
hide
SGML_CATALOG_FILES
leaf
在该环境变量设置的列表中寻找 catalog 文件;
hide
格式转换

(命令行示例)
hide
sgml -> single html
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 \

openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/docbook-dsssl-1.79/html/docbook.dsl \

-V nochunks -t sgml gb2312.sgml
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 \

openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/ldp.dsl#html \

-i html -i charset.gb2312 -V nochunks -t sgml gb2312.sgml >gb2312.html
hide
sgml -> multiple htmls
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 \

openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/docbook-dsssl-1.79/html/docbook.dsl \

-t sgml gb2312.sgml
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 \

openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/ldp.dsl#html \

-i html -i charset.gb2312 -t sgml gb2312.sgml >gb2312-ldp.html
hide
sgml -> rtf
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 \

openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/ldp.dsl#print \

-i print -i charset.gb2312 -t rtf gb2312.sgml
hide
sgml -> pdf
leaf
sgml -> tex
hide
tex -> DVI/PS/PDF
leaf
JadeTeX
leaf
sgml -> fot
hide
XML
hide
需要在命令行中定义 XML 的 declare 文件,

也可以在 catalog 中用 DTDDECL 指定
leaf
DTDDECL "-//OASIS//DTD DocBook XML V4.5CR1//EN" "dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl"

DTDDECL "-//OASIS//DTD DocBook XML V4.2//EN" "dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl"

DTDDECL "-//OASIS//DTD DocBook XML V3.1//EN" "dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl"
hide
xml -> single html
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 \

openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/docbook-dsssl-1.79/html/docbook.dsl \

-V nochunks -t sgml \

${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl gb2312.xml
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 \

openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/ldp.dsl#html \

-i html -i charset.gb2312 -V nochunks -t sgml \

${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl gb2312.xml >gb2312-xml.html
hide
xml -> multiple htmls
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 \

openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/docbook-dsssl-1.79/html/docbook.dsl \

-t sgml ${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl gb2312.xml
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 \

openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/ldp.dsl#html \

-i html -i charset.gb2312 -t sgml \

${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl gb2312.xml
hide
xml -> rtf
leaf
SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 \

openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/ldp.dsl#print \

-i print -i charset.gb2312 -t rtf \

${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl gb2312.xml
hide
测试用例
hide
test.sh
leaf
#!/bin/sh



SRCROOT=../../src



# onsgml test...



echo -ne "validate gb2312.sgml, ... "

SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 onsgmls -s -c ${SRCROOT}/catalog.sgml gb2312.sgml

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "validate utf8.sgml, ... "

SP_ENCODING=utf-8 SP_CHARSET_FIXED=1 onsgmls -s -c ${SRCROOT}/catalog.sgml utf8.sgml

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "validate gb2312.xml, ... "

SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 onsgmls -s -c ${SRCROOT}/catalog.sgml ${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl gb2312.xml

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "validate utf8.xml, ... "

SP_ENCODING=utf-8 SP_CHARSET_FIXED=1 onsgmls -s -c ${SRCROOT}/catalog.sgml ${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl utf8.xml

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "gb2312.sgml is NOT valid IF VALIDATED AS XML, ... "

SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 onsgmls -s -c ${SRCROOT}/catalog.sgml ${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl gb2312.sgml 2>/dev/null

[ $? -ne 0 ] && echo "pass" || echo "failed"



# osx test...



echo -ne "osx convert test, gb2312.sgml->gb2312.xml, ... "

tmpfile=`mktemp tmp-gb-xml.XXXXX`

SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 osx -x preserve-case -x comment -c ${SRCROOT}/catalog.sgml gb2312.sgml | iconv -f utf-8 -t gb2312 > $tmpfile

SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 onsgmls -s -c ${SRCROOT}/catalog.sgml ${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl $tmpfile

[ -f $tmpfile ] && rm $tmpfile

echo "pass"





# openjade test...



echo -ne "convert gb2312.sgml to multiple htmls, ... "

SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/docbook-dsssl-1.79/html/docbook.dsl -t sgml gb2312.sgml

#rm t1.htm

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "convert gb2312.sgml to one big html, ... "

SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/docbook-dsssl-1.79/html/docbook.dsl -V nochunks -t sgml gb2312.sgml > gb2312-sgml.htm

#rm index.htm

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "convert gb2312.sgml to rtf, ... "

SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/docbook-dsssl-1.79/print/docbook.dsl -t rtf gb2312.sgml

#rm gb2312.rtf

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "convert utf8.sgml to multiple htmls (ldap.dsl), ... "

SP_ENCODING=utf-8 SP_CHARSET_FIXED=1 openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/ldp.dsl\#html -i html -i charset.utf8 -t sgml utf8.sgml

#rm t1.htm

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "convert utf8.sgml to one big html (ldap.dsl), ... "

SP_ENCODING=utf-8 SP_CHARSET_FIXED=1 openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/ldp.dsl\#html -i html -i charset.utf8 -V nochunks -t sgml utf8.sgml > utf8-sgml.htm

#rm index.htm

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "convert utf8.sgml to rtf (ldap.dsl), ... "

SP_ENCODING=utf-8 SP_CHARSET_FIXED=1 openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/ldp.dsl\#print -i print -t rtf utf8.sgml

#rm gb2312.rtf

[ $? -eq 0 ] && echo "pass" || echo "failed"





# openjade XML test...



echo -ne "convert gb2312.xml to multiple htmls, ... "

SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/docbook-dsssl-1.79/html/docbook.dsl -t sgml ${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl gb2312.xml

#rm t1.htm

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "convert gb2312.xml to one big html, ... "

SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/docbook-dsssl-1.79/html/docbook.dsl -V nochunks -t sgml ${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl gb2312.xml > gb2312-sgml.htm

#rm index.htm

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "convert gb2312.xml to rtf, ... "

SP_ENCODING=gb2312 SP_CHARSET_FIXED=1 openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/docbook-dsssl-1.79/print/docbook.dsl -t rtf ${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl gb2312.xml

#rm gb2312.rtf

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "convert utf8.xml to multiple htmls (ldap.dsl), ... "

SP_ENCODING=utf-8 SP_CHARSET_FIXED=1 openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/ldp.dsl\#html -i html -i charset.utf8 -t sgml ${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl utf8.xml

#rm t1.htm

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "convert utf8.xml to one big html (ldap.dsl), ... "

SP_ENCODING=utf-8 SP_CHARSET_FIXED=1 openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/ldp.dsl\#html -i html -i charset.utf8 -V nochunks -t sgml ${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl utf8.xml > utf8-sgml.htm

#rm index.htm

[ $? -eq 0 ] && echo "pass" || echo "failed"



echo -ne "convert utf8.xml to rtf (ldap.dsl), ... "

SP_ENCODING=utf-8 SP_CHARSET_FIXED=1 openjade -c ${SRCROOT}/catalog.sgml -d ${SRCROOT}/dsssl/ldp.dsl\#print -i print -t rtf ${SRCROOT}/dsssl/docbook-dsssl-1.79/dtds/decls/xml.dcl utf8.xml

#rm gb2312.rtf

[ $? -eq 0 ] && echo "pass" || echo "failed"

leaf
xslproc
Arrow Link
hide
XML 时代的 DocBook
hide
为什么使用 XML 格式的 DocBook?
leaf
xml LIB 和工具发展迅速
leaf
很多著名的编辑软件支持 XML 格式的输出,即使不是 DocBook 格式输出,也很容易和 XML 格式的 DocBook 进行转换
leaf
很多人都在用
hide
OpenJade 也可用于 XML 格式的文件
leaf
XML 是 SGML 的子集
leaf
但使用的样式表不是XSL,而是 DSSSL
leaf
具体参见上节 OpenSP & OpenJade 的描述
hide
XSL
leaf
与 DSSSL 相比的优势
hide
通过参数进行定制
leaf
HTML 参数参考,参见 xsl 文档:doc/html
leaf
FO 参数参考,参见 xsl 文档:doc/fo
hide
如何在命令行提供参数
hide
xsltproc
leaf
xsltproc --output myfile.html \

--stringparam html.stylesheet "corpstyle.css" \

--stringparam admon.graphics 1 \

docbook.xsl myfile.xml
hide
saxon
leaf
java com.icl.saxon.StyleSheet -o myfile.html myfile.xml docbook.xsl \

html.stylesheet="corpstyle.css" \

admon.graphics=1
hide
Xalan
leaf
java org.apache.xalan.xslt.Process -out myfile.html -in myfile.xml \

-xsl docbook.xsl \

-param html.stylesheet "corpstyle.css" \

-param admon.graphics 1
hide
只对源文件的一部分进行处理
hide
前提
leaf
要处理的部分是一个整个的元素
leaf
该元素具有一个 id 属性值
hide
例如
leaf
<book>

<chapter id="intro">

...

</chapter>

<chapter id="using">

..

</chapter>

<chapter id="administering">

...

</chapter>

</book>
hide
命令行
leaf
xsltproc \

--stringparam rootid "using" \

--output chap2.html \

html/docbook.xsl myfile.xml
hide
HTML 输出的参数控制
hide
分页
hide
无分页 HTML
hide
使用 docbook.xsl 样式表
leaf
xsltproc --output myfile.html docbook.xsl myfile.xml
leaf
xsltproc docbook.xsl myfile.xsl > myfile.html
hide
分页 HTML
hide
使用 html/chunk.xsl 样式表
leaf
xsltproc /usr/share/docbook-xsl/html/chunk.xsl myfile.xml
leaf
首页为 index.html
hide
每一个部分的文件名根据 id 属性值设定,

或者由一个算法自动命名
hide
use.id.as.filename
leaf
分页名称根据 id 属性确定
hide
html.ext
leaf
设置扩展名
hide
root.filename
leaf
设置首页的文件名
hide
<xsl:param name="root.filename"></xsl:param>
leaf
首页文件名也根据 ID 属性确认
hide
<xsl:param name="root.filename">root</xsl:param>
leaf
首页文件名为 root.html
hide
不设置
leaf
则首页文件名为 index.html
hide
设置输出文件目录,否则本目录被搞乱
leaf
base.dir 参数,如:

xsltproc -stringparam base.dir /usr/apache/htdocs/ chunk.xsl myfile.xml
hide
PI
hide
<?dbhtml filename="intro.html" ?>
leaf
设置文件名,等同于在 element 设置 id 属性
hide
<?dbhtml dir="UserGuide" ?>
leaf
紧接着根元素,定义了根元素以及子元素输出为 HTML 的目录;
hide
例如:
hide
<book><?dbhtml dir="UserGuide" ?>

<title>User Guide</title>

...

<chapter id="intro"><?dbhtml dir="FrontMatter" ?>

...

<chapter id="installing">

...

<appendix id="reference"><?dbhtml dir="BackMatter" ?>
leaf
生成的分页 HTML 如下:

UserGuide/index.html

UserGuide/FrontMatter/intro.html

UserGuide/installing.html

UserGuide/BackMatter/reference.html
hide
加快文件输出速度
leaf
设置 chunk.fast 参数为非零值。xsltproc, saxon, xalan 都支持 EXSLT,MSXML 则不支持
hide
目录的分页格式
hide
参数 chunk.tocs.and.lots = 1
leaf
为文章目录创建单独一页
leaf
chunk.separate.lots = 1
hide
分页级别
leaf
chunk.section.depth ,默认是1,如果设置为2,则 sect2 也分页
leaf
chunk.first.sections ,默认第一节和之前的内容在一页;
hide
手动设置分页
leaf
使用chunktoc.xsl 样式表
hide
输出文件缩进
leaf
chunker.output.indent=no/yes
leaf
<xsl:param name="chunker.output.indent">yes</xsl:param>
leaf
参数 chunk.quietly 设置为 1,则产生 html 文件过程不频繁显示消息
hide
单一分页HTML
leaf
onechunk.xsl 样式表
leaf
和无分页的 docbook.xsl 相比,由于使用了为分页功能提供的 XSLT 扩展功能,可以提供如下参数。
hide
参数
leaf
id 属性指定输出文件名。因此可以不必指定输出文件名,只需在 root 元素增加 id 属性
leaf
base.dir 参数可以设定输出文件的目录,因为 id 属性值不能包含 / 字符;
leaf
设置输出文件的编码,可以通过参数 chunker.output.encoding 实现
leaf
chunker.output.doctype-public 和 chunker.output.doctype-system 参数,则可以设定输出文件的 DOCTYPE
hide
字符集编码
leaf
html/docbook.xsl 默认输出是 ISO8859-1,文件中的中文等非 ISO8859-1 字符,编码为 $#xxxx
hide
对于分页的 HTML ,可以使用

chunker.output.encoding 参数
leaf
onechunk.xsl 样式表 和 chunk.xsl 样式表,可以使用该参数定制输出文件编码
leaf
docbook.xsl 则不能采用这种方式
hide
如:
leaf
xsltproc --stringparam chunker.output.encoding utf-8 \

/docbook/src/xsl/docbook-xsl-1.69.1/html/onechunk.xsl gb2312.xml
leaf
该功能可以用于 xsltproc, Saxon等支持 EXSLT 引擎,不能用于 Xalan?
hide
docbook.xsl 需要定制样式表

来实现对输出编码的控制
leaf
由于没有设置参数来修改输出编码,只能通过建立一个文件层来定义
hide
示例
leaf
<?xml version='1.0'?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

version="1.0">



<xsl:import href="/path/to/html/docbook.xsl"/>

<xsl:output method="html"

encoding="UTF-8"

indent="no"/>



</xsl:stylesheet>
leaf
HTML 文件头: <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
leaf
中文字符编码:
leaf
saxon.character.representation
hide
CSS 嵌入 HTML
leaf
参数 html.stylesheet
hide
示例
leaf
xsltproc --stringparam html.stylesheet corpstyle.css chunk.xsl myfile.xml
hide
生成的 HTML Header 包含
leaf
<link rel="stylesheet" href="corpstyle.css"

type="text/css">
hide
定制 CSS
hide
h2 即是 chapter, 也是 sect1 的标题样式,因为h1保留给 book 的标题
leaf
div.chapter div.titlepage h2 {

font-size: 180%;

font-family: Helvetica;

font-weight: Bold;

color: #444444

}
hide
为 programlisting 加背景色
leaf
pre.programlisting {

background-color: #FFFF99 ;

border: 1px solid #006600 ;

}
hide
用户自定义样式
hide
为 para 增加 样式
leaf
定义 para.propagates.style 参数为非零值
hide
在 DocBook XML 中为 para 增加 role 属性
leaf
DocBook XML:

<para role="primary">This feature of the product ...</para>

hide
转换出来的 HTML 为段落增加样式
leaf
HTML output:

<p class="primary">This feature of the product ...</p>
hide
emphasis
leaf
emphasis.propagates.style
hide
例如:
leaf
DocBook XML:

Using an SQL <emphasis role="sqlsyntax">select</emphasis> statement



HTML output:

Using an SQL <span class="sqlsyntax">select</span> statement



CSS stylesheet entry:

.sqlsyntax {font-variant: small-caps;}
hide
entry
leaf
entry.propagates.style
hide
phrase
leaf
phrase.propagates.style parameters
hide
章节编号
leaf
chapter.autolabel = 1|0
leaf
appendix.autolabel =1|0
leaf
section.autolabel =0|1
leaf
section.label.includes.component.label = 0|1
leaf
section.autolabel.max.depth = 8
hide
图标控制
hide
何处出现图标?
leaf
admonitions (note, tip, warning, caution, and important).
leaf
Next, Previous, Up, and Home for navigating among chunked output
leaf
Numbered icons for callouts.
hide
admon 图标参数控制
hide
admon.graphics = 0|1
leaf
是否显示图标
leaf
admon.graphics.path = images/
leaf
admon.graphics.extension = .png
hide
Navigational icons
leaf
navig.graphics = 0|1
leaf
如: xsltproc -stringparam navig.graphics 1 chunk.xsl myfile.xml
hide
Callout icons
hide
callout.graphics.number.limit = 15
leaf
超过则显示文字,如 (16)
leaf
callout.graphics.path = images/callouts
leaf
callout.graphics.extension = png
hide
时间和日期
leaf
可以插入 PI,输出文档的相应部位显示为编译时的时间
leaf
<?dbtimestamp format="Y-m-d H:M:S"?>
hide
可打印版本输出的参数控制
hide
与上节 HTML 参数控制基本相同的
leaf
图标
leaf
章节编号
hide
输出特定章节
leaf
rootid 指定要打印的特定章节名称
leaf
generate.toc 为打印的部分章节添加编号
hide
命令
leaf
xsltproc --output myfile.fo \

--stringparam rootid mychapterid \

--stringparam generate.toc "chapter title,toc" \

fo/docbook.xsl myfile.xml
hide
页面控制
hide
paper.type 纸张大小
leaf
paper.type
leaf
xsltproc --output myfile.fo \

--stringparam paper.type A4 \

fo/docbook.xsl myfile.xml
hide
自定义纸张大小
leaf
page.width 与 page.height 参数
leaf
xsltproc --output myfile.fo \

--stringparam page.height 9in \

--stringparam page.width 7in \

fo/docbook.xsl myfile.xml
hide
margin
leaf
page.margin.inner
leaf
page.margin.outer
hide
排版控制
hide
例如
leaf
xsltproc --output myfile.fo \

--stringparam body.font.family Helvetica \

--stringparam body.font.master 11 \

--stringparam title.font.family "Times Roman" \

--stringparam footnote.font.size 9 \

fo/docbook.xsl myfile.xml
hide
分页符
hide
防止不当的分页
hide
XSL 的 keep-together 属性
leaf
例如 table 元素存在该属性,避免表格当中分页
hide
XSL 的 keep-with-next 属性
leaf
例如 章节标题通过该属性避免被孤立限制在一页的末尾
hide
插入 PI 控制该属性
hide
允许 table 中分页
leaf
<table>

<title>My long table</title>

<?dbfo keep-together="auto" ?>

...
hide
样式表支持软分页符
leaf
软分页符又称为条件分页符,如果不符合特定条件,不插入分页符。

(例如:我需要在当前页为下述内容留出至少 2 英寸宽,否则插入分页符)
hide
dbfo-need 示例
leaf
<para>Some text in a paragraph</para>

<?dbfo-need height="2in" ?>

<para>The following code snippet illustrates

the technique.</para>

<programlisting># Some sample code

</programlisting>
hide
不支持插入硬分页符,

但用户可以定制 XSL
leaf
因为硬分页符难以管理,因而默认样式表不支持
leaf
但可以定制样式表,如下
hide
样式表定制
leaf
<xsl:template match="processing-instruction('hard-pagebreak')">

<fo:block break-before='page'/>

</xsl:template>
hide
在分页处增加 PI:<?hard-pagebreak?>
leaf
<para>Some text in a paragraph</para>

<?hard-pagebreak?>

<para>The following code snippet illustrates

the technique.</para>

<programlisting># Some sample code

</programlisting>
hide
PDF 书签
leaf
PDF 支持在页面的一侧显示目录结构,此即书签
hide
通过设置 fop.extensions 参数实现
leaf
xsltproc --output myfile.fo \

--stringparam fop.extensions 1 \

fo/docbook.xsl myfile.xml
hide
添加空行
hide
使用 literallayout 元素
leaf
在 literallayout 元素中的回车将予以保留
hide
样式表定制层

Customization layers
hide
何为定制层
leaf
建立一个新的 XSL 样式表,使得在不修改 DocBook 样式表前提下,对齐进行定制
leaf
便于升级
leaf
便于分发
hide
定制层可以实现
hide
设置参数
leaf
可以将常用的参数放在定制层里面,避免了在命令行中定义参数的烦琐
hide
布尔值
leaf
示例: <xsl:param name="admon.graphics" select="1"/>
leaf
1 是布尔值,因此双引号即可
hide
字符串
hide
<xsl:param name="parametername" select="'parametervalue'"/>
leaf
双引号中的单引号,声明内容是字符串
leaf
如果忽略内部的字符串,会造成参数不起作用
leaf
或者:<xsl:param name="parametername">parametervalue</xsl:param>
hide
属性集合定制
hide
何为属性集合
leaf
XSL 样式表通过 xsl:attribute-set 将 若干个 xsl:attribute 组织在一起为一个集合
hide
leaf
<xsl:attribute-set name="section.title.properties">

<xsl:attribute name="font-family">

<xsl:value-of select="$title.font.family"/>

</xsl:attribute>

<xsl:attribute name="font-weight">bold</xsl:attribute>

<!-- font size is calculated dynamically by section.heading template -->

<xsl:attribute name="keep-with-next.within-column">always</xsl:attribute>

<xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>

<xsl:attribute name="space-before.optimum">1.0em</xsl:attribute>

<xsl:attribute name="space-before.maximum">1.2em</xsl:attribute>

</xsl:attribute-set>
hide
XSL 中如何引用属性集合
leaf
fo:block 的开始 tag,将属性值引入其中
hide
leaf
<xsl:template name="section.heading">

<xsl:param name="level" select="1"/>

<xsl:param name="title"/>



<fo:block xsl:use-attribute-sets="section.title.properties">

...



</fo:block>

</xsl:template>
hide
定制层中对属性集合的定制
leaf
定制层中定义的属性集合和原样式表中的定义向合并
hide
例如定制层中定义
leaf
<xsl:attribute-set name="section.title.properties">

<xsl:attribute name="font-weight">normal</xsl:attribute>

<xsl:attribute name="text-align">left</xsl:attribute>

</xsl:attribute-set>
hide
充实占位模板
leaf
占位模板是在 XSL 样式表定义中,预留的空的占位模板,

因为本身为空,因而对输出没有任何作用,仅为定制提供一个空间
leaf
定制层可以对占位模板重新定义,充实其内容
leaf
分页样式模板中存在一个占位模板 user.header.content ,

如果为该模板定义了内容,则每个分页内容的头部都会增加

内容。
hide
其它占位模板,如:
leaf
user.preroot
hide
user.head.content
hide
添加 CSS 等
leaf
<xsl:param name="target.window" select="'_self'"/>

<xsl:template name="user.head.content">

<xsl:comment> (c) 2002 Copyright Megacorp, Inc. </xsl:comment>

<base target="{$target.window}"/>

<style type="text/css">

<xsl:comment>

@import "stylesheets/override.css"

body {background: url(graphics/bluesea.png);}

</xsl:comment>

</style>

</xsl:template>
hide
添加时间信息的 meta
leaf
<xsl:template name="user.head.content">

<meta name="date">

<xsl:attribute name="content">

<xsl:call-template name="datetime.format">

<xsl:with-param name="date" select="date:date-time()"/>

<xsl:with-param name="format" select="'m/d/Y'"/>

</xsl:call-template>

</xsl:attribute>

</meta>

</xsl:template>
hide
user.header.navigation
leaf
<xsl:template name="user.header.content">

<p><b>Hi Mom!</b></p>

</xsl:template>
hide
user.header.content
hide
SSI

(注意 xsl:comment 的运用)
leaf
<xsl:template name="user.header.content">

<div>

<!-- Apache SSI -->

<xsl:comment>#include virtual="/cgi-bin/counter.pl"</xsl:comment>

</div>

</xsl:template>
hide
JSP inclusion

(注意: xsl:text 的 disable-xxx 属性)
leaf
<xsl:template name="user.header.content">

<div>

<!-- JSP inclusion -->

<xsl:text disable-output-escaping="yes">

&lt;%@ include file="/header.html" %>

</xsl:text>

</div>

</xsl:template>
hide
user.footer.content
leaf
<xsl:template name="user.footer.content">

<HR/><P class="copyright">&#x00A9; 2002 Megacorp, Inc.</P>

</xsl:template>
hide
user.footer.navigation
leaf
<xsl:include href="user.footer.navigation.xsl"/>
leaf
参见 OSX XSL 定制
leaf
创建新模板
hide
定制文字
hide
本地化设置
hide
元素的 lang 属性
leaf
本地化设置
hide
l10n.gentext.default.language
leaf
例如 <xsl:param name="l10n.gentext.default.language">zh_cn</xsl:param>
hide
l10n.gentext.language
leaf
<xsl:param name="l10n.gentext.language">zh_cn</xsl:param>
leaf
设置语种,覆盖 元素的 lang 设置
leaf
生成的文字(Generated text)是 XSL 样式表输出时添加的文字,这些文字存在本地化的问题
leaf
参见 common/en.xml
hide
一种是 l:gentext 将打印字符(text) 对应于相应的元素(key)
leaf
如: common/en.xml 中

<l:gentext key="Abstract" text="Abstract"/>

common/zh_cn.xml 中

<l:gentext key="Abstract" text="&#25688;&#35201;"/>
hide
另外一种是上下文相关的文字定制,由 l:context 元素定义
leaf
如:

<l:context name="styles">

<l:template name="person-name" text="first-last"/>

</l:context>



<l:context name="title">

<l:template name="abstract" text="%t"/>

<l:template name="answer" text="%t"/>

<l:template name="appendix" text="Appendix&#160;%n.&#160;%t"/>
hide
在定制层中定制
leaf
<xsl:param name="local.l10n.xml" select="document('')"/>

<l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">

<l:l10n language="en">

<l:context name="xref-number-and-title">

<l:template name="chapter" text="Chapter %n: &#8220;%t&#8221;"/>

</l:context>

</l:l10n>

</l:i18n>
hide
替换样式模板
leaf
最后一招,替换模板。自定义模板的优先级比缺省模板的优先级高
hide
例如: 替换 body.attributes 模板,

为 body 增加属性定义
leaf
<xsl:template name="body.attributes">

<xsl:attribute name="onLoad">alert('Thanks for visiting')</xsl:attribute>

<xsl:attribute name="bgcolor">white</xsl:attribute>

<xsl:attribute name="text">black</xsl:attribute>

<xsl:attribute name="link">#0000FF</xsl:attribute>

<xsl:attribute name="vlink">#840084</xsl:attribute>

<xsl:attribute name="alink">#0000FF</xsl:attribute>

</xsl:template>
hide
例如:
leaf
将模板

<xsl:template match="command">

<xsl:call-template name="inline.boldseq"/>

</xsl:template>

替换为

<xsl:template match="command">

<xsl:call-template name="inline.monoseq"/>

</xsl:template>
hide
本地化设置
hide
定制中文姓名显示方式
hide
设置中文 person-name 显示方式为 family-given
leaf
<xsl:param name="local.l10n.xml" select="document('')"/>

<l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">

<l:l10n language="zh_cn">

<l:context name="styles">

<l:template name="person-name" text="family-given"/>

</l:context>

</l:l10n>

</l:i18n>
hide
定制 family-given 模板
leaf
<xsl:template name="person.name.family-given">

<xsl:param name="node" select="."/>



<xsl:if test="$node//surname">

<xsl:apply-templates select="$node//surname[1]"/>

</xsl:if>



<xsl:if test="$node//othername and $author.othername.in.middle != 0">

<xsl:if test="$node//surname">

<xsl:text> </xsl:text>

</xsl:if>

<xsl:apply-templates select="$node//othername[1]"/>

</xsl:if>



<xsl:if test="$node//firstname">

<xsl:if test="$node//surname

or ($node//othername and $author.othername.in.middle != 0)">

<xsl:text> </xsl:text>

</xsl:if>

<xsl:apply-templates select="$node//firstname[1]"/>

</xsl:if>



<xsl:if test="$node//lineage">

<xsl:text>, </xsl:text>

<xsl:apply-templates select="$node//lineage[1]"/>

</xsl:if>



<xsl:if test="$node//honorific">

<xsl:text> </xsl:text>

<xsl:apply-templates select="$node//honorific[1]"/>

<xsl:value-of select="$punct.honorific"/>

</xsl:if>

</xsl:template>
leaf
自定义 PI
hide
示例
hide
定制 html/docbook.xsl
leaf
<?xml version='1.0'?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:import href="html/docbook.xsl"/>

<xsl:param name="html.stylesheet" select="'corpstyle.css'"/>

<xsl:param name="admon.graphics" select="1"/>

</xsl:stylesheet>
hide
定制 html/chunk.xsl
leaf
替换 <xsl:import href="html/docbook.xsl"/> 为 <xsl:import href="html/chunk.xsl"/>
hide
定制 fo
leaf
因为用到 fo:inline 元素,因此需要定义 fo 名字空间
hide
示例
leaf
<?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="fo/docbook.xsl"/>



<xsl:template match="lineannotation">

<fo:inline font-style="italic">

<xsl:call-template name="inline.charseq"/>

</fo:inline>

</xsl:template>

</xsl:stylesheet>

hide
为何不能将多个定制层合并为一个文件?
leaf
因为 xsl:import 不能包含在条件语句(xsl:if 或 xsl:choose)之中
leaf
但是可以将共性的内容放在同一个文件,用 xsl:import 语句包含到不同的定制层
hide
使用定制层
leaf
<html>xsltproc --output myfile.html <b>mystyles.xsl</b> myfile.xml
hide
htmlhelp 输出定制
hide
命令行
leaf
xsltproc \

../docbook-xsl/htmlhelp/htmlhelp.xsl \

myhelpdoc.xml
hide
Window 参数
hide
htmlhelp.title
leaf
窗口标题
hide
htmlhelp.window.geometry
leaf
窗口大小和位置
leaf
例如 [160,64,992,704] 含义为左上角坐标和右下角坐标
hide
htmlhelp.remember.window.position
leaf
记住上次位置
hide
htmlhelp.show.menu
leaf
是否显示菜单
leaf
htmlhelp.show.favorites
leaf
htmlhelp.show.advanced.search
hide
按钮选项
hide
按钮显示选项
leaf
htmlhelp.show.toolbar.text 是否显示按钮文字
leaf
htmlhelp.button.hideshow
leaf
htmlhelp.button.back
leaf
htmlhelp.button.forward
leaf
htmlhelp.button.stop
leaf
htmlhelp.button.refresh
leaf
htmlhelp.button.home
leaf
htmlhelp.button.options
leaf
htmlhelp.button.print
leaf
htmlhelp.button.locate
leaf
htmlhelp.button.next
leaf
htmlhelp.button.previous
leaf
htmlhelp.button.zoom
hide
自定义按钮
hide
htmlhelp.button.jump1
leaf
是否显示自定义按钮1
hide
htmlhelp.button.jump1.title
leaf
自定义按钮1的标题
hide
htmlhelp.button.jump1.url
leaf
按钮1的 URL
hide
目录选项
leaf
htmlhelp.hhc.show.root
leaf
htmlhelp.hhc.width
leaf
htmlhelp.autolabel
leaf
htmlhelp.hhc.section.depth=5
hide
htmlhelp.default.topic
leaf
设置起始页,默认是 index.htm
hide
文件名选项
hide
htmlhelp.hhp
leaf
工程文件文件名
leaf
htmlhelp.hhc
leaf
htmlhelp.hhk
leaf
htmlhelp.chm
hide
base.dir
leaf
HTML 存储目录,也可以不是目录而作为文件名前缀
hide
manifest.in.base.dir
leaf
工程文件是否和 HTML 文件一起保存在 base.dir 中?
hide
字符编码选项
hide
HTML Help language
leaf
<l:context name="htmlhelp">

<l:template name="langcode" text="0x0409 English (UNITED STATES)"/>

</l:context>
leaf
htmlhelp.encoding
leaf
html 字符集编码
hide
其它参数
hide
htmlhelp.enumerate.images
leaf
将图像枚举在 hhp 工程文件中
hide
htmlhelp.use.hhk
leaf
是否支持 index,DocBook 中 indexterm 创建 index
leaf
htmlhelp.hhc.folders.instead.books
leaf
htmlhelp.hhc.binary
hide
PATCH
hide
osx.html.prefix=hh-
leaf
为分页HTML 添加前缀,目的是使 htmlhelp 临时文件名不会搞乱正常的 HTML 输出
hide
htmlhelp.extra.files
leaf
定义其它需要添加到 htmlhelp 工程文件中的文件列表
hide
调试 XSL
hide
用 <xsl:message> 打印调试信息
Arrow Link
leaf
回车符: &#10;
hide
leaf
<xsl:message>In lists.xsl (match="itemizedlist"), the value of the

css.decoration parameter is <xsl:value-of select="$css.decoration"/>

</xsl:message>
hide
常用的诊断变量
leaf
当前元素名称: <xsl:value-of select="local-name(.)"/>
leaf
当前元素内容: <xsl:value-of select="."/>
leaf
当前元素的某个属性: <xsl:value-of select="@some-atrribute"/>
hide
信息输出格式化
leaf
回车: &#10;
leaf
格式化文本: <xsl:text>...</xsl:text>
hide
其它输出格式
hide
rtf
leaf
FOP 暂时不能从 fo 输出到 rtf
leaf
但是可以用 xslt 直接输出 rtf
leaf
xslutil -out rtf output.rtf input.xml /usr/share/xml/docbook/fo/docbook.xsl
leaf
pdf
hide
Catalog
leaf
语法参见前面的介绍
Arrow Link
hide
Catalog 文件在哪?
hide
xsltproc
hide
环境变量 XML_CATALOG_FILES
leaf
多个 catalog 用空格分隔,绝对路径采用 URI 格式,如 file:///
leaf
例如: export XML_CATALOG_FILES="catalog.xml file:///usr/share/xml/catalog.xml"
leaf
环境变量 XML_DEBUG_CATALOG 可以用于调试 xsltproc
hide
例如命令:
leaf
XML_CATALOG_FILES="catalog.xml file:///usr/share/xml/catalog.xml" \

XML_DEBUG_CATALOG=1 \

xsltproc docbook.xsl myfile.xml
hide
Saxon
hide
下载 resolver.jar
leaf
http://xml.apache.org/commons/dist/
leaf
将 resolver.jar 加入 CLASSPATH
hide
创建文件 CatalogManager.properties
hide
示例
leaf
catalogs=catalog.xml;../../dtd/docbook44/docbook.cat

relative-catalogs=false

static-catalog=yes

catalog-class-name=org.apache.xml.resolver.Resolver

verbosity=1
leaf
catalogs=xxx;xxx -以分号分隔的catalog文件
leaf
relative-catalogs=bool -定义 catalog 文件相对路径以何为准

false: 相对 CatalogManager.properties 所在目录;

true: 相对文档所在的路径;
leaf
verbosity 设置调试等级,越高(最高4) 调试信息越多;
leaf
将包含 CatalogManager.properties 的目录加入 CLASSPATH
hide
命令行示例
leaf
java -cp "/usr/java/saxon.jar:/docbook-xsl/extensions/saxon653.jar:\

/usr/share/resolver.jar;/usr/share" \

com.icl.saxon.StyleSheet \

-x org.apache.xml.resolver.tools.ResolvingXMLReader \

-y org.apache.xml.resolver.tools.ResolvingXMLReader \

-r org.apache.xml.resolver.tools.CatalogResolver \

-u \

-o myfile.html \

myfile.xml docbook.xsl
hide
说明
leaf
-cp 参数临时将jar 文件加入到 CLASSPATH 中
leaf
-u 参数,则命令行提供的文件名不作为物理路径,而是视为 URI,可以用 catalog 中设置对应为物理路径
leaf
-x, -y, and -r 参数配置 Saxon 使用 resolver 代码
hide
Xalan
leaf
过程和 Saxon 类似
hide
命令行为
leaf
java -cp "/usr/java/xerces.jar:/usr/java/xalan.jar:\

/docbook-xsl/extensions/xalan25.jar:\

/usr/share/resolver.jar:/usr/share" \

org.apache.xalan.xslt.Process \

-ENTITYRESOLVER org.apache.xml.resolver.tools.CatalogResolver \

-URIRESOLVER org.apache.xml.resolver.tools.CatalogResolver \

-out myfile.html \

-in myfile.xml \

-xsl http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl
hide
示例
leaf
<?xml version="1.0"?>

<!DOCTYPE catalog

PUBLIC "-//OASIS/DTD Entity Resolution XML Catalog V1.0//EN"

"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">



<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">



<!-- DTD and stylesheet files installed under /usr/share/xml -->

<group xml:base="file:///usr/share/xml/" >



<!-- Resolve DTD URL system ID to local file -->

<rewriteSystem

systemIdStartString="http://www.oasis-open.org/docbook/xml/4.4/"

rewritePrefix="docbook44/" />

<!-- Resolve stylesheet URL to local file -->

<rewriteURI

uriStartString="http://docbook.sourceforge.net/release/xsl/current/"

rewritePrefix="docbook-xsl-1.68.1/" />



<!-- Resolve DTD PUBLIC identifiers -->

<nextCatalog catalog="docbook44/catalog.xml" />



<!-- To resolve simple DTD SYSTEM identifiers. -->

<!-- Note: this does not work with Java resolver -->

<!-- classes in Saxon or Xalan -->

<system

systemId="docbook.dtd"

uri="docbook44/docbookx.dtd" />



<!-- To resolve short stylesheet references -->

<uri

name="docbook.xsl"

uri="docbook-xsl-1.68.1/html/docbook.xsl" />

<uri

name="chunk.xsl"

uri="docbook-xsl-1.68.1/html/chunk.xsl" />

<uri

name="fo-docbook.xsl"

uri="docbook-xsl-1.68.1/fo/docbook.xsl" />



</group>



</catalog>
hide
验证文档有效性
leaf
XSL 处理器在格式转换中,并不验证文档有效性,这将会导致好形,但不有效的 XML 文档,将导致转换后的文档格式异常。
hide
xsltproc 的 xmllint
leaf
XML_CATALOG_FILES=/share/catalog.xml xmllint --valid --nonet --noout gb2312.xml
hide
Xalan
hide
xalansamples.jar
leaf
java Validate document.xml
hide
XInclude
leaf
SGML 可以使用外部实体,来包含文件
leaf
XML 则通过 XInclude,可以将一篇文章分为几个物理文件,并组合在一起
hide
XInclude示例
hide
文件 intro.xml
leaf
<?xml version="1.0"?>

<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"

"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">

<chapter id="intro">

<title>Getting Started</title>

<section id="Installing">

...

</chapter>
hide
文件 index.xml

(包含 intro.xml)
leaf
<?xml version="1.0"?>

<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"

"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">

<book>

<title>User Guide</title>

<para>This guide shows you how to use the software.</para>

<xi:include

xmlns:xi="http://www.w3.org/2001/XInclude" href="intro.xml" />

...

</book>
hide
XInclude语法要点
leaf
允许嵌套
hide
href
leaf
href 部分可以是相对路径、绝对路径、网址或者其它格式的URI
hide
URI 格式的 href,可以用 catalog 文件进行映射
hide
例如
leaf
<xi:include href="file:///basics/intro.xml"

xmlns:xi="http://www.w3.org/2001/XInclude" />
leaf
<rewriteURI

uriStartString="file:///basics/"

rewritePrefix="file:///usr/share/docsource/modules/IntroMaterial/" />
leaf
XInclude早期的规范,允许在文件后面加上锚点来包含文章部分内容(现不支持),

新版本的规范,是通过 xpointer 实现。
hide
xpointer
leaf
可以通过 xpointer 属性,只包含文档的部分内容,而不是默认的整个 root 元素
hide
例如
leaf
<xi:include

href="intro.xml

xpointer="Installing"

xmlns:xi="http://www.w3.org/2001/XInclude" />
leaf
如果没有 href,只有 xpointer,则是将本文档的一部分包含
hide
parse="text"
hide
对包含文件不进行解析,特殊字符进行转换
leaf
& becomes &amp;

< becomes &lt;

> becomes &gt;

" becomes &quot;
leaf
parse="text"
hide
encoding=xxx
leaf
可以指定包含文件的编码,尤其是当 parse="text" 时
leaf
当 parse="xml",则该参数不应该提供,因为 XML 文件的前言可以指定编码
hide
XInclude fallback
leaf
即如果 XInclude 包含文件找不到,fallback 提供的内容被显示
hide
例如:
leaf
<xi:include href="intro.xml" xmlns:xi="http://www.w3.org/2001/XInclude">

<xi:fallback>

<para><emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis></para>

</xi:fallback>

</xi:include>
hide
entities
leaf
XInclude是用于替代实体,但是实体可以和 XInclude 配合使用
leaf
这样的优点是,包含的文件都声明在文件头 DOCTYPE 中,一目了然
leaf
XInclude 的 href 元素的值为实体引用
hide
示例
leaf
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"

"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [

<!ENTITY intro "part1/intro.xml">

<!ENTITY basics "part1/getting_started.xml">

<!ENTITY config "admin/configuring_the_server.xml">

<!ENTITY advanced "admin/advanced_user_moves.xml">

]>

<book>

<title>User Guide</title>

<para>This guide shows you how to use the software.</para>

<xi:include href="&intro;" xmlns:xi="http://www.w3.org/2001/XInclude"/>

<xi:include href="&basics;" xmlns:xi="http://www.w3.org/2001/XInclude"/>

<xi:include href="&config;" xmlns:xi="http://www.w3.org/2001/XInclude"/>

<xi:include href="&advanced;" xmlns:xi="http://www.w3.org/2001/XInclude"/>

...

</book>

hide
xsltproc
leaf
http://xmlsoft.org/XSLT/xsltproc2.html
hide
libxml2
leaf
xmlcatalog
leaf
xmllint
leaf
xmltproc
hide
命令行参数
leaf
xsltproc [options] stylesheet file [file ...]
hide
-o/--output file
leaf
输出到文件
hide
--timing
leaf
显示运行时间
hide
--novalid
leaf
略过 XML 验证,不加载 DTD
hide
--noout
leaf
不输出
leaf
--maxdepth val
hide
--docbook
leaf
输入文件是 SGML 格式的 DocBook
hide
--param name value
leaf
传递一个 Name/Value 对
leaf
value 是一个 UTF8 XPath 表达式,如果传递字符串,需要用 "'string'" 括起来,或者使用 --stringparam 参数
hide
--stringparam name value
leaf
传递一个 Name/Value 对
leaf
value 是一个 Utf8 字符串
hide
--nonet
leaf
不要通过网络传输 DTD, 实体等
hide
--catalogs
leaf
默认是通过环境变量 XML_CATALOG_FILES 读取 catalog 文件,

--catalogs 则通过环境变量 $SGML_CATALOG_FILES 读取 Catalog 文件,

如果都没有设置,则读取 /etc/xml/catalog 文件。
hide
--xinclude
leaf
do XInclude processing on document intput
hide
命令行示例
hide
HTML example:
leaf
XML_CATALOG_FILES=/share/catalog.xml xsltproc \

--nonet --timing --output gb2312.html \

--stringparam use.extensions 0 \

/share/xsl/docbook-xsl-1.69.1/html/docbook.xsl \

gb2312.xml
hide
FO example
leaf
XML_CATALOG_FILES=/share/catalog.xml xsltproc \

--nonet --timing --output gb2312.fo \

--stringparam use.extensions 0 \

/share/xsl/docbook-xsl-1.69.1/fo/docbook.xsl \

gb2312.xml
hide
Saxon
leaf
http://saxon.sourceforge.net/
hide
版本
hide
Saxon 6.5.3
leaf
XSLT 1.0 标准的实现
hide
Instant Saxon 6.5.3
leaf
仅用于 Windows, 依赖 Microsoft Java VM
hide
Saxon-B 8
leaf
开源版本,支持 XSLT 2.0 标准
hide
Saxon-SA 8
leaf
Saxon 8 的商业标准。SA 含义为“schema aware”,即实现了 W3C XML Schema 标准
leaf
偏离开源精神,是否值得关注?
hide
Xerces XML parser
leaf
有人将 Saxon 的 XML Parser换为 Xerces XML parser
hide
安装配置
leaf
CLASSPATH=$CLASSPATH:/usr/saxon/saxon.jar:\

/usr/docbook-xsl/extensions/saxon653.jar

export CLASSPATH
hide
Saxon with Xerces
leaf
CLASSPATH=$CLASSPATH:/usr/saxon/saxon.jar:\

/usr/docbook-xsl/extensions/saxon653.jar:/usr/share/xercesImpl.jar

export CLASSPATH
leaf
注意: Windows 下的路径分隔符为分号“;”
hide
测试
leaf
java com.icl.saxon.StyleSheet -t
hide
DocBook Saxon extensions
leaf
extensions/saxon65.jar
hide
启用扩展
hide
全局参数
leaf
use.extensions = 1
leaf
参数: callouts.extension
leaf
参数: textinsert.extension
leaf
参数: tablecolumns.extension
leaf
参数: linenumbering.extension
leaf
参数: graphicsize.extension
hide
命令行
hide
General syntax:
leaf
java com.icl.saxon.StyleSheet \

options \

xml-document \

stylesheet-path \

param=value
hide
HTML example:
leaf


java com.icl.saxon.StyleSheet \

-o myfile.html \

myfile.xml \

docbook-xsl/html/docbook.xsl \

use.extensions=1
hide
FO example:
leaf


java com.icl.saxon.StyleSheet \

-o myfile.fo \

myfile.xml \

docbook-xsl/fo/docbook.xsl \

use.extensions=1
hide
Saxon with Xerces parser:
leaf


java \

-Djavax.xml.parsers.DocumentBuilderFactory=\

org.apache.xerces.jaxp.DocumentBuilderFactoryImpl \

-Djavax.xml.parsers.SAXParserFactory=\

org.apache.xerces.jaxp.SAXParserFactoryImpl \

com.icl.saxon.StyleSheet \

-o myfile.html \

myfile.xml \

docbook-xsl/html/docbook.xsl
hide
Xalan
hide
Two Version
leaf
xalan-j_2_7_0-bin.tar.gz
hide
xalan-j_2_7_0-2jars.tar.gz
leaf
XSL processor 和 其它分作两个 Jar 文件打包而已
hide
包含的 Jar 文件
hide
xalan.jar
leaf
The main Xalan XSLT processor.
hide
xercesImpl.jar
leaf
The XML parser used to parse the XML file.
hide
xml-apis.jar
leaf
Provides the SAX, DOM, and JAVAX interfaces used by Xalan.

hide
xalansamples.jar
leaf
A set of sample Java applications using Xalan. This file is not needed for DocBook processing.

hide
xalanservlet.jar
leaf
Sample application using Xalan in a Java servlet. This file is not needed for DocBook processing.

hide
xsltc.jar
leaf
Bundled set of XSLTC functions for compiling XSL stylesheets into a set of Java classes. This file is not needed for DocBook processing. It may not be present, depending on which package of Xalan you downloaded.

hide
安装
hide
注意: Java 1.4 包含一个版本的 Xalan, 需要替换掉
leaf
将新版本覆盖到 /usr/jre2/lib/endorsed 目录下
hide
或者在命令行中指定另外目录作为 endorsed 目录
leaf
CLASSPATH=$CLASSPATH:/usr/Xalan/xalan.jar:/usr/Xalan/xml-apis.jar:\

/usr/Xalan/xercesImpl.jar:/usr/docbook-xsl/extensions/xalan25.jar

export CLASSPATH

java -Djava.endorsed.dirs=/usr/Xalan \

org.apache.xalan.xslt.Process \

-out myfile.html \

-in myfile.xml \

-xsl /docbook-xsl/html/docbook.xsl
leaf
其它版本的 Java,可以将 Xalan 安装在任意位置
hide
设置 CLASSPATH
leaf
CLASSPATH=$CLASSPATH:/usr/Xalan/xalan.jar:/usr/Xalan/xml-apis.jar:\

/usr/Xalan/xercesImpl.jar:/usr/docbook-xsl/extensions/xalan25.jar

export CLASSPATH
hide
测试是否正常工作
leaf
java org.apache.xalan.xslt.EnvironmentCheck
hide
DocBook Xalan extensions
leaf
extensions/xalan25.jar
hide
启用扩展
hide
全局参数
leaf
use.extensions = 1
leaf
参数: callouts.extension
leaf
参数: textinsert.extension
leaf
参数: tablecolumns.extension
leaf
参数: linenumbering.extension
leaf
参数: graphicsize.extension
hide
命令行
hide
General syntax:
leaf
java org.apache.xalan.xslt.Process \

-out outputfile \

-in xml-document \

-xsl stylesheet-path \

-param name value
hide
HTML example:
leaf
java org.apache.xalan.xslt.Process \

-out myfile.html \

-in myfile.xml \

-xsl docbook-xsl/html/docbook.xsl \

-param use.extensions 1

hide
FO example:
leaf
java org.apache.xalan.xslt.Process \

-out myfile.fo \

-in myfile.xml \

-xsl docbook-xsl/fo/docbook.xsl \

-param use.extensions 1

hide
fop
hide
参见
leaf
http://www-128.ibm.com/developerworks/cn/xml/x-xslfo/
leaf
参见: http://www.rocksun.net/wiki/Wiki.jsp?page=DocBook
leaf
http://www.xmlmind.com/foconverter/install.html
hide
下载
hide
jai
leaf
also needed to download JAI in order to get picture insertion working
leaf
http://java.sun.com/products/java-media/jai/
hide
fop
leaf
http://xml.apache.org/fop/
hide
版本
leaf
0.20.5
leaf
0.90alpha
hide
安装配置 0.20.5
leaf
FOP 0.20.5 不支持 png 等图形格式,需要安装 JAI
leaf
JAI 安装后,只需要将 jai_core.jar 和 jai_codec.jar 两个文件拷贝到 FOP 0.20.5 子目录中
hide
命令行(批处理)
hide
xsltproc 生成 *.fo 文件
leaf
设置 fop.extensions 参数为 1,生成 XSL-FO 格式的输出
hide
命令
leaf
xsltproc \

--output myfile.fo

--stringparam fop.extensions 1 \

docbook-xsl/fo/docbook.xsl \

myfile.xml
hide
Convert a .fo file on Unix or Linux:
leaf
fop.sh -fo myfile.fo -pdf myfile.pdf

hide
Convert an XML source file Unix or Linux:
leaf
fop.sh -xsl /docbook-xsl/fo/docbook.xsl -xml myfile.xml -pdf myfile.pdf

hide
Convert a .fo file on Windows:
leaf
fop.bat -fo myfile.fo -pdf myfile.pdf

hide
Convert an XML source file on Windows:
leaf
fop.bat -xsl /docbook-xsl/fo/docbook.xsl -xml myfile.xml -pdf myfile.pdf
hide
命令行
hide
Setting CLASSPATH:
leaf
CLASSPATH="/usr/java/fop-0.20.5/build/fop.jar:\

/usr/java/fop-0.20.5/lib/batik.jar:\

/usr/java/fop-0.20.5/xalan-version.jar:\

/usr/java/fop-0.20.5/lib/xercesImpl-version.jar:\

/usr/java/fop-0.20.5/lib/JimiProClasses.jar\

/usr/java/avalon-framework-cvs-version.jar"

export CLASSPATH
hide
General syntax:
leaf
java org.apache.fop.apps.Fop [options] \

[-fo|-xml] infile \

[-xsl stylesheet-path] \

-pdf outfile.pdf

hide
Convert a .fo file to pdf:
leaf
java org.apache.fop.apps.Fop \

-fo myfile.fo \

-pdf myfile.pdf

hide
Convert an XML source file directly to pdf:
leaf
java org.apache.fop.apps.Fop \

-xml myfile.xml \

-xsl docbook-xsl/fo/docbook.xsl \

-pdf myfile.pdf
hide
FOP 内存溢出问题
hide
这是由于为 JAVA 分配的内存不足引起的
leaf
为 java 命令加上参数 -Xmx128m ,可以分配 128M 内存
hide
可以修改 fop 批处理文件
leaf
<html>java <b>-Xmx128m</b> -cp "%LOCALCLASSPATH%" org.apache.fop.apps.Fop %1 %2 \

<br> %3 %4 %5 %6 %7 %8
hide
中文支持问题
leaf
参见: http://www.rocksun.net/wiki/Wiki.jsp?page=DocBook
hide
xsl 定制
leaf
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>



<xsl:import href="C:/docbook/docbook-xsl-1.68.1/fo/docbook.xsl"/>



<xsl:param name="fop.extensions" select="1" />

<xsl:param name="variablelist.as.blocks" select="1" />



<xsl:param name="chunker.output.encoding" select="'utf-8'" />

<xsl:param name="use.extensions" select="1" />

<xsl:param name="l10n.gentext.language" select="'zh_cn'" />

<xsl:param name="admon.graphics" select="1" />



<!--xsl:param name="draft.watermark.image" select="images/draft.png"></xsl:param-->



<xsl:param name="body.font.family">SimSun</xsl:param>

<xsl:param name="title.font.family">SimSun</xsl:param>

</xsl:stylesheet>
hide
fop 配置,增加中文字体
leaf
我们需要userconfig.xml来改变编译FO到PDF的一些默认属性,因为我们需要中文字体,需要用ttfreader.cmd来生成字体文件,这里我已经生成了文件在fonts目录下。然后建立userconfig.xml文件
hide
userconfig.xml
leaf
<!--<!DOCTYPE configuration SYSTEM "config.dtd">-->

<!--

this file contains templates which allow an user easy

configuration of Fop. Actually normally you don't need this configuration

file, but if you need to change configuration, you should

always use this file and *not* config.xml.

Usage: java org.apache.fop.apps.Fop -c userconfig.xml -fo fo-file -pdf pdf-file

-->





<configuration>



<!--

baseDir: normally the base directory is the directory where the fo file is

located. if you want to specify your own, uncomment this entry.

This value can also be a URL. Actually, the value is converted to

a URL.

-->

<!--

<entry>

<key>baseDir</key>

<value></value>

</entry>

-->



<!--

fontBaseDir: Similar to baseDir, except that this value is used for fonts. If

it isn't specified, the value from baseDir is used.

-->

<!--

<entry>

<key>fontBaseDir</key>

<value></value>

</entry>

-->



<!--

************************************************************************

HYPHENATION

************************************************************************

-->



<!--

hyphenation directory

if you want to specify your own directory with hyphenation pattern

then uncomment the next entry and add the directory name

-->



<!--

<entry>

<key>hyphenation-dir</key>

<value>/java/xml-fop/hyph</value>

</entry>

-->



<!--

************************************************************************

Add fonts here

************************************************************************

-->



<fonts>

<!-- example -->



<font metrics-file="fonts\simfang.xml" kerning="yes" embed-file="C:\WINDOWS\Fonts\simfang.ttf">

<font-triplet name="FangSong_GB2312" style="normal" weight="normal"/>

</font>





<!--

<font metrics-file="arialb.xml" kerning="yes" embed-file="arialb.ttf">

<font-triplet name="Arial" style="normal" weight="bold"/>

<font-triplet name="ArialMT" style="normal" weight="bold"/>

</font>

<font metrics-file="ariali.xml" kerning="yes" embed-file="ariali.ttf">

<font-triplet name="Arial" style="italic" weight="normal"/>

<font-triplet name="ArialMT" style="italic" weight="normal"/>

</font>

<font metrics-file="arialbi.xml" kerning="yes" embed-file="arialbi.ttf">

<font-triplet name="Arial" style="italic" weight="bold"/>

<font-triplet name="ArialMT" style="italic" weight="bold"/>

</font>

-->



<font metrics-file="fonts\simsun.xml" embed-file="C:\windows\fonts\simsun.ttc" kerning="yes">

<font-triplet name="SimSun" style="normal" weight="normal"/>

<font-triplet name="SimSun" style="normal" weight="bold"/>

<font-triplet name="NSimSun" style="italic" weight="normal"/>

<font-triplet name="NSimSun" style="italic" weight="bold"/>

</font>

<!-- Example Japanese fonts

<font metrics-file="msmincho.xml" embed-file="Cyberbit.ttf" kerning="yes">

<font-triplet name="Mincho" style="normal" weight="normal"/>

<font-triplet name="Mincho" style="normal" weight="bold"/>

<font-triplet name="Mincho" style="italic" weight="normal"/>

<font-triplet name="Mincho" style="italic" weight="bold"/>

</font>

-->

</fonts>





</configuration>
leaf
xmlroff
hide
DocBook 元素参考
hide
词汇修饰
hide
文字修饰
hide
emphasis
leaf
字体强调
hide
例如
leaf
<para>

The <emphasis>most</emphasis> important example of this

phenomenon occurs in A. Nonymous's book

<citetitle>Power Snacking</citetitle>.

</para>
hide
superscript
leaf
上标
hide
例如
leaf
<para>

The equation e<superscript>&pi;i</superscript> + 1 = 0 ties together

five of the most important mathematical constants.

</para>
hide
subscript
leaf
下标
hide
例如
leaf
<para>

Thirsty? Have some H<subscript>2</subscript>O.

</para>
hide
quote
leaf
引用文字,即将文字两端添加引号(或其它)扩起来。
hide
示例
leaf
<para>

This software is provided <quote>as is</quote>, without expressed

or implied warranty.

</para>
hide
文字语意
hide
abbrev
leaf
指出句点结尾的缩写词汇
hide
例如
leaf
<para>The <abbrev>Assn.</abbrev> of Computing Machinery would probably never

abbreviate “Association” like this.

</para>
hide
acronym
leaf
指出大写首字母的词汇
hide
例如
leaf
<para>

In the United States, <acronym>NASA</acronym> stands for the

National Aeronautics and Space Administration.

</para>
leaf
foreignphrase
hide
phrase
leaf
为文字增加属性
hide
wordasword
leaf
所指仅为文字
hide
视窗对象
hide
accel
leaf
定义快捷键
hide
例如
leaf
<para os="windows">You can exit most Windows applications by selecting

<guimenuitem><accel>Q</accel>uit</guimenuitem> or

<guimenuitem>E<accel>x</accel>it</guimenuitem> from

the <guimenu><accel>F</accel>ile</guimenu> menu.

</para>
leaf
其它类似元素:

guibutton, guiicon, guilabel, guimenu, guimenuitem, guisubmenu, keycap, keycode, keycombo, keysym, menuchoice, mousebutton, shortcut
hide
guiicon
leaf
出现在 GUI 界面中的图形 icon
hide
例如
leaf
<para>The exact text of the <guilabel>Legend</guilabel> and other labels on the

graph is dependent upon the language of the current locale. Likewise,

the text of the <guibutton>OK</guibutton> button and other buttons may vary.

The <guiicon><inlinemediaobject>

<imageobject>

<imagedata fileref="figures/legend.png"/>

</imageobject>

</inlinemediaobject></guiicon>

icon and the other icons on the left side of the display may be

configured by the local administrator, but they are not

generally expected to vary from locale to locale.

</para>
hide
定义
leaf
database, filename, hardware, medialabel, productname.
hide
建立链接
hide
anchor
leaf
建立锚点
hide
例如
leaf
<para>

The anchor element<anchor id="example.anchor.1"/> is empty and contributes

nothing to the flow of the content in which it occurs. It is only useful

as a target.

</para>
hide
ulink
hide
指向 URL 的链接
leaf
url 属性为链接地址
hide
打开链接的方式
leaf
如果定义变量 $ulink.target, 则链接的属性 target 指向 $ulink.target
leaf
type 属性的定制
hide
链接文字
leaf
如果是空元素,则 url 属性值作为链接文字
leaf
否则,元素内容为链接文字
hide
例如
leaf
<para>

For more information, see the O'Reilly catalog entry for

<ulink url="http://www.ora.com/catalog/tex/"><citetitle>Making TeX

Work</citetitle></ulink>.

</para>
hide
link
leaf
如果 link 元素有内容,则不管其是否具有 endterm 属性,都是将元素内容作为热点文字,指向 linkend 指向的文档内部的某个链接;
leaf
如果 link 元素没有内容,并且具有 endterm 属性,将 endterm 指向的元素的值,拷贝到 link 处,并作为热点文字,指向 linkend 指向的文档内部的 endterm 指向的链接;
hide
例如
leaf
<sect1><title>Examples of <sgmltag>Link</sgmltag></title>



<para>

In this sentence <link linkend='nextsect'>this</link> word is

hot and points to the following section.

</para>



<para>

There is also a link to the section called

<quote><link linkend='nextsect' endterm="nextsect.title"/></quote>

in this sentence.

</para>



<sect2 id='nextsect'><title id='nextsect.title'>A Subsection</title>



<para>

This section only exists to be the target of a couple of links.

</para>



</sect2>

</sect1>
hide
olink
leaf
不直接指向目标
leaf
例如 website 中指向网页的链接
leaf
xref
hide
图像
hide
mediaobjectco
leaf
A media object that contains callouts
hide
内容模型
leaf
mediaobjectco ::=

(objectinfo?,imageobjectco,

(imageobjectco|textobject)*)
hide
inlinemediaobject
leaf
inline 方式显示。可以组合对同一信息的各种可替换版本,如高分辨率图片、低分辨率图片、文本。打印输出优先选择高分辨率,网页版本可能二选一,文本输出选择文字版本。
hide
内容模型
leaf
inlinemediaobject ::=

(objectinfo?,

(videoobject|audioobject|imageobject|imageobjectco|textobject)+)
hide
例如
leaf
<inlinemediaobject>

<imageobject>

<imagedata fileref="figures/emc2.png"/>

</imageobject>

<textobject>

<phrase>E=mc<superscript>2</superscript></phrase>

</textobject>

</inlinemediaobject>
hide
mediaobject.
leaf
以 block 方式显示。可以组合对同一信息的各种可替换版本,如高分辨率图片、低分辨率图片、文本。打印输出优先选择高分辨率,网页版本可能二选一,文本输出选择文字版本。
hide
内容模型
leaf
mediaobject ::=

(objectinfo?,

(videoobject|audioobject|imageobject|imageobjectco|textobject)+,

caption?)
hide
图片
hide
figure
leaf
自动编号、带标题的图片
hide
例如
leaf
<figure><title>The Pythagorean Theorem Illustrated</title>

<mediaobject>

<imageobject>

<imagedata fileref="figures/pythag.png"/>

</imageobject>

<textobject><phrase>An illustration of the Pythagorean Theorem</phrase></textobject>

</mediaobject>

</figure>
hide
informalfigure
leaf
不带标题的 figure
hideidea
设置图像的 border 为 0
hide
使用 CSS
leaf
span.inlinemediaobject img {border: 0 ; }
hide
表格
hide
table
hide
内容模型
leaf
table ::=

(((blockinfo?,

(title,titleabbrev?),

(indexterm)*,

textobject*,

(graphic+|mediaobject+|tgroup+))|

(caption,

(col*|colgroup*),

thead?,tfoot?,

(tbody+|tr+))))
hide
示例
leaf
<table frame='all'><title>Sample Table</title>

<tgroup cols='5' align='left' colsep='1' rowsep='1'>

<colspec colname='c1'/>

<colspec colname='c2'/>

<colspec colname='c3'/>

<colspec colnum='5' colname='c5'/>

<thead>

<row>

<entry namest="c1" nameend="c2" align="center">Horizontal Span</entry>

<entry>a3</entry>

<entry>a4</entry>

<entry>a5</entry>

</row>

</thead>

<tfoot>

<row>

<entry>f1</entry>

<entry>f2</entry>

<entry>f3</entry>

<entry>f4</entry>

<entry>f5</entry>

</row>

</tfoot>

<tbody>

<row>

<entry>b1</entry>

<entry>b2</entry>

<entry>b3</entry>

<entry>b4</entry>

<entry morerows='1' valign='middle'><para> <!-- Pernicous Mixed Content -->

Vertical Span</para></entry>

</row>

<row>

<entry>c1</entry>

<entry namest="c2" nameend="c3" align='center' morerows='1' valign='bottom'>Span Both</entry>

<entry>c4</entry>

</row>

<row>

<entry>d1</entry>

<entry>d4</entry>

<entry>d5</entry>

</row>

</tbody>

</tgroup>

</table>
hide
informaltable
leaf
不带标题的表格
hide
Example
hide
example
leaf
带标题,以及自动编号
hide
示例
leaf
<example><title>A DSSSL Function</title>

<programlisting>

(define (node-list-filter-by-gi nodelist gilist)

;; Returns the node-list that contains every element of the original

;; nodelist whose gi is in gilist

(let loop ((result (empty-node-list)) (nl nodelist))

(if (node-list-empty? nl)

result

(if (member (gi (node-list-first nl)) gilist)

(loop (node-list result (node-list-first nl))

(node-list-rest nl))

(loop result (node-list-rest nl))))))

</programlisting>

</example>
hide
informalexample
leaf
不带标题的示例
hide
示例
leaf
<informalexample>

<programlisting>

sub print_content_model {

my($self) = shift;

local($_) = shift;

local(*FILE) = shift;



my(@cm) = $self->format_content_model2($_);

foreach $_ (@cm) {

print FILE $self->make_links($_, 1, 1), "\n";

}

}

</programlisting>

</informalexample>
hide
qandaset
hide
示例
leaf
<qandaset defaultlabel='qanda'>

<qandaentry>

<question>

<para>

To be, or not to be?

</para>

</question>

<answer>

<para>

That is the question.

</para>

</answer>

</qandaentry>

</qandaset>
hide
DocBook Website
Arrow Link
hide
概念
leaf
由 XML 文件转换为网页
leaf
Website XML 文件的根元素是 website, 是由部分 DocBook 元素和部分 website 元素构成
hide
website 的 DTD
hide
website.dtd
leaf
Simplified DocBook DTD 的子集,只有150 个元素
hide
website-full.dtd
leaf
DocBook DTD 的子集,约有400 个元素
hide
layout.dtd
leaf
用户创建 layout.xml 网站结构文件的 DTD
hide
autolayout.dtd
leaf
自动生成的 autolayout.xml 的 DTD
hide
与 DocBook 的区别
leaf
website 不能使用的元素: set, book, chapter, article, index
hide
在 catalog.xml 添加条目
leaf
<nextCatalog catalog="website/2.6.0/catalog.xml" />



<!-- 由于 website DTD 中用到了 4.4 版本的 DocBook DTD, 故有如下定义-->

<rewriteSystem

systemIdStartString="http://www.oasis-open.org/docbook/xml/4.4/"

rewritePrefix="dtd/docbook-4.5/" />

<rewriteSystem

systemIdStartString="http://docbook.org/xml/4.4/"

rewritePrefix="dtd/docbook-4.5/" />
hideforward
layout.xml 文件
hide
说明
hide
DTD
leaf
<!ELEMENT layout ((config|style|script|headlink|copyright)*, toc+, notoc*)>
leaf
见 layout.dtd
hide
layout.xml 文件好似一个目录索引文件
leaf
每一个 XML 文件对应于 layout.xml 中的一条 tocentry 记录
hide
layout.xml 文件的目录条目

可以组成一个层次结构
leaf
tocentry 元素可以嵌套,即可以包含子 tocentry 元素,从而构成一个层次结构
leaf
该层次结构对应于网页左侧的导航条
leaf
layout.xml 将在样式表 autolayout.xsl 处理下,生成 autolayout.xml
hide
XML 前言
leaf
<?xml version="1.0"?>

<!DOCTYPE layout PUBLIC "-//Norman Walsh//DTD Website Layout V2.5.0//EN"

"http://docbook.sourceforge.net/release/website/2.5.0/layout.dtd">
hide
<layout> 根元素
leaf
<layout>
hide
顶级元素

(忠实拷贝)
hide
config
leaf
<!ELEMENT config EMPTY>

<!ATTLIST config

param CDATA #REQUIRED

value CDATA #REQUIRED

altval CDATA #IMPLIED

>
leaf
<config param="banner" value="graphics/icons/iconhome.gif"

altval="Banner"/>

hide
<config param='toc.expand.depth" value="number"/>
leaf
网页左侧导航条展开层次
hide
style
leaf
<!ELEMENT style (#PCDATA)>

<!ATTLIST style

src CDATA #IMPLIED

type CDATA #IMPLIED

>
leaf
style 元素设定每个网页都要用的样式表。(可为多个)
leaf
<style src="example.css" type="text/css"/>
hide
script
leaf
<!ELEMENT script (#PCDATA)>

<!ATTLIST script

src CDATA #IMPLIED

language CDATA #IMPLIED

type CDATA #IMPLIED

>
hide
headlink
leaf
<!ELEMENT headlink EMPTY>

<!ATTLIST headlink

href CDATA #IMPLIED

media CDATA #IMPLIED

name CDATA #IMPLIED

rel CDATA #IMPLIED

rev CDATA #IMPLIED

src CDATA #IMPLIED

title CDATA #IMPLIED

type CDATA #IMPLIED

>
leaf
<headlink rel="icon" href="http://nwalsh.com/images/nwalsh-icon16.png" type="image/png"/>
hide
copyright
leaf
<!ELEMENT copyright (year+, holder+)>
leaf
copyright 元素将显示在每一个网页下面
Arrow Link
hide
leaf
<copyright>

<year>1999-2001</year><year>2006</year>

<holder role="http://nwalsh.com/~ndw/">Norman Walsh</holder>

</copyright>
hide
toc 元素
hide
说明
hide
DTD
leaf
<!ELEMENT toc (tocentry*)>

<!ATTLIST toc

page CDATA #REQUIRED

dir CDATA #IMPLIED

filename CDATA #IMPLIED

>
leaf
toc 元素用于设定首页
leaf
虽然可以存在多个 toc,但是生成的多个主页及其子页面互相之间没有菜单上的关联,因而没有什么实际意义?
hide
多 toc 的问题
leaf
最好只有一个 toc,因为如果存在多个 toc,可能会出现如下问题:
leaf
如果存在多个 toc,则 notoc 生成的页面在选择主页面时,会出现问题;(autolayout.xsl)
leaf
如果存在多个 toc,则形如 <xsl:if test="$autolayout/autolayout/toc[1]/@id = $id"> 的语句存在问题;(tabular.xsl)
hide
属性
hide
page 属性(必须)
leaf
page 参数的值为首页对应的 xml 文件名;
hide
filename 属性
leaf
filename 属性的值为转换之后的 html 文件名
hide
dir 属性
leaf
网页生成的目录
hide
子元素
leaf
tocentry
Arrow Link
hide
示例
leaf
<toc page="website.xml" filename="index.html">
hide
tocentry 元素
hide
说明
hide
DTD
leaf
<!ELEMENT tocentry ((title|titleabbrev|summary)*, tocentry*)>

<!ATTLIST tocentry

id ID #IMPLIED

page CDATA #IMPLIED

href CDATA #IMPLIED

dir CDATA #IMPLIED

filename CDATA #IMPLIED

revisionflag (added|changed) #IMPLIED

tocskip (0|1) "0"

>
leaf
定义首页下面的网页,tocentry 可以包含下一级的 tocentry,构成网页的层次结构
hide
page 型页面
hide
属性
leaf
page 属性的值为 XML 文件名
hide
filename 属性为转换之后的 HTML 文件名
leaf
不要在 filename 中使用目录名,dir 属性是用来定义目录名的
hide
dir 属性是目录名
leaf
如果 tocentry 嵌套,则 dir 目录也嵌套,除非指定绝对路径
leaf
dir 使用绝对路径 "/",是相对于 output-root 目录
hide
tocskip
leaf
tocskip 一般用于包含子项的 tocentry 条目,若设置 tocskip,则该条目直接指向第一个子条目
hide
revisionflag
hide
"changed"
leaf
修改条目指示
hide
"add"
leaf
新增条目指示
hide
"deleted"
leaf
删除条目指示
hide
例如
leaf
<tocentry page="wslayout.xml" filename="layout.html" revisionflag="changed" dir="build"/>

<tocentry page="building.xml" filename="building.html" tocskip='1'>

hide
href 型页面
hide
属性
leaf
id 属性
leaf
href 属性
hide
tocskip
leaf
参见
Arrow Link
hide
revisionflag
leaf
参见
Arrow Link
hide
元素
leaf
title
leaf
titleabbrev
leaf
summary
hide
例如
leaf
<tocentry id="worldhello.net" href="http://www.worldhello.net/" tocskip="0">

<title>WorldHello.net</title>

<titleabbrev>WorldHello</titleabbrev>

<summary>Johnson's Homepage</summary>

</tocentry>
hide
更多示例
leaf
<toc page="website.xml"

filename="index.html">

<tocentry page="wslayout.xml"

revisionflag="changed"

filename="layout.html"/>

<tocentry page="olink.xml"

filename="linking.html"/>

<tocentry page="custom.xml"

filename="custom.html"/>

<tocentry page="building.xml"

filename="building.html"

tocskip='1'>

<tocentry page="build-make.xml"

filename="buildmake.html"

dir="build"/>

<tocentry page="build-ext.xml"

filename="buildext.html"

dir="build"/>

<tocentry page="build-textonly.xml"

filename="textonly.html"

dir="build"/>

</tocentry>

<tocentry page="test2.xml"

filename="formtest.html"/>

...



</toc>
hide
notoc 元素
hide
说明
hide
DTD
leaf
<!ELEMENT notoc EMPTY>

<!ATTLIST notoc

page CDATA #REQUIRED

dir CDATA #IMPLIED

filename CDATA #IMPLIED

>
leaf
作为顶级元素存在,可以进行编译,但是不在导航条中生成链接
hide
问题
leaf
当有多个 toc 存在时,notoc 在选择主页时只会选择第一个 toc 作为其主页
hide
示例
leaf
<notoc page="sample1.xml" filename="sample1.html" dir="/samples"/>
hideforward
webpage 网页
hide
说明
hide
DTD 参见 website.dtd 和 website-full.dtd
leaf
<!ENTITY % webpage.mix "(config*, head, (%bookcomponent.content;),

appendix*, bibliography*)">
leaf
一个 xml 文件将编译出对应的一个 html 文件,当然用不同的样式表,可以生成不同风格的多个网页
hide
XML 前言
leaf
<?xml version="1.0"?>



<!DOCTYPE webpage PUBLIC "-//Norman Walsh//DTD Website V2.5.0//EN"

"website.dtd" >

或者

<!DOCTYPE webpage PUBLIC "-//Norman Walsh//DTD Website Full V2.5.0//EN"

"website-full.dtd">

hide
<webpage> 根元素
leaf
<webpage id="home">
hide
可选的任意 config 元素
leaf
<config param="desc" value="The Test Home Page"/>
leaf
<config param="rcsdate" value="$Date$"/>
Arrow Link
hide
显示在首页下方中间的页面链接
Arrow Link
leaf
<config param="footer" value="URL" altval="文字说明"/>
leaf
或 <config param="footerlink" value="page_id" altval="文字说明"/>
leaf
还可以定义在 autolayout.xml 中。
hide
页面反馈(feedback)
Arrow Link
leaf
<config param="feedback.href" value="URL"/>
hide
参数 <xsl:param name="feedback.with.ids" select="0"/>
leaf
是否将网页 ID 加在 feedback URL 后面
hide
参数 <xsl:param name="feedback.link.text">Feedback</xsl:param>
leaf
feedback 链接的文字
hide
head 部分
hide
title 元素
leaf
既作为导航条页面名称,也作为网页页面名称
leaf
titleabbrev
leaf
summary
leaf
keywords
hide
copyright 元素(可选)
leaf
优先级高于 layout.xml 的 copyright 元素
Arrow Link
hide
leaf
<head>

<title>Welcome to Website</title>

<summary>Introduction</summary>

<keywords>Norman Walsh, DSSSL, SGML, XML, DocBook, Website</keywords>

</head>
hide
DocBook 元素构成网页的主体
leaf
<para>This small, somewhat contrived website demonstrates the

Website document type. Website provides a system for building static

Websites from XML content.</para>
hide
即需即编:两种编译方式
hide
XSLT编译方式
leaf
使用 xsltproc,每次编译所有的网页都要重新生成,不能做到只生成改变的网页
leaf
Saxon, Xalan 支持的 XSLT 扩展函数,可以做到只生成改变的网页
hide
xslt 扩展
leaf
website/extensions/saxon653.jar
leaf
website/extensions/xalan25.jar
hide
可用样式表
leaf
chunk-tabular.xsl
leaf
chunk-website.xsl
hide
Makefile 编译方式
leaf
和 XSLT 相比,更灵活
hide
网页创建流程
leaf
1. 创建 Makefile
leaf
2. 生成空文件 depends.tabular
hide
3. 执行 make depends
hide
先生成 autolayout.xml 文件
leaf
autolayout.xml: layout.xml

xsltproc --output $@ $(STYLEDIR)/autolayout.xsl $<

make depends
hide
再生成 depends.tabular 文件
leaf
depends: autolayout.xml

xsltproc \

--output depends.tabular \

--stringparam output-root htdocs \

$(STYLEDIR)/makefile-dep.xsl \

$<
leaf
makefile-dep.xsl 样式表作用于autolayout.xml 文件
hide
包含所有 HTML 依赖性定义。其格式为:
leaf
html/productlist.html: products.xml

... ...
hide
4. make
hide
make website
leaf
website 作为 make 的 target,参见 depends.tabular 文件
hide
以后每次修改 layout.xml 或者网页 XML,

只执行本命令即可。即需即编
leaf
%.html: autolayout.xml

xsltproc \

--output $@ \

--stringparam autolayout-file autolayout.xml \

--stringparam output-root htdocs \

$(STYLEDIR)/tabular.xsl \

$(filter-out autolayout.xml,$^)
hide
可用样式表
leaf
tabular.xsl
leaf
website.xsl
leaf
示例参见:
Arrow Link
hide
网页之间的链接: olink
leaf
由于网页来自不同 XML,因此不能用 xref 和 link
hide
应该使用 olink
leaf
olink 有两个参数,一个定位文档,另外一个参数定位文档中的位置
leaf
例如: <olink targetdoc="home" targetptr="whatsnew"/>
leaf
targetdoc 的值是目标文档的 website 根元素的 id 属性
leaf
targetptr 的值是文档内部的 id 值,如果定位到文档头部,该值也可以和 targetdoc 一样
hide
website.database.document
leaf
如果 olink 元素有内容,则作为链接的文字
leaf
如果 olink 元素为空元素,则需要依靠生成的 database 文件
hide
两种编译方式
hide
XSLT 编译
leaf
<html>

如:<br>

xsltproc \<br>

<b>--stringparam collect.xref.targets yes </b>\<br>

--stringparam output-root htdocs \<br>

../website/xsl/chunk-tabular.xsl \<br>

autolayout.xml
leaf
会生成文件 : website.database.xml
hide
Makefile 编译
leaf
增加了一个步骤
Arrow Link
hide
步骤3之后,增加了使用样式表 website-targets.xsl 创建 website.database.xml 文件
leaf
website.database.xml: autolayout.xml

$(PROC) \

--output $@ \

website-targets.xsl $<
hide
xslt 编译过程增加一个参数
leaf
<html>

%.html: autolayout.xml<br>

$(PROC) \<br>

--output $@ \<br>

<b>--stringparam website.database.document website.database.xml </b>\<br>

--stringparam output-root htdocs \<br>

tabular.xsl \<br>

$(filter-out autolayout.xml,$^)
hide
Makefile 示例
leaf
PROC = XML_CATALOG_FILES=/docbook/src/catalog.xml xsltproc --nonet

XSLPATH = /docbook/src/xsl/docbook-xsl-1.69.1/website

all:

make website



include depends.tabular



autolayout.xml: layout.xml

$(PROC) \

--output $@ \

$(XSLPATH)/autolayout.xsl $<



make depends



depends: autolayout.xml

$(PROC) \

--output depends.tabular \

--stringparam output-root htdocs \

$(XSLPATH)/makefile-dep.xsl $<





website.database.xml: autolayout.xml

$(PROC) \

--output $@ \

$(XSLPATH)/website-targets.xsl $<



%.html: autolayout.xml

$(PROC) \

--output $@ \

--stringparam website.database.document website.database.xml \

--stringparam output-root htdocs \

$(XSLPATH)/tabular.xsl \

$(filter-out autolayout.xml,$^)

hide
链接到其它网站
hide
tocentry 可以定义除了网页之外,还可以直接定义 URL
hide
如指向外部 URL
leaf
<tocentry id="nwalsh.com" href="http://nwalsh com">

<title>Norm Walsh's Website</title>

</tocentry>
hide
指向本地其它页面的 URL
leaf
<tocentry id="mybook" href="../mybook/index.html">

<title>My Book</title>

</tocentry>
leaf
ulink
leaf
olink
leaf
增加非 website 网页
Arrow Link
hide
website CSS
hide
两种方式定义
leaf
html.stylesheet 定义,缺点是 css 路径是绝对路径
leaf
另外一个方法,是在 layout.xml 中定义。好处是生成的 HTML 网页使用相对路径引用 CSS
hide
例如
leaf
<style src="mystyle.css" type="text/css"/>

<toc>

<tocentry ...>
hide
website 定制
leaf
参见
Arrow Link
hide
参考网站
hide
http://gpl-violations.org/about-website.html
leaf
http://www.netfilter.org/about-website.html
leaf
DocBook slide
hide
DocBook XSL 解密
hide
website
hide
首先明确一点 website 并非独立存在的,他依赖 DocBook 的 XSL
leaf
除了解决对 DocBook 的元素进行格式化外
leaf
还利用 DocBook XSL 中 common/, html/ 中的文件,如 l10n.xsl,
hidegohome ksmiletris
autolayout.xsl
leaf
功能:作用于 layout.xml 文件,生成 autolayout.xml 文件
Arrow Link
hidemessagebox_warning
模板 <xsl:template match="style|script|headlink|copyright|config">
leaf
<xsl:template match="style|script|headlink|copyright|config">

<xsl:apply-templates select="." mode="copy"/>

</xsl:template>
leafmessagebox_warning
模板 <xsl:template match="toc">
Arrow Link
hidemessagebox_warning
模板 tocentry
leaf
如果有属性 href,调用模板 tocentry.href
Arrow Link
leaf
否则,调用模板 tocentry.page
Arrow Link
hidemessagebox_warning
模板 tocentry.page
leaf
读取 page 属性指向的 XML 文件,读入 $page 变量
hide
属性
leaf
page 属性
hide
id 属性
leaf
page 页的第一个元素 (website元素) 必须具备 id 属性
hide
dir 属性
leaf
dir 属性为该页目录,目录可以是相对于上一级 tocentry 的目录!或者是绝对目录
hide
filename 属性
leaf
filename 变量来自 filename 属性,或者 layout.xml 的 名为 default-filename config 元素,或者为 index.html
hide
元素
leaf
元素 title|titleabbrev|summary 来自于 $page 页(webpage页)
leaf
title
leaf
titleabbrev
leaf
summary
leaf
递归子 tocentry
Arrow Link
hidemessagebox_warning
模板 tocentry.href
leaf
必须同时具备属性 href, id,且具备元素 title
hide
属性
leaf
href
leaf
id
leaf
tocskip
hide
元素
leaf
元素 title|titleabbrev|summary 来自于 layout.xml 本身
leaf
title
leaf
titleabbrev
leaf
summary
hidegohome ksmiletris
makefile-dep.xsl
leaf
功能: 作用于 autolayout.xml 文件,生成 depends.tabular 和 depends.notabular 文件
hide
全局属性
leaf
如下属性最好是在命令行中提供,而不是在 XSL 定制层
hide
<xsl:param name="add-website-depends" select="''"/>
leaf
用于为 website 目标添加附加的依赖
hide
<xsl:param name="depends-file" select="''"/>
leaf
depends 文件名
hide
<xsl:param name="output-root" select="''"/>
leaf
输出路径
hide
<xsl:param name="filename-prefix" select="''"/>
leaf
生成 html 文件的前缀
hide
<xsl:param name="remove-output-root" select="0"/>
leaf
默认生成的 clean 目标,是删除每个生成的 HTML 文件
leaf
如果设置 remove-output-root 为1,则删除整个 output-root
hidemessagebox_warning
模板 <xsl:template match="autolayout">
leaf
创建目标 website:
Arrow Link Arrow Link Arrow Link
leaf
创建目标
Arrow Link Arrow Link
hide
创建目标 distclean:
leaf
除 autolayout.xml website.database.xml 外,还有
Arrow Link
hide
创建目标 clean:
leaf
如果 $remove-output-root = 1
Arrow Link
leaf
否则
Arrow Link Arrow Link
hidemessagebox_warning
模板 <xsl:template match="toc" mode="all">
leaf
获得空格分隔的目标文件名列表
hidemessagebox_warning
模板 <xsl:template match="tocentry|notoc" mode="all">
leaf
获得空格分隔的目标文件名列表
hidemessagebox_warning
模板 <xsl:template match="toc">
leaf
生成诸如 index.html : index.xml 的依赖
hidemessagebox_warning
模板 <xsl:template match="tocentry|notoc">
leaf
生成诸如 target.html : source.xml 的依赖
hidegohome ksmiletris
website-targets.xsl
Arrow Link
leaf
功能: 作用于 autolayout.xml 文件,生成 website.database.xml 文件
leaf
模板 <xsl:template match="autolayout" mode="collect.targets">
Arrow Link
hidegohome ksmiletris
tabular.xsl
Arrow Link Arrow Link
leaf
说明: 创建带左侧导航条的网页
hide
全局参数
hide
以图标方式显示警告
leaf
<xsl:param name="admon.style" select="''"/>

<xsl:param name="admon.graphics" select="1"/>

<xsl:param name="admon.graphics.path">graphics/</xsl:param>

<xsl:param name="admon.graphics.extension">.gif</xsl:param>
hide
左侧导航条背景色
leaf
/webpage/config[@param='navbgcolor']/@value
leaf
或 $autolayout/autolayout/config[@param='navbgcolor']/@value
leaf
<xsl:param name="autolayout" select="document($autolayout-file, /*)"/>
hidemessagebox_warning
模板 <xsl:template match="webpage">
hide
网页 <head> 部分
leafbell
<xsl:apply-templates select="head" mode="head.mode"/>
Arrow Link
leafbell
<xsl:apply-templates select="config" mode="head.mode"/>
hidebell
<xsl:call-template name="body.attributes"/>
hidemessagebox_warning
html/docbook.xsl
leaf
定义样式

<xsl:template name="body.attributes">

<xsl:attribute name="bgcolor">white</xsl:attribute>

<xsl:attribute name="text">black</xsl:attribute>

<xsl:attribute name="link">#0000FF</xsl:attribute>

<xsl:attribute name="vlink">#840084</xsl:attribute>

<xsl:attribute name="alink">#0000FF</xsl:attribute>

</xsl:template>
hide
广告栏
leafbell
<xsl:call-template name="allpages.banner"/>
Arrow Link
hide
是首页么
hide
首页
leafbell
<xsl:call-template name="home.navhead.cell"/>
Arrow Link
leafbell
<xsl:call-template name="home.navhead.upperright.cell"/>
Arrow Link
leafbell
<xsl:call-template name="home.navhead.separator"/>
hide
非首页
leafbell
<xsl:apply-templates select="./head/title" mode="title.mode"/>
Arrow Link
hide
网页右侧主体页面
hide
执行 DocBook 样式表
leafbell
<xsl:apply-templates select="child::node()[not(self::webpage)]"/>
hide
脚注
leafbell
<xsl:call-template name="process.footnotes"/>
Arrow Link
hide
网页左侧导航条
leaf
<xsl:apply-templates select="$toc">

<xsl:with-param name="pageid" select="@id"/>

</xsl:apply-templates>
Arrow Link
hide
页脚
hidebell
<xsl:call-template name="webpage.table.footer"/>
leaf
空模板,参见
Arrow Link
leaf
定制,参见
Arrow Link
leafbell
<xsl:call-template name="webpage.footer"/>
Arrow Link
leafmessagebox_warning
模板 home.navhead.cell
Arrow Link
leafmessagebox_warning
模板 home.navhead
leafmessagebox_warning
模板 home.navhead.upperright.cell
Arrow Link
leafmessagebox_warning
模板 home.navhead.upperright
hideforward ksmiletris
toc-tabular.xsl
hide
全局参数
hide
revsionflag 的文字
leaf
<xsl:param name="nav.text.revisionflag.added">New</xsl:param>

<xsl:param name="nav.text.revisionflag.changed">Changed</xsl:param>

<xsl:param name="nav.text.revisionflag.deleted"></xsl:param>

<xsl:param name="nav.text.revisionflag.off"></xsl:param>
hide
图标样式
hide
<xsl:param name="nav.icon.style">triangle</xsl:param>
leaf
可以选择: folder, folder16, plusminus, triangle, arrow
hide
图标文件路径
leaf
<xsl:param name="nav.icon.path">graphics/navicons/</xsl:param>
leaf
<xsl:param name="nav.icon.extension">.gif</xsl:param>
hide
导航条展开层次
leaf
<xsl:param name="toc.expand.depth" select="1"/>
hide
模板: <xsl:template match="toc">
leaf
显示网页左侧导航条
hide
显示 logo
hide
若首页
leaf
显示图片 homebanner-tabular 作为 logo
hide
非首页
leaf
显示图片 banner-tabular 作为 logo
hide
<xsl:apply-templates select="tocentry">
Arrow Link
leaf
默认是 1
hide
模板: <xsl:template match="tocentry">
leaf
显示网页左侧导航条的内容
leaf
模板 <xsl:template name="insert.spacers">
leaf
模板 <xsl:template name="toc-rel-path">
leaf
模板 <xsl:template name="toc-directory-depth">
hideforward flag
head.xsl
leaf
功能: 输出 HTML 的 <head> 部分
hidemessagebox_warning
模板 <xsl:template match="head" mode="head.mode">
leaf
生成网页的 head
leaf
添加 html.stylesheet 定义的样式表到 Head 中
leafksmiletris
用户自定义模板 user.head.content 内容加入到模板中
hideforward flag
website-common.xsl
Arrow Link Arrow Link Arrow Link Arrow Link Arrow Link Arrow Link
hidemessagebox_warning
空模板 allpages.banner
leaf
占位模板 <xsl:template name="allpages.banner"/>
hidemessagebox_warning
模板 webpage.table.footer

(website-common.xsl)
hide
空模板
leaf
<xsl:template name="webpage.table.footer"/>
hidemessagebox_warning
模板 webpage.footer

(website-common.xsl)
hide
$footer.hr
leaf
是否要在 footer 之前添加 <hr/>
hide
第一行脚注
hide
左栏显示 rcsdate,调用模板 rcsdate.format
leaf
直接显示rcsdate的 value 属性。CSS 样式为 footdate
hide
中间栏
hide
如果不是首页:
hide
显示到主页的链接
leaf
<xsl:call-template name="homeuri"/>
leaf
<xsl:call-template name="gentext.nav.home"/>
hide
显示预设置链接
leaf
<xsl:variable name="footers" select="$page/config[@param='footer']

|$page/config[@param='footlink']

|$autolayout/autolayout/config[@param='footer']

|$autolayout/autolayout/config[@param='footlink']"/>
leaf
<xsl:apply-templates select="$footers" mode="footer.link.mode"/>
Arrow Link
hide
右栏显示feedback
hide
定义了 feedback.href 属性?
hide
链接 href
leaf
$feedback.with.id 为 1? 则将 page_id 加在 feedback.href 后面
leaf
否则只将 feedback.href 作为 feedback 的 URL
hide
链接文字
leaf
<xsl:param name="feedback.link.text">Feedback</xsl:param>
hide
第二行脚注
hide
右对齐显示 版权信息
leaf
<xsl:when test="head/copyright">

<xsl:apply-templates select="head/copyright" mode="footer.mode"/>

</xsl:when>
hide
第三行脚注
hide
如果定义 sequential.links = 1
leaf
则显示上一页,下一页,即顺序浏览网站
hidemessagebox_warning
模板 process.footnotes
hidemessagebox_warning
html/footnote.xsl
leaf
<xsl:template match="footnote" name="process.footnote" mode="process.footnote.mode">
hidemessagebox_warning
模板 <xsl:template match="config" mode="footer.link.mode">
hide
param="footlink"
leaf
value 属性是 pageid,通过 tocentry 得到页面 URL,载用该 URL 和 altvar 属性创建链接
leaf
否则直接用 value 属性当做 URL,创建链接
hidemessagebox_warning
模板 <xsl:template match="head/title" mode="title.mode">
leaf
显示 <h1> 标题 </h1>
hidemessagebox_warning
模板 root-rel-path
leaf
本页地址到主页空间的相对路径。如 ../../
leafmessagebox_warning
模板 <xsl:template match="toc|tocentry|notoc" mode="olink.mode">
Arrow Link
hidemessagebox_warning
模板 tocentry
hide
生成

<document targetdoc="home" baseuri="index.html" dir="">

<xsl:call-template name="div"/>

</document>
leaf
呼叫模板 div,在文件 common/targets.xsl 中
hideforward flag
olink.xsl
leaf
功能: 跨文档的交叉引用
hide
<xsl:template match="olink">
hide
1. 传统的 olink
leaf
属性 targetdoc,或属性 targetptr 不为空
leaf
<xsl:apply-imports/> 调用其它优先级低的模板,即 DocBook html/xref.xsl 的模板
hide
2. Website 更改过的 olink 语法
Arrow Link
leaf
没有上述两个属性,而是具有属性 targetdocent
leaf
Those other olink attributes are targetdocent, linkmode, and localinfo
leaf
<xsl:template name="olink-entity">
leaf
<xsl:template name="select.target.database">
leaf
<xsl:template name="make.olink.href">
hideforward ksmiletris
param.xsl
leaf
功能:定义全局参数
hide
是否显示 HR
leaf
<xsl:param name="header.hr" select="1"/>
leaf
<xsl:param name="footer.hr" select="1"/>
hide
feedback
leaf
<xsl:param name="feedback.href"/>
leaf
<xsl:param name="feedback.with.ids" select="0"/>
leaf
<xsl:param name="feedback.link.text">Feedback</xsl:param>
hide
导航条
leaf
<xsl:param name="banner.before.navigation" select="1"/>
leaf
<xsl:param name="nav.table.summary">Navigation</xsl:param>
leaf
<xsl:param name="navtocwidth">220</xsl:param>
leaf
<xsl:param name="navbodywidth"/>
leaf
<xsl:param name="navbgcolor">#4080FF</xsl:param>
leaf
<xsl:param name="textbgcolor">white</xsl:param>
leaf
<xsl:param name="toc.spacer.graphic" select="1"/>
leaf
<xsl:param name="toc.spacer.text">   </xsl:param>
leaf
<xsl:param name="toc.spacer.image">graphics/blank.gif</xsl:param>
leaf
<xsl:param name="toc.pointer.graphic" select="1"/>
leaf
<xsl:param name="toc.pointer.text"> &gt; </xsl:param>
leaf
<xsl:param name="toc.pointer.image">graphics/arrow.gif</xsl:param>
leaf
<xsl:param name="toc.blank.graphic" select="1"/>
leaf
<xsl:param name="toc.blank.text">   </xsl:param>
leaf
<xsl:param name="toc.blank.image">graphics/blank.gif</xsl:param>
hide
首页
leaf
<xsl:param name="suppress.homepage.title" select="'1'"/>
hide
是否显示上一页、下一页
leaf
<xsl:param name="sequential.links" select="'0'"/>
hide
其它
leaf
<xsl:param name="currentpage.marker" select="'@'"/>
leaf
<xsl:param name="dry-run" select="'0'"/>
leaf
<xsl:param name="rebuild-all" select="'0'"/>
hideforward ksmiletris
rss.xsl
leaf
功能: 将 RSS 1.0 文件整合到 webpage 中
hide
例如在 <webpage> 嵌入 <rss feed> 标签
leaf
website/example/rss.xsl

<webpage id="rss">

...

<rss feed="http://nwalsh.com/rss/whatsnew.xml"/>

...

</webpage>
hideforward ksmiletris
xbel.xsl
leaf
功能: 将 xbel 书签整合到 webpage 中
leaf
例如:
hideforward flag
toc.xsl
leaf
功能: 显示非 tabluar 形式网页的顶部导航条
hide
全局参数
leaf
<xsl:param name="max.toc.width" select="7"/>
hide
模板 <xsl:template match="toc">
hide
显示首页图标
hide
若首页
leaf
显示 homebanner 图标
hide
非首页
leaf
显示 banner 图标
leaf
显示 “|” 作为链接分隔符
leaf
<xsl:call-template name="process-children">
Arrow Link
hide
模板 <xsl:template name="process-children">
hide
若首页
leaf
<xsl:call-template name="process-toc-children">
Arrow Link
hide
非首页
leaf
<xsl:call-template name="process-tocentry-children">
Arrow Link
leaf
模板 <xsl:template name="process-tocentry-children">
Arrow Link Arrow Link
leaf
模板 <xsl:template name="process-toc-children">
Arrow Link
leaf
模板 <xsl:template match="tocentry">
hidegohome ksmiletris
website.xsl
Arrow Link Arrow Link
leaf
说明: 创建纯文本、无表格的网页
hide
可定制参数
hide
banner.before.navigation
leaf
是否在页面导航的上方添加 banner
hide
模板 <xsl:template match="webpage">
hide
网页 <head> 部分
leafbell
<xsl:apply-templates select="head" mode="head.mode"/>
Arrow Link
leafbell
<xsl:apply-templates select="config" mode="head.mode"/>
hidebell
<xsl:call-template name="body.attributes"/>
hidemessagebox_warning
html/docbook.xsl
leaf
定义样式

<xsl:template name="body.attributes">

<xsl:attribute name="bgcolor">white</xsl:attribute>

<xsl:attribute name="text">black</xsl:attribute>

<xsl:attribute name="link">#0000FF</xsl:attribute>

<xsl:attribute name="vlink">#840084</xsl:attribute>

<xsl:attribute name="alink">#0000FF</xsl:attribute>

</xsl:template>
hide
广告栏
leaf
若定义 banner.before.navigation = 1,则在导航条上方显示 banner
leaf
若定义 banner.before.navigation = 0,则在导航条下方显示 banner
leafbell
即调用 <xsl:call-template name="allpages.banner"/> 显示 banner
Arrow Link
hide
网页顶部导航条
leafbell
<xsl:apply-templates select="$toc">

<xsl:with-param name="pageid" select="@id"/>

</xsl:apply-templates>
Arrow Link
hide
页面标题
leafbell
<xsl:apply-templates select="./head/title" mode="title.mode"/>
hide
执行 DocBook 样式表
leafbell
<xsl:apply-templates select="child::node()[not(self::webpage)]"/>
hide
脚注
leafbell
<xsl:call-template name="process.footnotes"/>
Arrow Link
hide
页脚
leafbell
<xsl:call-template name="webpage.footer"/>
Arrow Link
hideforward flag
chunk-common.xsl
hide
全局参数
leaf
<xsl:param name="output-root" select="'.'"/>
leaf
<xsl:param name="dry-run" select="'0'"/>
leaf
<xsl:param name="rebuild-all" select="'0'"/>
leaf
模板 <xsl:template match="autolayout">
leaf
模板 <xsl:template match="toc|tocentry|notoc" mode="make">
leaf
模板 <xsl:template name="make.tocentry">
leaf
模板 <xsl:template match="*" mode="calculate-dir">
leaf
模板 <xsl:template match="autolayout" mode="collect.targets">
leafgohome ksmiletris
chunk-tabular.xsl
Arrow Link Arrow Link Arrow Link
leafgohome ksmiletris
chunk-website.xsl
Arrow Link Arrow Link Arrow Link
hide
DocBook XSL
leaf
html/docbook.xsl
leaf
html/chunker.xsl
hide
OSX 定制
hide
l10n/i18n
leaf
person_name
hide
待定
hide
nav_home 起始页改为首页
leaf
<l:gentext key="nav-home" text="&#39318;&#39029;"/>
hide
模板 template/layout.xml
hide
config
leaf
<config param="homebanner-tabular" value="/images/logo/homebanner.png"

altval="Home Banner"/>

<config param="banner-tabular" value="/images/logo/banner.png"

altval="Banner"/>

<config param="homebanner" value="/images/logo/homebanner.png"

altval="Home Banner"/>

<config param="banner" value="/images/logo/iconhome.gif"

altval="Banner"/>

<config param="navbgcolor" value="#4080FF"/>

<config param="footer" value="http://www.worldhello.net" altval="FT:WorldHello"/>

<config param="footlink" value="about" altval="FL:关于"/>

<config param="feedback.href" value="webmaster@mysite.com"/>
hide
copyright
leaf
<copyright>

<year>2002-2005</year>

<holder role="http://www.worldhello.net/">WorldHello.net</holder>

</copyright>

<copyright>

<year>2005-2006</year>

<holder role="http://www.OpenSourceXpress.com/">群英汇</holder>

</copyright>
hide
style
leaf
<style src="/inc/css/docbook.css" type="text/css"/>

<style src="/inc/css/website.css" type="text/css"/>
hide
模板 template/webpage.xml
hide
config
leaf
<config param="rcsdate" value="$Date$"/>

<config param="navbgcolor" value="#4080FF"/>

<config param="footer" value="http://www.worldhello.net" altval="FT:WorldHello"/>

<config param="footlink" value="about" altval="FL:关于"/>

<config param="feedback.href" value="webmaster@mysite.com"/>
hide
head
leaf
<head>

<title>title... ...</title>

<titleabbrev>titleabbrev...</titleabbrev>

<summary>summary...</summary>

<keywords>keyword1, keyword2, ...</keywords>

</head>
hidegohome
tabular.xsl
hide
用 URI 格式导入 DocBook website XSL
leaf
<xsl:import href="http://docbook.sourceforge.net/release/website/2.6.0/xsl/tabular.xsl"/>
leaf
确认 $XML_CATALOG_FILES 能够正确解析该 URI
leaf
<xsl:include href="osx-common.xsl"/>
Arrow Link
hide
<xsl:template name="webpage.table.footer">
leaf
在左侧导航条下方增加 Google 搜索
hide
参数 navhead.in.allpage =1 ?
leaf
所有页面均显示 home.navhead, home.navhead.upperright
hidebell
<xsl:template name="home.navhead.upperright">
leaf
显示到文字版的链接(可定制)
leafbell
<xsl:template name="home.navhead">
Arrow Link
hidegohome
website.xsl
hide
用 URI 格式导入 DocBook website XSL
leaf
<xsl:import href="http://docbook.sourceforge.net/release/website/2.6.0/xsl/website.xsl"/>
leaf
确认 $XML_CATALOG_FILES 能够正确解析该 URI
hide
顺序浏览
leaf
<xsl:param name="sequential.links" select="1"/>
hide
banner.before.navigation
leaf
banner.before.navigation = 1/0,则在导航条上方或下方显示 banner
leaf
<xsl:include href="osx-common.xsl"/>
Arrow Link
hideforward ksmiletris
osx-common.xsl
hide
设置网页输出编码
leaf
<xsl:output method="html" encoding="gb2312" indent="yes"/>
hide
l10n 本地化设置
leaf
<xsl:param name="l10n.gentext.default.language">zh_cn</xsl:param>
leaf
定制中文姓名显示方式
Arrow Link
hide
设置 CSS 样式表
leaf
<xsl:param name="html.stylesheet.type">text/css</xsl:param>
leaf
<xsl:param name="html.stylesheet">/inc/css/tabular.css</xsl:param>
leaf
<xsl:param name="generate.id.attributes" select="0"/>
hide
是否用水平分隔线分隔正文于 header 和 footer
leaf
<xsl:param name="header.hr" select="1"/>
leaf
<xsl:param name="footer.hr" select="1"/>
hide
导航条以及正文的背景颜色设置
leaf
<xsl:param name="textbgcolor">white</xsl:param>
leaf
<xsl:param name="navbgcolor">#4080FF</xsl:param>
hide
以图标方式显示警告
leaf
<xsl:param name="admon.graphics" select="1"/>
leaf
<xsl:param name="admon.textlabel" select="0"/>
leaf
<xsl:param name="admon.graphics.path">/images/docbook/</xsl:param>
leaf
<xsl:param name="admon.graphics.extension">.png</xsl:param>
hide
以图标方式显示导航
leaf
<xsl:param name="navig.graphics" select="1"/>
leaf
<xsl:param name="navig.graphics.path">/images/docbook/</xsl:param>
leaf
<xsl:param name="navig.graphics.extension">.png</xsl:param>
hide
以图标方式显示 callout
leaf
<xsl:param name="callout.graphics" select="1"/>
leaf
<xsl:param name="callout.graphics.path">/images/callouts/</xsl:param>
leaf
<xsl:param name="callout.graphics.extension">.png</xsl:param>
leaf
<xsl:param name="callout.graphics.number.limit">15</xsl:param>
hide
其它图片
leaf
<xsl:param name="toc.spacer.image">/images/docbook/blank.png</xsl:param>
leaf
<xsl:param name="toc.pointer.image">/images/docbook/arrow.png</xsl:param>
leaf
<xsl:param name="toc.blank.image">/images/docbook/blank.png</xsl:param>
leaf
<xsl:param name="table.spacer.image">/images/docbook/spacer.png</xsl:param>
leaf
<xsl:param name="nav.icon.path">/images/navicons/</xsl:param>
hide
是否章节编号
leaf
<xsl:param name="section.autolabel" select="1"/>
leaf
<xsl:param name="section.label.includes.component.label" select="1"/>
leaf
<xsl:param name="section.autolabel.max.depth" select="8"/>
hide
顺序浏览
leaf
是否在网页最下方显示上一页、下一页,以便可以顺序的浏览整个网站
leaf
<xsl:param name="sequential.links" select="1"/>
hide
标题显示位置
leaf
<xsl:param name="formal.title.placement">

figure after

example before

equation after

table before

procedure before

task before

</xsl:param>
hide
待定制
leaf
<xsl:template name="allpages.banner"/>
hide
$footer.hr
leaf
是否要在 footer 之前添加 <hr/>
hide
第一行脚注
hide
左栏显示 rcsdate,调用模板 rcsdate.format
leaf
直接显示rcsdate的 value 属性。CSS 样式为 footdate
hide
中间栏
hide
如果不是首页:
hide
显示到主页的链接
leaf
<xsl:call-template name="homeuri"/>
leaf
<xsl:call-template name="gentext.nav.home"/>
hide
显示预设置链接
leaf
<xsl:variable name="footers" select="$page/config[@param='footer']

|$page/config[@param='footlink']

|$autolayout/autolayout/config[@param='footer']

|$autolayout/autolayout/config[@param='footlink']"/>
leaf
<xsl:apply-templates select="$footers" mode="footer.link.mode"/>
Arrow Link
hide
右栏显示feedback
hide
定义了 feedback.href 属性?
hide
链接 href
leaf
$feedback.with.id 为 1? 则将 page_id 加在 feedback.href 后面
leaf
否则只将 feedback.href 作为 feedback 的 URL
hide
链接文字
leaf
<xsl:param name="feedback.link.text">Feedback</xsl:param>
hide
第二行脚注
hide
右对齐显示 版权信息
leaf
<xsl:when test="head/copyright">

<xsl:apply-templates select="head/copyright" mode="footer.mode"/>

</xsl:when>
hide
第三行脚注
hide
如果定义 sequential.links = 1
leaf
则显示上一页,下一页,即顺序浏览网站
hideforward ksmiletris
../common/osx-person-name.xsl
leaf
<xsl:param name="local.l10n.xml" select="document('')"/>
leaf
模板 <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
Arrow Link
leaf
模板 <xsl:template name="person.name.family-given">
hidegohome flag
chunk-tabular.xsl
leaf
用 URI 格式导入 DocBook website XSL: <xsl:import href="http://docbook.sourceforge.net/release/website/2.6.0/xsl/chunk-tabular.xsl"/>
leaf
<xsl:include href="osx-common.xsl"/>
Arrow Link
hidegohome flag
chunk-website.xsl
leaf
用 URI 格式导入 DocBook website XSL: <xsl:import href="http://docbook.sourceforge.net/release/website/2.6.0/xsl/chunk-website.xsl"/>
leaf
<xsl:include href="osx-common.xsl"/>
Arrow Link
hide
layout.xml 和网页 XML 中的 config
hide
两个定义config 的位置
leaf
layout.xml 的 config 条目是缺省属性,作用于所有网页
leaf
网页 XML 中定义的 config 覆盖 layout.xml 中定义
hide
为什么不用 xsl 参数定制?
leaf
DocBook 用参数配置可以实现文档风格的一致
leaf
网站用 config 元素定制,实现网站分隔的多样化
hide
navbgcolor: 导航条背景色
leaf
<config param="navbgcolor" value="#4080FF"/>
leaf
可以在运行时由样式表参数指定
hide
navtocwidth: 导航条宽度
leaf
220
leaf
可以在运行时由样式表参数指定
leaf
homebanner-tabular: tabular 下,导航条顶部,主页时的 LOGO 图像
leaf
banner-tabular: tabular 下,导航条顶部,主页之外的其它页面的 LOGO 图像
leaf
homebanner: 非 tabular 下,导航条左侧,主页时的 LOGO 图像
leaf
banner: 非 tabular 下,导航条左侧,主页之外的其它页面的 LOGO 图像
hide
footer:脚注中部,主页旁,指向外部的 URL 链接
leaf
<config param="footer" value="about.html" altval="About..."/>
leaf
footlink:脚注中部,主页旁,指向本地网页的链接
hide
feedback.href:脚注左侧反馈的 URL
leaf
可以在运行时由样式表参数指定
hide
rcsdate: 底部脚注左侧显示版本日期
leaf
<config param="rcsdate" value="$Date$"/>
hide
text-prefix
leaf
<config param="text-prefix" value="n-"/>
hide
desc
leaf
<config param="desc" value="The Test Home Page"/>
hide
其它
leaf
<headlink rel="icon" href="http://nwalsh.com/images/nwalsh-icon16.png" type="image/png"/>
leaf
<style src="example.css" type="text/css"/>
hide
参数定制
leaf
<xsl:import href="chunk-tabular.xsl"/>



<!-- Website stylesheet parameters -->

<xsl:param name="footer.hr" select="0"/>

<xsl:param name="feedback.link.text">Send us feedback</xsl:param>

<xsl:param name="textbgcolor">#C8C8C8</xsl:param>



<!-- DocBook stylesheet parameters -->

<xsl:param name="admon.graphics" select="1"/>
hide
定制层初级
hide
自定义名字空间
leaf
http://www.opensourcexpress.com/docbook/xsl/current
hide
override file

(重载)
hide
website/tabular.xsl
leaf
<xsl:import href="http://docbook.sourceforge.net/release/website/2.6.0/xsl/tabular.xsl"/>

<xsl:include href="osx-common.xsl"/>
hide
website/website.xsl
leaf
<xsl:import href="http://docbook.sourceforge.net/release/website/2.6.0/xsl/website.xsl"/>

<xsl:include href="osx-common.xsl"/>
leaf
website/chunk-tabular.xsl
leaf
website/chunk-website.xsl
hide
common file

(osx-common.xsl)
hide
最重要的,设置网页编码
leaf
<xsl:output method="html" encoding="gb2312" indent="yes"/>
leaf
同时,让输出网页进行格式化
hide
设置样式表名称
leaf
<xsl:param name="html.stylesheet">/inc/css/website.css</xsl:param>
leaf
章节编号
hide
l10n 本地化设置
leaf
<xsl:param name="l10n.gentext.default.language">zh_cn</xsl:param>
hide
图标位置
leaf
<xsl:param name="admon.graphics.path">/images/docbook/</xsl:param>
leaf
<xsl:param name="navig.graphics.path">/images/docbook/</xsl:param>
leaf
<xsl:param name="table.spacer.image">/images/docbook/spacer.png</xsl:param>
hide
中文姓名显示方式
leaf
<xsl:template name="person.name.family-given">
hide
标题显示位置
leaf
<xsl:param name="formal.title.placement">
hide
Google Search Bar
hide
在 tabluar.xsl 中的 webpage.table.footer 模板中添加 google 的 form
leaf
<xsl:template name="webpage.table.footer">
leaf
另外一个方法是重新定义DTD,增加 google 的元素,并增加相应模板
hide
定制层进阶
leaf
website xsl 研究
leaf
import & include
hide
GIMP 风格 website
hide
链接
hide
网址
leaf
http://developer.gimp.org/
leaf
http://netfilter.org/
hide
下载
leaf
http://svn.netfilter.org/netfilter/trunk/homepage
hide
gimp
hide
网站结构
hide
目录 gimp-web-devel
hide
README
leaf
cvs 维护的网站 xml 源代码
leaf
如何创建网站
hide
install.sh
leaf
编译网页
Arrow Link
hide
将网站同步到本地目录 gimp-web 目录中
leaf
rsync -rlt --delete --exclude-from=install.exclude ./ $1
Arrow Link
hide
Makefile
hide
先编译子目录 screenshots
leaf
用 convert 生成缩略图
leaf
再编译网页
hide
ChangeLog
leaf
网站更新记录
hide
install.exclude
leaf
在网站 源代码目录 gimp-web-devel 和目标目录 gimp-web 同步时,应该排除的文件列表
hide
*.xml
leaf
网站源代码
hide
目录 gimp-web-devel/xsl
leaf
DocBook website 样式表
hide
目录 gimp-web-devel/dtd
leaf
DocBook DTD
hide
目录 gimp-web-devel/style
leaf
default.css 样式表
hide
website xsl
leaf
基本和 netfilter 相同,只是 netfilter 对 gimp 风格进行了微调
Arrow Link
leaf
具体参见 netfilter 关于 xsl 的描述
Arrow Link
hide
netfilter
hide
说明
leaf
继承了 gimp 的风格
hide
网页格局进行了微调
leaf
将模板 webpage.linkbar 的显示放在网页开头 allpages.banner 下方
leaf
增加模板 webpage.sponsor,显示在 webpage.footer 上方,即原 webpage.linkbar 之处
leaf
去掉了 webpage.validator 的显示
hide
网站结构
hide
目录 homepage
hide
Makefile
leaf
在目录 homepage/xml 下执行 make
leaf
网站同步: 将 homepage/output 目录同步到对外的网站目录中
hide
目录 homepage/xml
hide
Makefile
hide
几个 XML 文件,由模板生成
leaf
mirrors.xml
leaf
documentation/index.xml
leaf
$(NETFILTER_POMXMLS)
leaf
$(NETFILTER_ADVISORIES)
leaf
编译 website 网站
hide
目录 homepage/output
leaf
website 网页输出目录
hide
目录 homepage/xsl
leaf
DocBook website 样式表
hide
目录 homepage/style
leaf
netfilter.css 样式表
hide
website xsl
hidegohome ksmiletris
mine.xsl
Arrow Link
hide
全局参数
leaf
<xsl:param name="ulink.target" select="''" />
hide
用到的参数
hide
sponsor
leaf
layout.xml: <headlink rel="sponsor" href="..." title="image_filename"/>
hide
banner
leaf
layout.xml: $autolayout/autolayout/config[@param='banner-left'], @value=image_filename, @altval="image_alt_text"
leaf
layout.xml: $autolayout/autolayout/config[@param='banner-right'], @value=image_filename, @altval="image_alt_text"
hide
linkbar
hide
layout.xml: autolayout/headlink[@rel='bookmark'], @value="link_text", @href="..."
leaf
显示 @title 内容,链接为 @href
hidemessagebox_warning
模板 <xsl:template match="webpage">
hide
网页 <head> 部分
leafbell
<xsl:apply-templates select="head" mode="head.mode"/>
Arrow Link
leafbell
<xsl:apply-templates select="config" mode="head.mode"/>
hide
广告栏
leaf
<xsl:call-template name="allpages.banner"/>
Arrow Link
hide
linkbar
leaf
<xsl:call-template name="webpage.linkbar"/>
Arrow Link
hide
网页左侧导航条
leaf
<xsl:apply-templates select="$toc">

<xsl:with-param name="pageid" select="@id"/>

</xsl:apply-templates>
Arrow Link
hide
左右分隔
leaf
<xsl:call-template name="hspacer"/>
Arrow Link
hide
网页右侧主体页面
hide
网页标题
leaf
<xsl:apply-templates select="./head/title" mode="title.mode"/>
Arrow Link
hide
执行 DocBook 样式表
leafbell
<xsl:apply-templates select="child::*[name(.) != 'webpage']"/>
hide
脚注
leafbell
<xsl:call-template name="process.footnotes"/>
Arrow Link
hide
页脚
leafbell
<xsl:call-template name="webpage.sponsor"/>
Arrow Link
leafbell
<xsl:call-template name="webpage.footer"/>
Arrow Link Arrow Link
hidemessagebox_warning
模板 <xsl:template name="allpages.banner">
leaf
显示 banner-left, banner-right 图像,链接指向主页
hidemessagebox_warning
模板 <xsl:template match="title" mode="head.mode">
leaf
如果 autolayout/config[@param='title'] 不为空,则在标题前面增加 “@value -”
leaf
显示 head/title 内容
hidemessagebox_warning
模板 <xsl:template name="hspacer">
leaf
空模板
leafmessagebox_warning
模板 <xsl:template name="webpage.linkbar">
Arrow Link
hidemessagebox_warning
模板 <xsl:template match="headlink" mode="webpage.linkbar">
hide
如果存在 autolayout/headlink[@rel='bookmark']
leaf
显示 @title 内容,链接为 @href
hidemessagebox_warning
模板 <xsl:template name="webpage.footer">
hide
显示版权信息
leaf
如下优先级调用 head/copyright, autolayout/copyright
hide
显示作者信息
leaf
<xsl:apply-templates select="$autolayout/autolayout/headlink" mode="webpage.footer" />
Arrow Link
hidemessagebox_warning
模板 <xsl:template match="headlink" mode="webpage.footer">
hide
如果存在 autolayout/headlink[@rel='author']
leaf
显示 @title 内容,链接为 @href
leafmessagebox_warning
模板 <xsl:template name="webpage.sponsor">
Arrow Link
hidemessagebox_warning
模板 <xsl:template match="headlink" mode="webpage.sponsor">
leaf
<autolayout>

<headlink rel="sponsor" href="..." title="image_filename"/>
hidebutton_cancel
问题
hide
mine.xsl
leaf
mine.xsl:44: <xsl:variable name="tocentry" select="$autolayout/autolayout//*[$id=id]"/>

$id=id,应该是 $id=@id !
leaf
mine.xsl:84: <xsl:apply-templates select="child::*[name(.) != 'webpage']"/>

child:* 最好写为 chind:node()
leaf
mine.xsl:121: <xsl:value-of select="($autolayout/autolayout/toc[@id='home'])[1]/@filename"/>

toc 的 id 没有必要一定是 home!
hideforward flag
mytoc.xsl
hide
全局参数
hide
revsionflag 的文字
leaf
<xsl:param name="nav.text.revisionflag.added">New</xsl:param>

<xsl:param name="nav.text.revisionflag.changed">Changed</xsl:param>

<xsl:param name="nav.text.revisionflag.deleted"></xsl:param>

<xsl:param name="nav.text.revisionflag.off"></xsl:param>
leaf
<xsl:template match="toc">
leaf
<xsl:template match="tocentry">
leaf
<xsl:template name="insert.spacers">
hideforward ksmiletris
myxref.xsl
hide
是为了扩展 docbook 的 ulink 的样式表
hide
目的是为 ulink 增加了 mimetype 参数
leaf
<xsl:if test="@mimetype">

<xsl:attribute name="type">

<xsl:value-of select="@mimetype"/>

</xsl:attribute>

</xsl:if>
leaf
OSX 定制
hide
DocBook
hideforward
l10n
hide
html/docbook.xsl
leaf
<xsl:include href="../common/l10n.xsl"/>
Arrow Link
hideforward
common/l10n.xsl
leaf
<xsl:param name="l10n.xml" select="document('../common/l10n.xml')"/>

<xsl:param name="local.l10n.xml" select="document('')"/>
Arrow Link
leaf
<xsl:template name="gentext.nav.home">

<xsl:call-template name="gentext">

<xsl:with-param name="key" select="'nav-home'"/>

</xsl:call-template>

</xsl:template>
Arrow Link
hideksmiletris
<xsl:template name="gentext">
hide
用全局参数加载文档 XML 文档
leaf
<xsl:param name="l10n.xml" select="document('../common/l10n.xml')"/>
leaf
<xsl:param name="local.l10n.xml" select="document('')"/>
leaf
使用全局参数的好处是,用户可以覆盖 local.l10n.xml,来定制
hide
在 XML 文档中找到对应语种和 key 的节点
leaf
<xsl:variable name="local.l10n.gentext"

select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:gentext[@key=$key])[1]"/>
Arrow Link Arrow Link
leaf
<xsl:variable name="l10n.gentext"

select="($l10n.xml/l:i18n/l:l10n[@language=$lang]/l:gentext[@key=$key])[1]"/>
Arrow Link Arrow Link
hide
xsl:choose 依次选择合适的 gentext
hide
用户自定义(用户本地语种)
leaf
<xsl:when test="$local.l10n.gentext">

<xsl:value-of select="$local.l10n.gentext/@text"/>

</xsl:when>
hide
系统预设(用户本地语种)
leaf
<xsl:when test="$l10n.gentext">

<xsl:value-of select="$l10n.gentext/@text"/>

</xsl:when>
hide
系统预设(英文)
leaf
最后尝试英文的 gentext <xsl:value-of select="($l10n.xml/l:i18n/l:l10n[@language='en']/l:gentext[@key=$key])[1]/@text"/>
hide
<xsl:template name="l10n.language">
hide
如果定义的语种存在返回相应语种
hide
如代码
leaf
<!-- try just the lang code without country -->

<xsl:when test="$l10n.xml/l:i18n/l:l10n[@language=substring-before($adjusted.language,'_')]">

<xsl:value-of select="substring-before($adjusted.language,'_')"/>

</xsl:when>
leaf
否则返回 $l10n.gentext.default.language
hide
common/l10n.xml
leaf
<!ENTITY zh_cn SYSTEM "zh_cn.xml">

...

<l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">

...

&zh_cn;

</l:i18n>
Arrow Link
hide
common/zh_cn.xsl
leaf
<l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="zh_cn" english-language-name="Chinese Simplified">

<l:gentext key="Abstract" text="&#25688;&#35201;"/>

...

<l:context name="styles">

<l:template name="person-name" text="first-last"/>

</l:context>

</l:l10n>
hide
定制
hide
语种选择
leaf
<xsl:param name="l10n.gentext.default.language">zh_cn</xsl:param>

<!-- xsl:param name="l10n.gentext.language">zh_cn</xsl:param -->
Arrow Link
hide
l10n 本地定制
leaf
注意:只能在一处进行定制,否则只有最高优先级的有效
hide
调试 l10n
leaf
在文件 common/l10n.xsl 的 gentext 模板中,添加 <xsl:message> 诊断元素

<xsl:template name="gentext">

...

<xsl:if test="$key = 'nav-home'">

<xsl:message terminate="yes">

language: <xsl:value-of select="$lang"/>,

local.l10n.gentext: <xsl:value-of select="$local.l10n.gentext/@text"/>,

l10n.gentext: <xsl:value-of select="$l10n.gentext/@text"/>

&#10;

</xsl:message>

</xsl:if>
hideforward
olink
hide
target.database.filename
hide
示例
leaf
<targetset>



<document targetdoc="osx" baseuri="http://www.OpenSourceXpress.com">

<div href="/" targetptr="full">

<xreftext>北京群英汇信息技术有限公司</xreftext>

</div>

<div href="/" targetptr="short">

<xreftext>群英汇</xreftext>

</div>

<div href="/" targetptr="web">

<xreftext>http://www.OpenSourceXpress.com/</xreftext>

</div>

</document>



</targetset>
hide
website/olink.xsl
hide
<xsl:template match="olink">
Arrow Link
hide
如果有 targetdoc 或者 targetptr 属性,调用系统模板处理 olink
leaf
<xsl:apply-imports/>
hide
<xsl:template name="make.olink.href">
hide
参数
hide
olink.key
leaf
用 / 分隔 targetdoc, targetptr
leaf
target.database
hide
从 target.database 获取属性值至变量
leaf
命中 targetdoc/targetptr 的 div|obj 节点的 href 属性值,赋予变量 $target.href
leaf
命中 targetdoc 的 document 节点的 dir 属性值,赋予变量 $target.dir
leaf
命中 targetdoc/targetptr 的 div|obj 节点的 element 属性值,赋予变量 $target.element
hide
target.database 是否具有 sitemap 元素
leaf
若是 $use.sitemap = 1
leaf
否则 $use.sitemap = 0
hide
变量 baseuri 赋值
hide
如果 $use.sitemap = 1
leaf
必须预先设置 $current.docid 参数,否则不能计算相对 sitemap 路径
leaf
以 $current.docid 匹配 document 节点的 targetdoc属性,命中的节点的 dir 属性值,赋予变量 $target.dir
leaf
检索路径
hide
否则,即 $use.sitemap = 0 时
leaf
获取 $root-rel,并输出
leaf
输出 $target.dir,如果不为空
leaf
遍历每一个 $target.database,输出 $targetdoc 对应的 baseuri
leaf
输出 $baseuri ,如果不为空
hide
输出 targetptr 对应的 href 部分
leaf
当 $target.element = 'webpage' 并且 $targetdoc = $targetptr,则不显示 $target.href
leaf
否则输出 $target.href
hide
docbook/html/xref.xsl
hide
<xsl:template match="olink" name="olink">
hide
变量
leaf
如果带有 id 属性,则显示 anchor,name=@id
Arrow Link
leaf
如果带有 localinfo 属性,设定变量 localinfo
hide
targetdoc, targetptr 型
leaf
如果具有 targetdoc 或者 targetptr 属性
leaf
为变量 $target.database.filename 赋值
Arrow Link
hide
加载 target.database.filename 至 $target.database
leaf
<xsl:variable name="target.database" select="document($target.database.filename,/)"/>
hide
为变量 $olink.key 赋值
Arrow Link
leaf
<xsl:call-template name="select.olink.key">
hideksmiletris
为变量 $href 赋值
Arrow Link
leaf
<xsl:call-template name="make.olink.href">
hide
为变量 $hottext 赋值
leaf
<xsl:call-template name="olink.hottext">
hide
为变量 $olink.docname.citation 赋值
leaf
<xsl:call-template name="olink.document.citation">
hide
为变量 $olink.page.citation 赋值
leaf
<xsl:call-template name="olink.page.citation">
hide
输出
hide
如果 $href 不为空
leaf
<xsl:when test="$href != ''">

<a href="{$href}" class="olink">

<xsl:copy-of select="$hottext"/>

</a>

<xsl:copy-of select="$olink.page.citation"/>

<xsl:copy-of select="$olink.docname.citation"/>

</xsl:when>
hide
否则,没有链接只显示文字
leaf
<xsl:otherwise>

<span class="olink"><xsl:copy-of select="$hottext"/></span>

<xsl:copy-of select="$olink.page.citation"/>

<xsl:copy-of select="$olink.docname.citation"/>

</xsl:otherwise>
hide
传统型
hide
若具有 linkmode 属性
leaf
linkmode 得到 base URI
leaf
localinfo 得到文内链接
hide
若 type 属性 为 "href"
leaf
targetdocent 得到 base URI
leaf
localinfo 得到文内链接
hide
<xsl:template name="anchor">
leaf
如果具有 id, xml:id 属性,则显示名位 @id 的锚点
hideforward
docbook/common/olink.xsl
hide
debug!
leaf
设定 $olink.debug=1,可以看到调试信息
leaf
<xsl:template name="select.olink.key">
hide
<xsl:template name="select.target.database">
leaf
检查变量 $target.database.document 指向文件是否存在,若存在,返回该文件名
leaf
<xsl:template name="make.olink.href">
hide
ulink
hideforward
docbook/html/xref.xsl
hide
<xsl:template match="ulink" name="ulink">
hide
$ulink.target
leaf
如果定义变量 $ulink.target, 则链接的属性 target 指向 $ulink.target
leaf
默认 $ulink.target = "_top"
hide
如果是空元素,则 url 属性值作为链接文字
leaf
<xsl:when test="count(child::node())=0">

<xsl:value-of select="@url"/>

</xsl:when>
hide
DocBook Tag FAQ
hide
where to Google docbook archive?
leaf
http://lists.oasis-open.org/archives/docbook/
hide
<graphic ...></graphic>,报错:end tag for element "GRAPHIC" which is not open
leaf
Graphic is empty in DocBook 4.1; replace <graphic></graphic> with <graphic>.
hide
DocBook 5.0
leaf
下一次变革?RELAX NG
hide
DocBook Tool Chain
hide
norm's DocBook Processing Diagram(大图!)
leaf
<html><img src="xmlsgmlpub.png">
hide
验证工具
hide
SGML
leaf
SP (sgml parser)
hide
参考资料
hide
邮件列表存档
hide
archive at Red Hat
leaf
http://sources.redhat.com/ml/docbook-apps
hide
Howto Search in Google?
leaf
<html>搜索: <br>

<blockquote><i>关键字 site:list.oasis-open.org</i></blockquote>
leaf
http://sources.redhat.com/docbook-tools
hide
文档
hide
教程
leaf
http://wiki.docbook.org/topic/DocBookTutorials
hide
http://opensource.bureau-cornavin.com/crash-course/
leaf
sgml-common
leaf
jade
leaf
jadetex
leaf
docbook-dtdXX-sgml
leaf
docbook-style-dsssl
leaf
perl-SGMLSpm
leaf
docbook-utils
leaf
psgml
hide
工具
leaf
DTD
hide
Style
hide
DSSSL
leaf
1.79 at 2004/11/03
hide
XSL
leaf
1.69.1at 2005/08/11
hide
其它
leaf
website 2.6.0 at 2005/04/18
leaf
slides/slides demo 3.4.0 at 2005/04/28
hide
转换工具
leaf
http://www.nyx.net/~sgjoen/The_LDP_HOWTO_Generator_ng.html
hide
db2omf
leaf
http://www.tldp.org/downloads/
hide
texi2db
leaf
http://www.tldp.org/downloads/
hide
wt2db
leaf
http://www.tldp.org/downloads/
hide
人物
hide
<html><img src="norm.png"><br>

<center>Norman Walsh</center>
leaf
DocBook Technical Committee 主席
leaf
Sun公司
leaf
TDG主要作者
leaf
撰写了大部分的 DocBook XSL 样式表
hide
<html><img src="jclark.png"><br>

<center>James Clark</center>
leaf
SP (an open-source SGML parser)
leaf
DSSSL
leaf
Jade (James' DSSSL Engine)
hide
关于本文
hide
版本
hide
0.1, 2006/01/20
leaf
2006/05/03 提交到 Whodo
hide
作者
hide
格式定义:DTD
hide
格式
hide
XML DTDs
leaf
如: docbook-xml-4.5b1.zip
hide
SGML DTDs
leaf
如: docbook-4.5b1.zip
hide
rng (RELAX NG Grammars )
leaf
如: docbook-rng-4.5b1.zip
hide
xsd (W3C XML Schema Grammars)
leaf
如: docbook-xsd-4.5b1.zip
hide
版本
hide
5.0
leaf
用 RELAX NG 语法重构
hide
格式
leaf
rng (RELAX NG Grammars )
hide
对语法进行了删减,因而很多语法不向下兼容
leaf
大多之前定义的文档不需要修改
leaf
存在兼容性问题的,移植也很简单
hide
4.5
leaf
存在 xml 和 sgml 两种格式
hide
谁在维护
leaf
主席: Norman Walsh
hide
格式转换:Scheme
hide
XSL
hide
what is it
leaf
XSL 通过 XSLT 将一种 XML 转换为另一格式的 XML
hide
FOP
leaf
直接转换生成 PDF
hide
JFOR
leaf
直接转换生成 rtf
hide
PassiveTex
leaf
DocBook - FO - TeX - DVI - Postscript - PDF
hide
出版工具
hide
出版工具即DocBook 转换为可打印或者 WEB 页面
hide
DocBook 专有工具
hide
DBLaTeX
leaf
版本: 0.1.8
leaf
0.1.8 版本不支持 Unicode/中文!
hide
GemDoc
hide
leaf
http://g1c.com/gemdoc/
leaf
Windows 软件,版本: 1.3.2
leaf
未注册版本会在文章下面加上一个链接
hide
XSLT Engines
hide
SAXON
leaf
参见: http://saxon.sourceforge.net/
leaf
版本: 8.6.1
leaf
xsltproc
leaf
xmlto
hide
FO engines
hide
FOP
leaf
http://xmlgraphics.apache.org/fop/download.html
leaf
版本: FOP 0.90 alpha 1
hide
DSSSL 出版工具
hide
OpenJade
leaf
http://openjade.sourceforge.net/
hide
JadeTex
leaf
http://jadetex.sourceforge.net/
hide
编辑工具
leaf
写字板 8)
leaf
vi
leaf
emacs
hide
OpenOffice
leaf
http://xml.openoffice.org/xmerge/docbook/UserGuide.html
leaf
Eclipse
hide
FOP
hide
需要的软件
hide
FOP 版本
leaf
0.20.5
hide
0.91beta
hide
fop 中 cygpath,会遇到 filename too long 的问题!
leaf
解决办法: 重新用 shell 实现一个 mycygpath,用 awk 分解再组合
hide
函数 mycygpath
leaf
function mycygpath()

{

ARGS=""

PATHSEPT=":"

RESULT=""

SPLIT=no

while [ $# -gt 0 ]; do

case $1 in

--unix|-u)

PATHSEPT="\\;"

OUTPATHSEPT=":"

ARGS="$ARGS $1"

;;

--mixed|--windows|-m|-w)

PATHSEPT=":"

OUTPATHSEPT=";"

ARGS="$ARGS $1"

;;

--path|-p)

SPLIT=yes

;;

--*)

ARGS="$ARGS $1"

;;

*)

TMPPATH=$1

;;

esac

shift

done



if [ "$SPLIT" = "no" ]; then

cygpath $ARGS "$TMPPATH"

else

NF=`echo "$TMPPATH" | awk -F${PATHSEPT} '{ print NF }'`



i=1

while [ $i -le $NF ]; do

CMDLINE="echo \"$TMPPATH\" | awk -F${PATHSEPT} '{ print \$$i }'"

PATHITEM=`eval $CMDLINE`

if [ `echo $PATHITEM|wc -c` -lt 100 ]; then

PATHITEM=`cygpath $ARGS $PATHITEM`

fi



if [ "x$RESULT" = "x" ]; then

RESULT="$PATHITEM"

else

RESULT="${RESULT}${OUTPATHSEPT}${PATHITEM}"

fi

i=`expr $i + 1`

done

echo $RESULT

fi

}
leaf
JDK
hide
图像处理
leaf
JAI
hide
安装
leaf
安装 Java, JAI
leaf
解开 fop 压缩包即可
leaf
export FOP_OPTS="-Xms100m -Xmx200m"
Arrow Link
hide
运行
hide
扩大内存以及堆栈
hide
fop 可能会用到更多的内存和 heap
leaf
传递 "-Xms100m -Xmx200m" 参数给 JVM
hide
可以设置 FOP_OPTS 变量
leaf
export FOP_OPTS="-Xms100m -Xmx200m"
hide
-Xmx
leaf
Xmx是java的一个选项,用来设置你的应用程序能够使用的最大内存数(看好,致使你的应用程序,不是整个jvm),如果你的程序要花很大内存的话,那就需要修改缺省的设置,比如配置tomcat的时候,如果流量啊程序啊都很大的话就需要加大这个值了,不过有一点是要记住的,不要大得超过你的机器的内存,那样你的机器会受不了的,到时候就死翘翘了。
hide
-Xms
leaf
Xms是另一个设置内存的参数,用它来设置程序初始化的时候内存栈的大小,增加这个值的话你的程序的启动性能会得到提高。不过同样有前面的限制,以及受到xmx的限制。
leaf
另外,一个操作系统通常都只使用jvm,这就是你说的“运行在同一个JVM中的程序”,不同的虚拟机的实现虽然千差万别,但是他们的运行模式都是一样的,只是性能有所不同罢了。
hide
FOP 中文化
leaf
Use the special xsl to build fo.

(And the FOP has bug to handle FO file which language is zh_cn, So you may have to replace language="zh_cn" to language="zh")
leaf
Must have the Chinese font files and use org.apache.fop.fonts.apps.

TTFReader to build the font metrics-files. And build pdf with '-c userconfig.xml' option.
hide
DocBook FOP XSL 中文化
hide
字体设置需要修改
leaf
<!-- setup font -->

<xsl:param name=“body.font.family”>SimSun</xsl:param>

<xsl:param name=“body.font.size”>12</xsl:param>

<xsl:param name=“title.font.family”>SimSun</xsl:param>

leaf
字体大小
hide
语言选项
leaf
由于fop 只识别 zh,不识别 zh_cn 或 zh_tw,因此需要修改

language="zh_cn" 为 language="zh"
hide
增加中文字体
hide
中文 TrueType 字体
leaf
直接引用 Windows 的即可
hide
由 FOP TTFReader 生成的 matrics 文件
leaf
cd fop

leaf
java -cp build\fop.jar;lib\avalon-framework.jar;lib\xml-apis.jar;lib\xercesImpl.jar;lib\xalan.jar org.apache.fop.fonts.apps.TTFReader -ttcname SimSun c:\windows\fonts\simsun.ttc simsun.xml
leaf
java -cp build\fop.jar;lib\avalon-framework.jar;lib\xml-apis.jar;lib\xercesImpl.jar;lib\xalan.jar org.apache.fop.fonts.apps.TTFReader -ttcname SimHei C:\WINDOWS\Fonts\simhei.ttf simhei.xml
hide
配置文件 fop/conf/userconfig.xml
hide
在 <fonts></fonts> 之间增加
leaf
<font metrics-file="C:/Apps/fonts/simsun.xml"

embed-file="C:/Apps/fonts/simsun.ttc" kerning="yes">

<font-triplet name="SimSun" style="normal" weight="normal"/>

<font-triplet name="SimSun" style="normal" weight="bold"/>

<font-triplet name="SimSun" style="italic" weight="normal"/>

<font-triplet name="SimSun" style="italic" weight="bold"/>

</font>

<font metrics-file="C:/Apps/fonts/simhei.xml"

embed-file="C:/Apps//fonts/simhei.ttf" kerning="yes">

<font-triplet name="SimHei" style="normal" weight="normal"/>

<font-triplet name="SimHei" style="normal" weight="bold"/>

<font-triplet name="SimHei" style="italic" weight="normal"/>

<font-triplet name="SimHei" style="italic" weight="bold"/>

</font>
hide
修改 fop.sh
leaf
设置 JAVA_HOME 环境变量
hide
增加 JVM 堆栈大小
leaf
FOP_OPTS="-Xms100m -Xmx200m"
leaf
$JAVACMD -classpath ... $FOP_OPTS org.apache.fop.apps.Fop ...
hide
传递配置文件 userconfig.xml 给 FOP
leaf
... org.apache.fop.apps.Fop -c e:/Home/WORK/project/subversion/svnbook/src/tools/fop/conf/userconfig.xml
hide
示例
leaf
FOP_OPTS="-Xms100m -Xmx200m"
leaf
$JAVACMD -classpath "$LOCALCLASSPATH" $FOP_OPTS org.apache.fop.apps.Fop -c e:/Home/WORK/project/subversion/svnbook/src/tools/fop/conf/userconfig.xml "$@"
hide
FOP 已知问题
leaf
章节标题不能太长,即 <title>...</title> 中文字不能太多,否则中断执行
hide
如果设置表格列宽,可能造成 fop 死循环
hide
leaf
<table frame='topbot'><title>测试步骤</title>

<tgroup cols='4' align='left' colsep='1' rowsep='1'>

<colspec colname='c1' colwidth='1*'/>

<colspec colname='c2' colwidth='2*'/>

<colspec colname='c3' colwidth='5*'/>

<colspec colname='c4' colwidth='5*'/>