13

我一直在研究 SOAP 和 WSDL 以准备实现 Web 服务。我遇到的一件令我困惑的事情是,我看到的一些 URI 使用了斜杠,例如:

http://www.w3.org/some-namespace/

而我研究过的其他示例则省略了这个斜杠。我对此真的有几个问题:

  • 尾部斜线的意义是什么?
  • URI http://www.w3.org/some-namespace 是否与 http://www.w3.org/some-namespace/ 相同?
  • 如果它们不相同,我如何决定何时需要一种形式与另一种形式?
  • 我已经阅读了 w3c 给出的关于 URI 的指导方针,这些指导方针似乎表明只有当 URI 字符串的区分大小写比较被认为相等时,该 URI 才应该被认为是相等的。这种解释正确吗?
4

3 回答 3

10

是的,您已阅读的有关 URI 的 w3c 指南是正确的

两个不具有相等字符串 uri 的命名空间是不同的命名空间。甚至大写和空格也很重要

namespace-uri 并不意味着对其发出请求应该产生网络响应。因此,任何应该或不应该以“/”结尾的推理都没有太大意义。

事实上,namespace-uri 甚至可能不满足 URI 的语法规则,它仍然可以用于定义命名空间。使用命名空间非常有用,例如:

"\/^%$#sdhfgds"

只要它是独一无二的(请注意,我绝不推荐这样使用:))。现有的 XML 处理器(例如解析器、XPath 或 XSLT 处理器)在遇到此类命名空间时不会引发任何错误。

于 2009-01-10T16:50:36.413 回答
6

命名空间 URI 只是作为唯一标识符(这里是比较规则的链接)。URI 的使用(相对于“foo”)可以追溯到(我相信)在 XML DOCTYPE 中使用 URI。

这也是,我认为关于此类 URI 的“可检索性”的混淆来自哪里。XML Spec要求可以使用 DOCTYPE 中的SYSTEM 标识符来检索文档的 DTD(我链接到 Annotated XML Spec,而不是 W3C 版本,因为我相信 Tim Bray 的评论非常有用)。

尽管其他规范(例如,XML 模式)不需要这种行为,但我相信遵循它是一个有用的习惯——尤其是在模式目标名称空间的情况下。一方面,它使您的模式的消费者很容易总是找到正确的定义。另一方面,如果您有权将文档放在公共 URL 中,那么您还可以确保 URI 是唯一的。

最后:统一资源标识符 (URI) 是统一资源定位符 (URL) 的超集。您还可以有一个统一资源名称 (URN),我相信(但没有方便的规范)存在第三种形式的标识符。

于 2009-01-10T17:44:14.777 回答
3

不,他们不一样。

最大的区别在于从该基础形成相对uris;使用斜线,相对 uri 将是一个后代;如果没有斜线,它将是兄弟 - 即(C# 示例):

    Uri uri = new Uri(@"http://www.w3.org/some-namespace/");
    Console.WriteLine(new Uri(uri, "foo")); // http://www.w3.org/some-namespace/foo

    uri = new Uri(@"http://www.w3.org/some-namespace");
    Console.WriteLine(new Uri(uri, "foo")); //http://www.w3.org/foo
于 2009-01-10T14:11:27.123 回答