使用更具体的元素类型限制xsd复杂类型

使用更具体的元素类型限制xsd复杂类型,xsd,Xsd,本质上,我想这样做: <xs:complexType name="test1"> <xs:sequence> <xs:element name="test1Value"/> </xs:sequence> </xs:complexType> <xs:complexType name="test2"> <xs:complexContent> <xs:ext

本质上,我想这样做:

<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>

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

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


请注意,与前面的问题()不同,其目的不是使用自定义标记来表示可以通过选择或替换组实现的更具体的子类型,而是使用xsi:type来表示特定的子类型。

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