在我定义模式时使用<xs:choice>
看到的所有示例中,元素始终是简单元素,可以引用某些外部类型,但从不拥有自己的子元素。这是一项规则,还是一项惯例?例如,是否可以这样做?
<xs:element name="shape">
<xs:complexType>
<xs:choice>
<xs:element name="circle">
<xs:complexType>
<xs:sequence>
<xs:element name="radius" type="xs:decimal" />
<xs:element name="x" type="xs:integer" />
<xs:element name="y" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="rectangle">
<xs:complexType>
<xs:sequence>
<xs:element name="length" type="xs:integer" />
<xs:element name="width" type="xs:integer" />
<xs:element name="x" type="xs:integer" />
<xs:element name="y" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
这大致相当于写作
data Shape = Circle Double Int Int
| Rectangle Int Int Int Int
在Haskell。
答案 0 :(得分:1)
是的,可以这样做。我只是通过眼睛&#34;检查它&#34;但它看起来还不错。
我不了解Haskell,但我认为效果不一样。在XSD中,您已将Shape定义为包含Circle或Rectangle作为子元素的元素。如果你想将Circle和Rectangle定义为可替换Shape(这听起来更合理的设计),那么你应该:
abstract="true"
substitutionGroup="Shape"
substitutionGroup="Shape"