Inheritance 如何将密钥添加到派生架构中?

Inheritance 如何将密钥添加到派生架构中?,inheritance,xsd,extend,derived,redefinition,Inheritance,Xsd,Extend,Derived,Redefinition,以下是问题的简化示例: base.xsd: 我想在derived.xsd中的项上定义一个键,但在base.xsd中不定义。因此,基本模式的行为不应更改,但在派生模式中,它的行为应符合以下定义: <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="items" minOccurs="0">

以下是问题的简化示例:

base.xsd:

我想在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>

尽管如此,我派生的.xsd应该保持从base.xsd派生,因为我真正的模式中还有其他元素需要继承

派生的.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>    
<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>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:redefine schemaLocation="base.xsd">
        <xs:complexType name="root">
            <xs:complexContent>
                <xs:restriction base="root">
                    <xs:sequence>
                        <xs:element name="items" type="items" minOccurs="0">
                            <xs:key name="itemKey">
                                <xs:selector xpath="item" />
                                <xs:field xpath="." />
                            </xs:key>
                        </xs:element>
                    </xs:sequence>
                </xs:restriction>
            </xs:complexContent>
        </xs:complexType>
    </xs:redefine>
</xs:schema>