最近一直都在看一些RDF和Semantic Web方面的東西,本來有一個(gè)同事是來自Tsinghua AI實(shí)驗(yàn)室的,本想跟他好好討論討論,不過估計(jì)也沒有機(jī)會(huì)了。國(guó)內(nèi)好像做這方面的不是很多,而且到現(xiàn)在為止,我也沒有一個(gè)很clear的關(guān)于RDF的想法。所以,只敢在這里淺述一下了,呵呵。有趣的是,按照WikiPedia的記載,Web2.0當(dāng)初是被稱作Semantic Web的,后來演化成了Web2.0。
FOAF(Friend of a friend)是目前正在制定中的RDF詞匯表,目前還沒有完成定義,一個(gè)家伙用了64種方法寫一個(gè)相同語義的FOAF,所以最近有篇文章在寫“RDF/XML Sucks x 64”。究竟FOAF干什么用的,簡(jiǎn)單說,如果RSS是用來描述Blog等發(fā)布內(nèi)容的Metadata的話,F(xiàn)OAF就是描述人的Metadata,包括愛好、Blog、RSS Feeds、最近在讀的書……(留到后面再說,呵呵)
淺述RDF
其實(shí),前面的文章中曾經(jīng)提到過RDF。簡(jiǎn)單來說,使用計(jì)算機(jī)來處理問題,總先要建立一個(gè)計(jì)算機(jī)可以讀懂的模型,所以,離散數(shù)學(xué)里面教我們?nèi)绾涡问交蛘哌壿嫽?,就是?huì)有一堆邏輯變量,為了讓等式為真應(yīng)該如何取值的SAT問題。RDF和Semantic Web就是為了把網(wǎng)絡(luò)信息形式化為計(jì)算機(jī)可以讀懂的模型的。
當(dāng)然RDF和Semantic Web遠(yuǎn)比這么想想要復(fù)雜的多,這里有一個(gè)很好的Guide,可以從上面找到相關(guān)學(xué)習(xí)的鏈接。
我也沒有全部研讀過,所以只能淺述一下了,呵呵。
我們通??吹降腞SS,無論哪種版本都是屬于RDF的詞匯表。而更多的命名空間給他賦予了更多的語義,比如我們常用的dc,例如dc:creator用來描述一篇blog的作者。而且需要說明的一點(diǎn),我們常見的RSS多為xml,其實(shí)這個(gè)不是必須的,RDF并沒有說只有用XML才能描述……不過通常習(xí)慣XML的開發(fā)者可能并不一定習(xí)慣RDF,因?yàn)橛心敲炊嗟脑~匯,反正我剛開始看的時(shí)候是很容易就暈了。
RDF描述的模型實(shí)際上是一系列邏輯語句組成的無序集合,用來描述一個(gè)加注標(biāo)簽的有向圖:
- 加注標(biāo)簽:圖中的每條弧都有標(biāo)簽
- 有向:每條弧都有方向
- 另外,節(jié)點(diǎn)之間允許多條?。ㄟ`背圖的定義,呵呵)
再看RSS的例子,例如這個(gè)Blog包括了這片文章,這片文章是由Winters Mi發(fā)表的,時(shí)間是20050929,正文是,利用RDF來描述這個(gè)話,就可以是
this blog -- {Contains} --> this essaythis essay --{has title}--> \"淺述RDF,暢想一下FOAF應(yīng)用\"this essay --{created by}--> \"Winters Mi\"this essay --{has content}--> \"blahblah......\"
不妨找出一份RSS的原始XML文件出來看看,就能發(fā)現(xiàn),RSS其實(shí)是使用XML的方式列出了這樣的邏輯語句,而這樣的邏輯語句也都是由三部分組成:主體、謂詞和對(duì)象。例子中,this blog就是主體,Contains就是謂詞,this essay就是對(duì)象。有點(diǎn)AI lab的影子了哈,呵呵。
顯然,如果我們這么來描述RSS的話,或者是Internet信息資源的話,肯定是沒有任何意義的,于是就有了規(guī)范,也就有了詞匯表和描述方式。所以,dc:creator就是對(duì)應(yīng)著created by的謂詞了。
看到這里大家可能會(huì)覺得RDF跟XML之間并沒有太大的區(qū)別,這可能是RSS帶給大家的一種錯(cuò)覺,因?yàn)镽SS之中已經(jīng)淡化了這種邏輯語句的概念了,看到的跟描述Data的XML并沒有什么不同。首先說,RDF是完全可以用XML描述的,但是倆者之間又有著本質(zhì)的不同。XML是更加傾向于描述數(shù)據(jù)的,XML的設(shè)計(jì)目標(biāo)就是輕便的可應(yīng)用于各種類型的數(shù)據(jù)之上的,尤其是用來描述層次的自包含的文檔數(shù)據(jù)等等,XML不僅僅是一種文件格式,更多的是一個(gè)平臺(tái)無關(guān)的數(shù)據(jù)描述方法,是統(tǒng)一數(shù)據(jù)描述的“普通話”;RDF則描述了一個(gè)通用的方法來將互聯(lián)網(wǎng)中的信息組織起來,要是說得更專業(yè)一點(diǎn)就是描述了“知識(shí)”的組織方法,并且通過規(guī)則將這些知識(shí)組織成為語義,提供給應(yīng)用程序/計(jì)算機(jī)使用。這也是我想說的關(guān)于RDF的第一點(diǎn):RDF是為了描述知識(shí)而設(shè)計(jì)的,不是為了描述數(shù)據(jù)。
RDF并沒有綁定在XML之上,象前面提到的RDF/XML Sucks的問題也很讓人頭疼,而習(xí)慣了XML的開發(fā)人員可能并不習(xí)慣RDF這種組織方式。其實(shí)如果你要我說究竟RDF和XML之間的關(guān)系如何,我也不能說得很清楚,可能要放到整個(gè)Semantic Web還有一系列技術(shù)的范圍之內(nèi),RDF這種基于AI的邏輯性才能夠得以體現(xiàn)。
從另外的角度來說,RDF是整個(gè)Internet的Metadata,類似于曾經(jīng)在眾多Blog中提出的Meta Content等等的概念。從RDF本身的特性可以看出,RDF的語句其實(shí)構(gòu)成了Internet中各種信息資源之間的邏輯關(guān)系,構(gòu)成了互聯(lián)網(wǎng)的元知識(shí)。
這樣的淺談肯定是不能滿足要求的,官方的資料比較多,RDF Primer是一個(gè)比較好的入口。
暢談FOAF的應(yīng)用
現(xiàn)在我們已經(jīng)看到了RSS在Web2.0中的重要地位,RSS提供了一個(gè)簡(jiǎn)單卻非常意義深遠(yuǎn)的方式,互聯(lián)網(wǎng)中的各種信息可以通過RSS簡(jiǎn)單的集成、序列化以及搜索,RSS的應(yīng)用更是很快的被應(yīng)用到互聯(lián)網(wǎng)的每個(gè)角落,人們可以通過你的RSS來定位到你提供的Blog或者是網(wǎng)絡(luò)服務(wù)……RSS描述了互聯(lián)網(wǎng)中的內(nèi)容實(shí)體,而FOAF則描述了互聯(lián)網(wǎng)的個(gè)人實(shí)體,尤其是為基于社區(qū)服務(wù)的應(yīng)用提供了方便的管理和聯(lián)系手段。
FOAF是現(xiàn)在RDF社區(qū)中討論比較多的一個(gè)詞匯表,他描述了互聯(lián)網(wǎng)的個(gè)人(包括Group)實(shí)體,以及各實(shí)體之間的伙伴關(guān)系,所以叫做Friend of a Friend(此外還有一個(gè)詞匯表也是被討論的很多,就是DOAP,Discription of a project)。具體請(qǐng)參考FOAF的Spec。這里先簡(jiǎn)單介紹FOAF能夠描述的基本概念。
FOAF可以描述個(gè)人實(shí)體的基本屬性:
<foaf:Person> <foaf:name >Winters Mi</foaf:name> <foaf:mbox rdf:resource=\"mailto:winters@xerdoc.com\" /> <foaf:nick >m-Jee</foaf:nick> <foaf:workplacehomepage rdf:resource=\"http://xerdoc.com/\" /> <foaf:depiction rdf:resource=\"http://www.xerdoc.com/blog/wp-images/Winters%20Mi.jpg\" /></foaf:Person>
FOAF可以描述多個(gè)個(gè)人實(shí)體之間的伙伴關(guān)系:
<foaf:Person> <foaf:name>Winters Mi</foaf:name> <foaf:mbox rdf:resource=\"mailto:winters@xerdoc.com\" /> ... <foaf:knows> <foaf:Person> <foaf:mbox rdf:resource=\"mailto:elan@xerdoc.com\" /> <foaf:name>Elan Meng</foaf:name> <rdfs:seeAlso>http://xerdoc.com/elan_foaf.xml</rdfs:seeAlso> </foaf:Person> </foaf:knows></foaf:Person>
同樣,F(xiàn)OAF可以描述一個(gè)人擁有的RSS Feed,具有的興趣,現(xiàn)在正在看的書、電影等等。用FOAF官方網(wǎng)站上的描述就是
The Friend of a Friend (FOAF) project is about creating a Web of machine-readable homepages describing people, the links between them and the things they create and do.
網(wǎng)絡(luò)中最基本的無非就是用戶,而用戶依賴的就是社區(qū),F(xiàn)OAF可以是組成這個(gè)社區(qū)最基本的元素,Web2.0強(qiáng)調(diào)用戶的參與,不同的用戶自然就應(yīng)該擁有不同的服務(wù),F(xiàn)OAF完全可以描述用戶的這些傾向。舉個(gè)例子,最近新推出的一個(gè)學(xué)院派項(xiàng)目叫做SIMAC,IT網(wǎng)站上介紹他的大標(biāo)題叫做“New Music Recommendation System Is Based On FOAF Personal Profiling”,大致意思就是通過用戶FOAF里面的興趣一項(xiàng),該網(wǎng)站自動(dòng)推薦類似的歌曲、專輯、歌手。由此想到,如果豆瓣土豆要是能……
其實(shí),前陣子在學(xué)習(xí)Ruby on Rails的時(shí)候就想做基于FOAF搜索網(wǎng)友的一個(gè)示范網(wǎng)站,能夠聚合FOAF,根據(jù)用戶的FOAF來作RSS的Aggregator,來作各種應(yīng)用……,暢想一下,F(xiàn)OAF可能會(huì)有什么樣的應(yīng)用?
作為用戶在Web2.0世界中的數(shù)字簽名?任何人都可以根據(jù)FOAF的詞匯表來寫自己的FOAF描述,然后放到網(wǎng)站中,類似于RSS一樣,也可以被自動(dòng)發(fā)現(xiàn),比如
<link rel=\"meta\" type=\"application/rdf+xml\" title=\"FOAF\" href=\"foaf.xml\" />
這個(gè)過程當(dāng)然可以由BSP提供,從而適合進(jìn)一步的應(yīng)用。事實(shí)上,現(xiàn)在JXTA社區(qū)中知名的MyJXTA項(xiàng)目正在把FOAF寫入代碼,作為用戶之間交流搜索定位的基礎(chǔ)。
類似于RSS的訂閱一樣,你可以通過FOAF搜索跟自己愛好相同的人?比如豆瓣,把最近看的書加入到FOAF中,可以類似于RSS搜索一樣找到跟自己看同一本書的人,當(dāng)然也就可以看到他的網(wǎng)站Blog,以便今后做進(jìn)一步的交流。
FOAF可以是個(gè)人的聚合器?記得前陣子有個(gè)Firefox的插件是基于GreaseMonkey的,假設(shè)每個(gè)人在各種服務(wù)網(wǎng)站上的ID相同,例如Delicious、Flickr等等,然后來聚合這個(gè)人的所有資源,當(dāng)時(shí)看了一個(gè)體會(huì)是,如果要是有了FOAF,就不會(huì)出現(xiàn)不同服務(wù)之間ID不同的狀況了,個(gè)人的資源信息自然也就能夠聚合在一起了……
總的來說,人畢竟是互聯(lián)網(wǎng)的主體,尤其是組成各個(gè)社區(qū),我想對(duì)于豆瓣、土豆網(wǎng)這樣的社區(qū)是有很大的意義和價(jià)值的。只是目前來說FOAF本身還有很多問題,定義還在擴(kuò)充及標(biāo)準(zhǔn)化,但是更為艱辛的一點(diǎn)就是,F(xiàn)OAF作為RDF的一部分過于復(fù)雜,一個(gè)FOAF定義可能有64種XML的寫法,對(duì)于程序而言很難進(jìn)行解析,這也是我沒有繼續(xù)做下去的原因,希望FOAF能夠進(jìn)一步簡(jiǎn)化,最終能夠像RSS那樣簡(jiǎn)單易用,我相信FOAF最終作為描述個(gè)人的媒介也能夠像RSS一樣有很多Web2.0的應(yīng)用浮現(xiàn)出來,像一個(gè)老外說得,這個(gè)夏天,會(huì)有很多基于Semantic Web和Web2.0的畢業(yè)設(shè)計(jì)出現(xiàn)的,呵呵。
后記:這篇短文本來是想十一回家之前寫的,不過只寫了一半,現(xiàn)在又補(bǔ)充了,所以,可能有很多言語錯(cuò)亂的地方,呵呵,敬請(qǐng)?jiān)彙?
Meng Yan said,
October 9, 2005 at 9:01 am
不錯(cuò),人才是互聯(lián)網(wǎng)上最有鮮明意義的個(gè)體。想想我們現(xiàn)在的各種應(yīng)用,包括Feed燒制,不也就想通過一個(gè)簡(jiǎn)單的RSS(Atom)來表達(dá)更多的我們自身么?
基于內(nèi)容的Feed -> 基于人本身的Feed