IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML | Web development  >

使用 XML: 利用 XML 进行 Web 发布的基础知识

帮助您入门的循序渐进的指导

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Benoit Marchal (bmarchal@pineapplesoft.com), 顾问, Pineapplesoft

2003 年 9 月 01 日

随着越来越多的开发人员学习和试用 XML,许多人开始对使用样式表发布和管理网站感兴趣。但是开始学习这种技术并非始终是一件轻松的事情。孤立地看,尽管没有一种概念是困难的,但是将这些概念紧密地结合在一起并非是轻而易举的事情。在本文中,Benoit Marchal 提供了循序渐进的指导以帮助您入门。他演示了如何在源、规则(样式表)和发布目录中组织您的项目。您还将获得有关 XML 编辑器的一些实用技巧。

通过本专栏的 论坛、各种邮件列表和我的咨询活动,我注意到人们对利用 XML 和 XSL 来管理和发布网站越来越感兴趣。尽管许多开发人员都熟悉 XML 和 XSL,但是构建一个一致的系统并不是件轻松的任务。在本文中,通过从头到尾完成一个实用的且循序渐进的示例,我为您介绍了如何用 XML 创建网站。

我将利用在本专栏中开发的工具 — 用于 Eclipse 的 XM 插件(XM plug-in for Eclipse)(请参阅 参考资料)来说明该技术。即使您使用的是另一个发布环境(例如 Apache Cocoon),本文提供的信息仍然是有用的,但我发现 XM 对用户更友好。

为什么使用 XML 和 XSL?

首先,我将研究一下利用 XML 进行发布的优点和代价。您将发现有很多理由,可以使我们转向使用 XML — 实际上,理由非常之多,因此无法在本文中对所有理由进行讨论。我只重点介绍了最常听到的一些原因:

  • 它比较简单。刚开始时您可能不这样认为,因为您需要学习如此多的新工具,但是一旦您拥有了一个适当的 XML 解决方案,那么您的站点管理琐事将显著减少。
  • 它不会过时(obsolescence-proof)。XML 将内容(文本和图像)与样式化工作和发布工作分离,这样您就可以对它们分别进行单独地更改。例如,当您编写新文档时,您可以专心于编写工作,而不必关心颜色、背景或导航。反过来,当您更改颜色、背景或导航时,XML 和 XSL 会自动更新您的所有页面。
  • 它是一种开放标准。许多商业工具和开放源码工具都支持 XML。即使某个供应商“消失”了、放弃了某个产品,或者不支持您所需的特性,毋庸置疑的是肯定会有替代品。
  • 它适应性很强。XML 文档就象微型数据库,而样式表就象脚本,它负责查询和操作来自那些文档数据库的数据。这些样式表十分灵活 — 从简单的发布到计算新内容(例如目录、索引及更多)都能胜任。

但是有哪些代价呢?您必须权衡考虑编写样式表的代价和优点。值得为使重复的任务自动化付出代价,但不能过头。如果您的站点只包含几个页面,那么不使用 XML 会更快且更廉价。当站点的页面达到 10 到 20 个时,那么 XML 才物有所值。

就个人而言,我喜欢 XML,因为它简化了站点管理。几年前,我必须利用常规的 HTML 编辑器来维护一个包含 100 多个页面的站点。相信我,那并不是件有趣的事情。对站点进行任何更改(例如添加或删除某些部分)都将花费数小时的时间来复制和粘贴链接。错误和坏链接是常有的事。

利用 XML 和 XSL 却不会发生这样的情况。相反,样式表使恼人的重复性任务自动化,从而节省了时间,并使错误最少。当然,XML 不是唯一的解决方案。某些编辑器提供了基于模板的方法,这种方法就象是 XML 和 XSL 的组合。我还喜欢 XSL,因为它是一种脚本语言(仅仅受到我想象力的限制),并且它不依赖于专有的解决方案。

您可以在服务器、客户机或 Web 管理员的桌面机器上使用样式表。用于 Eclipse 的 XM 插件在 Web 管理员的桌面机器上实现样式表 — 当处于批处理方式时,它还可以在服务器上工作。该插件自动创建一个静态网站(例如一些 HTML 页面),这些页面可上载到任何服务器。通过在 Web 管理员的桌面机器上使用样式表,可以进一步提高 XML 的灵活性,因为它与每个 Web 服务器和浏览器都兼容,这一点不同于其它方案。

何时使用动态内容

尽管 XML 补充了 JSP,但它还是比不上 JSP。典型网站有 95% 的静态内容(例如 FAQ、图像和描述),而其余内容是比较动态的内容(例如论坛、搜索表单或购物车)。遇到静态内容时,XML 要优于 JSP,而 JSP 适用于比较动态的内容。

为了汲取这两种技术的长处,我通常通过 XML 和 XSL 生成 JSP 页面。再强调一次,其目的是将内容和发布工作区分开。要利用 XM 插件生成 JSP 页面而不是 HTML 页面,请将 xr:extension="jsp" 属性添加到 xsl:output 元素。

servlet、JSP、PHP 或 ASP 怎样呢?换而言之,动态生成的网站怎么样呢?许多商店已经转向动态托管,以获得同样的优点,并简化站点维护。servlet 或 JSP 页面中的代码负责显示。这与 XML 和 XSL 比起来如何呢?

简而言之,XML 更高效。动态站点往往比较慢,因为服务器要为每次请求计算页面。这些站点也比较难于设置和维护,遗憾的是,这通常会导致站点不大稳定。我知道,有许多方法可用来避免所有这些问题,但是您会发现 XML 只花了很小的代价就提供了更好的结果。





回页首


开始

开始之前,请下载 Eclipse 和用于 Eclipse 的 XM 插件(请参阅 参考资料以获取链接)。XM 是 “使用 XML(Working XML)”专栏的一个项目,它增强了 Eclipse,使它能够支持利用 XML 和 XSL 进行 Web 发布。XM 还可以作为适合于批处理的独立软件。为了准备这篇专栏文章,我使用了 Eclipse 2.1 和 XM 0.9。按照 Eclipse 和 XM 网站上的指导安装软件。

启动 Eclipse,然后单击 File > New菜单中的 Project。在打开的对话框(请参阅图 1)中,选择 ananas.orgXM Project,然后单击 Next。输入项目名(例如 mysite ),然后单击 Finish


图 1. 创建新项目
创建新项目

新项目出现在导航程序(Navigator)中。当您打开该项目时,您可以看到它包含三个目录: publishrulessrc ,如图 2 所示。如果您未看到导航程序,请单击 Window > Show View菜单中的 Navigator


图 2. 导航程序中的新项目
导航程序中的项目

源目录

src (源)目录保存着您的 XML 文档以及图像和其它支持文件。该插件创建了一个样本文件以帮助您开始学习。您应当对它进行编辑以添加您自己的内容,并且根据需要添加其它 XML 文件。 src 目录中的每个 XML 文件都成为网站上的一个 HTML 页面。

XML 编辑器一节介绍了编写 XML 文档的工具。目前只在文本编辑器(例如 Eclipse)中打开 XML 文档。样本文档使用了 DocBook 的一个简化版本,带有以下标记:

  • article :文档的根
  • articleinfo :包含文献信息
  • sect1 :文档章节
  • sect1info :包含章节标题
  • title :可能会在 articleinfosect1info 下面作为一个标题出现
  • copyright :将版权信息保存为一个或多个 year 标记和一个 holder 标记
  • simpara :段落
  • ulink :超链接

DTD 还是模式?

应当使用 DTD 还是模式呢?实际上,这并不十分重要。两者都根据给定的词汇表验证您的文档。与 DTD 相比,模式提供了更多控制,但模式引入的一些特性主要是针对电子商务的,这些新特性在发布应用程序方面不是很重要。由于新式的编辑器既可以很好地处理 DTD,也可以很好地处理模式,因此您可以根据自己的喜好选择使用 DTD 还是模式。

您可以使用其它标记,但是需要相应地编辑样式表。

正如我说过的,样本文档派生自 DocBook。但是,它使用了不同的名称空间来表明它不是真正的 DocBook。DocBook 是用于技术文档的标准词汇表。它最初是由 O'Reilly 开发的,并且是由 OASIS(XML 用户的国际协会)维护的。

您可能会发现 DocBook 是开始学习的一个较佳选择,因为它很容易就可得到,而且很有效,它是一种标准,并且它很流行(选择它主要因为它的流行)。上百种现有 XML 工具都可以处理 DocBook — 显然,市场上的工具越多,意味着您需要做的工作越少。

其它用于网站的流行 XML 词汇表包括:国际新闻通讯委员会(International Press and Telecommunication Council,IPTC)的 NewsML、Norman Walsh 的 Web 页面 DTD(Norman Walsh 还维护 DocBook 词汇表)和 Apache Cocoon DTD。

规则目录

rules 目录包含了样式表。大多数网站只需要一个样式表。用于 Eclipse 的 XM 插件将 default.xsl 样式表应用于每个文档,除非它被告知用其它样式表。因此,如果您的站点只有一个样式表,那么请将它保存为 rules/default.xsl 。如果您的站点需要多个样式表,将它们保存在 rules 下,并且将下面的处理指令添加到那些不使用缺省值的文档:

<?xml-stylesheet href="listing.xsl" type="text/xsl"?>

当心!该处理指令需要两个参数: href 指向样式表(您可以只输入文件名 — XM 插件自动在 rules 目录下查找),而 type 的值必须为 text/xsl 。还请记住,该处理指令适用于文档(在 src 目录中),而不适用于样式表(在 rules 目录中)。

发布目录

最后(但并非最不重要的)一个目录是 publish ,插件在该目录中生成您的网站。下一步是将该目录中的内容上载到 Web 服务器。

另一个警告:决不要试图编辑或修改 publish 目录中的文件。如果对某个 Web 页面不满意,那么请更改 XML 文档(在 src 目录中)或样式表(在 rules 目录中),但是 决不要试图编辑 publish 目录中的任何内容。您的目的是使有关发布的琐事自动化 — 直接编辑站点与该目标是背道而驰的。此外,插件在下一次重新生成站点时,可能会覆盖您的更改。





回页首


改进站点

正如您在前一节中看到的,项目向导创建了一个样本站点。下一步是填充 src 目录,并改进样式表。如果您采用了流行的词汇表(例如 DocBook),您可以发现已经存在的样式表,它们可以加速这一过程。

XML 编辑器

迁移

如果您正在从另一个发布工具进行迁移,可能无法一下子将您的内容转换成 XML。别担心 — 该插件能够发布出现在 src 目录中的任何 HTML 文件,因此您可以把它们逐步转换成 XML。

由于您必须编辑许多 XML 文档,所以值得“投资”一个好的 XML 编辑器。您的选择有:

  • 文本编辑器,例如 Eclipse。文本编辑器适用于小型的修正工作,但对于复杂的编辑而言,它们太不方便了。
  • 伪所见即所得 XML 编辑器,例如 XMetaL 或 XMLMind。这些编辑器模仿了字处理器,并且非常适用于复杂的编辑。
  • RTF 转换器。它们与字处理器一起工作以生成 XML,当您从许多不同的作者(他们可能不熟悉 XML)那里收集文档时,这些转换器非常理想。

哪种选择最好呢?这取决于手头上的作业。我发现几乎不可能利用文本编辑器编写长文档。必须记住要让开始和结束标记成对出现,这大大加重了我的工作量。除了最基本的修正工作外,大多数作者都不喜欢使用文本编辑器进行其它任何工作。

伪所见即所得编辑器提供了最舒适的环境,作者无须担心 XML 语法(请参阅图 3)。由于它们使用颜色、黑体字和其它排版属性来模仿能处理 XML 内容的字处理器,因此被称为“伪所见即所得”。如果您从未尝试过伪所见即所得编辑器,那么劳驾一下,请立即下载评估版本。请注意,这些编辑器并不是“开箱即可用的”— 必须根据给定的词汇表对其进行定制。幸运的是,大多数编辑器都提供了对 DocBook 的本机支持 — 这是采用这个流行词汇表的另一个原因。

最后一种解决方案是仍然使用您的字处理器,并使用 RTF 转换器生成 XML 文档。实际上,您会发现转换工作很少没有麻烦,但是如果您从不熟悉 XML 的作者那里收集文档,那么它是一个较佳的解决方案。在 Pineapplesoft,我们维护着一个社区网站,许多作者为该站点撰稿,我们对该网站广泛使用了转换器。


图 3. 伪所见即所得编辑器
伪所见即所得编辑器

超链接和 URL

作为一种额外的功能,用于 Eclipse 的 XM 插件对超链接进行管理以防止坏链接。该插件使用了所谓的 相对 URL(提供相对于当前文件的路径的 URL)。清单 1 显示了一个相对 URL 示例。

清单 1. 相对 URL
about.xml
photos/index.xml
../images/logo.gif

绝对 URL却相反,它包括主机名,或者提供从网站的根开始的路径。清单 2 显示了一个绝对 URL 示例。


清单 2. 绝对 URL
/photos/index.xml
http://www.ananas.org/
http://www.ibm.com/developerWorks

相对 URL 和样式表

在样式表中使用相对 URL 很困难,因为这样的话 URL 必须相对于站点中的每个文档。但是 XM 插件提供了一种变通方法。如果一个 URL 以 ! (感叹号)字符开头,那么则将其视作相对于网站的根。下面的路径说明了这一点:

!photos/index.xml

在样式表中,应当让所有 URL 都以 ! 开头。

您应当尽可能地使用相对超链接,因为 XM 插件:

  • 根据需要更新文件扩展名,必要的时候将扩展名从 .xml 更改为 .html
  • 测试链接,如果链接是坏的则发出警告

错误消息和故障诊断

该插件在 XM 控制台中报告有关 XML 文档或样式表的问题。如果未看到该控制台,那么请从 Window > Show View菜单选择 XM Console。请仔细阅读错误消息,因为它包含对问题的描述。该插件还列出发生错误的文件和行(而错误可能不止一行或两行,因此还请务必查阅问题前后的那些行)。

如果插件生成了空白 Web 页面,那么请:

  • 仔细阅读 XM 控制台中的错误消息
  • 确保对应的 XML 文档不为空
  • 检查您的样式表是否适合于该文档词汇表,请特别注意名称空间

当某些内容看起来确实很怪异时,请复查名称空间和元素名称。在我的学生所遇到的所有问题中,名称空间不匹配占了其中的 25%。

Eclipse 技巧

我将以有关 XM 插件的几个技巧来结束本文。

Window菜单选择 Preferences。在 Workbench 类别下,选择 File Associations 项,并将 *.xml*.xsl 文件与某个编辑器关联起来。可以与众多 Eclipse 文本编辑器中的某个进行关联,或使用外部编辑器(例如 XMLMind)。当您双击该文件时,它将自动打开所关联的编辑器。

要在打开文件时选择编辑器,那么在导航程序中用鼠标右键单击该文件,然后选择 Open with菜单。

当您在 Eclipse 中保存一个文档时,Eclipse 会自动生成网站。如果您使用的是一个外部编辑器(例如 XMLMind),那么请从 Project菜单选择 Rebuild Project。如果该菜单呈灰色,不可点击,那么请先在导航程序中单击该项目。

当 XM 插件重新构建网站时,它不能识别对样式表的更改。如果看上去该插件忽略您的更改,那么请执行下列步骤:

  1. 在导航程序中用鼠标右键单击项目名称(在上面的示例中为 mysite ),然后选择 Properties
  2. 选择 XM Properties并确保 "RunXM" performs a build被选中(请参阅图 4)。
  3. 单击 OK
  4. 再次用鼠标右键单击该项目,然后选择 "Run XM"

图 4. 编辑特性
改写特性




回页首


继续学习

我希望本文已让您相信这样一件事情:利用 XML 和 XSL 发布网站是有趣的,而且提供了许多优点。XSL 是一个功能强大的工具 — XM 插件进一步扩展了这种功能,所以在本文中我只能浅尝辄止。要学习更多有关所有可用功能的知识,建议您阅读 developerWorks使用 XML(Working XML)专栏中的以前文章。

在您下载该插件时,您会发现 ananas.org 项目的副本。那就是我用来维护站点的项目,它演示了许多高级功能。您可能还想研究该代码。最后,请务必加入 使用 XML(Working XML)论坛。



参考资料



关于作者

Author photo

Benoit Marchal 是一位比利时籍顾问。他是 XML by Example 和其它 XML 书籍的作者。可以向 Benoit 寻求有关 XML 项目的帮助 — 可以通过 bmarchal@pineapplesoft.com与他联系。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款