从多个complexTypes创建complexType

时间:2014-11-23 05:36:45

标签: xml xsd xsd-validation

我有一组封装在complexType中的某些元素,如果用户想以某种方式开展业务,那么这些元素是必需的(让我们这样调用x):

<xs:element name="us">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="usAttribute1" type="xs:string"/>
      <xs:element name="commonAttribute1" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

和一组封装在不同complexType中的元素,如果用户想以不同的方式开展业务,则需要这些元素(让我们这样调用y):

<xs:element name="uk">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="ukAttribute1" type="xs:string"/>
      <xs:element name="commonAttribute1" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

两个集合之间存在元素重叠,因此某些元素对于两个集合都是通用的。假设用户希望以x和y方式做生意。我们如何组合这两组元素,以便没有任何元素重复?

2 个答案:

答案 0 :(得分:1)

您不提供任何示例代码,因此很难说出您想要解决的问题以及解决方法,但听起来您可以尝试使用<xs:group>元素。

形成一组包含元素要求的公共元素,然后在适当的时候从两个复杂类型中引用该组。

答案 1 :(得分:1)

你想要的基本上是&#34;多重继承&#34;在XML Schema中。

不可能直接(您只从一种类型派生),但有选项:

  • 您可以使用模型组(xs:groupxs:attributeGroup),您可以参考其中的几个(信用转到@jasso)。根据我的阅读in the specification,您应该能够将commonAttribute1元素包含两次,只要包含内容大致相同。
  • 您可能希望使用聚合而不是继承。这通常是一种更好,更简单的方法。