DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> XML 觀察: 使用 XML 描述開放源代碼項目 1
XML 觀察: 使用 XML 描述開放源代碼項目 1
編輯:XML詳解     

開放源代碼項目最偉大的一點是其本質上的民主性:任何人都很容易啟動自己的項目,事實上經常如此!不幸的是,用戶要找到適合自己用途的軟件可能比較難。這一要求在過去一直通過不同的軟件注冊來滿足。可能最出名的也是歷史最悠久的軟件注冊是 Freshmeat,但還有更多,通常是針對更專門化的要求。比如,Free Software Foundation 的 FSF/UNESCO Free Software Directory、GNOME Software Map 以及 BioInformatics Software Map(相關鏈接請參閱 參考資料)。

  現在有這麼多的注冊,能否及時更新已經成為一個實實在在的問題。勤勉的軟件維護人員在每個發布周期常常需要訪問多個站點更新信息,更不用說還有自己的 Web 站點。但是這樣的維護人員很少見,在一個注冊中找到最新的信息是很難得的事情。如果考慮到許多現代軟件項目所牽扯的方方面面:郵件列表、IRC 頻道、Web 站點、wikis、CVS 資源庫,等等,發現找到的信息已經過時並不令人驚訝。

  本文開始開發一種解決方案滿足保持軟件項目信息及時更新的需要:可用於 XML 文檔在 Web 上交換項目細節的一種詞匯表。在第 1 部分中,我將列出項目的范圍、選擇實現技術並考察現有的相關工作。

  目標、范圍與策略

  每個項目都需要一個名稱。我從 FOAF(朋友的朋友)得到了靈感,決定把該項目命名為 DOAP,“項目的描述(description of a project)”的縮寫。現在最困難的選擇 90% 已經完成,剩下的也有了眉目!

  像這樣的項目很容易失控造成相反的結果。如果創建的東西其實現比當前實際要求的工作量還大或者與之相當,您就不大可能會成功,無論您的 XML 詞匯表能夠帶來多大的好處。Web 上到處都有因為要做的太多而失敗的項目。把自己限制到比較實際的較少的一組目標上是值得的。

這個詞匯表第一次迭代中的有限需求包括:

  軟件項目及其相關資源的國際化描述,包括參與者和 Web 資源

  易於創建和消費這種描述的基本工具

  與其他流行 Web 元數據項目(RSS、FOAF、Dublin Core)的互操作性

  能夠針對專門用途對詞匯表進行擴展

  第一次迭代明確地沒有包含軟件版本的描述。這方面的工作可以在以後的迭代過程中研究。此外,項目內部的規劃數據如任務分配或者裡程碑也不在考慮范圍之內。不必走得太遠去重新發明 Microsoft 的項目!

  項目描述的用例包括:

  項目導入軟件目錄的簡易性

  軟件目錄間的數據交換

  共享 CVS 資源庫或者 bug 跟蹤程序之類資源的自動配置

  幫助捆綁待發行軟件的軟件包維護人員

  技術選擇

  盡管經過了多年的詞匯表開發,技術的選擇仍然是一個公開的問題。大量部署的各種流行詞匯表采用了不同的方式規定其術語。研究其中的一些,看看能否從中得到好的經驗或者有益的教訓。所有這些規范的鏈接請參閱 參考資料。

  Dublin Core Metadata Element Set:這個流行的庫元數據應用使用技術獨立的表達方式,通過伴隨的規范說明元素如何在RDF/XML、Html 元標簽和 W3C XML Schema 中表示。Dublin Core 非常成功,但是在術語的解釋上有一些模糊,造成了一些互操作性的問題。比如, Creator 規定為“主要負責制作資源內容的實體。Creator 的例子包括人、組織或者服務。通常 Creator 的名稱應該用於標識該實體”。從計算的角度看,“名稱”一詞可能有非常寬泛的解釋,上述定義實際上只對元數據的人類消費者有效。比方說,創建實體的是一個人還是一群人,這並不清楚。

  RSS (RDF Site Summary/Really Simple Syndication):該規范的多種版本選擇了不同的路線:0.91 版使用 XML DTD 加上平敘;1.0 版使用平敘加例子,還有描述性的 RDF 模式;2.0 則使用帶有例子的平敘。亞規范性一直是 RSS 互操作性的問題。

ebXML:來自這一電子商務項目的詞匯表通常在它們的正式規范中采用大量的平敘,也提供了例子、DTD 和模式。

  HTML:按照任何標准衡量都非常成功,Html 很大程度上是在特定例子的支持下擴展的。現在它有了更正式的規范,但是太晚了。清理工作花費了許多年。可憐的互操作性造成了極大的代價,時間都浪費在用多種浏覽器測試網站上,實際上是支持浏覽器本身的遺留特性。

  既然 DOAP 主要的消費對象是計算機,詞匯表顯然需要某種機器可讀的模式。另一方面,因為數據要靠人來創建,提供足夠的人類可讀的信息以便避免亞規范性帶來的互操作性,這一問題同樣重要。DOAP 的一個明確目標是交換詞匯表,因此應盡量減少由於術語使用不一致造成的數據損失。如果曾經嘗試在設備間同步 vCard 數據,您就會了解雖然數據表面上都遵循該規范,但每種實現都有自己的怪癖需要解決。

  XML 還是 RDF?

  Dublin Core(DC)真正吸引人的一個地方是映射到各種不同的表示,包括 RDF、XML 以及 Html。這種一般性溫暖了任何軟件開發人員的心。盡管如此,說 DC 部署在 Web 上的主流還是使用 RDF 可能是公平的。

  ebXML 的例子表明如果互操作性和交換非常重要,定義良好的序列化就是必須的。這就帶來了一個痛苦的選擇――選擇 RDF 還是 XML 表示。對於元數據應用,一般認為 RDF 是首選的語言。不幸而且也不應該的是,RDF 由於對 XML 增加了約束而有了怪物的聲譽:您不能隨便寫 一堆標簽而指望它工作,並且只有使用 RDF 感知的處理工具才能充分利用 RDF 帶來的好處。在 RSS 1.0 的開發過程中竟為此引發了許多爭執,結果是盡可能地隱藏起 RDF 特性。

  直接的 XML 序列化也有其困難。您可以選擇一種模式語言來定義文檔結構,每一種在表達能力和工具支持上各不相同。DTD 雖然被認為應用最廣泛(有爭議),沒有提供定義文檔非常有力的表達方式,通常被看作是昨日的技術。W3C XML Schema(WXS)更加靈活,但是一種沉重的解決方案,其接受程度在商業軟件世界中是最高的――當然不是供人類閱讀的。RELAX NG 是一個有希望的後來者,可能比 WXS 更容易理解,而且自诩很容易轉換成 WXS。它還有一種人類可讀的緊湊語法,更容易手工編寫。如果采用 XML 路線,RELAX NG 似乎最好,而且能夠轉化成其他兩種,並且很容易理解。

 純 XML 序列化在序列化方面存在一些困難。盡管 XML 很好的定義了文檔的語法,卻完全沒有觸及元素的語義。RDF Schema(以及它的更大的弟兄 OWL,W3C Ontology Language)允許把一個軟件項目的維護者稱作 Dublin Core 術語“creator”的一個子類。任何知道如何處理 Dublin Core 的 RDF 應用程序至少能夠使用基本的 DOAP 數據。相反,對於直接的 XML 文檔,如果應用程序沒有專門的編碼,就不能處理 DOAP 名稱空間,即使有相應的模式。

  最後,還沒有解決的一個大問題仍然在 XML 中――名稱空間混合的問題。給定來自不同名稱空間的兩個任意詞匯表,如何能夠混合使用創建一種復合詞匯表呢?這個問題並沒有一般的解決方案,就是說除非另有一個結合兩者的模式明確規定了一種方法,每個 XML 詞匯表仍然是獨立的。另一方面,RDF 則有規定好的解決方案。因此,如果優先考慮 DOAP 與其他名稱空間的混合,RDF 可能是一種首選的辦法。

  總之,應該選擇直接的 XML 還是 RDF呢?前者更便於人們理解,後者則擁有靈活性以及隨之而來的約束?

  我的專欄的熱心讀者可能已經猜到我傾向使用 RDF。這確實是本項目采用的方式,因為 RDF 非常適合元數據應用。但是,上面提及的問題也不能忘記,在開發的過程中我將尋求減輕使用 RDF 的復雜性的方法。如果 DOAP 能用一般的 XML 工具處理,毫無疑問將非常有利。

  出於自動化消費的目的,將使用 RDF Schema 來規定 DOAP 詞匯表,並盡可能地增加一些平敘作為補充。FOAF 規范(請參閱 參考資料)選擇了這種方法,並取得了一些成功。

  現有的工作

  技術選擇已經完成,現在重要的是看一看關於該項目的目標已經有哪些工作已經做了。完成這項任務後,我將在本系列的下一篇文章中開始定義詞匯表。關於這些工作的鏈接可以在 參考資料中找到,建議您閱讀一下。

  Freshmeat XML 導出:Freshmeat.Net 軟件注冊為它的所有數據提供了一種 XML 導出格式,每天都會更新。它們還為所用的 XML 格式提供了 DTD。Leigh Dodds 曾經做了一些工作,把這種導出格式轉換成使用 FOAF 術語的數據。

  Open Source Metadata Framework(開放源代碼元數據框架):該項目主要關注開放源代碼項目文檔的元數據,因此一些重要的目標與 DOAP 是相通的。它作為 ScrollKeeper Open Documentation Cataloging Project 的一部分得到了廣泛采用。

  PRJ Project Vocabulary:Danny Ayers 創建這個詞匯表的真正目標是要成為通用項目管理詞匯表,無論什麼領域。

  CPAN2FOAF: 綜合 Perl 文檔網絡(CPAN,Comprehensive Perl Archive Network)是一個 Perl 軟件大型資源庫。Dan Brickley 曾經把作者元數據轉化到 FOAF/RDF。

  Description of a Software Project:這是一個剛剛啟動的類似 DOAP 的詞匯表,由 Max V?lkel 創建。

  RPMFind:這個軟件定位服務使用軟件的 RDF 描述,軟件采用 RPM 格式打包。關於每個軟件版本的元數據非常詳盡。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved