Xml 在DTD中,为什么名称空间作为URL提供?

Xml 在DTD中,为什么名称空间作为URL提供?,xml,xsd,namespaces,xml-namespaces,dtd,Xml,Xsd,Namespaces,Xml Namespaces,Dtd,显然,HTML和XML页面中xmlns后面的名称空间URL毫无意义。一直以来,我都以为在这些地址上有名称空间 当我第一次读到/听说名称空间时,我想象在提供的URL中有一些大文件,其中包含可以在文档实例中使用的所有有效“名称”的列表。我知道我想错了 但是如果URL完全无用,那么名称空间的意义到底是什么?如果某个名称空间实际上不存在,您如何知道它是否属于该名称空间?当我指定一个“名称空间”时,我真的在做什么吗 在我听来,这个词在任何意义上都是完全任意的。URL(实际上,URI)一点意义都没有,它是一

显然,HTML和XML页面中
xmlns
后面的名称空间URL毫无意义。一直以来,我都以为在这些地址上有名称空间

当我第一次读到/听说名称空间时,我想象在提供的URL中有一些大文件,其中包含可以在文档实例中使用的所有有效“名称”的列表。我知道我想错了

但是如果URL完全无用,那么名称空间的意义到底是什么?如果某个名称空间实际上不存在,您如何知道它是否属于该名称空间?当我指定一个“名称空间”时,我真的在做什么吗

在我听来,这个词在任何意义上都是完全任意的。

URL(实际上,URI)一点意义都没有,它是一个唯一的标识符。使用它,您不需要所有可能名称空间的中心注册表。只需在您控制的域中创建一个URL,就可以确保您具有唯一标识符。(URI不仅是在Web上检索资源的一种方式,也是标识符。)


如果您将此URL提供给Web浏览器,则将名称空间标识符作为实际URL以及一些可用文档,这被认为是一种良好的做法。但它不是强制性的。

XML中名称空间名称的基本功能是提供唯一标识符,使需要处理XML文档的软件或人员能够知道输入中遇到的特定元素是否是他们负责处理的元素之一。假设您是一个专门的软件,用于处理名为“blort”的元素,并在用户的显示区域中显示结果。每当您在输入中看到名为“blort”的元素时,必须确定您在输入中看到的“blort”元素是您应该处理的“blort”元素,还是具有相同名称但结构或含义不同的另一个元素。如果没有名称空间,您无法确定

如果满足以下条件,则可以解决此问题:

  • 发明XML词汇表(并关心避免名称冲突)的每个人都为自己的词汇表选择一个唯一的名称。出于各种历史、技术和风格原因,我们将此名称称为“名称空间名称”

  • 我们找到了一些方法使XML元素或属性的全名包含名称空间名称。这就是一些规范所称的“扩展名”:由名称空间名和“本地名”组成的一对

现在,只要满足第三个标准,您就可以将设计用于处理的词汇表中的“blort”与可能找到的任何其他“blort”(只需查看它们的扩展名称!)区分开来:

  • 没有两个XML词汇表的发明者为他们的词汇表选择相同的名称空间名称
确保任意标识符唯一性的常用方法是使用某种中央注册表。然而,中央注册中心很难构建和维护,XML名称空间使用URI作为一种依靠最成功的注册机构之一的方式:维护互联网核心的域名系统。只要名称空间名称的发明者遵循仅在其拥有或控制的URI空间中分配名称空间名称的基本规则,不同的发明者就永远不会选择相同的名称空间名称


使用URI作为名称空间名称还有一个很好的特性,即名称空间的定义者可以将名称空间的人类和机器可读文档放在名称空间URI中。一些权威机构建议将此作为良好实践,但W3C的建议并不要求这样做,以便使名称空间处理尽可能简单。我所熟悉的大多数用于公共用途的XML词汇表都在其名称空间URI中提供文档,但并非所有词汇表都提供文档。因此,您可以通过查找由负责实体发布的名称空间文档来找到属于名称空间的内容。如果他们在名称空间URI中提供它,那就很容易了;如果不是,那就更难了;在某些情况下,这个问题在实践中可能无法回答。生活有时很艰难。

好吧,有趣。。。但这只回答了我一半的问题。如果其他名称空间中的标记/名称实际上没有存储在任何地方,那么您如何从其他名称空间中“继承”它们呢?在任何提供继承或重用其他名称空间中的内容的系统中,可能会有一些有关名称的书面声明形式。XSD架构文档和RDF架构文档是两个明显的例子。@lmray您在这里的困惑是DTD(指定可用的标记和属性,并通过文档的
DOCTYPE
声明定位)和名称空间的混合(这纯粹是用于创建唯一标记名的前缀,通过
xmlns
属性指定)。非常清楚的解释!我想我现在明白了。因此,当我指定
xmlns
时,实际上没有下载任何内容或根据该URL上的内容进行检查,对吗?对(至少通常是这样)。XML解析器不需要从命名空间URI下载任何内容。其他形式的处理(例如针对XSD架构的验证)可以取消引用URI作为尝试查找相关声明的一种方式。问题。如果在名称空间中放置GUID,会发生什么情况?或者XML解析是否明确需要URI架构的名称空间?注意,https和http都是允许的吗?@ZachSmith,如果名称空间名称不是URI,文档的含义是正式的未定义,并且对符合XML要求的软件如何选择处理这种情况没有限制。一些人可能会报告名称空间名称不是URI,因此文档相对于名称空间规范的格式不正确。其他人可能会在不报告任何错误的情况下继续操作。