XML命名空间和未加前缀的属性

时间:2012-05-20 10:25:19

标签: xml xml-namespaces

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

  1. 具有在父元素中声明的默认命名空间

    <parent xmlns="http://example.com">
      <q:query xmlns:q="jabber:iq:roster">
        <q:item jid="romeo@example.com"></q:item>
      </q:query>
    </parent>
    
  2. 或没有命名空间,如果没有这样的声明。
  3. 我能做到这一点吗?

2 个答案:

答案 0 :(得分:4)

XPath和其他规范使用的正常解释是没有前缀的属性没有名称空间。

有些语言律师坚持认为名称空间规范并没有这么说。它说一个没有前缀的属性在词汇表的设计者所说的任何名称空间中。但这种解释在实践中并不是很有用;这就是工具的重要性。

答案 1 :(得分:3)

没有前缀的属性始终位于空名称空间中,即它没有名称空间。封闭元素是否具有名称空间并不重要。这是我对你引用的第二个语句的解读,这就是我使用过的所有XML工具的解释。