WSDL中的targetNamespace和namespace

时间:2015-01-18 08:01:07

标签: web-services soap wsdl

我正在研究SOAP Web服务,我对Web Services很陌生。在WSDL中,我对定义中的targetNamespace元素和namespace中包含的xsd:schema有点疑惑。

<definitions .... targetNamespace=" " >

<xsd:schema>
<xsd:import namespace=" " schemaLocation=""/>
</xsd:schema>

这两个元素是什么意思,我搜索了网络上的许多文章,我无法清楚地识别出这一点。有人可以解释一下吗?

这两个值是否相同?

3 个答案:

答案 0 :(得分:21)

WSDL文件中的目标名称空间将是与SOAP服务本身关联的名称空间。例如,我们有一个客户服务,名称空间就像http://www.acme.com/Customer/V1/CustomerService

您可以在XSD导入部分指定要导入的XSD的命名空间。 XSD文件将包含服务将发送的数据,即它包含将被序列化为XML并作为请求和响应上下发送的对象定义。 XSD还可以包含WSDL将公开的操作。

WSDL可以导入一个或多个XSD文件,每个XSD都有自己的命名空间。 XSD将包含名称空间,例如:

  1. http://www.acme.com/Customer/V1/GetCustomerRequest对于GetCustomerRequest,它将定义GetCustomerRequest操作的数据结构。
  2. http://www.acme.com/Customer/V1/CustomerObject对于CustomerObject,它将定义CustomerObject的数据结构。
  3. 命名空间有点像Java包,它们只允许您定义对象的层次结构。需要了解的一件重要事情是,您可能有两个Customer对象,一个属于您的销售系统,另一个属于您的CRM系统。通过将它们放在不同的命名空间中,只要它们具有唯一的命名空间,您就可以在同一服务中使用这两个Customer对象。

    通常,这些名称空间也将构成SOA目录的一部分,定义它们将成为SOA治理标准的一部分。如果您想成功完成SOA,它们非常重要。

答案 1 :(得分:11)

我将解释使用Java类比。

命名空间就像Java命名空间。每个xml元素都在一个命名空间中。提供targetNamespace意味着在其中定义的所有元素(和类型)都在该命名空间中。它类似于包中的所有Java类。

导入的xsd将拥有自己的目标命名空间,这意味着xsd中的所有元素都将位于定义的命名空间中。

wsdl中的导入就像提供指定包的java导入一样。

我希望我很清楚,乐于助人:D。

答案 2 :(得分:7)

targetNamespace XML架构&#34;工件&#34; 。当我们与不同的团队合作时,用户定义的数据类型可能会发生名称冲突。 schema元素的属性定义命名空间即包。按照惯例,我们使用URI / URL,但我们可以使用任何字符串..

<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                      targetNamespace="namespace">
        ...
</xs:schema>

例如:

xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/beans/spring-mvc.xsd" xmlns:mvc="http://www.springframework.org/schema/mvc"
  //  or if the schema  exist in current directory we can declare as follows
xsi:schemaLocation="http://www.springframework.org/schema/mvc spring-mvc.xsd" xmlns:mvc="http://www.springframework.org/schema/mvc"
 //for import xml schema
<xsd:import schemaLocation="http://localhost:9999/ws/hello?xsd=1" namespace="http://ws.peter.com/"/>

注意: xsi:schemaLocation表示命名空间和URL用空格分隔。 xmlns:mvc表示命名空间http://www.springframework.org/schema/mvc定义为mvc别名。

例如:在spring中,bean xml架构对于不同版本的spring-beans.xsd具有相同的targetNamespace。 enter image description here

命名空间类比:

+---------+--------------------------------------------------------+------------------------------+------------------------+
| Context |                          Name                          |     Namespace identifier     |       Local name       |
+---------+--------------------------------------------------------+------------------------------+------------------------+
| Path    | /home/user/readme.txt                                  | /home/user (path)            | readme.txt (file name) |
| XML     | xmlns:xhtml="http://www.w3.org/1999/xhtml"<xhtml:body> | http://www.w3.org/1999/xhtml | body                   |
| Java    | java.util.Date                                         | java.util                    | Date                   |
+---------+--------------------------------------------------------+------------------------------+------------------------+ 

for more details