关于XML命名空间的基本混淆

11 浏览
0 Comments

关于XML命名空间的基本混淆

我对命名空间的工作原理感到非常困惑。具体来说,我读到的是分配给前缀的URI是不被解析的。如果是这样的话,那指定URI的意义是什么呢?

0
0 Comments

在XML中,命名空间前缀定义了XML标签名称的解释方式。一个命名空间的作者通常会为其定义一个解释方案。命名空间还可以避免在一个XML文档由多个来源构建时出现名称冲突,其中每个来源使用相同的标签名称但具有不同的含义。

然而,关于XML命名空间存在一些根本性的困惑。这个问题出现的原因是人们对于命名空间的定义和解释方式有所误解。许多人错误地认为命名空间是用来避免名称冲突的,而实际上,命名空间只是为了提供一种标识和区分不同的解释方案的机制。

解决这个问题的方法是通过深入理解XML命名空间的概念和用法。可以参考W3C学校关于XML命名空间的教程来学习更多相关知识。此外,Oracle也提供了关于命名空间和XML模式的解释和示例,可以进一步加深理解。

尽管有一些在线教程提供了关于XML命名空间的解释,但是有些教程可能存在错误。因此,在学习过程中需要保持谨慎,并参考可靠的资源来确保获取准确的信息。

0
0 Comments

XML命名空间的基本概念和应用经常会引发一些混淆。在使用XML命名空间时,有一个常见的困惑:命名空间URI(Uniform Resource Identifier)的作用以及如何选择和使用它。

命名空间URI在所有正式和实际的目的上都是命名空间的“名字”,它需要与其他命名空间的URI有所区别,并且唯一的有意义的操作是将其与另一个命名空间URI进行比较。

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

这种混淆的原因在于对XML命名空间的概念理解不清,以及对命名空间URI的作用和选择方式的混淆。为了解决这个问题,我们需要明确以下几点:

1. 命名空间是用来将不同XML文档中的元素和属性区分开的一种机制。通过为元素和属性添加命名空间前缀,可以确保它们在不同的命名空间中具有唯一性。

2. 命名空间URI是一个用来标识命名空间的字符串。它可以是任何有效的URI,但通常建议选择一个能够唯一标识命名空间的URI。

3. 选择命名空间URI的传统做法是使用一个HTTP URL,指向包含命名空间定义的XML模式文档。这样做的好处是可以通过访问该URL获取有关命名空间的更多信息。

然而,需要注意的是,命名空间URI不一定需要是一个可访问的URL,也不一定需要与实际的模式文档相对应。它的主要作用是标识命名空间,而不是用于获取模式信息。

为了解决这个问题,我们需要明确命名空间URI的作用和选择方式。首先,我们应该明确命名空间的目的是为了在不同的XML文档中区分元素和属性。其次,命名空间URI只需要能够唯一标识命名空间即可,不一定需要与实际的模式文档相对应。

总结起来,混淆XML命名空间的原因在于对命名空间URI的作用和选择方式的混淆。为了解决这个问题,我们应该明确命名空间的目的是为了区分不同的XML文档中的元素和属性,命名空间URI只需要能够唯一标识命名空间即可。选择命名空间URI时,可以选择一个能够唯一标识命名空间的URI,但不一定需要与实际的模式文档相对应。

0
0 Comments

XML命名空间的根本困惑

在W3C的文件中,可以找到一些关于这个问题的历史。基本上,选择URI作为命名空间的原因与在Java中经常使用反向域名作为项目名称的原因相同:它们本身并没有固有的意义,但它们确实提供了一些关于创建者和可能的含义的暗示,并且我们已经有了一些实践方法来确保它们不会被意外重用(这可能会导致故障)。

在命名空间的早期阶段,我们使用URL作为命名空间名称。后来,它被推广为URI(在决定命名空间名称不一定指向任何内容之后),但是许多问题特定地用URL的术语来表述,因此我的讨论主要反映了URI空间的这个子集。

曾经有一个意图,即命名空间名称可能更有意义。Tim Berners-Lee希望它们指向某个提供有关绑定到该命名空间的节点类型的附加信息的地方,不仅仅是模式,而是他的“语义Web”概念的一个入口。似乎这个想法已经被放弃了;至少在过去几年里,我没有听到关于语义Web的太多消息,至少不是在更复杂和更本地化的层面上。

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

如果你非常幸运和/或开发此文档类型的人仍然试图利用语义Web概念,那么该URI可能会提供有关命名空间的其他信息。也就是说,它可能实际上作为统一资源定位符(URL)而不仅仅是统一资源标识符(URI)而存在。但是就目前的标准而言,没有承诺该URI空间的某个点被占用,或者如果占用了,那里可以找到什么。基本上,解引用命名空间名称是一个未定义的操作。

现在,将命名空间名称视为必须格式化为绝对URL或URI的字符串更简单、更正确。

很抱歉,我在笔记中一直使用URI这个词。我不确定你反对什么。(我参与了其中一些讨论。在与一个名字几乎与Web同义的人争论并赢得胜利,这是一个有趣的经历。)

你能给出一个不是URL的相对URI的例子吗?

正如在en.wikipedia.org/wiki/Uniform_resource_identifier和其他地方提到的,"技术出版物,尤其是由IETF和W3C制定的标准,通常反映了2001年W3C推荐的观点,该推荐承认了术语URI的优先性,而不是对任何正式的URL和URN细分的认可。我曾经参与过一个W3C工作组;我使用W3C风格的术语。"相对"适用于URL,但URL是URI的一个子集,并且是当Namespaces In XML Recommendation被设计、讨论和批准时主要被引用的形式。

好的,我承认你的观点,但由于大多数读者可能会有一个"外部人"的观点,也许在与外部人讨论问题时你应该切换到那个观点?Stack Overflow不允许我取消投票,除非你编辑你的回答。也许你可以添加一些这个"观点"的信息?

感谢你的完美回答!提供一个绝对链接到命名空间是必要的吗?

如果你用"绝对链接"来表示"绝对URI",那么答案是肯定的。"在命名空间声明中使用相对URI引用,包括同一文档引用,是不推荐的。" w3.org/TR/REC-xml-names/#iri-use

0