我有以下架构(简化为删除我们未讨论的类型):
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Types -->
<xs:complexType name="defaultsType">
<xs:sequence>
<xs:element name="dataDirectory" type="xs:string"/>
<xs:element name="UpstreamDataFileExtension" type="xs:string"/>
<xs:element name="LocalDataFileExtension" type="xs:string"/>
<xs:element name="connectionTimeoutMs" type="xs:decimal"/>
<xs:element name="connectionMaxRetry" type="xs:decimal"/>
</xs:sequence>
<xs:attribute name="os" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="linux"/>
<xs:enumeration value="windows"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="baseGuiConfigType">
<xs:sequence>
<xs:element name="defaults" type = "defaultsType" minOccurs="1" maxOccurs="2" />
</xs:sequence>
</xs:complexType>
<!-- Elements -->
<xs:element name="baseGuiConfig" type="baseGuiConfigType" />
</xs:schema>
但是,我有另一个模式重新定义了这个。在其中,我想删除UpstreamDataFileExtension
元素。是否可以删除元素,或者以导数模式不再具有的方式重新定义defaultsType
?
这是我尝试过的(不起作用):
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Base Schema w/ connection restrictions -->
<xs:redefine schemaLocation="qrc:///schema/baseGUIconfig.xsd">
<!-- Redefine the defaultsType to remove Upstream -->
<xs:complexType name="defaultsType">
<xs:complexContent>
<xs:restriction base="defaultsType">
<xs:sequence>
<xs:element name="dataDirectory" type="xs:string"/>
<xs:element name="LocalDataFileExtension" type="xs:string"/>
<xs:element name="connectionTimeoutMs" type="xs:decimal"/>
<xs:element name="connectionMaxRetry" type="xs:decimal"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
</xs:schema>
答案 0 :(得分:1)
您无法在XSD 1.0中执行此操作,因为您尝试删除的元素是必需的。设计限制机制使得当与原始(受限制)类型匹配时,新类型的有效XML必须仍然有效。新的XSD 1.1引入了一个新的构造override,人们可以做任何想做的事情。