命名空间URI中的尾部斜杠有什么重要意义?

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视为相等。 这种解释正确吗?
3个回答

10

是的,你读到的关于URI的W3C准则是正确的

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

命名空间URI并不意味着发出请求就应该能够产生Web响应。因此,是否以“/”结尾并不太有意义。

实际上,命名空间URI甚至可能不符合URI的语法规则,但它仍然可以用于定义命名空间。只要它是唯一的(请注意,我绝不建议这种用法 :) ),现有的XML处理器(例如解析器、XPath或XSLT处理器)在遇到这样的命名空间时都不会引发任何错误。


6
Namespace URIs仅作为唯一标识符使用( 这里是比较规则的链接)。使用URI(而不是例如“foo”)可以追溯到在XML DOCTYPE中使用URI的情况(我认为)。我认为这也是关于此类URI“可检索性”的混淆所在。 XML规范要求DOCTYPE中的SYSTEM标识符可用于检索文档的DTD(我链接到注释XML规范,而不是W3C版本,因为我认为Tim Bray的评论非常有用)。虽然其他规范(例如XML模式)不要求此行为,但我认为遵循这个习惯很有用 - 特别是在模式目标命名空间的情况下。首先,它使消费者始终能够找到正确的定义。另外,如果您有将文档放置在公共URL上的权力,则还可以确保URI是唯一的。
最后:统一资源标识符(URI)是统一资源定位符(URL)的超集。您还可以拥有统一资源名称(URN),我相信(但没有规范手边)存在第三种标识符形式。

不确定为什么这些链接跨越了这么多文本...当我进入编辑帖子时,在预览中它们看起来是正确的。 - kdgregory
@kdgregory:实际上,“可检索性”可能并不是一个好主意。据我所知,最近W3C抱怨从其网站读取xml模式的网络活动非常高。他们建议作者保留和引用标准模式的本地副本。 - Dimitre Novatchev
我对这个问题感到矛盾。一方面,是的,一个应用程序应该在内部维护其模式(即,我不相信使用schemaLocation来引用任何外部内容)。另一方面,如果你负责记录数据,你必须预计人们会访问那些数据。 - kdgregory
最理想的情况是有一些已建立的机制可以本地存储标准模式,并定期(比如每天)从标准源刷新它们。此外,一个 uri-resolver 将确保任何外部引用都在本地提供。最好有一个 W3C 规范来支持此功能。 - Dimitre Novatchev
@Sam Hasker:感谢你的编辑-你能解释一下你是如何修改文本来修复链接的吗?查看你的编辑(#3)和我的(#2)的“查看源代码”似乎没有显示出差异。 - kdgregory
@kdgregory 我将"[2]: hhttp:"修改为"[2]: http:",请注意第一个中有两个"h"的错别字。 - Sam Hasler

3

不,它们不是相同的。

最大的区别在于从基本URI生成相对URI的方式;有斜杠时,相对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

那就回答了它们是否相同。为什么一个形式在命名空间URI方面比另一个更受欢迎? - Jon Trauntvein
1
答案是正确的,但在我看来原因有误(或者至少是误导性的),命名空间URI除了用于纯粹的标识之外,不应该用于任何其他目的。因此,将其用作基本URI的结果并不真正相关。 - Joachim Sauer

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