在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>
答案 0 :(得分:1)
是的,你可以这样做。如果您希望使用全局定义,则可以使用ref
代替name
。但是,请注意,不允许在同一序列中组合这两个,因为验证者可能不再确定您的意思中的哪一个。
ref
然后在本地更改了定义,那么它就会重写,但是AFAIK无法做到这一点。无论如何它都没有意义。
答案 1 :(得分:0)
是的,你可以这样做,因为你没有覆盖任何东西。您有一个全局定义,而您的“内部”注释(在书中)是一个本地定义,实际上与全局注释无关。