大型組織往往會(huì)投資開(kāi)發(fā)那些大型的、集中的、標(biāo)準(zhǔn)化的 IT 系統(tǒng),例如整體 CMS,然后竭盡所能讓所有人都能夠使用這樣的系統(tǒng)。遺憾的是,保證所有人按照正確的方式使用系統(tǒng)是一項(xiàng)艱巨的挑戰(zhàn)。投資開(kāi)發(fā)一刀切的方法很難交付承諾的生產(chǎn)力收益。標(biāo)準(zhǔn)化或者控制松散耦合的組織尤為艱難,因?yàn)檫@種組織中的團(tuán)隊(duì)很少交互,往往分別制定決策。松散耦合的組織示例包括:
在本系列的 使 HTML5 微數(shù)據(jù)發(fā)揮作用,第 1 部分:在微數(shù)據(jù)之上使用 jQuery 中,我們學(xué)習(xí)了如何在微數(shù)據(jù)的基礎(chǔ)之上使用通用腳本。我們編寫了一個(gè) HTML 片段,提供交互式事件地圖,并使 Google、Bing 和 Yahoo 能夠使用 Rich Snippet 在搜索結(jié)果中更好地顯示您的頁(yè)面。
在本文中,您將學(xué)習(xí)如何利用微數(shù)據(jù),支持協(xié)作小組輕松將其站點(diǎn)掛接到一個(gè)集中的小組站點(diǎn)上,并共享內(nèi)容。通過(guò)商定在 HTML 標(biāo)記中設(shè)置的一組屬性,松散耦合的組織便可維護(hù)其信息系統(tǒng)的獨(dú)立性,同時(shí)仍然能夠構(gòu)建聯(lián)合項(xiàng)目。
許多開(kāi)放源碼項(xiàng)目都難以為其軟件維護(hù)健壯的、最新的文檔。與此同時(shí),項(xiàng)目的貢獻(xiàn)者利用博客文章分享具體的技術(shù)說(shuō)明,這些博客文章往往在 Planet 中聚合。Planet 就是一種博客聚合器,能夠獲取選定作者的博客文章(請(qǐng)參見(jiàn) 參考資料 部分)。
Planet 是參與社區(qū)最新活動(dòng)和討論的有效方法,但無(wú)法發(fā)揮作為協(xié)作技術(shù)的潛力。它難以篩選 Planet 文章的存檔,因?yàn)槠渲邪罅吭冀Y(jié)構(gòu)化數(shù)據(jù)。即使聚合文章確實(shí)包含有用的結(jié)構(gòu)化數(shù)據(jù)(如標(biāo)簽),來(lái)自不同站點(diǎn)的文章往往也不會(huì)共享相同的術(shù)語(yǔ),它們或許會(huì)使用術(shù)語(yǔ)的不同拼寫方法。因此,無(wú)法有效地對(duì)文章進(jìn)行排序。
通過(guò)創(chuàng)建獲取博客文章及有關(guān)文章的額外重要信息的聚合器,可以解決這樣的問(wèn)題??梢允褂镁酆掀鱽?lái)瀏覽文章,并將其放置在項(xiàng)目主站點(diǎn)內(nèi)的相關(guān)位置。
假想的系統(tǒng)將歸檔 Drupal。我們的博客文章中充分說(shuō)明了某些廣泛應(yīng)用的子系統(tǒng)(在 Drupal 中稱為模塊),但 Drupal.org 手冊(cè)中缺少良好的文檔。我們的目標(biāo)在于將 Planet 中的出色文檔轉(zhuǎn)入 Drupal.org 便捷的可搜索結(jié)構(gòu)之中。
第一項(xiàng)任務(wù)是確定希望將博客文章中的哪些信息傳遞到中心歸檔系統(tǒng)。例如,您希望指明該文章討論的是哪些模塊。通常情況下,模塊的各主要版本往往會(huì)采用不同的工作方式,因此最好指明教程是否與特定的模塊版本相關(guān)。
Drupal 中有多種角色,從內(nèi)容編輯到后臺(tái)開(kāi)發(fā)。指明哪些角色認(rèn)為文章有幫助是非常有價(jià)值的。圖 1 中的文檔記錄顯示了標(biāo)題、讀者和相關(guān)模塊。
該場(chǎng)景中的數(shù)據(jù)共享需求非常簡(jiǎn)單。您僅需將源博客文章中的以下信息傳遞到站點(diǎn)即可:
標(biāo)題、摘要和 URL 已經(jīng)通過(guò) RSS 實(shí)現(xiàn)了結(jié)構(gòu)化的格式。您需要找到一種解決方案,獲取有關(guān)目標(biāo)讀者和模塊的結(jié)構(gòu)化數(shù)據(jù)。為此,可以使用微數(shù)據(jù)。開(kāi)始使用微數(shù)據(jù)之前,您需要設(shè)置測(cè)試使用的源和目標(biāo)站點(diǎn)。
為了解析和處理傳入的文章,您需要使用 Microdata Import 模塊。該模塊接收一個(gè)源 URL,因此源必須能夠輸出 RSS 或者 Atom。
可以使用 Drupal 這樣的 CMS,其中包含的工具能夠自動(dòng)化放置微數(shù)據(jù),您也可以選擇使用另外一個(gè)博客系統(tǒng)(只要該系統(tǒng)不會(huì)刪除微數(shù)據(jù)屬性即可)。對(duì)于 Microdata Import 模塊,所導(dǎo)入的每個(gè)項(xiàng)目都必須與一個(gè)源項(xiàng)相關(guān)聯(lián),保證每份教程都使用自己的頁(yè)面。
該場(chǎng)景使用托管的博客平臺(tái) Blogger 和 Drupal Gardens。您可以設(shè)置自己的源,或者使用以下源:
所有必要的信息均直接處于 HTML 標(biāo)記之中,因此您可以為源使用任何工具。HTML 中的微數(shù)據(jù)作為標(biāo)準(zhǔn)、只讀的 API,與生成它的后臺(tái)代碼無(wú)關(guān)。
有了用于測(cè)試的源之后,即可開(kāi)始設(shè)置聚合站點(diǎn)。首先是基本設(shè)置:
該庫(kù)獲取一個(gè) HTML 頁(yè)面,并提取微數(shù)據(jù)。
配置在獲取源時(shí)需要使用的導(dǎo)入設(shè)置:
Tutorial import
和 Tutorial
。將所有設(shè)置保留默認(rèn)值。屏幕頂端將顯示一條確認(rèn)信息 “Changed parser plugin”。
將文本格式更改為 Filtered HTML。由于您正從不一定信任的站點(diǎn)中導(dǎo)入內(nèi)容,因此不應(yīng)使用 Full HTML。否則將導(dǎo)致您的站點(diǎn)易受跨站點(diǎn)腳本攻擊。
為了進(jìn)行測(cè)試,您可以導(dǎo)入相關(guān)內(nèi)容:
Source 1
。轉(zhuǎn)到主頁(yè),查看已經(jīng)導(dǎo)入的文章。由于已經(jīng)導(dǎo)入了完整的文章,因此您可能無(wú)法清除地認(rèn)識(shí)到下面要做些什么。但由于您并未保留原始文章結(jié)構(gòu),因此現(xiàn)在還無(wú)法根據(jù)目標(biāo)讀者或者模塊篩選文章。此時(shí)就會(huì)用到微數(shù)據(jù)。
既然已經(jīng)能夠正確獲取源,下面就可以開(kāi)始將微數(shù)據(jù)添加到標(biāo)記中,并通過(guò)文章引入微數(shù)據(jù)。清單 1 展示了一篇博客文章的基本標(biāo)記。
<h2>Building modules on top of SPARQL Views</h2><div> <p>This video demonstrates how you can build a module that installs a View powered by a SPARQL query whenever it is enabled.</p> <b>Audience:</b> Developer <br /> <b>Modules:</b> <ul> <li>Views</li> <li>SPARQL Views</li> </ul></div>
您需要指明該內(nèi)容屬于文章。該場(chǎng)景使用 Schema.org 詞匯表標(biāo)記文章,因?yàn)?Schema.org 中包含需要注釋的大多數(shù)內(nèi)容所需的術(shù)語(yǔ)(請(qǐng)參見(jiàn) 參考資料 部分)。只有在所有協(xié)作作者都同意的情況下,才應(yīng)使用其他詞匯表。[在 “結(jié)合使用 Drupal、HTML5 和微數(shù)據(jù)”(請(qǐng)參見(jiàn) 參考資料 部分)中,我更加深入地探討了如何放置微數(shù)據(jù)。本文中介紹了如何手動(dòng)添加微數(shù)據(jù),如何利用 Microdata 模塊自動(dòng)化此過(guò)程。]
您需要從 RSS 源中獲取標(biāo)題,因此不必為標(biāo)題使用標(biāo)記。但標(biāo)記標(biāo)題能使其他用戶更輕松地重用數(shù)據(jù)。您可以使用 name
屬性,如 清單 2 所示。由于標(biāo)題位于文章的 div
以外,因此您必須在 div
中添加一個(gè) meta
元素來(lái)提供標(biāo)題。對(duì)摘要段落使用 description
屬性,這將提供比 RSS 描述更加具體的訪問(wèn)。
<h2>Building modules on top of SPARQL Views</h2><div itemscope="" itemtype="http://schema.org/Article"> <meta itemprop="name" content="Building modules on top of SPARQL Views" /> <p itemprop="description">This video demonstrates how you can build a module that installs a View powered by a SPARQL query whenever it is enabled.</p> ...</div>
上面,我們已經(jīng)使用微數(shù)據(jù)進(jìn)行了標(biāo)記,下面即可僅獲取文本中的描述。這將從描述中排除目標(biāo)讀者和相關(guān)模塊,這種做法非常好,稍后即可將這些信息納入其自己的字段。將映射更改為使用微數(shù)據(jù)描述,而非 RSS 描述。
示例頁(yè)面將獲得解析,您可以看到哪些屬性可用,因此示例應(yīng)該盡可能地保持完整。保存設(shè)置。
更新不僅會(huì)刪除描述中您不需要的內(nèi)容。還會(huì)對(duì)全部導(dǎo)入信息執(zhí)行完整更新。如果對(duì)源文章的措辭做出了修改,新的措辭也會(huì)顯示在這里。將更新功能配置為 Cron 定期運(yùn)行,因此無(wú)需手動(dòng)觸發(fā)即可獲得定期更新。這里可以看到 Feeds 系統(tǒng)的強(qiáng)大力量。它能實(shí)現(xiàn)打造有效的協(xié)作站點(diǎn)網(wǎng)絡(luò)所必不可少的輕松而自動(dòng)化的同步。
至此,您已經(jīng)標(biāo)記了所有文章共有的一些信息片段:標(biāo)題和描述。在這一節(jié)中,您將轉(zhuǎn)到場(chǎng)景特有的信息。此時(shí)有必要與協(xié)作團(tuán)隊(duì)配合工作,了解他們?nèi)绾慰创麄兯峁┑膬?nèi)容。信息應(yīng)該反映協(xié)作人員的心理模式(而非遵照外部的理想做法)。
Drupal 社區(qū)已經(jīng)定義了一組成熟的角色,表示為會(huì)議中的分工軌跡。Drupal Skill Map 項(xiàng)目將這些角色定義為:
您需要按照上述八個(gè)分組來(lái)表示文章的目標(biāo)讀者。遺憾的是,Schema.org 詞匯表并沒(méi)有目標(biāo)讀者的概念,因此您在處理 itemprop
時(shí)有兩種選擇:
/audience
。 例如,您可以將 keywords
屬性擴(kuò)展為 keywords/audience
,如下所示。
Audience: <span itemprop="keywords/audience">Developer</span>
例如,如果 Tutorial 詞匯表中包含一個(gè)目標(biāo)讀者屬性(如果您要使用字符串作為該屬性的值),那么就可以使用這個(gè)替代屬性。由于使用了 http://schema.org/Article itemtype
,因此您必須引用 Tutorial 詞匯表屬性的完整 URL,不能使用短屬性名稱。完整 URL 應(yīng)該類似于 http://tutorial-vocabulary.org/audience
。詞匯表文檔中應(yīng)該指定準(zhǔn)確的 URL。URL 應(yīng)放置在 itemprop
屬性中,如下所示。
Audience: <span itemprop="http://tutorial-vocabulary.org/audience">Developer</span>
對(duì)于這個(gè)場(chǎng)景,我們將采用第一個(gè)選擇,擴(kuò)展 Schema.org。如果您正在手動(dòng)放置微數(shù)據(jù),請(qǐng)將 清單 3 復(fù)制粘貼到正文中。如果您正在使用 Drupal 自動(dòng)在源站點(diǎn)中放置微數(shù)據(jù),您可以在文章中創(chuàng)建一個(gè) List (text)
字段,此時(shí)文章中將顯示復(fù)選框,允許選擇目標(biāo)讀者。通過(guò)在字段設(shè)置中添加 keywords/audience
屬性,即可自動(dòng)輸出正確的微數(shù)據(jù)。
為將目標(biāo)讀者元素納入使用站點(diǎn)的內(nèi)容中,您需要為其創(chuàng)建一個(gè)內(nèi)容類型字段,隨后為該字段創(chuàng)建映射。
keywords/audience
元素映射到新的 Audience 字段,單擊 Add,如 圖 10 所示。 keywords/audience
屬性可以證明,使用字符串足以按照文章的目標(biāo)讀者對(duì)文章進(jìn)行分類。目標(biāo)讀者角色數(shù)量有限,而且不會(huì)頻繁發(fā)生變化。如果出現(xiàn)變化,比如添加新角色,要求人們更新期目標(biāo)讀者字段設(shè)置并不是很困難。
但按照相關(guān)模塊分類則截然不同。Drupal 擁有 14,000 個(gè)模塊,大多數(shù)都有多個(gè)版本。至少這意味著 14,000 個(gè)不同的標(biāo)簽。標(biāo)簽的格式也是豐富多變的。此外,數(shù)以千計(jì)的模塊維護(hù)者可能會(huì)隨時(shí)更改其模塊的名稱。
為了引用模塊,必須使用比字符串更加穩(wěn)定的一些信息。一種不會(huì)經(jīng)常發(fā)生變化的標(biāo)識(shí)符就是 Drupal.org 中的模塊 URL(例如,Views 模塊的 http://drupal.org/project/views)??梢允褂盟鳛槟K的一致標(biāo)識(shí)符。
要添加模塊的版本,您應(yīng)添加模塊項(xiàng)的一個(gè)屬性。然而,對(duì)于這個(gè)場(chǎng)景,為各版本使用不同的 ID 更加容易。例如,要標(biāo)識(shí) Views 7.x-3.x,可以使用 URL http://drupal.org/project/views/7/3
。盡管該 URL 目前并未顯示頁(yè)面,但是可想而知,該位置的頁(yè)面將顯示 Views 7.x-3.x 的所有教程,并提供該版本的下載。
要為該值使用字符串而非 ID,可以使用微數(shù)據(jù)的 itemid
屬性。itemid
與 itemscope
和 itemtype
屬性位于相同的標(biāo)簽中。對(duì) itemtype
使用特定于 Google 的 Schema.org 術(shù)語(yǔ) http://schema.org/SoftwareApplication
。使用 about
屬性表明該文章與該模塊有關(guān)。
可見(jiàn)的內(nèi)容將仍然是名稱字符串。您不會(huì)用到它,但應(yīng)該盡可能簡(jiǎn)化它,以便其他用戶能夠更容易地使用您的數(shù)據(jù)。將其公開(kāi)為模塊的 name
屬性,如 清單 3 所示。
<p>Modules: <ul> <li itemprop="about" itemscope="" itemtype="http://schema.org/SoftwareApplication" itemid="http://drupal.org/project/views/7/3"> <span itemprop="name">Views</span> </li> <li itemprop="about" itemscope="" itemtype="http://schema.org/SoftwareApplication" itemid="http://drupal.org/project/sparql_views/7/2"> <span itemprop="name">SPARQL Views</span> </li> </ul></p>
手動(dòng)添加所有這些數(shù)據(jù)并不容易。如果有可能,您需要使用能提供幫助的工具。如果對(duì)源使用 Drupal,則可以使用 Web Taxonomy 模塊,幫助內(nèi)容作者標(biāo)記其文章。利用 Web Taxonomy,Web 上的某種分類法將提供自動(dòng)完成結(jié)果。選擇術(shù)語(yǔ)時(shí),應(yīng)該將其導(dǎo)入您的站點(diǎn)。這意味著您必須訪問(wèn) Drupal 項(xiàng)目詞匯表中數(shù)以萬(wàn)計(jì)的術(shù)語(yǔ),而不要將其存儲(chǔ)在您的數(shù)據(jù)庫(kù)中。添加新標(biāo)簽、更改標(biāo)記時(shí),自動(dòng)完成字段有權(quán)訪問(wèn)這些數(shù)據(jù),您甚至不必去考慮它們。
您還可以使用 Web Taxonomy 來(lái)使用相關(guān)模塊,因此需要在目標(biāo)站點(diǎn)上進(jìn)行相應(yīng)的配置。
下載并啟用 Web Taxonomy。要配置 Web Taxonomy,您還需要使用一個(gè)模塊來(lái)定義要使用哪種外部分類法,以及如何訪問(wèn)它。Drupal Full 項(xiàng)目的模塊可以在 http://drupal.org/sandbox/linclark/1363774 中獲得。啟用該模塊時(shí),一個(gè)新的 Drupal Full 項(xiàng)目詞匯表將添加到您的站點(diǎn)中。
在目標(biāo)和源站點(diǎn)中對(duì) Web Taxonomy 進(jìn)行相同的配置:
現(xiàn)在,您可以編輯教程并鍵入模塊名稱,測(cè)試字段。自動(dòng)完成字段會(huì)提供建議,如 圖 13 所示。如果選擇其中的一項(xiàng)建議并保存教程,那么在查看該教程時(shí)就可以看到該標(biāo)簽。如果單擊瀏覽術(shù)語(yǔ)頁(yè)面,您為 ID 使用的 URL 會(huì)顯示在該術(shù)語(yǔ)中。
如果您正在為源中的字段配置字段,請(qǐng)下載并啟用提供的 Token 模塊,更改指派給該術(shù)語(yǔ)的 itemid
。轉(zhuǎn)到 Structure -> Taxonomy,編輯 Drupal Full 項(xiàng)目詞匯表。該字段中提供了由 itemid
使用的標(biāo)志,將其值更改為 [term:web_tid]
。此時(shí)將使用全局 Web 術(shù)語(yǔ) ID,而非本地路徑。
至此,您已經(jīng)得到并測(cè)試了 Web Taxonomy 字段。下面可以開(kāi)始向其導(dǎo)入內(nèi)容。
about:itemid
櫻紅色映射到相關(guān)模塊 Web Term ID,然后單擊 Add。現(xiàn)在,您已經(jīng)完整地配置了導(dǎo)入設(shè)置,接下來(lái)就可以創(chuàng)建多個(gè) Tutorial Import 節(jié)點(diǎn),從多個(gè)站點(diǎn)導(dǎo)入數(shù)據(jù)。(創(chuàng)建一個(gè) Tutorial import 節(jié)點(diǎn),并添加 Source 2 源。)所導(dǎo)入的全部數(shù)據(jù)現(xiàn)在都采用 Drupal 能夠理解的一種結(jié)構(gòu)化方式。您可以輕松設(shè)置用戶界面,從而瀏覽整個(gè)教程集合的各個(gè)方面。
Microdata Import 有助于跨組織邊界共享知識(shí)。然而,有時(shí)僅僅使用用 Microdata Import 還不夠。Microdata Import 假設(shè)您正在導(dǎo)入的頁(yè)面與您的站點(diǎn)中的頁(yè)面之間存在一對(duì)一的關(guān)系。這適用于上述場(chǎng)景,因?yàn)槟恍枰褂媒坛添?yè)面本身提供的教程相關(guān)信息。
然而,在某些時(shí)候,您可能希望在不同的站點(diǎn)中發(fā)布內(nèi)容的不同人員能夠添加關(guān)于同一項(xiàng)目的一些信息。例如,如果一所大學(xué)內(nèi)的某位教授兼任兩個(gè)系中的職務(wù),每個(gè)系都應(yīng)能在其自己的站點(diǎn)中添加有關(guān)該教授的信息,而且無(wú)需與另外一個(gè)系協(xié)調(diào)。盡管您可以配置源代碼和源導(dǎo)入器,通過(guò) Microdata Import 來(lái)實(shí)現(xiàn)此操作,但還有更便捷的實(shí)現(xiàn)方法。
方法之一就是將微數(shù)據(jù)轉(zhuǎn)為 RDF。HTML Data Task Force 目前正在最終敲定微數(shù)據(jù)映射到 RDF 的規(guī)范草案。這樣的映射會(huì)使 MicrodataPHP 庫(kù)等解析器能夠以可靠的方式通過(guò)微數(shù)據(jù)標(biāo)記的頁(yè)面生成 RDF。Gregg Kellogg(負(fù)責(zé)領(lǐng)導(dǎo)制定映射規(guī)范的工作)開(kāi)發(fā)的 RDF Distiller 工具已經(jīng)實(shí)現(xiàn)了此映射。RDF distiller 是以 Ruby gem 的形式提供的。Kellogg 也在他的網(wǎng)站中發(fā)布了一個(gè) API。
確定如何跨組織和技術(shù)邊界啟用協(xié)作式 Web 內(nèi)容創(chuàng)作是 IT 面臨的主要挑戰(zhàn)之一。通過(guò)在 HTML 本身之中嵌入內(nèi)容的結(jié)構(gòu),微數(shù)據(jù)可以幫助松散耦合的人員和組織就聯(lián)合項(xiàng)目進(jìn)行協(xié)調(diào)。最重要的是,協(xié)作者可以為通用產(chǎn)品做出貢獻(xiàn),而且不會(huì)失去選擇自己的框架的自由度,即便該框架僅僅是手動(dòng)編碼的 HTML 也是如此。
聯(lián)系客服