tns出现在Web服务架构中

时间:2011-06-06 16:33:13

标签: xml web-services wsdl xsd jax-ws

我正在使用JAX-WS来运行一些示例Web服务。发布Web服务后,当我输入WSDL URL时,我可以看到WSDL文档。 WSDL文档引用的Schema文档如下所示:

<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模式的默认行为吗?

2 个答案:

答案 0 :(得分:40)

根据w3,tns表示“此命名空间”,指的是当前文档。

来源:http://www.w3.org/TR/wsdl#_notational

答案 1 :(得分:0)

您需要将整个wsdl文档视为一个大的xml文件。在这种情况下,使用在子元素的根元素(Definition元素)处声明的名称空间前缀是有效的。

不需要在schema(架构元素)根元素中声明tns名称空间。但是,如果将模式分离为一个文件,则需要使用tns前缀。