XML命名空间的规范解释了the interpretation of unprefixed attributes is determined by the element on which they appear。那是namespace name for an unprefixed attribute name always has no value。
在以下情况下,此规则如何应用于属性jid
的命名空间。
<query xmlns="jabber:iq:roster">
<item jid="romeo@example.com"></item>
</query>
如果命名空间的声明和相关属性都没有前缀,则属性jid
位于命名空间jabber:iq:roster
中。
<q:query xmlns:q="jabber:iq:roster">
<q:item q:jid="romeo@example.com"></q:item>
</q:query>
如果两者都有,命名空间的声明和属性具有相同的前缀,则属性jid
也具有命名空间jabber:iq:roster
:
<q:query xmlns:q="jabber:iq:roster">
<q:item jid="romeo@example.com"></q:item>
</q:query>
但是,如果使用前缀声明命名空间但属性没有前缀,那么在哪个命名空间是属性?我认为,属性jid
具有在父元素中声明的默认命名空间
<parent xmlns="http://example.com">
<q:query xmlns:q="jabber:iq:roster">
<q:item jid="romeo@example.com"></q:item>
</q:query>
</parent>
我能做到这一点吗?
答案 0 :(得分:4)
XPath和其他规范使用的正常解释是没有前缀的属性没有名称空间。
有些语言律师坚持认为名称空间规范并没有这么说。它说一个没有前缀的属性在词汇表的设计者所说的任何名称空间中。但这种解释在实践中并不是很有用;这就是工具的重要性。
答案 1 :(得分:3)
没有前缀的属性始终位于空名称空间中,即它没有名称空间。封闭元素是否具有名称空间并不重要。这是我对你引用的第二个语句的解读,这就是我使用过的所有XML工具的解释。