为什么没有 XMLNS 前缀的 XML 属性不等于具有相同本地名称的前缀属性?
当默认命名空间和带前缀的命名空间解析为相同的命名空间 URI 时,当两者具有相同的本地名称时,为什么没有前缀的属性不等于带前缀的属性?
“XML 中的命名空间”规范只是说明了这一点,但没有详细说明原因。 有人知道为什么会这样吗?
摘自http://www.w3.org/TR/xml-names11/#uniqAttrs:
例如,以下内容中的每个不良空元素标记都是非法的:
<坏 a="1" a="2" /> <坏 n1:a="1" n2:a="2" /> 但是,以下各项都是合法的,第二个是因为默认命名空间不适用于属性名称:
<好 a="1" b="2" /> <好 a="1" n1:a="2" />
我认为这只会使解析命名空间 XML 变得更加困难,因为解析器必须检查两个属性是否存在并选择一个。
对于我的情况,我喜欢将 Atom 链接添加到我的 XML 文档中,如下所示:
<root xmlns="..." xmlns:atom="...">
<atom:link rel="self" type=".." href=".." />
</root>
我认为atom:link 上的属性将继承元素名称空间。在 Java 中使用 DOM 解析 XML 报告了元素的 Atom 命名空间,但没有报告属性的命名空间。
When the default namespace and a prefixed namespace resolves to the same namespace URI, why is an attribute with no prefix not equal to a prefixed attribute, when both have the same local name?
The "Namespaces in XML" specification just says it's so, but it's very short on why. Anyone knows why it's like this?
Excerpt from section "6.3 Uniqueness of Attributes" at http://www.w3.org/TR/xml-names11/#uniqAttrs :
For example, each of the bad empty-element tags is illegal in the following:
<!-- http://www.w3.org is bound to n1 and n2 --> <x xmlns:n1="http://www.w3.org" xmlns:n2="http://www.w3.org" > <bad a="1" a="2" /> <bad n1:a="1" n2:a="2" /> </x>
However, each of the following is legal, the second because the default namespace does not apply to attribute names:
<!-- http://www.w3.org is bound to n1 and is the default --> <x xmlns:n1="http://www.w3.org" xmlns="http://www.w3.org" > <good a="1" b="2" /> <good a="1" n1:a="2" /> </x>
I think this just makes it harder to parse namespaced XML, since the parser has to check the presence of both the attributes and pick one.
For my case, I like to add Atom links to my XML documents like this:
<root xmlns="..." xmlns:atom="...">
<atom:link rel="self" type=".." href=".." />
</root>
I would think that the attributes on atom:link would inherit the elements namespace. Parsing the XML with DOM in Java reported the Atom namespace for the element, but no namespace for the attributes.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
简短的回答:无前缀的属性总是在空的名称空间中,即它们没有名称空间。
在示例中:
第一个 a 将扩展为,
而第二个 a 将扩展为:
在您的原子示例中,所有属性都位于空名称空间中。
Short answer: unprefixed attributes are always in the empty name space, i.e. they have no name space.
In the example:
the first a would expand to
whereas the second would expand to:
In your atom example, all attributes are in the empty name space.