【问题标题】:How to add a key into a derived schema?如何将密钥添加到派生架构中?
【发布时间】: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


    【解决方案1】:

    以下内容对我有用。

    derived.xsd

    <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>
    

    【讨论】:

      猜你喜欢
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      相关资源
      最近更新 更多