设计XML解决方案是一个不可避免地可重复的过程。将数据组织化和结构化是设计好的XML文档的基础。设计模式有助于提高概念和代码的可重用性,通常提供了常见设计问题的解决方案。
像“在一个XML文档中处理多个条目”这样一个问题,我们可以找到一个模式来解决它。想象一个用户订单的文档,包含了由多个条目组成的一个用户订单。用哪种方式在XML文档中管理和组织这些条目才是适当的?
答案也许是集合(collection)模式。这个模式有助于解决组织在同一XML层级中的多个相似元素的问题。让我们看看这个模式怎样工作和运用它的一些例子。
一般而言,一个集合指的是一组事物。然而,在实践中,它实际上指的是一组“相似的”事物。人们收集各种各样的东西,像邮票、音乐……。他们的收藏品的集合是一组相似的东西。在XML的语境中,组织一组相似的元素并把它们适当地结构化到一个XML文档的层次中是很常见的问题。按照集合模式,你可以很容易地分组你的XML文档中的相似元素。
除了简单地允许你分组元素,一个集合元素还可以像容器一样操作。它允许你指定集合的属性,这些属性会应用到集合中所有条目之上。这样,集合模式部分地是组织模式或结构模式的复合。
集合模式在分组相似条目上也是有用的。可能所有的集合都包含相同的条目,也可能每个单独的集合仅包含一个条目的子集或一组相关的条目。你可以灵活运用这个模式来分类你的XML文档中的条目。
应用模式
让我们看看怎样应用这个模式并用一个情境来举例说明它。有这样一个例子,我们有一个包含多个产品条目且各条目有不同出货日期的订单。例如,一个客户下了一个订单定购你的一些产品,并希望在不同的日期得到这些产品。在你的订单统计文档中,你希望要包括的数据有产品的条目和它们的出货日期。目前,你的文档只在<Order>元素中包含了若干<Item>元素,像下面这个例子:
订单中有四种不同的产品条目,分为两种不同的出货日期。我们需要重新组织这些条目,以便不必在每个条目中都出现出货日期。作为代替,我们用“出货”来分组这些条目。