如何在XSD中设计带有complexTypes的列表

时间:2012-12-24 14:53:06

标签: actionscript-3 xsd schema

我将AS3类转换为XML时遇到问题。 有一个列表 - items:Array ,可能有类

class ImageVO extends BaseSceneElementVO
class ShapeVO extends BaseSceneElementVO

需要转换:

<xs:element name="items" type="imageList"/>

其中:

<xs:complexType name="imageList">
<!-- here i'm hesitate-->
    <xs:choice>
        <xs:element name="Image" type="Image" minOccurs="0" maxOccurs="unbounded" />
        <xs:element name="Shape" type="Shape" minOccurs="0" maxOccurs="unbounded" />
    </xs:choice>
</xs:complexType>

    <xs:complexType name="Image">
        <xs:complexContent>
            <xs:extension base="BaseSceneElement">
                <xs:sequence>
                    <xs:element .../>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="Shape">
        <xs:complexContent>
            <xs:extension base="BaseSceneElement">
                <xs:sequence>
                    <xs:element .../>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="BaseSceneElement">
        ...
    </xs:complexType>

如果我将 ShapeVO ImageVO 放入数组我会得到下一个结果

<items>
      <Image/>
      <Image/>
      <Shape/>
      <Shape/>
</items>

i.g。每个对象都在图像形状中转换。 我需要设计XSD结构,但我不知道如何。

我试图像here那样做但没有意义。 请帮帮我!

1 个答案:

答案 0 :(得分:1)

我假设你想要一个与你的类匹配的XSD,即扩展BaseSceneElementVO的多态选择列表;这将与您提供的示例XML相匹配。

在您的XSD(您犹豫的部分)中:

<xs:choice>
    <xs:element name="Image" type="Image" minOccurs="0" maxOccurs="unbounded" />
    <xs:element name="Shape" type="Shape" minOccurs="0" maxOccurs="unbounded" />
</xs:choice>

这是选择列表<Image>元素列表 <Shape>元素列表 - 所以不是列表混合它们,它将只是<Image>或仅<Shape>的列表。但是为了匹配您的类并验证您的示例XML,您需要一个选项列表,如下所示:

<xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element name="Image" type="Image" />
    <xs:element name="Shape" type="Shape" />
</xs:choice>

使用表达式表示法的表示法进行总结:您有i*|s*,但需要(i|s)*

BTW:您也可以使用替换组,但这些不太清楚,有点罕见,我知道并非所有工具都支持它们。