0

我目前有一个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 但如何摆脱 usedReqPart 以便我的 jaxb 生成仍然有效?

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

谢谢,院长

4

3 回答 3

1

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

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

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

我确定您不想接受限制(如答案之一所述);那里的效果是它消除了整个内容模型(有效地使其为空)。

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

于 2012-04-16T23:44:51.267 回答
0

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

于 2012-04-16T15:53:30.340 回答
0

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

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

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

这将阻止元素在父级的子级中生成。

于 2012-04-16T16:01:02.527 回答