XML模式扩展的语义

时间:2011-12-03 17:27:00

标签: xsd

直观地说,“扩展”意味着向基类型添加内容,而不是修改基类型。以下XSD

<complexType name="B">
    <attribute name="A1" type="int" use="required" />
    <anyAttribute namespace="##other" processContents="strict" />
</complexType>
<complexType name="D">
    <complexContent >
        <extension base="tns:B">
            <!--???-->
            <attribute name="A1" type="int" use="optional" />
            <anyAttribute namespace="##other" processContents="lax" />
        </extension>
    </complexContent>
</complexType>

不应该编译。但XML Schema编译器(System.Xml.Schema.XmlSchema)不会抛出错误。这种反直觉设计的理性是什么?

1 个答案:

答案 0 :(得分:0)

架构存在问题:

  • 在D中,您尝试再次添加属性A1。

在扩展中列出某些内容会将其添加到定义中。在这种情况下,“A1”已经存在。任何扩展实例都需要是基础的有效实例。如果A1不存在,它将不是基数的有效成员。

如果你想让它成为可选项,你似乎需要限制B类型。