いくつかのサンプル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スキーマのデフォルトの動作ですか?
W3と同様に、tnsは「この名前空間」を意味し、現在のドキュメントを参照します。
wsdlドキュメント全体を1つの大きなxmlファイルと考える必要があります。その場合、子要素のルート要素(定義要素)で宣言された名前空間接頭辞を使用することは有効です。
スキーマ(スキーマ要素)ルート要素でtns名前空間を宣言する必要はありません。ただし、スキーマを1つのファイルに分離した場合は、tnsプレフィックスが必要です。