Uche Ogbuji 通過演示用來自現有 XML 格式的數據構成“資源描述框架 (RDF)”模型,開始了他的用 XML 進行的知識管理的實際探索。 如三個代碼清單中所示,RDF 可用作定制 XML 的搭擋,而不僅僅用作某些數據類型的規范表示。包含代碼樣本的本專欄演示了如何用 RDF 方便地進行知識管理,甚至是在開發過程中相對比較晚的階段。
雖然 W3C 將“資源描述框架 (RDF)”設計為常規元數據建模工具,但它還提供了許多功能,使之成為 XML 數據的理想搭擋。在許多正在形成的 XML 應用程序中,在應用程序的生存期中封裝在應用程序中的知識以 XML 文檔形式存儲在數據庫或資源庫中。作為知識管理工具的 RDF 的基本用途是,它允許您組織、關連、分類和注釋這些知識,從而增加存儲數據的總計值。 RDF 具有復雜性,通過簡單地將 RDF 支持添加到基於 XML 的應用程序中來掩飾這種復雜。 本文開始探索 RDF 和 XML 之間的協作關系。以下將演示如何使用 XSLT 根據 XML 生成 RDF。
必需熟悉 RDF 和 XSLT。也可以先閱讀以前 developerWorks 中的 介紹 RDF, 或者 參考資料中鏈接的其它文章。
舊東西不一定總是過時的
例如,讓我們來跟蹤技術規范的開放式開發過程。規范是公布到網上且感興趣的團體可以閱讀它、添加與規范相關的問題、評論公開的問題以及指派相關問題的操作項目等等。
XML 是一種功能強大的工具,它可將這種問題追蹤放在一起。雖然問題和操作項目的描述和相關討論都需要靈活的表示,但結構對於維護數據語義是很重要的。在示例中,應用程序已經開發好了,而且使用了用於如將操作項目提示者發送給用戶、支持搜索和浏覽等任務的基本技術。然而,為了利用 RDF 處理中可使用的許多現有工具和技術,開發人員已經決定開始在應用程序中使用 RDF。
在選擇使用 RDF 時,開發人員不想重新設計所有的應用程序數據和邏輯。他們寧願添加他們能夠(並且或許逐漸)將 RDF 處理移向應用程序核心的那些東西。所以,他們面臨的任務之一是,根據他們已經收集的 XML 數據生成有用的 RDF。
XML 格式示例
清單 1 是追蹤過程中單個問題的 XML 格式示例。它有唯一標識符和表示問題與哪個文檔或文檔部分相關的引用元素。問題的原創者被加上注釋,這表示正在使用系統的用戶管理功能。任何人都可以對文檔進行撰稿,但對已注冊的用戶會特別標注和處理。問題的主要描述和附加的用戶注釋會聯機顯示,並且還有指派給用戶的相關操作。
播種數據,收獲元數據
從問題追蹤中所使用的 XML 文件中抽取 RDF 元數據的方法有幾種。最直接的方法或許是編寫一種 XSLT 轉換, 它讀取文件並輸出元數據的 RDF/XML 序列,這將在下一小節中演示。
因為 RDF 位於 URI 上(出於更好或出於更壞),所以您必須為元數據節點 提出一些 URI 方案。一些事物(如用於創作問題的規范的位置)已經有 URI。其它事物可能已經有專門的 XML 表示;在我們的示例中,用戶對象作為單獨的 XML 文件管理。其它事物可能仍是完全抽象的,除了它們的元數據節點外,沒有任何應用程序設計工具或機制。這最後一類的示例是我建議為資源創建的 RDF 類型。 要在 RDF 中使用的 URI 如下:
一個可能的 RDF 系列化
上面已給出 清單 2, 它是表示 清單 1 中元數據的一個可能的 RDF 模型系列化。
請注意:在某些情況下,我使用匿名資源,如注釋和操作資源。這是一種建模選項。例如,要對用於任務調度的操作進行集中索引, 那麼將 URI 用於抽象操作而不是使它們保持匿名可能是有意義的。
XSLT 轉換
現在,您已經了解 RDF 的樣子,就可以構造一種轉換,將問題描述轉換成適當的 RDF 文件。 清單 3就是使用 XSLT 的這種轉換。
至於在此清單中看到的一些技術,我已經在先前的一篇 developerWorks 文章―― 用 XSLT 進行 WSDL 處理 中討論過,它包含將“Web 服務描述語言 (WSDL)” 轉換成 XML 這一章節。在這種情況下,目的是盡可能使產生的 RDF 系列化看上去更接近原始的WSDL XML。在這種情況中沒有這種約束,因此轉換很少是機密的。只是依次訪問各種 XML 元素,並一點一點地構建等價的 RDF 描述。
最重要的高層次的操作是 issue 元素的匹配,它僅僅轉向並調用一個已命名模板來為相應的問題實際構建 RDF 描述。這種間接方式的原因是,可以為定制和擴展這種轉換提供靈活性。例如,當您閱讀下一個 XML 編程思想 專欄時,可以在執行從問題文檔到 RDF 的批處理轉換的單獨的轉換中使用已命名模板。
在示例中,除了聯機規范本身之外,問題跟蹤程序還可以跟蹤有關各種資源的問題。(您可以從問題跟蹤程序本身開始一個問題――也許是一個錯誤報告。)由於這個原因,設計還要使引用元素的處理變得相當靈活。 使用單獨的 XSLT 方式(確保僅在正確時刻解析引用元素),模板檢查 引用 元素的可展開內容。目前,示例應用程序通過用來自正被討論的問題中的引用簡單地創建 RDF 描述來處理引用是指規范這種情況。由於需要處理更多種類型的可擴展引用, 所以可以添加附加的 xsl:when 子句來處理這些情況。
您還可以查看用於處理使用概要文件或只是自由格式的文本注冊用戶描述這一事實的基本方法。
更多要遵循的
在本專欄中,我已提供了使用 XSLT 從 XML 實例中抽取 RDF 的簡單示例。隨著越來越多的基於 XML 的應用程序的使用,這樣的技術在擴展帶有知識管理特性的應用程序中是有用的。
下一個專題將繼續問題跟蹤程序示例,同時演示問題文檔的批處理和對此處理有用的一些開放源碼工具。
本專題中的示例和下一專題中的示例都是基於一個實際的項目,該項目為 rdfinference.org 上的“RDF 接口語言”規范組成一個問題跟蹤程序。不久,您將可以在此公共站點上看到這一實際工作。在那之前,請您自由地試驗本文中的示例代碼,並將任何問題、意見和想法發送給我。