0

AS3 クラスを XML に変換する際に問題があります。リストがあります - items:可能なクラスを持つ配列

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>

すべてのオブジェクトがImageおよびShapeに変換されます。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>要素のリスト-したがって、それらを混合するリストの代わりに、それはのみまたはのみのリストになります。ただし、クラスを照合し、サンプルXMLを検証するには、次のような選択肢のリストが必要です。<Shape><Image><Shape>

<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 に答える