3

显然,xmlnsHTML 和 XML 页面中的命名空间 URL 是没有意义的。一直以来,我虽然这些地址实际上有命名空间......

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

但如果 URL 完全没用,那么命名空间的意义何在?如果某个东西实际上并不存在于任何地方,你怎么知道它是否属于一个命名空间?当我指定一个“命名空间”时,我真的在做什么吗?

在我看来,这在每个意义上都是完全任意的。

4

2 回答 2

4

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

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

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

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

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

  • 没有两个 XML 词汇表的发明者为其词汇表选择相同的名称空间名称。

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

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

于 2013-04-24T21:05:29.070 回答
3

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

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

于 2013-04-24T20:55:30.420 回答