XML 命名空間
XML 命名空間提供避免元素命名衝突的方法。
命名衝突
在 XML 中,元素名稱是由開發者定義的,當兩個不同的文件使用相同的元素名稱時,就會發生命名衝突。
這個 XML 攜帶 HTML 表格的資訊:
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
這個XML 文件攜帶有關桌子的資訊(一件家具):
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
假如這兩個XML 文件被一起使用,由於兩個文檔都包含具有不同內容和定義的< ;table> 元素,就會發生命名衝突。
XML 解析器無法確定如何處理這類衝突。
使用前綴來避免命名衝突
在 XML 中的命名衝突可以透過使用名稱前綴從而容易地避免。
該 XML 攜帶某個 HTML 表格和某件家具的資訊:
<h:tr>
# <h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
#<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
在上面的實例中,不會有衝突,因為兩個 <table> 元素有不同的名稱。
XML 命名空間 - xmlns 屬性
當在 XML 中使用前綴時,一個所謂的用於前綴的命名空間必須被定義。
命名空間是在元素的開始標籤的 xmlns 屬性中定義的。
命名空間宣告的語法如下。 xmlns:前綴="URI"。
# <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>
<f:table xmlns:f="http://www.w3cschool.cc/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
在上面的實例中,<table> 標籤的 xmlns 屬性定義了 h: 和 f: 前綴的合格命名空間。
當命名空間被定義在元素的開始標籤中時,所有具有相同前綴的子元素都會與同一個命名空間相關聯。
命名空間,可以在他們被使用的元素中或在XML 根元素中宣告:
xmlns:f="http://www.w3cschool.cc/furniture">
<h:table>
# <h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
註解:命名空間 URI 不會被解析器用來尋找資訊。
其目的是賦予命名空間一個惟一的名稱。不過,許多公司常常會作為指標來使用命名空間指向實際存在的網頁,而這個網頁包含關於命名空間的資訊。
請上 http://www.w3.org/TR/html4/。
統一資源識別碼(URI,全名為 Uniform Resource Identifier)
統一資源識別碼(URI)是一串可以標識網際網路資源的字元。
最常用的 URI 是用來識別網域名稱位址的統一資源定位器(URL)。另一個不那麼常用的 URI 是統一資源命名(URN)。
在我們的實例中,我們只使用 URL。
預設的命名空間
為元素定義預設的命名空間可以讓我們省去在所有的子元素中使用前綴的工作。它的語法如下:
#這個XML 攜帶HTML 表格的資訊:
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
這個XML帶著家具的資訊:
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
實際使用中的命名空間
XSLT 是用來將 XML 文件轉換為其他格式的 XML 語言,例如 HTML。
在下面的 XSLT 文件中,您可以看到,大多數的標籤是 HTML 標籤。
非HTML 的標籤都有前綴xsl,並由此命名空間標識:xmlns:xsl="http://www.w3.org/1999/XSL/Transform":
# <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr>
<th align="left">Title</th>
<th align="left">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>
如果您想要學習有關 XSLT 的知識,請在我們的首頁尋找 XSLT 教學。