在命名空间URI中使用斜杠的重要性是什么?

时间:2009-01-10 14:02:42

标签: xml soap namespaces

我一直在研究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 个答案:

答案 0 :(得分:10)

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

两个没有equal-strings-uri的名称空间是不同的名称空间。即使资本化和空白也很重要

命名空间-uri并不意味着发出请求它应该产生Web响应。因此,任何以“/”结尾应该或不应该以“/”结尾的理由都没有太大意义。

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

"\/^%$#sdhfgds"

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

答案 1 :(得分:6)

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

同样,我认为这种URI的“可检索性”存在混淆。 XML Spec要求DOCTYPE中的SYSTEM标识符可用于检索文档的DTD(我链接到Annotated XML Spec,而不是W3C版本,因为我相信Tim Bray的评论非常有用)。 / p>

虽然其他规范(例如,XML模式)不需要这种行为,但我认为这是一个有用的习惯 - 特别是在Schema目标命名空间的情况下。首先,它使您的架构的使用者能够轻松地找到正确的定义。另一方面,如果您有权将文档放在公共URL上,那么您还可以确保URI是唯一的。

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

答案 2 :(得分: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