如何扩展complexType但在子类型中没有子元素?

时间:2012-04-16 15:45:56

标签: java xml xsd jaxb

我目前有xsd的以下部分...

<xs:element name="requestExtension">
    <xs:complexType>
        <xs:complexContent>
            <xs:extension base="abstractRequest"> 
                <xs:sequence>
                        <xs:element name="unusedReqPart" type="xs:string" minOccurs="0"/>   
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
    </xs:complexType>
</xs:element>   

我需要requestExtension来扩展abstractRequest但是如何摆脱unusedReqPart以便我的jaxb生成仍然有用?

为了清晰起见编辑:我“希望”包含超类的元素。我不想删除它们。我只想删除上面名为“unusedReqPart”的子类型元素。我只暂时把它放在那里,以便我的jaxb东西正确编译。我已经通过使用minOccurs =“0”来遵守现有协议,因为从不使用该元素(所以如果可以的话,我宁愿完全删除它。)

感谢, 迪安

3 个答案:

答案 0 :(得分:1)

这几乎感觉就像一个技巧问题......除非语言是这样的,否则就像这样简单:

<xs:element name="requestExtension"> 
    <xs:complexType> 
        <xs:complexContent> 
            <xs:extension base="abstractRequest"/>
        </xs:complexContent> 
    </xs:complexType> 
</xs:element>

没有理由不使用“空”粒子扩展它。反过来,它允许您拥有一个具体的(因此可用的)类型,而在基类型之上没有任何新内容。

我相信你不会想要限制(如答案中所述);它的作用是消除整个内容模型(有效地使其变空)。

我会惊讶地听到JAXB无法与我一起提出上述建议;如果您发现它没有,请使用您正在使用的JAXB的特定版本号更新您的帖子,以及未通过验证的生成类的片段。

答案 1 :(得分:0)

您可以将abstractRequest拆分为2种类型,一种(A)扩展另一种类型(B),其中A定义仅A所需的部分。您的requestExtension然后可以扩展B,因此不会有不需要的部分。

答案 2 :(得分:0)

当您想要限制父元素时,您应该使用如下:

<xs:restriction base="abstractRequest">
   <xs:sequence>

  </xs:sequence>
</xs:restriction>

这将阻止子元素从父元素生成。