0

Web サービスの一種のエンベロープを定義する外部スキーマがあるとします。

<ext:envelope>
  <ext:message>
    <!-- anything else -->
  </ext:message>
</ext:envelope>

ext は外部の名前空間
であり、次のように定義<ext:message>されます

<xs:any namespace="##any" processContents="lax" minOccurs="0"
            maxOccurs="unbounded" />

これが私の質問です。このエンベロープに準拠する必要があるサービスの WSDL スキーマを作成したい場合、次のようなものを定義するスキーマを作成するにはどうすればよいですか。

<ext:envelope>
  <ext:message>
    <my:myElement />
  </ext:message>
</ext:envelope>

どうにかして ext:message 宣言を拡張する必要がありますか? この種の「拡張」はまったく可能ですか?

4

1 に答える 1

0

考慮しなければならない制約は他にもたくさんあります。まず XSD 1.0 を想定して、これを文脈化しましょう。この場合、元の XSD と変更された XSD の間の分離を維持するメカニズムは、xsd:redefineを使用することです。これにより、XSD の構成が可能になり、元のソースと変更の分離が維持されます。

ただし、前提条件は、 ext:messageのコンテンツ モデルを定義するグローバル複合型宣言またはグループを持つことです。

xsd:redefine を使用すると、ワイルドカードを選択したコンテンツ モデルに置き換えることができます。タイプまたはグループの制限である必要があります。

再定義すると、XSD 仕様の観点からは問題ない同等の XSD が得られます。しかし、ツールのサポートから、xsd:redefine をサポートする XSD からコードへのバインディングがあると聞いて驚かれることでしょう。

あなたのケースでは、使用または対象とするツールが xsd:redefine で動作する場合、作業は完了です。それ以外の場合は、xsd:redefine を使用せずに XSD ファイルを作成できる、自動 XML スキーマ リファクタリングを適用することを選択できます。実際には、自動変換は手動で行うことができることを行いますが、継続的なメンテナンスにはより適しています。結果の XSD (再定義なし) は実質的に同じであり (PSVI モデルを表しているため)、xsd:redefine をサポートしていないツールで使用できます。

于 2012-11-23T18:09:17.683 に答える