Vincent.Chan‘s Blog

          常用鏈接

          統計

          積分與排名

          網站

          最新評論

          用于數據的 XML: XLink 和數據::使用 XLink 簡化數據表示

          級別: 初級

          Kevin Williams, 首席 XML 設計師, Equient(Veridian 的一個部門)

          2001 年 7 月 01 日

          本專欄討論了表示數據時如何使用 XLink 指針使 XML 文檔變得更緊湊、更靈活。樣本代碼顯示了帶有或不帶 XLink 指針的發票示例,加上一個將 XLinks 用于可按 URL 尋址的數據庫的示例。

          近來,W3C 將一個稱為 XLink 的規范升級到“推薦”狀態。在本專欄中,將研究 XLink 以及如何使用它來簡化數據的表示和傳輸。

          究竟什么是 XLink 呢?

          引用 W3C XLink 規范:“XML 鏈接語言(XLink)... 允許在 XML 文檔中插入元素以創建并描述資源之間的鏈接?!比缓螅幏缎Q使用 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 結構引用正好包含 customerpart 元素的文檔來替換這些元素。結果文檔將有些類似于“清單 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 發送帳單(該標識在財務軟件中),則只需要檢索訂單文檔以獲取所需信息??梢栽谝粋€比嵌入了所有額外信息的原始文檔小得多的文檔中找到該信息??梢栽O置應 用程序,這樣在線檢索該發票的顧客會看到自動顯示的信息(在初始呈遞時,呈遞該頁面的樣式表單可以獲取顧客和部件的詳細信息),或者詳細信息作為超級鏈接 出現,以供顧客遍歷。帶有超級鏈接的結構化文檔更加靈活和強大;顧客只檢索到相關部分。

          您可能想知道這個策略對系統有什么好處。畢竟,可能會在需要時使用在處理過程中生成的 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 想法、技巧、竅門和個人的激昂演說。您知道,是給孩子們看的!

          posted on 2006-03-21 23:41 Vincent.Chen 閱讀(308) 評論(0)  編輯  收藏 所屬分類: XML

          主站蜘蛛池模板: 赣榆县| 蒙山县| 布拖县| 定南县| 蒙阴县| 宜兰市| 青神县| 芜湖县| 明水县| 大竹县| 洛扎县| 扎赉特旗| 梁平县| 青龙| 桂平市| 绿春县| 永德县| 元谋县| 永州市| 横峰县| 肥西县| 迭部县| 威远县| 万安县| 邯郸县| 刚察县| 扶绥县| 营口市| 横山县| 平邑县| 陇川县| 五原县| 钟祥市| 苗栗县| 崇文区| 洛阳市| 弥渡县| 哈巴河县| 峡江县| 南京市| 贞丰县|