5

XML 命名空间规范解释了无前缀属性的解释由它们出现的元素决定。并且无前缀属性名称的名称空间名称始终没有值

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. 或者没有命名空间,如果没有这样的声明。

我做对了吗?

4

2 回答 2

4

XPath 和其他规范使用的正常解释是无前缀属性不在命名空间中。

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

于 2012-05-20T12:17:03.327 回答
3

没有前缀的属性总是在空的命名空间中,即它没有命名空间。封闭元素是否具有名称空间并不重要。这是我对您提到的第二个陈述的解读,也是对我使用过的所有 XML 工具的解释。

于 2012-05-20T12:17:34.613 回答