【问题标题】:Creating a complexType from multiple complexTypes从多个 complexTypes 创建一个 complexType
【发布时间】:2014-11-23 05:36:45
【问题描述】:

我有一组封装在 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 方式做生意。我们如何将这两组元素组合在一起,以免元素重复?

【问题讨论】:

    标签: xml xsd xsd-validation


    【解决方案1】:

    您想要的基本上是 XML Schema 中的“多重继承”。

    这是不可能的(你只能从一种类型派生),但有一些选择:

    • 您可以使用模型组(xs:groupxs:attributeGroup),您可以参考其中的几个(归功于@jasso)。从我读到的in the specification 来看,只要包含或多或少相同,您应该能够将commonAttribute1 元素包含两次。
    • 您可能希望使用聚合而不是继承。这通常是一种更好、更简单的方法。

    【讨论】:

      【解决方案2】:

      您没有提供任何示例代码,因此很难说出您到底想解决什么以及如何解决,但听起来您可以尝试使用&lt;xs:group&gt; 元素。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多