web-dev-qa-db-ja.com

Webサービススキーマに表示されるtns

いくつかのサンプルWebサービスを実行するためにJAX-WSを使用しています。 Webサービスを公開した後、WSDL URLを入力すると、WSDLドキュメントが表示されました。 WSDLドキュメントは、次のようなスキーマドキュメントを参照します。

<xs:schema version="1.0" targetNamespace="http://ts.ch01/">
<xs:element name="getTimeAsElapsed" type="tns:getTimeAsElapsed"/>
<xs:element name="getTimeAsElapsedResponse" type="tns:getTimeAsElapsedResponse"/>
<xs:element name="getTimeAsString" type="tns:getTimeAsString"/>
<xs:element name="getTimeAsStringResponse" type="tns:getTimeAsStringResponse"/>
−
<xs:complexType name="getTimeAsString">
<xs:sequence/>
</xs:complexType>
−
<xs:complexType name="getTimeAsStringResponse">
−
<xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
−
<xs:complexType name="getTimeAsElapsed">
<xs:sequence/>
</xs:complexType>
−
<xs:complexType name="getTimeAsElapsedResponse">
−
<xs:sequence>
<xs:element name="return" type="xs:long"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

私の質問は、なぜ要素宣言に「tns」が現れるのですか?例えば:

<xs:element name="getTimeAsElapsed" type="tns:getTimeAsElapsed"/>

「tns」が名前空間接頭辞として宣言されているのを見ているスキーマドキュメントはどこにもありません。スキーマドキュメントは単に

<xs:schema version="1.0" targetNamespace="http://ts.ch01/">

次に、他の要素を参照するときに「tns」が表示されるのはなぜですか?これは、JAX-WSによって生成されたXMLスキーマのデフォルトの動作ですか?

24
Vicky

W3と同様に、tnsは「この名前空間」を意味し、現在のドキュメントを参照します。

出典: http://www.w3.org/TR/wsdl#_notational

44
Scott Brickey

wsdlドキュメント全体を1つの大きなxmlファイルと考える必要があります。その場合、子要素のルート要素(定義要素)で宣言された名前空間接頭辞を使用することは有効です。

スキーマ(スキーマ要素)ルート要素でtns名前空間を宣言する必要はありません。ただし、スキーマを1つのファイルに分離した場合は、tnsプレフィックスが必要です。

0