为什么XML命名空间中要使用URL?

43

以这一行为例:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
</configuration>

经过一些简要的研究,我了解到这个URL上并不一定需要托管内容。因此,如果它只是对包含在本地程序集中的名称空间的引用,为什么要使用URL而不是像.NET通常使用的常规名称空间(例如System.Data)?


2
可能是因为它们非常独特。 - Felix Kling
1
我理解URL是用于唯一性的。那么为什么我们需要唯一的XML标签呢? - Sergey Orshanskiy
4个回答

20
当你询问一个标准为什么是这样的时,你的问题有两种可能的解释:(a)这个设计选择有哪些被感知到的好处,和(b)导致这个设计被采用而不是其他设计的历史序列是什么。
很明显,使用类似HTTP的URI可以实现唯一性。但这也可以通过其他方式实现,例如发明一种新的URI方案。我认为,如果你追溯当时提出的论点,你会发现许多主张使用HTTP风格URI的人也主张命名空间URI应该是可解引用的,可能是指向模式或其他文档。事实上,W3C自己的命名空间政策规定,当你在浏览器中键入命名空间URI时,总会有一个可以检索的文档,并且它应该告诉你一些有用的关于命名空间的信息。
因此,我怀疑我们使用看起来可引用但没有定义任何语义的URI实际上是委员会在两个或更多相互对立的阵营之间妥协的结果。但你必须进行一些适当的历史研究来证实这一点。

对我来说,这个解释听起来完全合理(聪明的人,对XML几乎一无所知 - 现在才开始学习)。但如果在课程、教程等中解释类似的内容,那就更有意义了。我看到有很多命名空间,它们没有使用其作者的私有URI,而是都指向w3c网站,因为人们盲目地复制他们在某个地方看到的示例,如果他们不理解自己在做什么以及为什么要这样做。因此,独特性就荡然无存了。 - user5683823
我担心现在酷炫的孩子们编程都是通过抄袭示例代码来学习的,而且你可以编写世界上所有的书籍和教程,也无济于事。 - Michael Kay
我真的希望将模式URI保留为有效的网页成为标准做法。像微软这样的公司确保http://schemas.microsoft.com/XML-Document-Transform不是死链接难道真的那么难吗? - Jacob Stamm

13

这只是一种约定。URI(它们实际上不是URL)是一种方便且全球通用的标识资源的方式。另一方面,.NET风格的标识符对于.NET开发人员来说是熟悉和可识别的 - XML比.NET更复杂。


2
@Robert:我不同意。XML命名空间URI只需要在它们被使用的上下文中是唯一的。理想情况下,除此之外,只有公共模式才需要唯一。 - skaffman
6
命名空间是一个任意的标识符。你可以将任何东西放在其中(比如“Grabblesnackers”),但使用URI是习惯上的做法,可能是因为如果你控制域名,它保证是唯一的。 - Robert Harvey
3
"Schemas.Microsoft.XmlDocumentTransform" 仍然是一个URI,和其他任何东西一样有效。然而,更广泛的惯例是使用类似URL的URI,这只是一种惯例。 - skaffman
7
好的。删除了上一条评论,我向仍在回复它的任何人道歉。所以基本上这一切都是武断的。某位大佬说:“即使超文本传输协议并不是方程式的一部分,我们还是要在URI前缀中使用http。这没有必要有任何合理性,但我是大佬,所以我们会继续使用http作为前缀。为什么不用ftp?因为我这么说了。” 这就是我的看法。谢谢你们的讨论。 - oscilatingcretin
5
这是一篇关于为什么XML命名空间使用URI(统一资源标识符)的好文章,以及为什么这是一个错误的做法:http://www.xml.com/pub/a/2005/04/13/namespace-uris.html - Mas
显示剩余5条评论

5

W3在此解释

与.NET中的命名空间类似,XML文档中的命名空间旨在帮助防止和解决名称冲突,特别是如果XML文档来自不同的组织和/或知识领域。

XML文档格式由负责HTML的同一组人进行了样式化处理,因此您可能会在格式的元素中发现语法上的相似性。从语义上讲,dotNET和XML命名空间具有相同的目标。


我理解URI和XML文档格式化的概念。我的最初帖子回答了为什么XML命名空间看起来像URL的问题。是的,我知道URL是一个URI,但是URL有一些显著的特征。它有一个协议、域、后缀、文件夹引用,而且大多数情况下还有一个文档。对我来说,很明显XML命名空间格式之所以是这样,只是因为最初的XML设计者基于当时的理解做出了决定。如果今天发明XML,它的命名空间很可能不会像URL那样。 - oscilatingcretin
3
此处有人称URL样式的命名空间能够确保唯一性,但我并不认同。任何URI格式都无法保证唯一性,无论是XML-style还是.NET-style的命名空间(除非你在谈论一个URL)。在我的观点中,将"http"和".com"添加到命名空间中没有任何逻辑依据。如果有人未能续订域名注册,而有人购买了它(咳咳,Microsoft?),那么URL样式的URI还有什么用处呢?在我看来,这种方法缺乏一致性。 - oscilatingcretin
1
@oscilatingcretin:GUID也不能保证唯一性,但是一个正确生成的GUID与另一个相同的概率非常小。使用URL可以提供合理的唯一性保证。 - Robert Harvey
2
以什么方式合理?还没有人回答我的问题,为什么URL风格的命名空间是有意义的。HTTP(超文本传输协议)与此有什么关系?为什么不是FTP?有人告诉我为什么http://schemas.microsoft.com/XML-Document-Transform比Microsoft.Schemas.XmlDocumentTransform更合理。我知道我很久以前就选择了一个答案,但我非常愿意进一步讨论这个话题。 - oscilatingcretin
4
我知道这个问题有点老,但是没有人回答@oscilatingcretin。假设是Microsoft拥有microsoft.com,因此在某种程度上可以“控制”。这并不完美,但是只有Microsoft才能发布到microsoft.com/xyz的架构。除非他们忘记续订域名等等... :) - Andrew Grothe

2
问题的核心在于命名空间必须是URI。这样做没有任何好处,因为它只需要成为一个唯一标识符以为定义的元素提供上下文。
由于它们必须是URI,所有可能性都是无意义的,因为需要一个方案(例如http),即使命名空间与此无关。
因此,回答“为什么”的问题:像所有坏主意一样,当时有人认为这是个好主意。

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