2012-05-20 69 views
3

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 valueXML名稱空間和未定義的屬性

在下列情況下,此規則如何應用於屬性jid的命名空間。

<query xmlns="jabber:iq:roster"> 
    <item jid="[email protected]"></item> 
</query> 

如果命名空間的聲明和相關的屬性都沒有一個前綴,屬性jid是在命名空間jabber:iq:roster

<q:query xmlns:q="jabber:iq:roster"> 
    <q:item q:jid="[email protected]"></q:item> 
</q:query> 

如果同時,該命名空間的聲明和屬性的前綴相同,屬性jid也有命名空間jabber:iq:roster

<q:query xmlns:q="jabber:iq:roster"> 
    <q:item jid="[email protected]"></q:item> 
</q:query> 

但在命名空間屬性如果命名空間用前綴聲明,但屬性沒有前綴?我會假設,該屬性jid

  1. 在父元素中聲明的默認命名空間,

    <parent xmlns="http://example.com"> 
        <q:query xmlns:q="jabber:iq:roster"> 
        <q:item jid="[email protected]"></q:item> 
        </q:query> 
    </parent> 
    
  2. 或沒有命名空間,如果沒有這樣的聲明。

我是否明白這一點?

回答

3

沒有前綴的屬性總是在空的名稱空間中,即它沒有名稱空間。封閉元素是否有名稱空間並不重要。這是我對你引用的第二個陳述的閱讀,這是我所用的所有XML工具的解釋。

+1

但是,如果一個沒有前綴的屬性沒有名稱空間,我怎麼知道,屬性'jid'形成第一個和第三個示例是模式屬性'jid' ['jabber:iq:roster'](http:// xmpp.org/rfcs/rfc6121.html#schema)?順便說一句,我知道這是一個理論上的討論。 ;-) –

+1

你通過研究模式來獲得知識。有兩種可能性。 1)模式將其定義爲元素或類型聲明的本地屬性,或者2)模式允許此時的任何屬性。 –

+1

現在我明白了。 [德語維基百科中的解釋](http://de.wikipedia.org/wiki/Namensraum_(XML)#Attribute)也對我有所幫助。在上面的所有3個例子中,屬性'jid'是名冊項目的預期屬性。只有當屬性的名稱空間不爲null並且與它出現的元素的名稱空間不同時,它纔是不同的(例如'')。 –

相關問題