我试图理解命名空间在XML中如何工作。当我有一个像foo:bar的元素时,属性通常不会有命名空间。但有时他们会。是元素的命名空间中的属性,即使已经声明了默认命名空间吗?查看xsd的xhtml似乎属性是模式的一部分,应该在xhtml的命名空间,但他们永远不会以这种方式… …
大多数时候,属性不会在任何命名空间。
namespace spec说(强调我):
A default namespace declaration applies to all unprefixed element names within its scope. Default namespace declarations do not apply directly to attribute names; the interpretation of unprefixed attributes is determined by the element on which they appear.
有一个原因,大多数XML词汇使用非命名空间属性:
当你的元素有一个命名空间,那些元素有属性时,就不会有混乱:属性属于你的元素,属于你的命名空间。在属性中添加命名空间前缀只会使一切更繁琐。
那么为什么存在命名空间属性?
因为一些词汇对大多数属性做有用的工作,并且当与其他词汇混合时可以做到这一点。最着名的例子是XLink。
最后,W3C XML Schema有一个太简单的方法(< schema attributeFormDefault =“qualified”>)将属性声明为在命名空间中,迫使您在文档中为它们添加前缀,即使您使用默认命名空间。