默认情况下声明了哪些 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 命名空间?的主要内容,如果未能解决你的问题,请参考以下文章