加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用XML Schema来扩展元素而不是complexType

发布时间:2020-12-16 08:00:26 所属栏目:百科 来源:网络整理
导读:假设我有一些模式: xsd:schema ... xsd:element name="foo" xsd:complexType xsd:sequence xsd:element name="fooElement" type="xs:string" / /xsd:sequence /xsd:complexType /xsd:element/xsd:schema 这定义了一些元素foo,其中有一些元素fooElement与类
假设我有一些模式:
<xsd:schema ...>
    <xsd:element name="foo">
         <xsd:complexType>
             <xsd:sequence>
                 <xsd:element name="fooElement" type="xs:string" />
             </xsd:sequence>
         </xsd:complexType>
    </xsd:element>
</xsd:schema>

这定义了一些元素foo,其中有一些元素fooElement与类型字符串。我现在想要扩展元素foo也有一个元素barElement并调用这个扩展栏。

为了使事情变得复杂,我们还假定别人已经定义了foo,并且不能更改模式。虽然这里的例子是微不足道的,但是我们还假设foo的内容可能会更复杂,定义新模式的内容不像复制元素fooElement那么简单。

实际上,我想定义一个新的架构:

<xsd:schema xmlns:fns="otherschema" ...>
    <xsd:import namespace="otherschema" />
    <xsd:element name="bar">
         <xsd:complexContent>
             <xsd:extension base="fns:foo">
                 <xsd:sequence>
                     <xsd:element name="barElement" type="xs:string" />
                 </xsd:sequence>
             </xsd:extension>
         </xsd:complexContent>
    </xsd:element>
</xsd:schema>

不幸的是,< xsd:extension>的base属性只接受XSD类型的参数,而不是元素。如何扩展元素? (可以扩展一个元素吗?)

我会创建一个新的类型,模仿foo元素,然后从它扩展。虽然这不是最好的解决方案,但是您可以获得相同的结果,就像您能够直接扩展元素一样。
<xs:complexType name="fooType">
    <xs:sequence>
      <xs:element name="fooElement" type="xs:string" />
    </xs:sequence>
   </xs:complexType>

   <xs:complexType name="barType">
    <xs:complexContent mixed="false">
      <xs:extension base="fooType">
        <xs:sequence>
          <xs:element name="barElement" type="xs:string" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:element name="bar" type="barType" />

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读