我正在研究SOAP Web服务,我对Web Services很陌生。在WSDL中,我对定义中的targetNamespace
元素和namespace
中包含的xsd:schema
有点疑惑。
<definitions .... targetNamespace=" " >
<xsd:schema>
<xsd:import namespace=" " schemaLocation=""/>
</xsd:schema>
这两个元素是什么意思,我搜索了网络上的许多文章,我无法清楚地识别出这一点。有人可以解释一下吗?
这两个值是否相同?
答案 0 :(得分:21)
WSDL文件中的目标名称空间将是与SOAP服务本身关联的名称空间。例如,我们有一个客户服务,名称空间就像http://www.acme.com/Customer/V1/CustomerService
。
您可以在XSD导入部分指定要导入的XSD的命名空间。 XSD文件将包含服务将发送的数据,即它包含将被序列化为XML并作为请求和响应上下发送的对象定义。 XSD还可以包含WSDL将公开的操作。
WSDL可以导入一个或多个XSD文件,每个XSD都有自己的命名空间。 XSD将包含名称空间,例如:
http://www.acme.com/Customer/V1/GetCustomerRequest
对于GetCustomerRequest,它将定义GetCustomerRequest操作的数据结构。http://www.acme.com/Customer/V1/CustomerObject
对于CustomerObject,它将定义CustomerObject的数据结构。命名空间有点像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。
命名空间类比:
+---------+--------------------------------------------------------+------------------------------+------------------------+
| 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 |
+---------+--------------------------------------------------------+------------------------------+------------------------+