我可以使用 restriction(XSD) 添加元素吗?

Can I use restriction(XSD) to add elements?

我对限制标签有些困惑。我知道它通常用于 limit/restrict 来自基础的元素。但我似乎也可以向基本类型添加新元素。这个可以吗?这样做甚至允许这样做感觉很奇怪。就像您可以使用限制标签进行扩展和限制一样。

<xs:complexType name="Foo">  
  <xs:complexContent >
    <xs:sequence>
      <xs:element name="a" type="xs:string" />
      <xs:element name="b" type="xs:integer" />
    </xs:sequence>
 </xs:complexContent>
</xs:complexType>

<xs:complexType name="Blah">
 <xs:complexContent >
   <xs:restriction base="Foo">
     <xs:sequence>
      <xs:element name="a" type="xs:string" />
      <xs:element name="b" type="xs:integer" />
      <xs:element name="c" type="xs:string" />
    </xs:sequence>
   </xs:restriction>
 </xs:complexContent>
</xs:complexType>

我的验证说没问题,但还是感觉不对。

首先,您的 Foo 类型不正确,因为 xs:sequence 不允许作为 xs:complexContent 的子代。当我更正它时(通过删除 xs:complexContent 元素),我得到“复杂类型 Q{}Blah 的内容模型不是 Q{}Foo 类型内容模型的有效限制。受限类型允许基本类型不允许的元素 c"

这是来自 Oxygen 中的 Saxon 运行。您还没有说您使用的是什么验证器,但它做得不是很好。

如果在受限类型下有效的任何元素也是基本类型的有效实例,则限制是有效限制;如果受限类型允许基本类型不允许的事情,那么它是无效的。