默认情况下声明了哪些 XML 命名空间?

Posted

技术标签:

【中文标题】默认情况下声明了哪些 XML 命名空间?【英文标题】:Which XML namespaces are declared by default? 【发布时间】:2015-05-28 10:44:03 【问题描述】:

哪些 XML 命名空间是默认声明的,不需要/必须不声明?

【问题讨论】:

@CharlesDuffy 那么,例如http://www.w3.org/XML/1998/namespace 怎么样? 如果您阅读w3.org/XML/1998/namespace(方便,在同一位置有一个网页),您会注意到它被描述为独一无二的。 相关:w3.org/TR/xml-names/#xmlReserved @CharlesDuffy 不,这不是唯一的。 :) 嗯。我知道那个(写我的答案时忘记了),但是你发现的任何一个对我来说都是新闻。 【参考方案1】:

简而言之:

http://www.w3.org/XML/1998/namespace 带前缀 xml http://www.w3.org/2000/xmlns/ 带前缀 xmlns

Namespaces in XML 1.0 (Third Edition) 和 Namespaces in XML 1.1 (Second Edition) 都只定义了两个命名空间:

命名空间约束:保留前缀和命名空间名称

前缀 xml 根据定义绑定到命名空间名称 http://www.w3.org/XML/1998/namespace。它可以但不必是 已声明,并且不得未声明或绑定到任何其他命名空间 姓名。其他前缀不得绑定到此命名空间名称,并且它 不得将其声明为默认命名空间。

前缀 xmlns 仅用于声明命名空间绑定,并且是 根据定义绑定到命名空间名称 http://www.w3.org/2000/xmlns/不得声明或 未申报。其他前缀不得绑定到这个命名空间名称, 并且它不得被声明为默认命名空间。元素名称 不得有前缀xmlns

所有其他以三字母序列 x, m, l, 开头的前缀, 无论如何组合,都是保留的。这意味着:

用户不应该使用它们,除非后面的规范定义了 处理器不得将它们视为致命错误。

所以,实际上只有http://www.w3.org/XML/1998/namespace(前缀为xml,包含xml:lang、see full list here等少数属性)和http://www.w3.org/2000/xmlns/(前缀为xmlns,用于声明其他命名空间)在标准中定义。

一些 XML 处理库可能会将http://www.w3.org/2001/XMLSchema(前缀为xs)和http://www.w3.org/2001/XMLSchema-instance(前缀为xsi)提升到接近默认状态,甚至在编写时默认为这些命名空间编写xmlns 声明XML 文件,但这只是约定,不能作为标准行为依赖。

【讨论】:

对于在 XML 文档中隐式声明的命名空间,答案是正确的。在其他规格中,情况略有不同。例如,在 XPath/XSLT/XQuery 使用的 XDM 数据模型中,每个节点都有“xml”作为命名空间绑定,但没有“xmlns”。

以上是关于默认情况下声明了哪些 XML 命名空间?的主要内容,如果未能解决你的问题,请参考以下文章

xml命名空间声明:自动替换包名

xml命名空间声明:自动替换包名

xmlstarlet 默认命名空间

如何在具有默认命名空间的 xml 文档上使用 XPath

『XML』XML/XSD命名空间解析

重命名元素的 XSLT 问题——更改命名空间