可以使用本地元素定义覆盖全局元素定义吗?

时间:2011-10-25 18:35:11

标签: xml xsd

在XML模式中定义全局元素然后在特定父元素的上下文中覆盖该元素定义是否合法?可以在模式中全局和本地定义相同的元素,还是必须是一个或另一个?

覆盖全局元素的示例可能如下所示。 Note被定义为包含多个其他元素的全局元素。但是,在一本书的上下文中,它只是一个字符串。

<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string"/>
      <xs:element name="heading" type="xs:string"/>
      <xs:element name="body" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="book">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="title" type="xs:string"/>
      <xs:element name="note" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

2 个答案:

答案 0 :(得分:1)

是的,你可以这样做。如果您希望使用全局定义,则可以使用ref代替name。但是,请注意,不允许在同一序列中组合这两个,因为验证者可能不再确定您的意思中的哪一个。

编辑:实际上,你并没有真正“压倒”任何东西。您刚刚对名为“note”的元素进行了匿名定义。如果您使用ref然后在本地更改了定义,那么它就会重写,但是AFAIK无法做到这一点。无论如何它都没有意义。

答案 1 :(得分:0)

是的,你可以这样做,因为你没有覆盖任何东西。您有一个全局定义,而您的“内部”注释(在书中)是一个本地定义,实际上与全局注释无关。