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