0

これらの xsd パーツ (xsd1 または xsd2) のうち、以下のサンプル コードに有効なものを教えてください。

Class definitions:
class A
{
 int prop1;
 int prop2;
}

class B : A {}

したがって、クラス A は基本クラスであり、クラス B は A を継承し、追加のプロパティはありません。

xsd1: この場合、wsimport を使用して xsd のこの部分を含む wsdl ファイルからコードを生成すると、A と B のすべての要素のコードが生成されます。ただし、svcutil を使用すると、クラス A のみが生成されます。

<xs:element name="B" nillable="true" type="tns:A" />
<xs:complexType name="A">
    <xs:sequence>
        <xs:element name="prop1" type="xs:string"/>
        <xs:element name="prop2" type="xs:string"/>
    </xs:sequence>
</xs:complexType>
<xs:element name="A" nillable="true" type="tns:A" />

xsd1: この場合、wsimport と svcutil の両方が A と B のすべての要素を生成します。

<xs:complexType name="B">
    <xs:complexContent mixed="false">
        <xs:extension base="tns:A">
            <xs:sequence />
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
<xs:element name="B" nillable="true" type="tns:A" />
<xs:complexType name="A">
    <xs:sequence>
        <xs:element name="prop1" type="xs:string"/>
        <xs:element name="prop2" type="xs:string"/>
    </xs:sequence>
</xs:complexType>
<xs:element name="A" nillable="true" type="tns:A" />

それで、私の質問は...この最初の定義は有効ですか?

4

1 に答える 1

1

正解は2番目だと思います。complexTypes をクラスとして、要素をインスタンスとして考えた方がよい理由を説明する。

最初の xsd では、実際にはクラス A の 2 つのインスタンス (A と B) を宣言しています。2 番目の xsd では、同じクラスの 2 つのインスタンスを宣言していますが、B クラスの定義も含めています。

実際、私はそれがより正しいと思います

<xs:element name="B" nillable="true" type="tns:B" />

よりも

<xs:element name="B" nillable="true" type="tns:A" />
于 2012-07-19T13:35:43.287 に答える