在其他复杂元素中编写可重用的xsd元素的更好方法是什么?

时间:2014-01-24 12:14:06

标签: java xml web-services jaxb xsd

我有以下xsd。请建议我如何改进它。

<xsd:element name="getFirstTableRequest" type="tns:GetFirstTableRequest"/>
<xsd:element name="getSecondTableRequest" type="tns:GetSecondTableRequest"/>
<xsd:element name="getThirdTableRequest" type="tns:GetThirdTableRequest"/>
<xsd:element name="getFourthTableRequest" type="tns:GetFourthTableRequest"/>

<xsd:complexType name="Base" abstract="true">
    <xsd:sequence>
        <xsd:element name="id" type="xsd:string" minOccurs="1" maxOccurs="1" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="GetFirstTableRequest">
    <xsd:complexContent>
        <xsd:extension base="tns:Base">
        </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="GetSecondTableRequest">
    <xsd:complexContent>
        <xsd:extension base="tns:Base">
        </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="GetThirdTableRequest">
    <xsd:complexContent>
        <xsd:extension base="tns:Base">
        </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="GetFourthTableRequest">
    <xsd:complexContent>
        <xsd:extension base="tns:Base">
        </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

有没有最好的方法来改善上面的xsd? 我的意思是在XSD之上是否还有重构的范围

谢谢!

1 个答案:

答案 0 :(得分:0)

假设您的扩展类型不添加任何新属性或元素。您可以执行以下操作:

  1. 消除所有子类型。
  2. abstract="true"移除Base
  3. 然后将每个根元素更改为type="tns:Base"