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>   

abstractRequest を拡張するには requestExtension が必要ですが、jaxb 生成が引き続き機能するように、unusedReqPart を削除するにはどうすればよいですか?

明確にするために編集:スーパークラスの要素を含めることを「望んでいます」。それらを削除したくありません。上記の「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>

「空の」パーティクルを使用して拡張しない理由はありません。次に、基本型の上に新しいコンテンツを追加せずに、具体的な (したがって使用可能な) 型を持つことができます。

制限を使いたくないでしょう(回答の1つで説明されているように)。その結果、コンテンツ モデル全体が消去されます (実質的に空になります)。

私が上で提案したもので JAXB が動作しないと聞いて驚くでしょう。そうでない場合は、使用している JAXB の特定のバージョン番号と、検証に合格しなかった生成されたクラスのスニペットで投稿を更新してください。

于 2012-04-16T23:44:51.267 に答える
0

親からの要素を制限したい場合は、以下のように使用する必要があります。

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

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

これにより、親からの子で要素が生成されなくなります。

于 2012-04-16T16:01:02.527 に答える
0

abstractRequest を 2 つのタイプ (A) を拡張するもの (B) の 2 つのタイプに分割できます。ここで、A は A にのみ必要な部分を定義します。requestExtension は B を拡張できるため、不要な部分はありません。

于 2012-04-16T15:53:30.340 に答える