XML 命名空间和无前缀属性

Tob*_*zer 5 xml xml-namespaces

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

无前缀属性名称的命名空间名称始终没有值。

jid在以下情况下,此规则如何应用于属性的命名空间。

<query xmlns="jabber:iq:roster">
  <item jid="romeo@example.com"></item>
</query>
Run Code Online (Sandbox Code Playgroud)

如果命名空间的声明和相关属性都没有前缀,则该属性jid位于命名空间中jabber:iq:roster

<q:query xmlns:q="jabber:iq:roster">
  <q:item q:jid="romeo@example.com"></q:item>
</q:query>
Run Code Online (Sandbox Code Playgroud)

如果命名空间的声明和属性具有相同的前缀,则属性jid也具有命名空间jabber:iq:roster

<q:query xmlns:q="jabber:iq:roster">
  <q:item jid="romeo@example.com"></q:item>
</q:query>
Run Code Online (Sandbox Code Playgroud)

但是,如果使用前缀声明命名空间但该属性没有前缀,则该属性位于哪个命名空间中?我假设该属性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>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者没有命名空间,如果没有这样的声明。

我理解得对吗?

for*_*two 3

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