0

我在将 AS3 类转换为 XML 时遇到问题。有一个列表 -项目:具有可能类的数组

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>

如果我将ShapeVOImageVO放入数组中,我将得到下一个结果

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

ig 每个对象都在ImageShape中转换。我需要设计 XSD 结构,但我不知道怎么做。

我试着在这里做,但没有意义。请帮帮我!

4

1 回答 1

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>- 所以不是混合它们的列表,它将是 only<Image>或 only的列表<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)*

顺便说一句:您也可以使用替换组,但这些不太清楚,有点少见,而且我知道并非所有工具都支持它们。

于 2012-12-26T02:04:32.437 回答