• 沒有找到結果。

第4章 系統說明與系統實作

4.1 系統說明

4.1.1 系統分析與功能

圖 4-1 為本驗證系統之 IDEF0 圖,輸入的物件為營建電子採購 XML 文件,系統 控制物件則為營建電子採購 Schema 標準,而控制人員則為執行驗證的人員,最後產 出的資訊為驗證訊息。

A0 營建電子採購 驗證程式

XML文件 驗證訊息

執行驗證人員 營建產業電子 採購Schema標 準

圖 4-1 驗證系統 IDEF 圖

本系統最主要的功能,是以所制定營建物料採購資訊交換 Schema 標準為規範,

透過 XML 技術的 DOM、Node 以及 ParseError 等物件,檢驗 XML 文件之內容與格式 是否與 Schema 標準相符

4.1.2 XML DOM 物件

文件物件模型(Document Object Model,DOM)是一種以程式設計方式進行讀取、

修改及操作 XML 文件。DOM 物件在對文件進行解讀時,會以階層結構的方式存於記 憶體中,通常稱此結構為 XML DOM Tree,如圖 4-2 所示。圖中 Document 為文件之 根元素,其底下之子元素則有 Document Element 以及 Element,Element 底下之子元素 則可為 Attr(屬性)、Text(文字)或 Element(元素)。MSXML(Microsoft XML Core Service,

XML 軟體套裝物件)就是利用 XML DOM 元件,將 XML 切割成一個個的節點,然後 再針對各節點的標籤做 Well-Formed 的檢測;如 XML 文件擁有所參照的 Schema 之文 件,會依據 Schema 的宣告與 XML DOM Tree 進行比對的動作,檢查是否符合所宣告 的 Schema。

D o c u m e n t

D o c u m e n t E l e m e n t

E l e m e n t

E l e m e n t A t t r

T e x t

E l e m e n t

T e x t

T e x t

圖 4-2 XML DOM Tree

圖 4-3 表示的為當使用 MSXML 做剖析器時,會先將 XML 文件轉換成 XML DOM Tree,由應用程式讀取 XML DOM Tree 中的資料,再透過應用程式介面(Application Program Interface,API)對 XML 文件進行修改的動作,也是於 XML DOM Tree 中的節 點執行編輯的動作。

圖 4-3 XML 與 API 關聯圖(MSXML4.0)

如在 VB6 中要宣告使用 XML DOM 時,首先必須要參照(Refrence)到 MSXML5.0 版本的物件,才可以使用其中之 DOM 物件。其宣告的語法如下:

此段語法為定義一參數 XMLDoc 為 XML DOM 5.0 版本的文件;系統本身會按照 此宣告的方式將 XML 文件轉換成 DOM 結構,之後再陸續執行相關操作 XML 內容的 動作。

Dim XMLDoc As DOMDocument50

4.1.3 Node 物件

當 XML DOM Tree 產生以後,XML 文件裡的所有資料全都被放入於此樹之某些 節點中,於是就可以透過 Node 物件查詢出我們所需要的相關訊息。

表 4-1 及表 4-2 為在本研究開發的驗證程式裡所用到的相關節點(Node)物件以及節 點列表(Nodelist)物件,透過這些相關物件可以將 XML DOM Tree 中的元素節點做驗證 的動作。

表 4-1 Node 物件之屬性值列表

屬性名稱 說明

childNodes 傳回該節點所有的子節點所形成的節點列表物件,並可以利用索 引的方式取出各個子節點。

selectNodes 傳回符合條件的所有元素節點所形成的節點列表物件

Nodename 傳回所有符合規則的屬性名稱,元素名稱等等的節點名稱。

表 4-2 Nodelist 物件之屬性值列表

屬性名稱 說明

Length 傳回該元素節點列表有幾個元素節點 Item(i) 傳回該元素節點列表物件內的第 i 個元素 Nextnode 傳回下一個元素

Node 物件在 VB6 環境下的宣告之語法如下所示:

02 Dim currNode As IXMLDOMNode 01 Dim xmlDoc As DOMDocument50

此段語法除了第一行定義 xmlDoc 為 XML DOM 5.0 版本之外,另外第二行還定義 了 currNode 為 XML DOM 中的 Node 物件。宣告之後就可以使用 Node 物件中的屬性 值,使用方式為直接於 currNode 之後加上屬性名稱即可,如 currNode.NodeName。而 Nodelist 物件宣告如同 Node 物件,如下所示:

02 Dim objNodeList As IXMLDOMNodeList 01 Dim xmlDoc As DOMDocument50

第一行的語法是定義參數 xmlDoc 為 XML DOM5.0 版本,而第二行則是宣告參數 objNodeList 可以使用 Node 物件以及 NodeList 物件屬性。透過 Node 物件、Nodelist 物件以及 VB6 之迴圈結構找出文件中全部的節點,之後再針對各個節點執行驗證的動

作,就可以知道產生錯誤的地方是位於文件中的哪些節點處以及錯誤的類型。因此這 兩個物件是驗證程式最核心的部份。

4.1.4 ParseError 物件

當 XML 文件在執行驗證的動作時,可以透過 ParseError 物件瞭解文件驗證成功與 否或是發生錯誤的原因。相同的,ParseError 物件也是擁有許多屬性值,如表 4-3,運 用這些屬性值來幫助驗證程式對於文件錯誤的地方以及原因作說明,讓執行驗證的人 員可以根據所產出的錯誤原因訊息歸類錯誤的類型,以利於整體驗證流程的執行。

表 4-3 ParseError 物件之屬性值列表

屬性名稱 說明

errorCode 傳回錯誤代碼

line 傳回文件中發生錯誤的列次 reason 傳回文件發生錯誤的原因

圖 4-4 為一段本驗證程式的程式碼,說明如何於 VB6 中使用 ParseError 物件之屬 性值:

圖 4-4 ParseError 物件使用範例程式碼 09 strout = strout _

10 + vbTab + "文件驗證通過" + 11 vbNewLine + vbNewLine 12 End If

07 vbNewLine 08 Else

05 + "XMLDoc is not valid because”

06 + vbNewLine + oError.reason + 04 strout = strout + vbTab _

03 If oError.errorCode <> 0 Then 02 Set oError = oXMLDoc.Validate 01 Dim oError As IXMLDOMParseError

本程式碼是先宣告 oError 變數為 ParseError 物件,接著使用迴圈結構,當

oError.errorCode 不等於 0 時(亦即代表有錯誤產生),程式本身會利用 oError.reason 顯 示出錯誤的原因,證明此份文件含有錯誤;如果 oError.errorCode 等於 0 時,程式就會 顯示出”文件通過驗證”的訊息給執行驗證人員知道,說明此份文件是合格的。驗證人 員可以根據產出的訊息,再加上一些比對的工作,就可以判斷出文件中出現何種錯誤 類型。

相關文件