我在使用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,因为它会影响使用扩展的所有其他部分。
感谢您的建议!