Xml檔案格式(Extensible Markup Language)被稱之為可擴展標記語言,是一種用於組織和儲存資料的文件格式。這種標記語言常用於定義和儲存結構化資料,其目的是描述資料的結構和內容,而不是呈現資料的外觀。也因為XML是獨立於操作系統和軟體的格式,所以可以跨平台的在不同系統或應用之間交換資料。因此,許多應用程式都會使用XML來保存使用者的設定與資料的分享。
就像HTML般,XML也是使用標籤(tags)來組織資料,每個標籤都有一個起始標籤和結束標籤,例如:<title>這是標題</title>。而與HTML不同之處在於XML允許使用者定義自己的標籤以描述特定應用的資料。資料常以層級樹狀結構來表示,以方便表達複雜的關係。以下就是一個簡單的XML檔案格式,描述著一筆資料記錄:(實作檔案 data.zip 下載)

是不是真的很像HTML的標籤特性呢?若是有2筆資料記錄,便是諸如以下的呈現:

即便您是第一次接觸到XML檔案格式,只要對HTML網頁的檔案格式有一丁點的認知,相信不用多作解釋,您也可以看出XML表達資料的端倪,盡是一些標籤(tag)包裹著資料內容。而在使用Power Query匯入這樣的檔案時,便可在導覽視窗的階段就看到一筆筆資料記錄的預覽。出現的結果畫面通常也就表示XML檔案結構已被解析,顯示了相關的欄位和資料。
關於XML的結構定義檔XSD
但是,在XML世界裡面除了XML檔案內容就是資料的實質內容,還有另一個被稱之為XSD的檔案,這是XML Schema Definition 的縮寫,專門用來定義XML文件結構和規範。譬如:在XSD裡定義了XML文件中允許使用的元素和屬性、資料類型、順序等等,可以規定某個元素是必需的,或者必須是特定類型(如日期或數字)。在資料驗證上,透過XSD可以幫助驗證XML文件是否符合預定的結構和規範,以確保資料的正確性和一致性。簡言之,XSD文件就是用來描述某一XML文件的「規則」,以確保該 XML 的內容和格式是有效的並符合設計的要求。XSD文件的內容大致如下所示:

這回就比較不容易看得懂了吧!其實對於一般使用者而言,是否了解這個檔案並不是最重要,因為製作XSD檔案大都是資訊部門、程式設計師等人員的事,公司裡大多數電腦使用者並不需要撰寫它甚至看懂它,但您可以瞭解這個檔案的存在意義與影響。因為,在處理XML檔案的過程中,這些XML、XSD檔案都不是我們做的,常常是別其他單位分享或系統下載下來的。
基本上,如果使用XML檔案只是為了暫時存放資料,或者使用的應用程式並不需要強制資料驗證,那就不一定要使用XSD檔案,直接存取XML就可以。我們可以根據以下的情境來理解。
- 不需要XSD的情況:
- 若不使用XSD便意味著XML不會受到太多約束,因此就可以根據需求而靈活修改資料內容。
- 如果XML是運用於臨時交換資料,結構簡單且供給與接收雙方都已協商好格式,那麼並不需要XSD。
- 在系統開發初期階段,可能尚未確定XML結構,此時便可以先省略XSD檔案的可量。
- 需要 XSD 的情況:
- 若XML檔案會運用於不同系統之間的資料交換,有了XSD便能夠確保傳輸的資料結構正確無誤,即可減少錯誤和誤解的風險。
- 若XML包含多層級的結構或大量數據,使用XSD定義資料結構,面對複雜的資料結構將會更清晰、可容易管理。例如:規劃日期、數值等資料型態。
- 在許多行業或敏感的機構,諸如金融、醫療或政府單位,其資料交換需要遵循嚴格的規範和標準,因此,對他們而言XSD是必要的。
綜觀,當XML檔案是屬於簡單或臨時用途,或者期望資料檔案傳遞能夠更靈活也更容易傳遞與存取,乃至在該開發系統初期的實驗階段,XSD檔案並沒有那麼的必要,甚至並不需要XSD檔案。不過,如果XML需要在多個系統中共用與分享,也包含了複雜的資料結構或有資料標準化的需求,或者需要在不同的應用程式中使用,對於資料數據的驗證也十分講究,那麼XSD檔案就是必要的了。至於這個XSD檔案會在哪裡呢?它可以是一個獨立的檔案,也可以是一個內嵌式的檔案,這完全取決於系統設計時的應用場景。譬如:若規劃的XML只是在單一應用程式中使用,或者希望XML自帶驗證規則,則常常以內嵌Schema(XML Schema Definition, XSD)定義,讓XML文件本身也包含資料結構的參照,例如:

如果是獨立的XSD檔案可以確保資料一致性,也容易維護與更新資料結構,並允許XML編輯器和系統進行自動驗證。因為,XSD檔案可以被多個XML文件重複使用,非常適合多個文件遵循相同結構的情境。當需要修改結構時,只需更新XSD檔案,而不影響XML文件的內容,在團隊或跨系統協作中,有助於保持XML結構的一致。這時候,在XML檔案裡通常一開頭會有類似以下的語句:
<?xml version="1.0" encoding="UTF-8"?>
<加班清冊 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="overtime.xsd">
在這種方式中,XML文件內部引用了指定的XSD檔案,譬如上述語句裡的overtime.xsd,這樣即使XSD是外部檔案,XML解析器仍可以知道應用哪個Schema來驗證結構。至於我們接受到的XML檔案到底需不需要XSD檔案,常常也不是您我能決定的。不過請放心,當您使用Power Query進行XML檔案的資料匯入時,Power Query就是最厲害的XML解析器,一切就交給Power Query來判斷囉!
前一篇:<<學習XML檔案格式與實作系列:(2/6) 為什麼我匯入的XML不一樣?>>
下一篇:<<學習XML檔案格式與實作系列:(4/6) 解析XML檔案開頭的定義>>