XML不合格的属性名称的默认命名空间?

我正在努力了解 “Namespaces in XML 1.0 (Third Edition)”定义对不合格属性命名空间的正确解释。

“The namespace name for an unprefixed attribute name always has no value.”

后来在同一节:

“The attribute value in a default namespace declaration MAY be empty. This has the same effect,within the scope of the declaration,of there being no default namespace.”

那么如果我想为一个元素(及其子代)声明一个认的命名空间,那么我还必须为这个命名空间中的任何属性声明一个前缀 – 命名空间映射?

例如,在这个例子中

<parent xmlns="http://example.com/foo">
    <child attrib="value">text</child>
<parent>

我会解释上面的定义,说attrib的命名空间是空的。

所以如果我需要属性与父母有相同的命名空间,那么我将被迫这样做?

<foo:parent xmlns:foo="http://example.com/foo">
    <foo:child foo:attrib="value">text</foo:child>
<foo:parent>

或这个?

<parent xmlns="http://example.com/foo" xmlns:foo="http://example.com/foo">
    <child foo:attrib="value">text</child>
<parent>

这似乎对我来说很愚蠢,因为它似乎打败了认命名空间的目的。我希望我只是误解了规范。

你是正确的。属性不属于认命名空间的想法是它们被认为存在于“元素命名空间”中 – 因此在这种情况下,< foo:child />被认为是@attrib的’命名空间’。请注意,这只是概念性的;没有API或任何以这种方式引用属性命名空间的东西。

这被选择是因为多个元素可能具有相同名称属性,但具有不同的含义 – 与传统的命名空间不同,它是一组名称(因此没有重复项)。在某种程度上,它为命名空间提供了更多的结构,而不是具有一个平面集合。

你可以在a very old version of the Namespaces recommendation阅读这个。

此约定意味着每当您看到一个前缀属性时,它表示一些与文档中的主模式无关的“附加”信息。

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念