用于数据的 XML: XSL 样式表:推还是拉?[5]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 ken16 的 blog

                </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 与他联系。 
 

本文关键:xml xsl
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top