什麼是 XML?
XML 是一種多功能的標記語言,用於構建和傳輸數據。它具有自定義標籤、層次結構和模式定義的特性。與 HTML 不同,XML 注重數據表示而非顯示。它被廣泛應用於各種應用,其中包括像 Logto 的 SAML 實現這樣的 SSO 配置。
可擴展標記語言 (XML) 使用標籤來指示數據文件中的文本應如何構建、存儲和傳輸。XML 被設計成可以被人類和機器閱讀,使其成為一個強大且高度可自定義的標記工具。
XML 於 1996 年由萬維網聯盟 (W3C) 創建。W3C 的目標是創建一種可以幫助定義文檔類型並提供創建自定義標籤能力的語言。這種標記語言類型允許在與另一系統分享為 XML 文件之前定義頁面上的數據應如何標識。只要兩個系統使用相同的 XML 語言(具有它們都能解釋的標籤),這兩個系統就能 "理解" XML 文件格式。當 XML 被正確部署時,這可確保任何數據文件能被存儲、傳輸,然後使用時,每次訪問時都能精確地再現相同的數據和結構。
XML 內容範例
XML 數據由數字文件中的文本組成。與 HTML 類似,你通過插入標籤來指示文本應如何被解釋,來創建所需的 XML 文件 "代碼" 。例如:
這個範例展示了三個用戶。XML 內容包括姓名、用戶名、電子郵件和用戶等級。
這創建了一個可以在身份提供者和資源提供者之間共享和讀取的 XML 文檔。
重要的是,上述例子展示了 XML 文檔的層次結構性質。例如:
- 第一行
<?xml version="1.0" encoding="UTF-8"?>
的內容是 XML 聲明,這指定了版本和編碼 - 在一個 XML 文檔中,必須有一個根元素,在這個例子中是
<users>
- 所有包含在根元素中的其他元素稱為 "子元素"
- 在上述例子中,有 3 個子元素,用
<user>
標籤標記 - 在
<user>
子元素中,還有若干其他子元素,如<name>
、<username>
、<email>
和<level>
- 在
<user>
標籤上,還有一個id
,這被稱為 XML 屬性。一個元素不能包含多個同名的屬性
使用的標籤顯示每種類型的數據是什麼,而純文本作為數據本身。另外,也要注意內容的縮排。這不是為了幫助系統處理 XML 文件,而是為了幫助人類更容易瀏覽 XML 文件及其層次順序,以發現並解決任何錯誤或遺漏。
什麼是 XML 模式?
模式充當 XML 文檔的 "定義"。這意味著它描述了 XML 文件結構的關鍵規則和限制,以及內容和數據類型的控制——控制它們在文檔中如何相互作用。這確保了 XML 的數據完整性始終受到保護,即使是在不同應用程序甚至系統之間處理時。
主要的兩種模式語言是文檔類型定義 (DTD) 和 XML 模式定義 (XSD)。XSD 是 XML 文檔中最常用的語言,因為它具有豐富的功能集、強大的數據類型能力等。
什麼是 XML 語法?
如果像 XSD 這樣的 XML 模式是關於 XML 文檔詳細規範以確保其有效性,那麼 XML 語法提供了一系列規則來管理和控制 XML 文件的整體結構。例如,XML 語法可以涵蓋文本內容,如自閉合元素(不需要額外內容的單件信息)或 XML 聲明(用於文檔開頭以描述關鍵信息,如字符編碼)等,以及文檔使用的 XML 版本。
XML vs HTML
如果你熟 悉 HTML,XML 文件運用標記的方式會很熟悉——但這兩種標記語言之間有一個關鍵區別——它們的用例和目的不同:
- HTML 是一種標記語言,用於幫助瀏覽器瞭解如何在屏幕上顯示內容
- XML 是一種標記語言,用於存儲、顯示和傳輸數據
除此之外,它們還有一些其他差異:
- 因為 HTML 用於為瀏覽器呈現頁面內容,所以其標籤類型是預定義的,而 XML 標籤可以根據實際情況定制
- HTML 通常是靜態的,因為它用於顯示內容;XML 是動態的,因為它用於傳輸數據
- HTML 不支持命名空間,而 XML 可以使用命名空間來區分可能有相同名稱但不同上下文的標籤,以避免混淆
在這個例子中:
tech:title
使用<http://www.example.com/tech>
作為命名空間,表示這個<title>
元素屬於tech
命名空間bio:author
使用<http://www.example.com/bio>
作為命名空間,表示這個<author>
元素屬於bio
命名空間
XML 在 Logto 中的應用方式
Logto 支持 SAML 協議用於 SSO。在配置 SSO 時,身份提供者提供一個 XML 格式的配置文件,其中包含了重要的配置如證書和單點登錄 URL。
在配置 SAML SSO 時,Logto 允許直接上傳從身份提供者獲得的 XML 配置文件,無需手動填寫每個配置項。