如何在 xsd 中使用继承来使多个元素成为另一个类型
How do use inheritance in xsd to make multiple elements type of another
我想建模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 确实具有相同的元素,但它们并不相同东西。
找到答案您将公共元素定义为 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"/>
我想建模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 确实具有相同的元素,但它们并不相同东西。
找到答案您将公共元素定义为 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"/>