为什么XML中的命名空间指定http:?

时间:2011-11-19 22:23:15

标签: xml wcf

请为我清理一些东西。我正在学习WCF并看到使用Namespace =“http://www.mywebsite.com/andsoforth”参数化的ServiceContractAttribute

我在另一个问题中读到,命名空间是唯一的不透明键。它们通常是URL,而不是使用GUID,因为合法的URL保证是唯一的。

为什么使用命名空间URL指定“http:”方案?为什么不只是URL?

感谢您澄清这一点。

4 个答案:

答案 0 :(得分:3)

指定协议,实际上总是http://,作为命名空间URI的一部分只是一个约定,而是一个坏约定。 (查看threads from July 2009 on XML-DEV以查看有关XML命名空间在各种帐户上严重破坏的讨论,包括使用URL(而不是URN)的(可修复的)约定作为URI。关键的XML人自己承认XML命名空间非常糟糕,但是你能做什么呢?他们会留下来。)

为什么HTTP URL这么糟糕?协议冒号双斜杠很多字母斜杠目录更多的斜杠和目录,现在是最后的斜杠还是不是?因为一个尾随斜线确实有所作为。

它应该是什么样的?好吧,DNS或Java名称空间。这项工作是否没有让人困惑。

这是一个实用的建议。选择简单的命名空间,让您的生活更轻松。 Take a look at URNs,它们非常接近DNS和Java。

答案 1 :(得分:2)

您是正确的,因为命名空间名称(或URI)只是定义命名空间的唯一标识符。例如,http://www.w3.org/1999/xhtml实际上并不包含XHTML的架构,而是包含人类可读的文档。标识符只是一个URI。

该协议是URI定义的一部分。例如,如果我创建一个文件夹并将其命名为“directory.com”,我可以将文件://directory.com/file完美地解析在我的本地计算机上。然而,它将是一个完全不同于http://directory.com/file托管的资源。计算机需要协议才能知道我想要哪一个。

换句话说,我们选择了URI来唯一地定义名称空间。协议是分离资源的URI的重要组成部分。

理论上有两个名称空间有两个独立的协议来表示两个不同的东西。像许多事情一样,它可能是一个坏主意,因为它会造成混乱,但它是可能的。

答案 2 :(得分:1)

我认为http://在命名空间名称中使用的原因之一是社区中总有一部分人认为有一天可以在Web浏览器中键入命名空间名称并返回命名空间的含义定义。甚至还有一个标准,称为RDDL,有些人会遵循它。其他人认为URL应该解析为关于命名空间的一些人类可读信息。请尝试在浏览器中输入http://www.w3.org/2001/XMLSchema

然而,确实没有要求命名空间URI应该解析为任何东西,并且今天软件试图取消引用URL(如果它确实是URL)没有用处,我怀疑从来没有将是。

答案 3 :(得分:0)

已有一些好的答案。这是一个额外的视角。 XML命名空间实际上是一个URI,不限于URL。有时,人们使用URL作为指示元数据可用位置的方式,但通常情况并非如此。经常使用的一个方面是公司拥有一个Internet域,并且通常在URL中表示该域,因此http://www.mycompany.com/ ...是一种创建公司特定URI的方法。

在大多数情况下,我更愿意明确表示我正在使用URN,这是一个不是URL的URI。我甚至为该值添加了一个前缀,以明确我正在做的事情。像这样的东西“urn:mycompany.com/schemas/services/foo/bar/20111119。