我有以下模式(简化为删除我们没有讨论的类型):
baseGUIconfig.xsd
<?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>发布于 2015-11-13 21:11:59
您不能在XSD1.0中这样做,因为要删除的元素是强制性的。限制机制的设计使得新类型的有效XML在与原始(受限)类型匹配时仍然有效。新的XSD1.1引入了一个新的构造,覆盖,它可以做任何你想做的事情。
https://stackoverflow.com/questions/33678673
复制相似问题