在DTD中,为什么名称空间被赋予URL?

时间:2013-04-24 20:36:45

标签: xml namespaces xsd dtd

显然,HMTL和XML页面中xmlns后面的命名空间URL没有意义。而且这一次我虽然在那些地址确实存在命名空间......

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

但是如果URL完全没用,那么命名空间究竟是什么意思呢?如果某个命名空间实际上不存在于任何地方,你怎么知道它是什么?当我指定一个“命名空间”时,我实际上在做什么?

听起来我觉得它在任何意义上都是完全随意的。

2 个答案:

答案 0 :(得分:3)

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

如果将此URL提供给Web浏览器,则将命名空间标识符视为实际URL并使用某些文档是一种良好的做法。但这不是强制性的。

答案 1 :(得分:3)

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

如果出现以下情况,可以解决此问题:

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

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

您现在可以区分' blort'在词汇表中,您可以使用任何其他语言来处理这些词汇。只要符合第三个标准,你就可以找到(只看他们扩展的名字!):

  • 没有两位XML词汇表的发明者为他们的词汇表选择相同的命名空间名称。

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

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