學習XML檔案格式與實作系列:(4/6) 解析XML檔案開頭的定義

既然是一種標準化的資料檔案格式,嚴謹一點的XML檔案其開頭的定義至關重要,它直接影響數據的準確性與互操作性。不僅確保資料在不同系統間的一致性,也增強了檔案的可讀性和穩定性。

有些不屬於單純資料內容的XML檔案,常常一開頭會有定義XML版本、編碼方式、命名空間,以及指定資料結構驗證的來源(XSD文件)的描述,如下所示的範例:(實作檔案 data.zip 下載)

  • <?xml version="1.0" encoding="UTF-8"?>
  • <加班清冊 xmlns="http://everflow.com/fee/加班清冊" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://everflow.com/fee/加班清冊加班清冊.xsd" generated="2025-02-10T03:33:05">

這兩句是XML文件開頭的重要部分,定義了該XML的版本、編碼方式以及命名空間等資訊,讓解析器或其他應用程式可以正確解讀和處理這個XML檔案。以下是逐一解析紹上述範例其作用和含義:

第1句:

  • <?xml version="1.0" encoding="UTF-8"?>
    這一行是XML文件的聲明(Declaration),用於定義XML文件的基本資訊。其中,<?xml ... ?>是XML聲明的開頭和結尾標記。version="1.0" 則是表示這份XML文件的版本編號是1.0,這是大多數XML文件的標準版本。而encoding="UTF-8" 則是定義了這份XML文件的字符編碼(Character Encoding)是支援多種語言(包括中文、英文、日文等)的通用字符編碼,有了這一行就可以告訴Power Query或其他XML解析器如何正確讀取和解析XML文件,也確保了文件中的字符(尤其是非英文字符)能夠正確顯示。若缺少此行XML文件聲明,Power Query可能會無法正確識別文件的版本或編碼,導致解析失敗或產生亂碼。所以,當您在Power Query中處理XML文件時,這一行是必要的,通常不需要手動修改它。

第2句:

  • <加班清冊 xmlns="http://everflow.com/fee/加班清冊" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://everflow.com/fee/加班清冊 加班清冊.xsd" generated="2025-02-10T03:33:05">
    這一行是XML檔案的根元素(Root Element) <加班清冊>的描述,所有其他元素都嵌套在這個元素之下。根元素的名稱可以是任意的,這裡使用<加班清冊>表示資料的根節點。常見一般的XML也會以<dataroot> 表達資料的根節點,在此定義了與文件結構相關的命名空間(Namespaces)和屬性(Attributes),也就是文件的背景資訊與結構設定。其中:
    • xmlns="http://everflow.com/fee/加班清冊"
      這是預設命名空間 (Default Namespace),用來定義 <加班清冊> 和其他元素的命名空間,其目的是區分不同來源或用途的XML元素和屬性,避免與其他XML檔案或命名空間中使用的相同元素名稱而發生衝突。至於URI說明http://everflow.com/fee/加班清冊 則是命名空間的唯一識別碼。此URI不一定是實際的網站地址,但它是一個標識符號,表示該命名空間的作用域或所有權。
    • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      這是一個XML Schema Instance命名空間,指定為前綴詞為xsi。xsi是XML Schema Instance的縮寫,可用於引用XML Schema的相關屬性,比如接下來的xsi:schemaLocation。而URI是W3C標準的命名空間,也是XML Schema標準的一部分,用於處理XML Schema的實例,這是固定不變的值。
    • xsi:schemaLocation="http://everflow.com/fee/加班清冊 加班清冊.xsd"
      這是用來指示文件資料要使用的XML Schema (XSD)檔案位置的實例屬性,專門用於驗證XML檔案的資料結構。其中http://everflow.com/fee/加班清冊,這是命名空間的URI,與 xmlns的值是一致的。也就是XSD檔案的位置,可以是一個相對路徑或絕對路徑,指向包含結構定義的外部文件。加班清冊.xsd是Schema檔案的名稱,定義了XML文件的結構和資料類型。若這個Schema檔案並沒有特定的命名空間,則常會以noNamespaceSchemaLocation表示。
    • generated="2025-02-10T03:33:05">
      這是一個額外的時間戳記屬性,用來標記XML文件生成的日期和時間。採用格式是ISO 8601 標準,2025-02-10 表示日期(年-月-日);T是日期與時間的分隔符號;03:33:05 表示時間(時:分:秒)。

這段開頭內容的主要功能是提供XML文件的技術基礎(版本與編碼),當Power Query讀取包含有這兩行描述的XML文件檔案時,就會並根據指定的結構驗證Schema檔(如果存在)來驗證XML檔案的資料結構。諸如定義命名空間以避免混淆,因為這會影響Power Query對元素和屬性的解析方式。最後來提供文件生成的時間戳記,可作為後續的追溯或版本管理依據。這些信息皆有助於正確解析和驗證XML資料,但一般使用者取得XML檔案時,並不一定會去細究該XLS檔案倒底有無結構定義的敘述,但請放心,這一切就交由Power Query自動判別囉。

前一篇:<<學習XML檔案格式與實作系列:(3/6) 認識XML檔案>>
下一篇:<<學習XML檔案格式與實作系列:(5/6) 實際匯入XML的情境>>