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,例如:
http://www.acme.com/Customer/V1/GetCustomerRequest
对于 GetCustomerRequest 这将定义 GetCustomerRequest 操作的数据结构。
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 |
+---------+--------------------------------------------------------+------------------------------+------------------------+
我正在研究 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,例如:
http://www.acme.com/Customer/V1/GetCustomerRequest
对于 GetCustomerRequest 这将定义 GetCustomerRequest 操作的数据结构。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 |
+---------+--------------------------------------------------------+------------------------------+------------------------+