XSD 覆盖 parent

XSD overriding parent

我正在使用两个架构文件,parent.xsd 和 child.xsd,其中包括 parent 架构。

在parent里面,我用下面的方式定义了一个非常简单的元素

<xs:element name="parentElement">
  <xs:complexType>
    <xs:sequence minOccurs="0" maxOccurs="1">
      <xs:element ref="another_element" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
  <xs:attribute name="firstAttr" type="attrType"/>            
 </xs:complexType>
 </xs:element>

现在,在 child 模式中,我想覆盖此元素并添加一个新属性。 child 应与 parent 同名。这可以在 XSD 内完成吗?

我已经尝试过 但我想真正使用相同的 parent 元素而不是基于 parent.

定义一个新元素

首先您需要提取复杂类型。

<xs:element name="parentElement" type="typeOfParentElement"/>

<xs:complexType name="typeOfParentElement">
    <xs:sequence minOccurs="0" maxOccurs="1">
      <xs:element ref="another_element" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
  <xs:attribute name="firstAttr" type="attrType"/>            
</xs:complexType>

然后您将需要定义一个类型,该类型使用附加属性扩展 typeOfParentElement

那么你需要定义这个扩展类型的子元素的类型。

从您的描述中不清楚子元素是否与父元素同名。如果是这样,您将需要在局部元素声明而不是全局元素声明中定义它,因为您不能有两个具有相同名称的全局元素。