我一直在研究SOAP和WSDL,以便为实现Web服务做准备。我遇到的一件令我困惑的事情是,我看到的一些URI使用了一个尾部斜杠,例如:
http://www.w3.org/some-namespace/
虽然我研究的其他例子省略了这个尾随斜杠。我真的有几个问题:
答案 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