XSD:重用complexType的子元素?

时间:2011-02-09 11:01:44

标签: xml xsd

我在XSD文件中定义了以下两种类型:

<complexType name="primitive">
  <attribute name="seq_num" type="int"/>
  <element name="prim_to" type="int"/>
</complexType>


<complexType name="configdata">
  <sequence>
    <element name="enable" type="boolean"/>
    <element name="type" default="int"/>
   </sequence>
</complexType>

这两种类型都用于许多定义,即我宁愿不改变它们。我想定义一个新元素set,它扩展primitive并包含configdata的所有子元素。此元素的XML文件如下所示(请注意,enabletypeprim_to处于同一级别):

<set seq_num="1234">
  <prim_to>22</prim_to>
  <enable>true<enable>
  <type>42</type>
</set>

我可以通过以下方式声明set

<element name="set">
  <complexType>
    <complexContent>
      <extension base="primitive">
        <sequence>
          <element name="config" type="configdata"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
</element>

在这种情况下,XML文件将如下所示:

<set seq_num="1234">
  <prim_to>22</prim_to>
  <config>
    <enable>true<enable>
    <type>42</type>
  </config>
</set>

我的挑战是定义set,使其扩展primitive并包含configdata的所有子元素 - 但不包含{{1}类型的元素}}。基本上对于上面的XML文件,它是一个没有两个'config'标签的问题。这在XSD中是否可行?我非常感谢任何提示。

先谢谢,
威特克

2 个答案:

答案 0 :(得分:0)

一个类型只能扩展另一个类型(换句话说,没有多重继承)。因此,您的set元素可以扩展configdata(使用xsd:extension)并具有其他元素,或者它可以扩展另一种类型,您可以复制configdata元素以扩展它。您可以使用组来避免冗余。

答案 1 :(得分:0)

您应该像这样定义set元素:

<element name="set" type="configdata" />

使用此结构,set元素将包含configdata复杂类型中的两个子元素。