我正在使用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模式的默认行为吗?
答案 0 :(得分:40)
根据w3,tns表示“此命名空间”,指的是当前文档。
答案 1 :(得分:0)
您需要将整个wsdl文档视为一个大的xml文件。在这种情况下,使用在子元素的根元素(Definition元素)处声明的名称空间前缀是有效的。
不需要在schema(架构元素)根元素中声明tns名称空间。但是,如果将模式分离为一个文件,则需要使用tns前缀。