如何在xsd中使用继承来使多个元素类型成为另一个

时间:2015-11-24 17:50:11

标签: xml xsd

我想模拟Xml,例如

.......
<mood1>
   <positive>true</positive>
   <probability>23</probability>
</mood1>
<mood2>
   <positive>false</positive>
   <probability>86</probability>
</mood2>
.........

在xml架构中,目前我有

<xs:element name="mood1">
  <xs:complexType>
      <xs:sequence>
          <xs:element ref="category"/>
      </xs:sequence>
</xs:complexType>
<xs:element name="mood2">
  <xs:complexType>
      <xs:sequence>
          <xs:element ref="category"/>
      </xs:sequence>
</xs:complexType>
<xs:element name="category">
<xs:complexType>
  <xs:sequence>
    <xs:element name="positive" type="xs:boolean"/>
    <xs:element name="probability" type="xs:float"/>
  </xs:sequence>
</xs:complexType>

但当然会建模另外一个不必要的类别元素,例如

.......
<mood1>
   <category> 
     <positive>true</positive>
     <probability>23</probability>
   </category> 
</mood1>
<mood2>
  <category>
    <positive>false</positive>
    <probability>86</probability>
  </category>
</mood2>
.........

我不想要。

我能做到

<xs:element name="mood1">
  <xs:complexType>
      <xs:sequence>
        <xs:element name="positive" type="xs:boolean"/>
        <xs:element name="probability" type="xs:float"/>
      </xs:sequence>
</xs:complexType>
<xs:element name="mood2">
  <xs:complexType>
      <xs:sequence>
        <xs:element name="positive" type="xs:boolean"/>
        <xs:element name="probability" type="xs:float"/>
      </xs:sequence>
</xs:complexType>

但是我必须继续重复相同的定义(并且不仅仅是mood1和mood2)。

我想说mood1是类别的子类型,但我不知道如何,值得注意的是mood1和mood2确实有相同的元素,但它们不是一回事。

1 个答案:

答案 0 :(得分:1)

找到你将常用元素定义为complexType的答案,然后你的顶级元素通过type属性引用complexType

<xs:complexType name="category">
  <xs:sequence>
    <xs:element name="positive" type="xs:boolean"/>
    <xs:element name="probability" type="xs:float"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="mood1" type="category"/>
<xs:element name="mood2" type="category"/>