2014-04-12 221 views
1

考慮下面的XML文檔:XML - 命名空間

1 <a 
2  x:foo="123" xmlns:x="foo"> 
3 <b xmlns="bar" 
4  y="456"> 
5 <c xmlns:x="baz"> 
6 <x:d xmlns=""> 
7  <e xmlns:y="asdf"/> 
8 </x:d> 
9 </c> 
10 <f xmlns:x="bar"/> 
11 </b> 
12 </a> 

對於線1-7和10,該命名空間URI確實元素或屬性在該行聲明有?某種解釋將非常感謝。命名空間

http://www.jclark.com/xml/xmlns.htm

回答

1

這是一個快速總結。

  • 當您使用xmlns不宣前綴,它宣稱所有元素在該範圍內(該元素繼承命名空間,你宣佈它和它所包含的所有前綴的元素,直到另一個xmlns用不同的值被聲明)。

  • 屬性不會繼承名稱空間。他們必須使用前綴進行限定。

  • 當您使用xmlns:prefix,它聲明的所有前綴元素在該範圍內(在您宣佈它和它所包含的所有前綴的元素的前綴元素繼承的命名空間,直到另一個xmlns:prefix用不同的值聲明)。如果聲明它的元素沒有相同的前綴或沒有前綴,則它不會成爲命名空間的一部分。基於

上,在你的榜樣:

  • ae不屬於任何名稱空間。 a,因爲它沒有xmlns聲明,也沒有父母。 e,因爲它的父項具有xmlns=''屬性,它使默認名稱空間爲空。

  • b,cf屬於bar命名空間。 b,因爲它將默認名稱空間聲明爲xmlns='bar'並且沒有前綴。 cf,因爲它們沒有前綴並從其父項繼承默認名稱空間。

  • d屬於因爲x前綴,其中明確限定它的baz命名空間,但其不合格的內容(e)現在屬於無因xmlns=''命名空間。

  • e聲明瞭asdf名稱空間並將其分配給y前綴,但沒有元素或屬性使用它。

  • f redeclares的x atrribute與不同的命名空間bar如果有任何(或f如果其x被前綴),這將被應用到的任何f前綴子。

  • foo屬性在a屬於foo命名空間,因爲它是由x前綴合格。

  • b中的y屬性屬於無名稱空間,因爲它沒有前綴。

查看@MichaelKay的其他答案,鏈接到一個非常好的教程的主題。

2

James Clark的解釋仍然不比任何人差。如果您在閱讀完畢後仍然有疑問,請告訴我們您不瞭解哪些部分。