XML 名稱空間
XML 名稱空間提供了一種避免元素名稱衝突的方法。
名稱衝突
在 XML 中,元素名稱由開發者定義。當嘗試混合來自不同 XML 應用程式的 XML 文件時,這經常會導致衝突。
此 XML 包含 HTML 表格資訊
<table>
<tr>
<td>蘋果</td>
<td>香蕉</td>
</tr>
</table>
此 XML 包含有關桌子(一件傢俱)的資訊
<table>
<name>非洲咖啡桌</name>
<width>80</width>
<length>120</length>
</table>
如果將這些 XML 片段合併在一起,就會發生名稱衝突。兩者都包含一個 <table> 元素,但這些元素具有不同的內容和含義。
使用者或 XML 應用程式將不知道如何處理這些差異。
使用字首解決名稱衝突
透過使用名稱字首,可以輕鬆避免 XML 中的名稱衝突。
此 XML 包含有關 HTML 表格和一件傢俱的資訊
<h:table>
<h:tr>
<h:td>蘋果</h:td>
<h:td>香蕉</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>非洲咖啡桌</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
在上面的示例中,不會發生衝突,因為兩個 <table> 元素具有不同的名稱。
XML 名稱空間 - xmlns 屬性
在使用 XML 中的字首時,必須為該字首定義一個名稱空間。
名稱空間可以透過元素開始標籤中的 xmlns 屬性來定義。
名稱空間宣告具有以下語法:xmlns:prefix="URI"。
<root>
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>蘋果</h:td>
<h:td>香蕉</h:td>
</h:tr>
</h:table>
<f:table xmlns:f="https://w3schools.tw/furniture">
<f:name>非洲咖啡桌</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
在上面的例子中
第一個 <table> 元素中的 xmlns 屬性為 h: 字首分配了一個限定名稱空間。
第二個 <table> 元素中的 xmlns 屬性為 f: 字首分配了一個限定名稱空間。
為元素定義名稱空間後,具有相同字首的所有子元素都與同一名稱空間關聯。
名稱空間也可以在 XML 根元素中宣告
<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="https://w3schools.tw/furniture">
<h:table>
<h:tr>
<h:td>蘋果</h:td>
<h:td>香蕉</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>非洲咖啡桌</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
注意:解析器不會使用名稱空間 URI 來查詢資訊。
使用 URI 的目的是為名稱空間提供一個唯一的名稱。
然而,公司經常使用名稱空間作為指向包含名稱空間資訊的網頁的指標。
統一資源識別符號 (URI)
統一資源識別符號 (URI) 是一個標識網際網路資源的字元字串。
最常見的 URI 是統一資源定位符 (URL),它標識網際網路域名地址。另一種不太常見的 URI 型別是統一資源名稱 (URN)。
預設名稱空間
為元素定義預設名稱空間可以避免我們在所有子元素中使用字首。其語法如下:
xmlns="namespaceURI"
此 XML 包含 HTML 表格資訊
<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>蘋果</td>
<td>香蕉</td>
</tr>
</table>
此 XML 包含一件傢俱的資訊
<table xmlns="https://w3schools.tw/furniture">
<name>非洲咖啡桌</name>
<width>80</width>
<length>120</length>
</table>
實際應用中的名稱空間
XSLT 是一種可用於將 XML 文件轉換為其他格式的語言。
下面的 XML 文件用於將 XML 轉換為 HTML。
名稱空間 "http://www.w3.org/1999/XSL/Transform" 標識 HTML 文件中的 XSLT 元素。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>我的 CD 收藏</h2>
<table border="1">
<tr>
<th style="text-align:left">標題</th>
<th style="text-align:left">藝術家</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 教程。