級別: 初級
Kevin Williams, 首席 XML 設計師, Equient(Veridian 的一個部門)
2001 年 7 月 01 日
本專欄討論了表示數據時如何使用 XLink 指針使 XML 文檔變得更緊湊、更靈活。樣本代碼顯示了帶有或不帶 XLink 指針的發票示例,加上一個將 XLinks 用于可按 URL 尋址的數據庫的示例。
近來,W3C 將一個稱為 XLink
的規范升級到“推薦”狀態。在本專欄中,將研究 XLink
以及如何使用它來簡化數據的表示和傳輸。
究竟什么是 XLink 呢?
引用 W3C XLink 規范:“XML 鏈接語言(XLink)... 允許在 XML
文檔中插入元素以創建并描述資源之間的鏈接。”然后,規范宣稱使用
XLink 定義的鏈接類似于 HTML
超級鏈接,從而導致許多程序員得出這就是該規范的唯一目的結論。但是,還有另一種方法可以使用
XLink 來獲取巨大利益:顯示數據資源之間的關系。
操作中的 XLink
設想一個典型的訂單跟蹤應用程序,假定對于大型制造公司。描述訂單的
XML
文檔通常將包含下達訂單的顧客信息、訂單狀態和訂單上帶有數量和價格的獨立行項。文檔用戶可能想以不同的方法使用它。在財務部,請求訂單數據的人員可能只
對需要讓顧客付款的總價感興趣
-
而發票上獨立行項的詳細信息(除數量和價格外)卻是不相關的。相反,顧客要求訂單時(也許為了在線查看),他們可能想查看更多信息,例如,行項上一個部件
的可讀名稱。將帶有全部詳細信息的整個文檔傳送給每個顧客并不一定會有意義:理想的做法是僅傳送訂單的基本框架(對于僅對基本內容感興趣的顧客),它帶有
指向更詳細信息的指針。XLink
提供了完成該任務的出色方法。
完整的訂單文檔有些類似于“清單 1”。
清單 1. 完整的發票文檔(帶有嵌入式的顧客和部件信息)
<?xml version="1.0"?> <order> <orderDate>7/23/2001</orderDate> <shipDate>7/26/2001</shipDate> <customer> <customerID>18273</customerID> <customerName>Fred Q. Customer</customerName> <billingAddress> <address1>100 Main St.</address1> <city>Anywhere</city> <state>AZ</state> <zip>12345</zip> </billingAddress> <shippingAddress> <address1>800 Corporate Dr.</address1> <address2>Suite 314</address2> <city>Anywhere</city> <state>AZ</state> <zip>12345</zip> </shippingAddress> </customer> <lineItem> <part> <partID>W-127</partID> <partName>Widget</partName> <partSize>2-inch</partSize> <partColor>Blue</partColor> </part> <quantity>17</quantity> <unitPrice>0.20</unitPrice> </lineItem> <lineItem> <part> <partID>S-387</partID> <partName>Sprocket</partName> <partSize>1-inch</partSize> <partColor>Red</partColor> </part> <quantity>31</quantity> <unitPrice>0.40</unitPrice> </lineItem> </order>
|
不僅“清單
1”中的完整發票包含顧客可能不需要(或正好要廢棄)的信息,而且,如果使用本地的
XML
存儲數據,該文檔還會產生問題:如果在每個文檔中嵌入每個部件的詳細信息,重復的部件信息會浪費大量磁盤空間。但是,假設此時正在從關系數據庫中按需要取
出信息。存儲這種信息類型的數據庫的典型設計將包含三個主控表:定義制造商所有顧客的“顧客”表、描述制造商銷售的所有部件的“部件”表和與這兩個表相關
的“訂單”表,它顯示哪一個顧客訂購了哪一種部件、訂購時間和數量。這提示我們如何將該文檔分成幾個可控制的部分。
因此,“清單 2”使用 XLink 結構引用正好包含
customer
和
part
元素的文檔來替換這些元素。結果文檔將有些類似于“清單 2、3、4 和
5”。
清單 2. 帶有 XLink 簡單鏈接的已修改發票文檔
<?xml version="1.0"?> <order xmlns:xlink="http://www.w3.org/1999/xlink"> <orderDate>7/23/2001</orderDate> <shipDate>7/26/2001</shipDate> <customer xlink:href="customers/18273.xml">18273</part> <lineItem> <part xlink:href="parts/W-127.xml">W-127</part> <quantity>17</quantity> <unitPrice>0.20</unitPrice> </lineItem> <lineItem> <part xlink:href="parts/S-387.xml">S-387</part> <quantity>31</quantity> <unitPrice>0.40</unitPrice> </lineItem> </order>
|
清單 3. customers/18273.xml
<?xml version="1.0"?> <customer> <customerID<18273</customerID> <customerName>Fred Q. Customer</customerName> <billingAddress> <address1>100 Main St.</address1> <city>Anywhere</city> <state>AZ</state> <zip>12345</zip> </billingAddress> <shippingAddress> <address1>800 Corporate Dr.</address1> <address2>Suite 314</address2> <city>Anywhere</city> <state>AZ</state> <zip>12345</zip> </shippingAddress> </customer>
|
清單 4. parts/W-127.xml
<?xml version="1.0"?> <part> <partID>W-127</partID> <partName>Widget</partName> <partSize>2-inch</partSize> <partColor>Blue</partColor> </part>
|
清單 5. parts/S-387.xml
<?xml version="1.0"?> <part> <partID>S-387</partID> <partName>Sprocket</partName> <partSize>1-inch</partSize> <partColor>Red</partColor> </part>
|
您大概可以看出用該方法構造信息結構的明顯優勢。如果財務部僅僅想給顧客
18273
發送帳單(該標識在財務軟件中),則只需要檢索訂單文檔以獲取所需信息。可以在一個比嵌入了所有額外信息的原始文檔小得多的文檔中找到該信息。可以設置應
用程序,這樣在線檢索該發票的顧客會看到自動顯示的信息(在初始呈遞時,呈遞該頁面的樣式表單可以獲取顧客和部件的詳細信息),或者詳細信息作為超級鏈接
出現,以供顧客遍歷。帶有超級鏈接的結構化文檔更加靈活和強大;顧客只檢索到相關部分。
您可能想知道這個策略對系統有什么好處。畢竟,可能會在需要時使用在處理過程中生成的
XML 文檔在關系數據庫中存儲數據,而不是在本地 XML
數據庫中存儲。可以用幾種方式利用該方法。如果顧客信息和部件信息的變更率相對較低,則創建或更改顧客和部件時,可以生成
XML
文檔來表示它們,這樣就確保了該數據的請求不需要代價巨大的附加數據庫調用。它還允許創建顧客和部件目錄,而完全不需要訪問關系數據庫。如果正在使用可按
URL 尋址的關系數據庫 - 大多數關系型數據庫已經或者將很快提供該功能
-
可以創建一個允許在處理過程中檢取信息的訪問器(例如,一個存儲過程),如“
清單 6”中的假想示例。
結束語
本專欄演示了如何使用 XLink
的基本功能來簡化文檔結構和降低網絡傳輸的開銷。它僅討論使用簡單鏈接的方法;XLink
還提供了擴展的鏈接功能,可以用它將許多資源關聯在一起(例如,可以創建一個
XLink 鏈接庫,在顧客與訂單之間建立關系)。隨著 XML
和相關幫助器技術的不斷成熟,在確定如何實現信息系統時,程序員將擁有更大的靈活性,允許協調解決方案以最大限度地滿足顧客的需要。
參考資料
關于作者
|
|
|
Kevin Williams 是 Equient 的首席 XML 設計師,Equient 是 Veridian
專門從事信息管理系統的 XML 設計的一個部門。他還與人合著了幾本關于
XML 的書籍,由 Wrox Press 出版。可通過
kevin@realworldxml.com
與他聯系以獲取說明。在他的網站
www.realworldxml.com
上可以找到任意的 XML
想法、技巧、竅門和個人的激昂演說。您知道,是給孩子們看的!
|