最後更新日期:2025年3月25日

什麼是XML?
XML(可擴展標記語言)是一種用於儲存、傳輸和重構數據的標記語言和文件格式。它提供了一種結構化的編碼信息方法,使其既可讀於人又可讀於機器。
XML的關鍵特性
1. 由開放標準定義
- 由萬維網協會(W3C)於1998年根據XML 1.0規範建立。
 - 遵循嚴格的規則以確保數據結構化且易於解讀。
 
2. 設計目標
- XML的設計考慮到簡單性、通用性和可用性,可在不同平台上使用。
 - 使用基於文本的格式,易於閱讀和編輯。
 
3. Unicode支持
- XML支持Unicode,允許存儲和處理多語言文本。
 
4. 多功能性
- 最初為文檔創建,現已廣泛用於各領域的數據表示,包括網絡服務、API 和配置文件。
 
5. 架構和API
- XML結構可以使用文檔類型定義(DTD)、XML結構(XSD)或Relax NG定義。
 - 各種API,如DOM(文檔對象模型)和SAX(簡單XML API),使XML處理成為可能。
 
6. XML的常見用途
- 不同系統之間的數據交換(例如,網絡服務,API)。
 - 軟件應用程序中的配置文件。
 - 存儲結構化信息(例如,RSS提要,SVG圖形,類似DOCX的文檔格式)。
 - 網頁開發(例如,XHTML,SOAP,基於AJAX的應用程序)。
 
XML概述
1. XML的主要用途:序列化
XML中的序列化意味著:
- 以結構化格式存儲數據。
 - 在不同系統之間傳輸數據。
 - 重建可用形式的數據。
 
當兩個系統需要交換信息時,XML提供了一個標準化的文件格式以實現互操作性。它充當結構化數據交換的**“通用語言”**。
2. XML作為標記語言
XML是一種標記語言,意思是它:
- 用標籤標記數據以清晰結構。
 - 層次結構化地組織信息。
 - 用元數據分類數據。
 
示例:
<book>
    <title>XML Basics</title>
    <author>John Doe</author>
</book>
在此,<book>、<title>和<author>是定義數據元素的標籤。
3. XML結構(XSD)和驗證
一個**XML結構(XSD)**定義了XML文檔的結構規則。
XML文檔可以是:
- 格式良好的 → 遵循基本語法規則(正確嵌套,正確閉合標籤)。
 - 有效的 → 符合結構規則(必需元素,正確數據類型)。
 
XSD規則示例:
<xs:element name="title" type="xs:string"/>
這確保了<title>必須包含一個字符串值。
4. XML媒體類型(RFC 7303)
IETF RFC 7303 定義了用於數據傳輸的XML媒體類型:
- application/xml → 標準XML數據。
 - application/xml-external-parsed-entity → 解析的XML實體。
 - application/xml-dtd → XML DTD文檔。
 
對於基於XML的格式,使用**+xml**後綴(例如,image/svg+xml用於SVG圖像)。
5. 網絡應用中的XML(RFC 3470 / IETF BCP 70)
IETF BCP 70(RFC 3470)概述了基于網絡的應用程序中XML使用的最佳實踐,以確保系統之間的數據互操作性。
1. XML的應用
XML是一種靈活的標記語言,旨在通過互聯網進行數據交換。其語法影響了許多文檔格式和通信協議,使其成為許多行業的基礎技術。
常見的XML格式:
- 網路訂閱源: RSS, Atom
 - 辦公文檔: Office Open XML, OpenDocument
 - 圖形和3D模型: SVG, COLLADA
 - 網頁技術: XHTML
 - 數據交換協議: SOAP, XMPP
 - AJAX: 使用XML進行異步數據交換
 
使用XML的行業標準:
- 醫療: HL7(Health Level 7)
 - 旅遊行業: OpenTravel Alliance
 - 金融: FpML(金融產品標記語言)
 - 房地產與抵押貸款: MISMO
 - 政府數據交換: 國家信息交換模型
 
XML在科學中的應用:
在氣象學中,XML用於遵循IWXXM標準的運營天氣數據表示。類似地,達爾文信息類型架構(DITA) 是出版業廣泛使用的XML標準。
2. XML中的關鍵術語
理解XML中的核心術語對於有效地處理XML文檔至關重要。
字符
一個XML文檔是一個Unicode字符序列。XML 1.1允許幾乎所有的Unicode字符,除了Null字符 (U+0000),這是嚴格禁用的。
處理器和應用
- XML處理器(或解析器) 讀取並分析XML標記。
 - 應用程序 從處理器接收結構化數據並對其進行操作。
 
標記和內容
XML將字符分為標記和內容:
- 標記: 包括元素、屬性和實體(例如,
<tag>和&)。 - 內容: 元素內的實際數據。
 - CDATA節: 允許文字不被解析為標記,封閉在 
<![CDATA[ ... ]]>內。 
標籤和元素
- 標籤: 用 
< >括起的標記構造。<section>(開始標籤)</section>(結束標籤)<line-break />(空標籤)
 - 元素: 由標籤定義的邏輯組件。
- 例如:
<greeting>Hello, world!</greeting> 
 - 例如:
 
屬性
屬性使用名稱-值對為元素提供元數據。示例:
<img src="image.jpg" alt="描述" />
src="image.jpg"和alt="描述"是<img>元素的屬性。
3. XML中的字符和轉義
XML中有效的Unicode字符
XML文檔僅允許特定的Unicode字符以確保正確解析。
XML 1.0中允許的字符:
- 控制字符:
U+0009(Tab)U+000A(換行符)U+000D(回車符)
 - 文本字符:
U+0020–U+D7FFU+E000–U+FFFDU+10000–U+10FFFF
 
XML 1.1的增強:
- 允許所有U+0001–U+001F控制字符,但需要將其轉義。
 - U+0000(空字符)仍然禁止。
 
4. XML中的編碼
常見的XML編碼:
XML支持基於Unicode的編碼,包括:
- UTF-8(推薦默認)
 - UTF-16(所有XML解析器必須支持)
 - ASCII,ISO-8859-X(舊有編碼)
 
XML中的編碼聲明:
XML頭部可以指定編碼:
<?xml version="1.0" encoding="UTF-8"?>
- 如果未指定編碼,默認為UTF-8。
 - **UTF-16需要BOM(字節順序標記)**以正確檢測。
 
5. 在XML中轉義特殊字符
由於XML語法保留了某些字符,因此它們必須被轉義以避免沖突。
預定義的XML實體:
| 字符 | 轉義形式 | 示例 | 
|---|---|---|
<(小於) | < | I <3 XML → I <3 XML | 
>(大於) | > | x > y → x > y | 
&(與號) | & | AT&T → AT&T | 
'(單引號) | ' | "O'Reilly" → O’Reilly | 
"(雙引號) | " | She said "hello" → She said “hello” | 
數字符引用:
對於不能鍵入的特殊字符,使用數字引用:
- 十進制:
中 <!-- 漢字 "中" --> - 十六進制:
中 <!-- 漢字 "中" --> - 示例:顯示為: I <3 Jörg
<message>I <3 Jörg</message> 
處理二進制數據:
XML 不支持原始二進制數據。需要使用Base64編碼。
6. XML中的註釋
XML註釋語法:
<!-- 這是一個有效的XML註釋 -->
XML註釋的規則:
- 不能出現在XML聲明之前。
 - 註釋中不能包含 
--(雙連字符)。 - 實體引用在註釋中被忽略。
 
示例:
<!-- 這是包含 < 和 & 符號的註釋 -->
結論
XML是一種結構化數據交換的基本技術,推動網絡提要、辦公文檔、科學數據和行業標準的發展。理解關鍵的XML術語、編碼規則和轉義機制可以確保形成良好的XML文檔,在不同系統中正常運作。
遵循字符編碼和轉義的最佳實踐,開發者可以避免解析錯誤並確保與基於XML的應用程序的兼容性。