WSDL 中的 targetNamespace 和命名空间

targetNamespace and namespace in WSDL

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

<definitions .... targetNamespace=" " >

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

这两个元素是什么意思,我在网上查了很多文章都没有弄清楚。有人可以解释一下吗?

这两个值相同吗?

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

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

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

  1. http://www.acme.com/Customer/V1/GetCustomerRequest 对于 GetCustomerRequest 这将定义 GetCustomerRequest 操作的数据结构。
  2. http://www.acme.com/Customer/V1/CustomerObject 对于 CustomerObject 这将定义 CustomerObject 的数据结构。

Namespaces 有点像 Java 包,它们只允许您定义对象的层次结构。需要了解的一件重要事情是,您可能有两个客户对象,一个属于您的销售系统,另一个属于您的 CRM 系统。通过将它们放在单独的 namespaces 中,只要它们具有唯一的 namespaces.

,您就可以在同一服务中使用这两个 Customer 对象

通常这些名称space也会构成 SOA 目录的一部分,定义它们将成为您的 SOA 治理标准的一部分。如果您想成功地执行 SOA,它们很重要。

我会用Java类比来解释。

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

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

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

我希望我说得清楚并有所帮助 :D.

targetNamespace is like package declaration in java, used in schema creation
namespace is like package import in java, this is generally use for re-using one schema inside another schema.

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

<?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 别名。

命名空间类比:

+---------+--------------------------------------------------------+------------------------------+------------------------+
| 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