当设计XML方案时,最显而易见的方法通常不会是最恰当的方法。对于这一点,最贴切的例子就是当使用Marketplace设计模式的时候。这一设计模式解决了XML文档中的很多基本的问题。
Marketplace模式有助于解决一些XML文档的基本问题。假设你具有一个文档,其包含等级元素,比如一个家庭。在表A中,我们可以看到一个家庭树,其包含两个Parent元素和一个Child元素。
问题在于,使用这一等级树,很难使用一个简单的Parent-Child等级将Child元素放置在结构中。这是因为,一个孩子一定需要具有两个父母,而不能只是一个。
表A: marketplace_problem.xml
<?xml version="1.0" ?>
<Family>
<Parent>
<Name>Dad</Name>
</Parent>
<Parent>
<Name>Mom</Name>
</Parent>
<Child>
<Name>John</Name>
</Child>
</Family>
这种类型的问题无处不存在。只要你具有连续的元素,而这些元素以多种方式分类在等级结构中,这种问题通常会出现。
这种设计模式的关键之处在于能够重组和再编数据等级来解决以上的问题。在以上范例中,你可以试探将Child元素放置在Parent元素之下。然而,你很快看到,处理和理解这种类型的数据相当困难。将Child元素放置在Dad元素之下可以消除与Mom元素的关系,反之亦然。
相反,我们将使用Marketplace模式。这种模式使用XML特性来删除不恰当的等级结构,然而它却仍然可以保留重要的关系数据。不采用将Child元素放置在Mom或者Dad元素之下的方法,你可以将其放置在任何位置,并添加额外的属性来说明这一结构。