利用.NET schema物件模型提高靈活性

來源:互聯網
上載者:User
對象


XML schema是W3C的推薦選擇,它提供了定義XML檔案的結構,內容和語義的工具。與另外兩個schema建模工具檔案類型定義(DTD)和XDR (XML Data Reduced)相比,XML schema具有兩個關鍵優勢。第一,由於它是針對定義XML資料結構的W3C官方推薦,所以公司組織都將採用同樣的定義。第二,它是最新的schema技術,因此它的建構就是要修正另外二者中存在的漏洞和缺陷,特別是在DTD之中的。

XDR並不是一個schema技術的備選方案,因為它只是微軟公司的XML schema規範的一個早期草稿。在.NET之中,XDR主要是為了向下相容性而被支援。SQL Server 2000的XML擴充和微軟公司的COM parser (MSXML)仍然對其廣泛地使用。

我們開始先來看看XML schema物件模型是如何讓你使用.NET的類來操作schema組件的。然後,我們看一看處理schema資訊的幾種途徑。

Schema背景
XML schema代表著XML類型系統並應在他們向其他應用軟體和平台序列化他們的狀態時被用來描述類和對象。.NET XML schema物件模型(SOM)可以協助在.NET-specific類型系統和XML schema類型系統之間建構一個橋樑,並使計劃性地建立和修改schema變得容易。Schema檔案是一個帶有.xsd副檔名的XML檔案。

所有可以在XML schema檔案中使用的資料類型都有一個.NET的副本。一旦一個XSD schema被編譯為.NET表述(representation)物件模型,你就可以使用SOM類來訪問他們了。Schema編譯器將XSD裝配到一個XmlSchema對象之中,這個對象通過屬性和方式顯示了schema的資訊。

在一個給定的平台上,在XSD和一個合成二進位類之間的一個有效序列化機制提供了巨大的潛力,它是實現完全的跨平台互通性的一個關鍵步驟。在.NET中,XML序列化是通過XmlSerializer類並利用XML schema定義工具(Xsd.exe)的服務來實現的。這個工具是.NET Framework SDK中的二進位可執行檔,你將會在.NET Framework安裝路徑中的BIN子目錄中找到它,這個路徑通常是C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK。

Xsd.exe可以從一個XSD檔案中產生一個C# 或是Visual Basic類並從一個XML源檔案中推斷出一個XML schema。這個工具還負責由Visual Studio .NET執行的XML中與schema相關的技術。

檢查SOM

.NET Framework提供一個類的等級來編輯現有的schema或是從頭開始建立一個新的schema。類在System.Xml.Schema名稱空間中被定義,名稱空間中的根類是XmlSchema。一旦應用軟體保留一個類的執行個體,他們就可以載入一個現有的XSD檔案並利用所包含的資訊構成內部屬性和集合,通過使用XmlSchema編程介面,你就可以加入或編輯元素,屬性和其他schema組件。最後,類提供一個Write方式,使你可以對有效流對象儲存目前的內容。

建立一個XmlSchema類的執行個體有兩個途徑:你可以使用預設的建構器,它將返回一個新的空的類的執行個體,或者你也可以使用靜態Read方式。

Read方式通過一個流,文本閱讀器或是XML閱讀器在可用的schema資訊上運行,被返回的schema還沒有被編譯。Read方式接受一個second argument,它是一個驗證事件處理器。你可以將這個argument設定為空白,但是不能在被讀取的schema之中找到並處理驗證錯誤。表A中顯示了如何使用.NET SOM來讀取和編譯一個schema。

一旦schema被編譯,你就可以訪問由post-schema有效性資訊組所定義的schema的組成元素,要訪問schema中的實際類型,你需要使用SchemaTypes集合。

在編譯之前和之後的資訊之間的不同點之一是,一個所含(不是事先被定義的)的合成類型只有在schema被編譯之後才會被查出。例如,假設你使用<xs:include>標籤來引入一個外部類型定義,要系統性地尋找類型的存在,你必須首先對schema進行編譯。處理過程將對<include>聲明進行擴充並加入到類型定義之中。

在表B中的代碼顯示了在編譯之後如何得到在指定的schema中定義的合成類型的列表。

一旦schema被讀取至記憶體,你就可以自由地操縱它的結構,而間接標籤,例如<include>和<import>,只被識別為個體或單個對象。換句話說,他們只代表自己而不是他們要包括或是引入的內容。

應用軟體和內嵌schema

要讓客戶機應用軟體瞭解他們從伺服器得到的XML資料的結構,schema資訊是基礎。然而,schema資訊也是一個額外的負擔,特別是在分布式應用軟體之中,它會佔去一部分頻寬。

在一些情況下,你可以像對待Windows可執行檔中的調試資訊那樣對待schema:在應用軟體的開發過程中不可或缺,而一旦應用軟體被發布就毫無用處。這個模式並不應用於所有的應用軟體,但是它形成了一個有趣的最佳化形式。一旦兩個互相通訊的模組對於一個XML格式達成一個,而在軟體中又是hard-coded,那麼XML資料的格式怎麼能夠以不同的方式進行交換呢?

當XML檔案還沒有完全被有關的應用軟體所控制時,schema的確認就不再是一個可選擇的功能。可以想到的第一個方法就是讓客戶機應用軟體在本機存放區schema並在需要驗證引入的檔案時對其進行載入。對於.NET應用軟體,XmlSchema.Read靜態方式就是你在載入現有schema檔案時所需要的。另一個方法需要動態地建立並編譯一個schema對象,然後用它來驗證檔案。XML驗證還提供另一個方式來確保這個檔案處於所期望的形式。

結論
有了XML schema,你就可以以一種非常嚴格的形式來描述檔案的版面設計,讓使用者不必再去空想。就像我們在這裡看到的,XML schema物件模型使你能夠利用.NET Framework之中的schema支援。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。