2

是否可以覆盖父 xsd 中元素的 minOccurs/maxOccurs 属性?我们可以轻松地扩展父 xsd 并创建一个具有不同命名空间的新 xsd,但我试图用相同的父命名空间覆盖。

假设我们有一个 xsd

    <?xml version="1.0" encoding="UTF-8"?>
<xs:schema
    xmlns:cust="http://test.com/schema/cust" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://test.com/schema/cust"  elementFormDefault="qualified"  attributeFormDefault="unqualified">
<xs:complexType name="customer-type">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
    <xs:element name="hobby" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>

<xs:element name="customer" type="cust:customer-type"/>
</xs:schema>

我可以使用相同的命名空间创建上述 xsd 的扩展/限制,这会将<cust:hobby>minOccurs 限制/更改为 1?

4

1 回答 1

1

好的,我使解决方案复杂化。在此之前,我试图在 xml 1.0 中使用覆盖功能,该功能仅适用于 xml 1.1。

一个简单的重新定义就可以了:

如果您的基础 xsd 的名称是 cust.xsd,那么下面的重新定义会将“爱好”元素的 minOccurs 覆盖为 1。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:cust="http://test.com/schema/cust" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://test.com/schema/cust"  elementFormDefault="qualified"  attributeFormDefault="unqualified">
<xs:redefine schemaLocation="cust.xsd">
<xs:complexType name="customer-type">
<xs:complexContent>
 <xs:restriction base="cust:customer-type">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
    <xs:element name="hobby" type="xs:string" minOccurs="1" maxOccurs="unbounded" />
  </xs:sequence>
 </xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
</xs:schema>
于 2013-08-07T18:03:16.757 回答