</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
请注意这个拉样式表多么臃肿。您不得不检查每个节点,并且 — 如果该节点需要特殊处理 — 为其添加适当的格式。这个样式表甚至不能处理清单 8 中引述的复杂情形。该代码忽略了过程(procedure)标记内的工具(tool)标记。如果您扩展了样式表以正确处理所有可能的工具、目标、过程等嵌套,那么样式表会迅速膨胀至一个难以控制的(且不可维护的)大小。
结束语
这些示例演示了我在我的大多数专栏中得出的要点:数据文档与叙述文件有本质区别,因为:
数据文档中的信息以可在代码中预料的次序出现。
数据文档中不包含松散文本,因此,将该文本转换成输出文档无需专门的代码。
比起重命名元素、对它们进行重新排序并在目标树中将它们向上聚合一个级别(或将它们向下推至一个更详细的级别),将源数据文档映射为输出文档并不复杂。如果您使用拉模型,映射很简单且易于维护。
另一方面,基于叙述的文档则完全相反。
信息以不能轻易预见的次序出现。
一些文本游离于元素的上下文之外,所以需要将它正确地移到输出文档。
为了在输出文档中准确地重现叙述,不管元素出现在哪里,样式表都必须处理它们,而推模型在这一方面比较擅长。
简而言之,当设计数据文档的样式表时,首先考虑使用拉模型。对于叙述文档,如果可能,请使用推模型。精通于编写这两种样式表 — 并知道它们各自的优点和缺点 — 将使您能够处理您将来可能会遇到的任何样式表设计工作。
参考资料
通过单击本文顶部或底部的讨论,参与有关本文的论坛。
从 w3c 学习 xslt 和 xpath 技术的良好基础知识。
请阅读 kevin 以前的专栏和文章:
xml for data #1:使用 xml schema 原型(developerworks,2001 年 6 月)
xml for data #2:用模式样式化(developerworks,2001 年 7 月)
xml for data #3:xlink 和数据(developerworks,2001 年 7 月)
xml for data #4:灵活体系结构的四点技巧(developerworks,2001 年 8 月)
xml for data #5:native-xml 数据库:一个关于数据的坏主意?(developerworks,2001 年 10 月)
xml for data #6:多对多关系的建模(developerworks,2002 年 1 月)
xml for data #7:对 xquery 的前瞻(developerworks,2002 年 2 月)
soapbox:kevin 讲述了他提倡为什么在数据方面,xml schema 不费吹灰之力击败了 dtd(developerworks,2001 年 6 月)的原因。
请阅读 xml structures for existing databases,摘自 wrox 出版的书籍 professional xml databases中的一个章节(developerworks,2001 年 1 月)。
获取 ibm websphere studio site developer,它是构建、测试和部署 java server pages、servlet 和与 xml 相关的应用程序和网站的一种易于使用的集成开发环境。
查明如何才能成为一名 xml 和相关技术领域的 ibm 认证开发人员。
请在 developerworks xml 专区上查找更多有关 xml 的参考资料。
关于作者
kevin williams 是 blue oxide technologies, llc 的 ceo,这是一家从事设计 xml 和 web 服务创作软件的公司。请访问该公司的网站 http://www.blueoxide.com。可以通过 kevin@blueoxide.com 与他联系。