直观地说,“扩展”意味着向基类型添加内容,而不是修改基类型。以下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)不会抛出错误。这种反直觉设计的理性是什么?
答案 0 :(得分:0)
架构存在问题:
在扩展中列出某些内容会将其添加到定义中。在这种情况下,“A1”已经存在。任何扩展实例都需要是基础的有效实例。如果A1不存在,它将不是基数的有效成员。
如果你想让它成为可选项,你似乎需要限制B类型。