【问题标题】:How to design list with complexTypes in XSD如何在 XSD 中使用 complexTypes 设计列表
【发布时间】:2012-12-24 14:53:05
【问题描述】:

我在将 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>

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

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

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

我尝试过像here 一样,但没有任何意义。 请帮帮我!

【问题讨论】:

    标签: actionscript-3 xsd schema


    【解决方案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>
    

    这是一个列表选择&lt;Image&gt; 元素的列表&lt;Shape&gt; 元素的列表 - 因此它不是混合它们的列表,而是将是仅包含 &lt;Image&gt; 或仅包含 &lt;Shape&gt; 的列表。但为了匹配您的类并验证您的示例 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)*

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

    【讨论】:

    • 非常感谢您的快速回复。
    • 我正在使用 mx.rpc.xml 包中的标准 Adob​​e 工具,但似乎它不支持选择列表(我将尝试使用替换组,但我是这方面的新手. 谁能帮帮我?先谢谢了。
    • @adellantado 你说不支持选择列表很奇怪——这是基本的。我刚刚检查了 mx.rpc.xml,唯一的 object-to-xml 序列化类是 [SimpleXMLEncoder](help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/… - 这根本不使用 xml 模式。我认为如果你采取一步会很有帮助返回并在您的问题中重新定义您想要实现的目标(以及为什么) - 可能有更简单的方法来实现它。
    • mx.rpx.xml 中的大多数类都标有元数据“[ExcludeClass]”,所以我将这个包复制到我的 src 和注释标签中。更多信息您可以找到here 所以如果我使用选择列表,SchemaMarshaller 会抛出错误 - 绝对疯狂:“字符串 'myArray' 不是布尔值。”。我试图做更多的实验,但没有任何意义。谢谢
    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 2021-10-14
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多