WSDL中的targetNamespace和namespace

Dil*_*lan 30 soap wsdl web-services

我正在研究SOAP Web服务,我对Web服务很陌生.在WSDL中,我在定义中的targetNamespace元素和包含在其中的命名空间中有点混淆targetNamespace.

<definitions .... targetNamespace=" " >

<xsd:schema>
<xsd:import namespace=" " schemaLocation=""/>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)

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

这两个得到相同的值吗?

Nam*_*ian 26

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的数据结构.

命名空间有点像Java包,它们只允许您定义对象的层次结构.需要了解的一件重要事情是,您可能有两个Customer对象,一个属于您的销售系统,另一个属于您的CRM系统.通过将它们放在单独的命名空间中,只要它们具有唯一的命名空间,您就可以在同一服务中使用这两个Customer对象.

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

  • 分配给“名称空间”的URI是否必须是在网络上可见的有效URI? (2认同)
  • @amphibient,它必须是仅语法有效的URL。它不需要在网络上可见。 (2认同)

小智 12

我将解释使用Java类比.

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

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

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

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


Pre*_*raj 8

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

<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                      targetNamespace="namespace">
        ...
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

例如:

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/"/>
Run Code Online (Sandbox Code Playgroud)

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

例如:在spring中,bean xml架构对于不同版本的spring-beans.xsd具有相同的targetNamespace. 在此输入图像描述

命名空间类比:

+---------+--------------------------------------------------------+------------------------------+------------------------+
| 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                   |
+---------+--------------------------------------------------------+------------------------------+------------------------+ 
Run Code Online (Sandbox Code Playgroud)

更多细节