0

我有一个表示数据库中产品的 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>

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

4

2 回答 2

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>
于 2008-11-10T18:37:09.717 回答
1

稍微扩展一下 Greg 的设计:将图像大小设置为元素名称而不是设置size属性可能是合适的,即:

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

有两个原因。

首先,名称imageset已经告诉您它的子元素将是图像,因此命名子元素image是多余的。使用 XPath 模式和imageset/*使用imageset/image它一样容易,而且编写imageset/medium起来比编写简单一点imageset/image[@size='medium']

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

于 2008-11-10T20:20:45.657 回答