版权声明:
本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
原文出处: http://www.aiview.com/notes/xml_xsl_manual.htm
作者: 张洋 alex_doesathotmail.com
最后更新: 2001-12-15
| 目录 |
本文将介绍利用xml与xsl技术内容与表示相分离的特点,创建一个易于扩充,结构灵活的用户手册文档。当然,本文的重点在于阐述一种利用xml的方法,并不仅限于用户手册文档,您可以利用在任何您认为需要的地方。
本文介绍的内容基于xml、xsl与dtd技术规范,您可以使用ie5.0及其以上版本进行测试。
用户的需求
从用户的视角,我们要实现的用户手册包含以下几个部分:
- 在页面左侧的导航栏,利用树状显示每一个级别的标题,每个标题前按顺序标有标题序号,形如2.1或2.1.8,对于包含子标题的标题要与不包含子标题的标题,即叶子标题区分显示,前面用不同的图片区分。
- 页面右侧是内容栏,除包含各级标题外,还包含各级标题下的具体内容,内容类型有文字和图片。不同级别的标题要使用不同的现实方式,每个标题前也加有标题序号,与左侧导航栏一致。
- 对于含有图片的内容部分,图片显示为缩略图,通过点击可以在正常大小与缩略图之间切换。
- 点击左侧导航栏的标题,可以定位到右侧的相关内容。
- 对于手册的标题和内容,应该可以方便添加与删除,修改了一个标题的级别,比如从一级标题换到三级标题的位置,其显示风格可以自动更改。理论上,标题的级别可能会有无限多层。
- 无论是左侧的导航栏,还是右侧的内容区域,用户只对标题的相对位置和级别负责,标题前面的序号要求自动生成。
对应的技术实现
我们打算开发如下几个部分来实现这个用户手册:
- 一个dtd定义文件,即document type defination(文档类型定义)。定义这个文件需要根据客户对于手册的需求来做,这也是我们需要首先着手去做的部分。
- 一个xml文档,包含了用户手册的真实的、具体的内容,这个文档当然应该是良构的,需要遵循我们在上面dtd文件中定义的规则。这个文档的内容由手册的编写者来提供,他无需了解其他的技术细节,只需遵照一个简单的规则即可,如果能够使用像xmlspy这样的工具编辑会更省力。
- 两个xsl文件,这是我们需要开发的主体部分,也就是决定内容将如何呈现给用户,共有两个xsl文件,分别针对左侧的导航栏和右侧的内容主体。
- 一个超文本文件,构成用户手册的框架,实现导航栏与内容主体的分割。
定义dtd
通过前面的需求陈述,可以抽象出如下页面元素:
- 标题,会有不同的级别
- 内容,包括文本和图片
为此我们定义如下dtd元素:
<!element image (#pcdata)> <!element para (#pcdata)> <!element name (#pcdata)>
分别表示图片、段落文本和标题。为了表示标题的嵌套关系,我们又定义一个item元素,把它作为一个块,不同的item之间可以是平行关系,也可以是嵌套关系,所有的基本元素(图片、段落文本和标题)必须从属于一个item。具体的关系描述如下:
- 一个item中只能包含、并且必须包含一个标题(name)
- 一个item中可以同时包含多段文字或者多张图片,或者只包含其中一种
- 一个item中可以嵌套一个或多个item,也可以不嵌套任何item,嵌套的item具有相同的属性
通过以上描述,我们可以定义元素item:
<!element item (name, (para | image)*, item*)>
元素名称后面的'*' 代表此元素可以为0个或者多个。
'(para | image)*' 与 'para*, image*' 同义。
作为dtd,还必须定义一个根元素,我们起名为'pms_help',它将包含item元素,进而间接的包含了所有的元素。
<!element pms_help (item*)>
上面表示为,使用了这个dtd的xml文档中可以定义0个或者多个item元素。
此外,我们还需要为图片的缩略图定义:
<!attlist image small id #implied>
至此,dtd文件我们就已经定义完了,我们将其保存为pms_help.dtd,这里下载完整的dtd文件。
如何准备手册内容
接下来我们要根据上面定义的dtd文件,整理含有实际内容的xml文件,文件内容示例如下:
<pms_help>
<item>
<name>第一级别标题</name>
<item>
<name>第二级别标题</name>
<item>
<name>第三级别标题</name>
<para>段落文本1</para>
<image small="image1_small.gif">image1.gif</image>
<para>段落文本2</para>
<para>段落文本3</para>
</item>
<item>
...
</item>
</item>
<item>
...
</item>
</item>
<item>
...
</item>
</pms_help>
在第三级标题下面,当然还可以继续嵌套item元素,有更多级别的标题,只要你在下面的xsl样式文件中对应说明了这个级别标题如何显示即可。
在para标记之间的文本在显示时会被格式化为一个段落,如果你有多段文本,应该分别用para进行标记。
image标记中有一个属性字段small,其值应是一个图片文件名,这个图片用作默认的缩略图显示,当点击这个图片,会显示出image标记之间的图片文件,当然您也可以对着两个图片使用同一个文件名。图片文件的路径不需要在这里指定,路径是写在下面xsl文件中的。