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



Meng Yan said,
October 9, 2005 at 9:01 am
不錯,人才是互聯(lián)網(wǎng)上最有鮮明意義的個(gè)體。想想我們現在的各種應用,包括Feed燒制,不也就想通過(guò)一個(gè)簡(jiǎn)單的RSS(Atom)來(lái)表達更多的我們自身么?
基于內容的Feed -> 基于人本身的Feed