You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSD规范是否允许在<extension>派生类型中重定义属性默认/固定值?

XSD扩展派生中重定义属性的规范说明

官方规范要求

根据W3C的XML Schema(XSD 1.0/1.1)官方规范,使用<xs:extension>进行类型扩展时,不允许重定义基类型中已存在的属性——无论该属性原本是否带有默认值或固定值。规范明确规定,扩展内容仅能添加新的属性、元素或模型组,不得修改或重定义基类型已声明的属性。

不同解析器的表现差异

  • MSXML与Xerces-C:对这类不符合规范的写法做了兼容处理,允许通过扩展重定义属性并添加默认/固定值,属于宽松实现。
  • libxml2:严格遵循官方规范,会直接拒绝此类XSD输入并抛出验证错误。

示例代码说明

以下是你提供的示例XSD,其中Child类型试图通过扩展Parent类型重定义name属性并添加固定值:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="Parent">
        <xs:sequence>
            <xs:element name="node1" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="name" type="xs:string"/>
    </xs:complexType>

    <xs:complexType name="Child">
        <xs:complexContent>
            <xs:extension base="Parent">
                <xs:sequence>
                    <xs:element name="node2" type="xs:string"/>
                </xs:sequence>
                <xs:attribute name="name" type="xs:string" fixed="value1"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:element name="Child" type="Child"/>
</xs:schema>

按照官方规范,这段XSD属于不合法写法,libxml2的拒绝是符合标准的行为,而MSXML和Xerces-C的支持属于非标准兼容。

内容的提问来源于stack exchange,提问作者Davide Capodaglio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:53:10