0

本质上我想这样做:

<xs:complexType name="test1">
    <xs:sequence>
        <xs:element name="test1Value"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="test2">
    <xs:complexContent>
        <xs:extension base="tns:test1">
            <xs:sequence>
                <xs:element name="test2Value"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="refer1">
    <xs:sequence>
        <xs:element name="refer1Value" type="tns:test1"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="refer2">
    <xs:complexContent>
        <xs:restriction base="tns:refer1">
            <xs:sequence>
                <xs:element name="refer1Value" type="tns:test2"/>
            </xs:sequence>
        </xs:restriction>
    </xs:complexContent>
</xs:complexType>

通常,您可以通过添加 xsi:type 来定义“test1”时插入“test2”实例,以便正确解析。但是问题是,我可以强制 - 对于特定的子类型 refer2 - 你必须使用限制发送 test2 类型吗?

这是否仍然需要设置 xsi:type 是一个不同的(尽管很有趣)问题。

请注意,与上一个问题(限制 XML Schema 元素以包含更具体的类型)不同,目的不是使用自定义标记来指示可以通过选择或替换组实现的更具体的子类型,而是使用 xsi:type表示特定的亚型。

4

1 回答 1

0

由于 test2 不是 test1 的限制,因此 refer2 的定义不构成对 refer1 的限制,无论是在正常意义上的“限制”一词还是由 XSD 操作。所以不,你不能做你想做的事并将其称为 XSD 中的限制。

于 2013-06-26T14:21:02.447 回答