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

关于XML名称空间的基本困惑,xml,namespaces,xml-namespaces,Xml,Namespaces,Xml Namespaces,我对名称空间是如何工作的感到困惑 具体地说,我读到分配给前缀的URI没有被解析 如果是这样的话,那么表示URI的意义是什么呢?关键是要有可读性、说明性和唯一性。创建者可以将URI设置为公司网站上的某个文件夹 考虑备选方案 只是名字 实际上,它们已经只是名字了。唯一的建议是使用URI。名称存在冲突问题(非唯一)。此外,如果有人希望将其文件格式命名为superpoper,则名称不能表示 点表示的分层名称,如Java和C#中的包 它实际上与URI相同,但当许多实体希望使用相同的名称时(如com.su

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

具体地说,我读到分配给前缀的URI没有被解析


如果是这样的话,那么表示URI的意义是什么呢?

关键是要有可读性、说明性和唯一性。创建者可以将URI设置为公司网站上的某个文件夹

考虑备选方案

  • 只是名字

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

  • 点表示的分层名称,如Java和C#中的包

    它实际上与URI相同,但当许多实体希望使用相同的名称时(如
    com.super.pooper.format
    ),可能会包含冲突

  • 指南

    guid是绝对唯一的,但不可读,也不说。这意味着什么{000209FE-0000-0000-C000-0000000000 46}

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

    我认为这是个好主意


    但是您可以忽略这个想法,将您的名称空间命名为
    AAA

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

    以下是W3C学校XML名称空间教程的链接:

    命名空间URI在所有正式和实际用途中都是命名空间的名称;它需要与不相关名称空间的URI不同,唯一有意义的操作是将其与另一个名称空间URI进行比较


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

    如果您查看W3C文档,你会发现一些这方面的历史。基本上,选择URI的原因与Java中经常使用反向域名作为项目名称的原因相同:它们本身没有意义,但它们确实提供了一些关于谁创建了它们以及它们可能意味着什么的提示,而且我们已经有了确保它们不会被无意中重用(这可能会导致故障)的实践

    在名称空间的早期,我们使用URL作为名称空间名称。后来它被推广到URI(在决定名称空间名称不一定指向任何东西之后),但许多问题都是以URL的形式具体表述的,所以我的讨论将主要反映URI空间的子集

    有一种意图是名称空间名称可能更有意义。Tim Berners-Lee希望他们指向某个地方,该地方提供了关于绑定到该名称空间的节点类型的附加信息——不仅仅是一个模式,而是他“语义网”概念的一个入口。这似乎已经被抛弃了;我已经有好几年没听说过多少关于语义网的事了,至少在更简化、更本地化的层面上是这样

    还有人试图将相对URL的行为定义为命名空间名称。经过多次辩论,TB-L承认这实际上也没有可行的语义,W3C声明所有名称空间名称都应该格式化为绝对URL或URI,并简单地作为字符串进行比较。(更正式的说法是:除非有人提出使用相对URL的强烈理由,否则不推荐使用相对URL作为命名空间名称。个别工具可能不会检查这一点,但使用相对URL作为命名空间名称的文档是不可移植的,因此强烈建议您避免使用它们。)

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

    现在只将名称空间名称视为一个字符串,为了唯一性,必须将其格式化为绝对URL或URI,这确实更简单,也更正确


    (我曾经有一个指向一个优秀文档的指针,该文档更清楚、更正式地解释了这一点,但多年来没有人问我这个问题,我把它放错地方了。如果我找到了,我会更新这个答案。)

    嘿,苏珊,谢谢你的回复。“让某些东西可读”的确切含义是什么?您是指作为前缀用途的参考吗?
    readable
    的意思是眼睛可以感知到的。我猜这里的“readable”的意思是“很容易被人识别,如果选择得当,可能对人有意义。”-1:你的答案写得好像你相信名称空间总是URL(你谈论的是已经完成的工作和网站)。事实并非如此。安德鲁谢谢你的回答。你能解释一下“名称空间的作者定义了一个用于解释的模式”是什么意思吗?具体地说,“定义一个用于解释的模式”是什么意思?Oracle对名称空间和XML模式有一个非常好的解释,链接到w3schools教程。和往常一样,这是错误的。请再说一遍?我