在产品(项目)XML模式中表示图像节点的最佳方法是什么?

时间:2008-11-10 18:32:02

标签: xml schema

我有一个表示数据库中产品的XML模式,我试图找出将产品图像引用存储为XML节点的最佳方法。将有一个主图像,然后是替代图像,每个图像都有序列(显示顺序)。这是一种合适的格式,还是有更好的方法:

<item>
    <id></id>
    <images>
        <image width="" height="" href="" alt="" sequence="1" />
        <image width="" height="" href="" alt="" sequence="2" />
        <image width="" height="" href="" alt="" sequence="3" />
        <image width="" height="" href="" alt="" sequence="4" />
    </images>
</item>

显然会有比这更多的节点,但我没有全部显示它们。我认为我的主要图像永远是序列中的第一个。我遇到的问题是这些图像中的每一个都有缩略图,中图和大图,所以我认为这需要进一步细分。

2 个答案:

答案 0 :(得分:2)

由于XML元素具有自然顺序(即它们在XML文件中出现的顺序),因此包含sequence属性可能是多余的。您仍然可以谈论元素的顺序,主要产品图像仍然是“第一个”。

所以也许:

<images>
    <imageset>
        <image size="thumbnail" width="" height="" href="" alt="" />
        <image size="medium" width="" height="" href="" alt="" />
        <image size="large" width="" height="" href="" alt="" />
    </imageset>
    <imageset>
        <image size="thumbnail" width="" height="" href="" alt="" />
        <image size="medium" width="" height="" href="" alt="" />
        <image size="large" width="" height="" href="" alt="" />
    </imageset>
</images>

答案 1 :(得分:1)

稍微扩展Greg的设计:将图像大小设为元素名称而不是将size作为属性,即:。

<imageset>
   <thumbnail width=""... />
   <medium width="".../>
   <large width="".../>
</imageset>

这有两个原因。

首先,名称imageset已经告诉您其子元素将成为图像,因此命名子项image是多余的。使用imageset/*的XPath模式就像使用imageset/image一样容易,编写imageset/medium比编写imageset/image[@size='medium']更容易。

更重要的原因是此设计允许您的架构指定imageset元素必须包含每种类型图像中的一种。 (或者指定一个或多个图像类型是可选的。)