7

私は、XML および Web サービスに不慣れな Java プログラマーです。以下のスニペットを含む XSD (私が書いたものではありません) に準拠する xml ドキュメントを作成しようとしています。私がやりたいことは、この Web サービスを呼び出してメーリングをコピーすることです。抽象型「tns:CopyRequest」の copy という要素があります。要素の型は抽象型であるため、Eclipse は作成できないと通知します。CopyMailingRequest 型があります (これは私が欲しいもののように思えます) が、その型を拡張する要素がないため、インスタンス化する方法がわかりません。私は何が欠けていますか?

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

<xs:complexType name="CopyMailingRequest">
  <xs:complexContent>
    <xs:extension base="tns:CopyRequest">
      <xs:sequence>
        <xs:element name="fromId" type="tns:MailingId"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:complexType name="StandardMailingId">
  <xs:complexContent>
    <xs:extension base="tns:MailingId"/>
  </xs:complexContent>
</xs:complexType>

<xs:complexType name="MailingId">
  <xs:complexContent>
    <xs:extension base="tns:ObjectId"/>
  </xs:complexContent>
</xs:complexType>

<xs:complexType name="CopyRequest" abstract="true">
  <xs:sequence>
    <xs:element name="newName" type="xs:string"/>
  </xs:sequence>
</xs:complexType>
4

1 に答える 1

13

理解しやすいように、最小限の変更を加えたスキーマを以下に示します (スキーマ要素に任意の targetNamespace を追加し、ObjectId のダミー定義を追加しました)。

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" xmlns:tns="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="copy" nillable="true" type="tns:CopyRequest"/>

    <xs:complexType name="CopyMailingRequest">
        <xs:complexContent>
            <xs:extension base="tns:CopyRequest">
                <xs:sequence>
                    <xs:element name="fromId" type="tns:MailingId"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="StandardMailingId">
        <xs:complexContent>
            <xs:extension base="tns:MailingId"/>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="MailingId">
        <xs:complexContent>
            <xs:extension base="tns:ObjectId"/>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="ObjectId"/>

    <xs:complexType name="CopyRequest" abstract="true">
        <xs:sequence>
            <xs:element name="newName" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

これは、自動的に (かつ有効に) 生成されたサンプル XML が XSD に対してどのようになるかを示しています。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<copy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CopyMailingRequest" xmlns="http://tempuri.org/XMLSchema.xsd">
    <newName>newName1</newName>
    <fromId/>
</copy>

ここでの要点は次のとおりですxsi:type="CopyMailingRequest"。これは、シナリオで具象型を提供する方法です。

于 2013-05-27T03:11:51.463 に答える