XML教學 | XML Namespaces
XML Namespaces
是什麼?
XML Namespaces
(命名空間)提供了一種避免元素名稱衝突的方法。
名稱衝突:在XML
中,元素名稱由開發人員定義。當試圖混合來自不同XML
應用程式的XML
檔時,這通常會導致衝突。
衝突範例:
如果將這兩個XML
片段加在一起,就會出現名稱衝突。
兩者都包含一個<table>
元素,但這些元素具有不同的內容和含義。
使用者或XML
應用程式將不知道如何處理這些差異。
- 此
XML
內有HTML
表格訊息。1
2
3
4
5
6<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table> - 此
XML
包含有關桌子(一件家具)的訊息。1
2
3
4
5<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
使用前綴解決名稱衝突
使用名稱前綴可以輕鬆避免XML
中的名稱衝突。
以下XML
使用前綴包含有關HTML
表格和一件家具的訊息。
1 | <root> |
注意到這邊並沒有定義「前綴」也就是命名空間的聲明,這樣直接使用瀏覽器開啟會有錯誤。
1 | This page contains the following errors: |
聲明和引用命名空間
在XML
中使用前綴時,必須為前綴定義命名空間。
命名空間可以由元素開始標記中的xmlns
屬性定義。
- 命名空間使用元素的屬性來聲明:
1
xmlns:{前綴}="{URI}"
- 範例:
1
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns
是使用專門用來聲明命名空間的保留字。xhtml
是命名空間的前綴。http://www.w3.org/1999/xhtml
(頁面存檔備份,存於網際網路檔案館),是命名空間的唯一標識符,是一個IRI
引用,但通常是一個統一資源標誌符(URI
)引用。
註:簡單來說,命名空間的聲明就是將一個前綴與一個
URI
關聯起來。
- 聲明的方式有兩種。
- 命名空間在
XML
各個元素中聲明:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<root>
<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="https://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root> - 命名空間在
XML
根元素中聲明:第一個1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="https://www.w3schools.com/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><table>
元素中的xmlns
屬性為h:
前綴提供了一個合格的命名空間。
第二個<table>
元素中的xmlns
屬性為f:
前綴提供了一個限定的命名空間。
當為元素定義命名空間時,具有相同前綴的所有子元素都與相同的命名空間相關聯。
- 命名空間在
注意:解析器不使用命名空間
URI
來查找訊息。使用URI
的目的是為命名空間提供唯一的名稱。但是,公司經常將命名空間用作指向包含命名空間訊息的網頁的指針。
預設命名空間
為一個元素定義一個預設命名空間可以避免在子元素中使用前綴。
語法:
1
xmlns="{URI}"
範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<root>
<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
<table xmlns="https://www.w3schools.com/furniture">
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
</root>
實際使用命名空間
- 講半天的「命名空間」,他到底會運用在哪?
XSLT
就有實際使用了。XSLT
是一種可用於將XML
文檔轉換為其他格式的語言。- 命名空間
"http://www.w3.org/1999/XSL/Transform"
標識HTML
檔中的XSLT
元素:
以下的
XSLT Code
的XML
檔,是用於將XML
轉換為HTML
的檔。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<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 style="text-align:left">Title</th>
<th style="text-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>他的行為流程如下:
範例執行效果:
https://www.w3schools.com/xml/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog
註:這邊不會特別介紹
XSLT
語法的使用和教學。
結語
此章節的教學重點是「Namespaces」,其它延伸提到的部份像是XSLT
在此不會深入做說明。
下一章節將會介紹XML XPath
的部份。
註:以上參考了
w3resource.com - XML Namespaces
w3resource.com - XSLT Introduction
維基百科-XML
維基百科-XSLT
Family with 220 icons by inipagi