内容


使用 XML

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

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

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 使用 XML

敬请期待该系列的后续内容。

此内容是该系列的一部分:使用 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 服务器和浏览器都兼容,这一点不同于其它方案。

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 :超链接

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

正如我说过的,样本文档派生自 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 文档,所以值得“投资”一个好的 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

您应当尽可能地使用相对超链接,因为 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)论坛。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=XML, Web development
ArticleID=21429
ArticleTitle=使用 XML: 利用 XML 进行 Web 发布的基础知识
publish-date=09012003