我可以使用 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 运行。您还没有说您使用的是什么验证器,但它做得不是很好。
如果在受限类型下有效的任何元素也是基本类型的有效实例,则限制是有效限制;如果受限类型允许基本类型不允许的事情,那么它是无效的。
我对限制标签有些困惑。我知道它通常用于 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 运行。您还没有说您使用的是什么验证器,但它做得不是很好。
如果在受限类型下有效的任何元素也是基本类型的有效实例,则限制是有效限制;如果受限类型允许基本类型不允许的事情,那么它是无效的。