【发布时间】:2014-10-24 11:46:07
【问题描述】:
这是一个简化的问题示例:
base.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="root" type="root" />
<xs:complexType name="root">
<xs:sequence>
<xs:element name="items" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<xs:element name="items" type="items" />
<xs:complexType name="items">
<xs:sequence>
<xs:element name="item" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:schema>
derived.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:redefine schemaLocation="base.xsd">
<!-- redefining types from base.xsd ... -->
</xs:redefine>
</xs:schema>
我想在derived.xsd 中的项目上定义一个键,而不是在base.xsd 中。所以基本模式的行为不应该改变,但在派生模式中,它应该按照以下定义运行:
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="items" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="item" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:key name="itemKey">
<xs:selector xpath="item" />
<xs:field xpath="." />
</xs:key>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
不过,我 derived.xsd 应该保持从 base.xsd 派生,因为我的真实架构中还有其他元素需要继承。
【问题讨论】:
标签: inheritance xsd extend derived redefinition