XML命名空间名称的URI必须能够被检索到吗?

20

我在我的WSDL上有以下标签:

<?xml version='1.0' encoding='UTF-8'?>
<definitions name="" targetNamespace="http://xxxxx/ws"
             xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:s0="http://xxxxx/ws"
             xmlns:s1="http://schemas.xmlsoap.org/wsdl/soap/">
  <types>
    <xsd:schema attributeFormDefault="qualified" 
                elementFormDefault="qualified"
                targetNamespace="http://xxxxx/ws/comments" 
                xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
                xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
                xmlns:s0="http://xxxxx/ws" 
                xmlns:s1="http://schemas.xmlsoap.org/wsdl/soap/" 
                xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
                xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
                xmlns:tns="http://xxxxx/ws" 
                xmlns:tnsc="http://xxxxx/ws/comments" 
                xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                xmlns:y="http://new.webservice.namespace">

类型随后被限定为s0、s1等命名空间中的一个。

问题是命名空间端点(="http://xxxxx/ws")是否需要是有效的URL?
如果端点不再存在,这是否意味着我们需要重新生成Web服务的存根代理?

注意:Web服务本身的端点与命名空间的端点不同,仍然存在。

1个回答

27

命名空间是不需要被检索的URI

来自@jww的问题:

这个问题是关于命名空间终点(="http://xxxxx/ws")是否需要是一个有效的URL?

不需要,根据W3C推荐:XML 1.0(第三版)中的命名空间,XML命名空间采用URI词汇形式,但不需要被检索

属性的规范化值必须是URI引用-标识命名空间的命名空间名称或空字符串。为了实现预期的目的,命名空间名称应具有唯一性和持久性特征。它不是直接可用于检索模式(如果存在)的目标。

如果URI不需要被检索,那么为什么使用它们?

来自@jww的跟进评论:

如果http:不可检索,那么使用它的目的是什么?他们不应该使用像null:这样的东西来表示私有吗?否则,像我这样的人怎么知道什么是私有的,什么已经被弃用或撤回了?我想问的是,信号机制是什么?

许多人,包括我自己,确实建议命名空间URI可以作为文档或作为管理XSD本身进行检索。但是,如上所示,并不要求这样做。此外,符合规范的验证XML处理器甚至不需要报告命名空间名称不是URI

为符合此规范,处理器必须报告命名空间格式违规,但有一个例外,即不需要检查命名空间名称是否为URI引用[RFC3986]。

因此,您有时会看到在命名空间名称中使用非URI,特别是用于快速丢弃的示例。 (但是,在这种情况下最好使用http://www.example.org/topic以正确的方式。)

使用URI是因为它们是表示具有内置权限规范的资源唯一性的便捷机制 - 使用该域定义命名空间的所有者负责。

命名空间作为终点

来自@jww评论的后续操作

如果终点不再存在-是否意味着我们需要重新生成webservice的存根代理?

不需要,甚至不应将命名空间称为终点。 命名空间名称URI的可检索性在任何时候都不会对您的Web服务的规范或操作产生影响。


我比你写这篇文章晚得多,但看起来你的意思是URI本质上只是复杂的命名约定。如果我将其中一个从“http://xxxxxxx/ws”更改为“apple”或“abc”,程序是否仍然能够正常工作? - NegativeFriction
1
@NegativeFriction:从词法上讲,是的,但考虑到你并不独自控制“apple”或“abc”,这并不推荐。 - kjhughes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接