首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用<xs:redefine>从复杂模式中删除元素

用<xs:redefine>从复杂模式中删除元素
EN

Stack Overflow用户
提问于 2015-11-12 18:28:29
回答 1查看 2.1K关注 0票数 1

我有以下模式(简化为删除我们没有讨论的类型):

baseGUIconfig.xsd

代码语言:javascript
复制
<?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

下面是我尝试过的(不起作用的):

重新定义模式

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-13 21:11:59

您不能在XSD1.0中这样做,因为要删除的元素是强制性的。限制机制的设计使得新类型的有效XML在与原始(受限)类型匹配时仍然有效。新的XSD1.1引入了一个新的构造,覆盖,它可以做任何你想做的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33678673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档