我目前有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”来遵守现有协议,因为从不使用该元素(所以如果可以的话,我宁愿完全删除它。)
感谢, 迪安
答案 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>
这将阻止子元素从父元素生成。