"xmlns"是XHTML namespace的縮寫,叫作"名字空間"聲明。名字空間是什麼做用呢?個人理解是:html
因爲xml容許你本身定義本身的標識,你定義的標識和其餘人定義的標識有可能相同,但表示不一樣的意義。當文件交換或者共享的時候就容易產生錯誤。爲了不這種錯誤發生,XML採用名字空間聲明,容許你經過一個網址指向來識別你的標識。網絡
好比在一個文檔<table>wood table</table>中<table>表示桌子,而在另外一個文檔<table>namelist</table>中<table>表示表格。若是我須要同時處理這兩個文檔,就會發生名字衝突。爲了解決這個問題,咱們引進了namespaces這個概念。namespaces經過給標識名稱加一個網址(URL)定位的方法來區別這些名稱相同的標識。
Namespaces一樣須要在XML文檔的開頭部分聲明,聲明的語法以下:
<document xmlns:yourname='URL'>spa
其中yourname是由你定義的namespaces的名稱,URL就是名字空間的網址。
假設上面的"桌子<table>"文檔來自http://www.zhuozi.com/,咱們就能夠聲明爲
<document xmlns:zhuozi='http://www.zhuozi.com'>;.net
而後在後面的標識中使用定義好的名字空間:
<zhuozi:table>wood table</table>
這樣就將這兩個<table>區分開來。注意的是:設置URL並非說這個標識真的要到那個網址去讀取,僅僅做爲一種區別的標誌而已。orm
命名衝突請看下面兩個例子xml
這個 XML 文檔在table元素中攜帶了水果的信息:htm
<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>blog
這個 XML 文檔在table元素中攜帶了桌子的信息(傢俱,不能吃的哦):element
<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>資源
若是上面兩個XML文檔片段碰巧在一塊兒使用的話,那麼將會出現命名衝突的狀況。由於這兩個片段都包含了<table>元素,而這兩個table元素的定義與所包含的內容又各不相同。
--------------------------------------------------------------------------------
使用前綴解決命名衝突問題
下面的XML文檔在table元素中攜帶了信息:
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
下面的XML文檔攜帶了傢俱table的信息:
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
如今已經沒有元素命名衝突的問題了,由於這兩個文檔對各自的table元素使用了不一樣的前綴,table元素在兩個文檔中分別是(<h:table> 和<f:table>)。
經過使用前綴,咱們建立了兩個不一樣的table元素。
--------------------------------------------------------------------------------
使用命名空間
下面的XML文檔在table元素中攜帶了信息:
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
下面的XML文檔攜帶了傢俱table的信息:
<f:table xmlns:f="http://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</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元素中包含了水果的信息:
<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
下面的XML文檔包含了傢俱table的信息:
<table xmlns="http://www.w3schools.com/furniture">
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
--------------------------------------------------------------------------------
使用命名空間
檔開始使用XSL的時候,就會發現命名空間使用的是如此頻繁。XSL樣式單主要用於將XML文檔轉換成相似於HTML文件的格式。
若是看一下下面的XSL文檔,就會發現有不少標記都是HTML標記。那些標記並非HTML標記,是加了前綴的XSL,這個XSL前綴由命名空間"http://www.w3.org/TR/xsl"所標識:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/xsl">
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="CATALOG/CD">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="ARTIST"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/carefree31441/archive/2008/11/06/3235849.aspx