【问题标题】:Must an XML namespace name URI be retrievable?XML 命名空间名称 URI 必须是可检索的吗?
【发布时间】:2015-02-21 05:07:32
【问题描述】:

我的 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 Service 本身的端点与命名空间的端点不同,并且仍然存在。

【问题讨论】:

    标签: xml xsd wsdl xml-namespaces wsdl2java


    【解决方案1】:

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

    来自@jww 问题:

    问题是namespace end-point(="http://xxxxx/ws") 必须是有效的网址?

    不,根据W3C Recommendation: Namespaces in XML 1.0 (Third Edition),XML 命名空间采用 URI 的词法形式,但 不一定是可检索的

    属性的规范化值必须是 URI 引用—— 标识命名空间的命名空间名称 - 或空字符串。这 命名空间名称,为了达到其预期目的,应该有 独特性和持久性的特点。 这不是目标 它可以直接用于检索模式(如果有的话 存在)。

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

    来自@jww 在 cmets 的跟进

    如果http: 不可可检索,它的用途是什么?他们不应该 使用null: 之类的东西来表示其私有?不然怎么办 像我这样的人知道它何时是私有的,何时被弃用或 撤回?我想我要问的是,信号是什么 机制?

    包括我自己在内的许多人确实建议将命名空间 URI 作为文档或作为管理 XSD 本身进行检索。但是,如上所示,它不是必需的。此外,a conformant, validating XML processor need not even report when a namespace name is not a URI

    为了符合本规范,处理器必须报告违规行为 命名空间格式良好,但它不是 需要检查命名空间名称是否为 URI 引用 [RFC3986]。

    因此,您有时会在命名空间名称中看到非 URI,尤其是对于快速、一次性的示例。 (但是,在这种情况下使用http://www.example.org/topic 可能会更好。)

    使用 URI 是因为它们是一种方便的机制,用于表达具有内置权限规范的资源的唯一性——域的所有者是负责人对于使用域定义的命名空间。

    命名空间作为端点

    来自@jww 在 cmets 的跟进

    如果端点不再存在 - 是否意味着我们需要 再次为 Web 服务重新生成存根代理?

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

    【讨论】:

    • 我比您写的要晚得多,但看起来您是在说 URI 本质上只是复杂的命名约定。如果我将其中一个从“xxxxxxx/ws”更改为“apple”或“abc”,该程序是否可行?
    • @NegativeFriction:从词法上讲,是的,但鉴于您不能单独控制“apple”或“abc”,因此不建议这样做。
    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2019-06-20
    相关资源
    最近更新 更多