是否可以覆盖父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吗?
答案 0 :(得分:1)
好的,我的解决方案很复杂。在此之前,我试图在xml 1.0中使用覆盖功能,该功能仅在xml 1.1中可用。
一个简单的重新定义可以解决这个问题:
如果基础xsd的名称是cust.xsd,则以下重新定义会将“hobby”元素的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>