关于XML命名空间的基本困惑

时间:2013-12-27 23:33:02

标签: xml namespaces xml-namespaces

我对名称空间如何工作感到困惑。

具体来说,我读到分析给前缀的URI未被解析。

如果是这样,那么指示URI是什么意思?

4 个答案:

答案 0 :(得分:2)

名称空间URI出于所有正式和实际目的,名称空间的名称;它需要与不相关的命名空间的URI不同,唯一有意义的操作是将它与另一个命名空间URI进行比较。

有一种流行的(但显然不是普遍的)传统,即为命名空间URI选择一个工作HTTP URL,用于定义该命名空间中元素的XML Schema文档,但它只是一个不影响实际规则用于命名空间或模式。

答案 1 :(得分:0)

如果你看一下W3C的文件,你会发现一些这方面的历史。基本上,选择URI是出于同样的原因,反向域名通常用于Java中的项目名称:它们本身并不具有意义,但它们确实提供了一些关于谁创建它们以及它们可能意味着什么的暗示,我们已经有了采取措施确保不会被无意重复使用(这可能会导致故障。)

早在命名空间的早期,我们使用URL作为命名空间名称。稍后将其推广到URI(在决定命名空间名称不一定指向任何内容之后),但许多问题都是根据URL特别表达的,因此我的讨论将主要反映URI空间的子集。

在某一点上,命名空间名称可能更有意义。 Tim Berners-Lee希望他们指向一个提供有关绑定到该命名空间的节点类型的附加信息的地方 - 不仅仅是一个模式,而是一个进入他的“语义Web”概念的入口。这似乎已被取消;多年来我没有多少关于语义Web的知识,至少不是在一个非常简化和更加局部的层面上。

还尝试将相对URL的行为定义为命名空间名称。经过多次辩论后,TB-L承认这确实没有可行的语义,W3C宣称所有命名空间名称都应该格式化为绝对URL或URI,并简单地比较为字符串。 (更正式的措辞:使用相对URL作为命名空间名称是不推荐使用的,除非有人提出使用它们的强烈理由。单个工具可能无法检查这一点,但使用相对URL作为命名空间名称的文档是不可移植的,所以你'非常强烈地建议避免使用它们。)

如果您非常幸运和/或开发此文档类型的人仍在尝试利用语义Web概念,那么可能是关于该URI可用命名空间的其他信息。 (也就是说,它实际上可以作为统一资源定位器而不仅仅是作为统一资源标识符。)但就标准现在而言,没有承诺URI空间中的这一点被占用,或者什么可以如果是这样的话,就在那里基本上,取消引用命名空间名称是一种未定义的操作。

现在,将名称空间名称视为必须格式化为唯一性的绝对URL或URI的字符串,实际上更简单,更正确。

(我以前有一个指向优秀文件的指针,这个文件更清楚,更正式地解释了这一点,但是已经有好几年了,因为有人问过我这个特殊的问题并且我把它放错了。如果我发现它,我会更新这个答案。)

答案 2 :(得分:-1)

名称空间前缀定义了XML标记名称的嵌入方式。据推测,命名空间的作者已经定义了用于解释的模式。当XML文档是从多个源构造时,名称空间还可以避免名称冲突,其中每个源使用相同的标记名称但含义不同。

以下是关于XML命名空间的W3C学校教程的链接: http://www.w3schools.com/xml/xml_namespaces.asp

答案 3 :(得分:-2)

关键是要有可读,说和独特的东西。创建者可以将URI设置为其公司站点上的某个文件夹。

考虑替代方案

  1. 只是名字

    实际上他们已经只是名字了。建议仅使用URI。名称存在冲突问题(非唯一)。此外,如果有人希望将其文件格式命名为superpooper,则名称不能说明。

  2. 带圆点的分层名称,如Java和C#中的包。

    它实际上与URI相同,但当许多实体希望具有相同的名称时可能包含碰撞,例如com.super.pooper.format

  3. GUID

    GUID绝对是唯一的,但不可重复且不说。这可能意味着什么{000209FE-0000-0000-C000-000000000046}

  4. 因此,XML的创建者发明了重用已经完成的工作的结果。大多数机构已经拥有自己的网站。这意味着他们已经选择了可读的名称和文件夹结构,这是足够独特的。

    我认为这是个好主意。

    但是你可以忽略这个想法并将命名空间命名为AAA