使用xsd:redefine创建扩展,而不是使用xsd:override

时间:2016-07-12 20:19:13

标签: xml xsd

我在使用xsd:redefine方面需要帮助。 根据手册,我可以使用xsd:redeine为模式添加扩展。 例如,对于Message,我有这个定义: `                                                                                                                                                                                      

<xsd:complexType name="MESSAGE_EXTENSION">
    <xsd:sequence>
        <xsd:element name="MISMO" type="MISMO_BASE" minOccurs="0"/>
        <xsd:element name="OTHER" minOccurs="0">
            <xsd:complexType>
                <xsd:complexContent>
                    <xsd:extension base="OTHER_BASE"/>
                </xsd:complexContent>
            </xsd:complexType>
        </xsd:element>
        </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="OTHER_BASE">
    <xsd:sequence>
        <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
</xsd:complexType>

`

有没有办法使用xsd:redefine重新定义MESSAGE_EXTENSION中的OTHER以不使用OTHER_BASE作为扩展基础,但是使用新的Complextype调用MESSAGE_OTHER_BASE?

`<xsd:complexType name="MESSAGE_OTHER_BASE">
    <xsd:sequence>
        <xsd:element name="QUERYCRITERIA" type="mismo:QUERYCRITERIA" minOccurs="0"/>
    </xsd:sequence>
</xsd:complexType>`

我可以使用xsd:override实现上述操作,如下所示:

<xsd:override schemaLocation="MISMO_3.4.0_B324.xsd">
    <xsd:complexType name="MESSAGE_EXTENSION">
        <xsd:sequence>
            <xsd:element name="MISMO" type="mismo:MISMO_BASE" minOccurs="0"/>
            <xsd:element name="OTHER" type="mismo:MESSAGE_OTHER_BASE" minOccurs="0"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:override>

但是xsd:override仅在XSD 1.1中可用。我不能使用XSD 1.1。我必须坚持使用XSD 1.0中的重新定义。

当我在MESSAGE_EXTENSION级别使用xsd:redeine时,它只会将QUERYCRITERIA作为兄弟添加到OTHER,而不是作为孩子。

我不应该扩展OTHER_BASE,因为它会影响使用扩展的所有其他部分。

感谢您的建议!

0 个答案:

没有答案