我试图了解命名空间如何在XML中工作.当我有一个像foo:bar这样的元素时,属性通常没有命名空间.但有时他们会.即使已声明默认命名空间,元素名称空间中的属性也是如此?查看xsd for xhtml似乎属性是模式的一部分,应该在xhtml的命名空间中,但它们永远不会以这种方式呈现......
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
具有在父元素中声明的默认名称空间,
<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)
或者没有命名空间,如果没有这样的声明。
我理解得对吗?