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

时间:2013-06-26 10:07:02

标签: xsd

本质上我想这样做:

<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”实例,以便可以正确解析。但问题是,我是否可以强制执行特定的子类型参考2,您必须使用限制发送test2类型?

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

请注意,与前一个问题(Restrict an XML Schema element to contain a more specific type)不同,目的不是使用自定义标记来指示可以通过选择或替换组实现的更具体的子类型,而是使用xsi:type来指示特定的亚型。

1 个答案:

答案 0 :(得分:0)

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

相关问题