2013-06-19 154 views
1

所以我一直在閱讀關於w3schools上的命名空間,我知道它們是唯一標識一個元素的。但是,如果你必須在它們旁邊有前綴,命名空間有什麼意義。你總是需要有名稱空間的前綴?如果不是,你總是需要有名稱空間前綴?如果是這樣,爲什XML名稱空間,它們爲什麼需要前綴?

例如:

<root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture"> 

<h:table> 
    <h:tr> 
    <h:td>Apples</h:td> 
    <h:td>Bananas</h:td> 
</h:tr> 

<f:name>African Coffee Table</f:name> 
    <f:width>80</f:width> 
    <f:length>120</f:length> 
    </f:table> 
</root> 

不f和h唯一地識別不同的元件類型?

感謝您的幫助。在理解命名空間存在的原因時,我真的不知所措。

回答

1

爲什麼?

與其他語言一樣,命名空間允許您對全局命名空間進行整理。這允許多個元素或屬性具有相同的名稱,只要它位於不同的名稱空間中。

您是否總是需要限定元素的名稱空間?

如果你有一個包含大部分元素(如)「顯性」的命名空間,那麼你可以在命名空間更改默認這一主導命名空間,就像這樣:

<z:root xmlns="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture" xmlns:z=""> 
<table> 
    <tr> 
    <td>Apples</td> 
    <td>Bananas</td> 
</tr> 

<f:name>African Coffee Table</f:name> 
    <f:width>80</f:width> 
    <f:length>120</f:length> 
    </f:table> 
</z:root> 

需要注意的是,我們需要將根移回全局名稱空間以保持其與原始文檔等效。

+0

但是,f或h不允許多個元素具有相同的名稱?如果f和h已經區分了元素,定義一個名稱有什麼意義? –

+0

我不知道我理解你。 'f'和'h'只是命名空間的別名,否則你必須顯式限定每個元素,例如'

'這將是笨拙的。 – StuartLC

+0

正確的做法是,使用_ ** URI ** _創建一個完全唯一的名稱空間,以避免與命名命名空間衝突,當您指向名稱空間的前綴可能不是唯一的,這使得您無論如何都會遇到麻煩?我試圖理解使得命名空間必須是唯一的w3基本原理,因爲當指向第一個命名空間的前綴可能發生衝突時,要求它們是URI。無論如何,你會遇到問題。 –

相關問題