xmlns:XML命名空間

以下轉載自:
http://hi.baidu.com/tianhesj/blog/item/0dd9718d32be4011b21bbacc.html

Namespaces翻譯爲命名空間。命名空間有什麼作用呢?當我們在一個XML文檔中使用他人的或者多個DTD文件,就會出現這樣的矛盾:因爲XML中標識都是自己創建的,在不同的DTD文件中,標識名可能相同但表示的含義不同,這就可能引起數據混亂。
比如在一個文檔<table>wood table</table>中<table>表示桌子,
而在另一個文檔<table>namelist</table>中<table>表示表格。如果我需要同時處理這兩個文檔,就會發生名字衝突。
瞭解決這個問題,我們引進了namespaces這個概念。namespaces通過給標識名稱加一個網址(URL)定位的方法來區別這些名稱相同的標識。
Namespaces同樣需要在XML文檔的開頭部分聲明,聲明的語法如下:
<document xmlns:yourname='URL'>
其中yourname是由你定義的namespaces的名稱,URL就是名字空間的網址。
假設上面的"桌子<table>"文檔來自http://www.zhuozi.com,我們就可以聲明爲
<document xmlns:zhuozi='http://www.zhuozi.com'>;
然後在後面的標識中使用定義好的名字空間:
<zhuozi:table>wood table</table>
這樣就將這兩個<table>區分開來。注意的是:設置URL並不是說這個標識真的要到那個網址去讀取,僅僅作爲一種區別的標誌而已。


命名衝突
因爲XML文檔中使用的元素不是固定的,那麼兩個不同的XML文檔使用同一個名字來描述不同類型的元素的情況就可能發生。而這種情況又往往會導致命名衝突。請看下面兩個例子

這個 XML 文檔在table元素中攜帶了水果的信息:
  1. <table>
  2. <tr>
  3. <td>Apples</td>
  4. <td>Bananas</td>
  5. </tr>
  6. </table>
這個 XML 文檔在table元素中攜帶了桌子的信息(傢俱,不能吃的哦):
  1. <table>
  2. <name>African Coffee Table</name>
  3. <width>80</width>
  4. <length>120</length>
  5. </table>

如果上面兩個XML文檔片斷碰巧在一起使用的話,那麼將會出現命名衝突的情況。因爲這兩個片斷都包含了<table>元素,而這兩個table元素的定義與所包含的內容又各不相同。


--------------------------------------------------------------------------------

使用前綴解決命名衝突問題
下面的XML文檔在table元素中攜帶了信息:
  1. <h:table>
  2. <h:tr>
  3. <h:td>Apples</h:td>
  4. <h:td>Bananas</h:td>
  5. </h:tr>
  6. </h:table>

下面的XML文檔攜帶了傢俱table的信息:
  1. <f:table>
  2. <f:name>African Coffee Table</f:name>
  3. <f:width>80</f:width>
  4. <f:length>120</f:length>
  5. </f:table>

現在已經沒有元素命名衝突的問題了,因爲這兩個文檔對各自的table元素使用了不同的前綴,table元素在兩個文檔中分別是(<h:table> 和<f:table>)。

通過使用前綴,我們創建了兩個不同的table元素。


--------------------------------------------------------------------------------

使用命名空間
下面的XML文檔在table元素中攜帶了信息:
  1. <h:table xmlns:h="http://www.w3.org/TR/html4/">
  2. <h:tr>
  3. <h:td>Apples</h:td>
  4. <h:td>Bananas</h:td>
  5. </h:tr>
  6. </h:table>

下面的XML文檔攜帶了傢俱table的信息:
  1. <f:table xmlns:f="http://www.w3schools.com/furniture">
  2. <f:name>African Coffee Table</f:name>
  3. <f:width>80</f:width>
  4. <f:length>120</f:length>
  5. </f:table>

在上面兩個例子中除了使用前綴外,兩個table元素都使用了xmlns屬性,使元素和不同的命名空間關聯到一起。


--------------------------------------------------------------------------------

命名空間屬性
命名空間屬性一般放置在元素的開始標記處,其使用語法如下所示:

xmlns:namespace-prefix="namespace"

在上面的例子中,命名空間定義了一個Internet 地址:

xmlns:f="http://www.w3schools.com/furniture"

W3C 命名規範聲明命名空間本身就是一個統一資源標示符,Uniform Resource Identifier (URI)。

當我們在元素的開始標記處使用命名空間時,該元素所有的子元素都將通過一個前綴與同一個命名空間相互關聯。

注意:用來標識命名空間的網絡地址並不被XML解析器調用,XML解析器不需要從這個網絡地址中查找信息,該網絡地址的作用僅僅是給命名空間一個唯一的名字,因此這個網絡地址也可以是虛擬的,然而又很多公司經常把這個網絡地址值象一個真實的Web頁面,這個地址包含了關於當前命名空間更詳細的信息。
可以訪問http://www.w3.org/TR/html4/.


--------------------------------------------------------------------------------

統一資源標識符
通用資源標識符(A Uniform Resource Identifier (URI))是一個標識網絡資源的字符串。最普通的URI應該是統一資源定位符Uniform Resource Locator (URL)。URL用於標識網絡主機的地址。另一方面,另一個不常用的URI是通用資源名字Universal Resource Name (URN)。在我們的例子中,一般使用的是URLs。

既然前面的例子使用的URL地址來標識命名空間,我們可以確信這個命名空間是唯一的。


--------------------------------------------------------------------------------

默認的命名空間
定義一個默認的XML命名空間使得我們在子元素的開始標記中不需要使用前綴。他的語法如下所示:

<element xmlns="namespace">

下面的XML文檔在table元素中包含了水果的信息:
  1. <table xmlns="http://www.w3.org/TR/html4/">
  2. <tr>
  3. <td>Apples</td>
  4. <td>Bananas</td>
  5. </tr>
  6. </table>

下面的XML文檔包含了傢俱table的信息:
  1. <table xmlns="http://www.w3schools.com/furniture">
  2. <name>African Coffee Table</name>
  3. <width>80</width>
  4. <length>120</length>
  5. </table>

--------------------------------------------------------------------------------

使用命名空間
檔開始使用XSL的時候,就會發現命名空間使用的是如此頻繁。XSL樣式單主要用於將XML文檔轉換成類似於HTML文件的格式。

如果看一下下面的XSL文檔,就會發現有很多標記都是HTML標記。那些標記並不是HTML標記,是加了前綴的XSL,這個XSL前綴由命名空間"http://www.w3.org/TR/xsl"所標識:
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/xsl">
  3. <xsl:template match="/">
  4. <html>
  5. <body>
  6. <table border="2" bgcolor="yellow">
  7. <tr>
  8. <th>Title</th>
  9. <th>Artist</th>
  10. </tr>
  11. <xsl:for-each select="CATALOG/CD">
  12. <tr>
  13. <td><xsl:value-of select="TITLE"/></td>
  14. <td><xsl:value-of select="ARTIST"/></td>
  15. </tr>
  16. </xsl:for-each>
  17. </table>
  18. </body>
  19. </html>
  20. </xsl:template>
  21. </xsl:stylesheet>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章