Fork me on GitHub

浅述RDF,畅想一下FOAF应用

最近一直都在看一些RDF和Semantic Web方面的东西,本来有一个同事是来自Tsinghua AI实验室的,本想跟他好好讨论讨论,不过估计也没有机会了。国内好像做这方面的不是很多,而且到现在为止,我也没有一个很clear的关于RDF的想法。所以,只敢在这里浅述一下了,呵呵。有趣的是,按照WikiPedia的记载,Web2.0当初是被称作Semantic Web的,后来演化成了Web2.0。
FOAF(Friend of a friend)是目前正在制定中的RDF词汇表,目前还没有完成定义,一个家伙用了64种方法写一个相同语义的FOAF,所以最近有篇文章在写“RDF/XML Sucks x 64”。究竟FOAF干什么用的,简单说,如果RSS是用来描述Blog等发布内容的Metadata的话,FOAF就是描述人的Metadata,包括爱好、Blog、RSS Feeds、最近在读的书……(留到后面再说,呵呵)

浅述RDF

其实,前面的文章中曾经提到过RDF。简单来说,使用计算机来处理问题,总先要建立一个计算机可以读懂的模型,所以,离散数学里面教我们如何形式化或者逻辑化,就是会有一堆逻辑变量,为了让等式为真应该如何取值的SAT问题。RDF和Semantic Web就是为了把网络信息形式化为计算机可以读懂的模型的。
当然RDF和Semantic Web远比这么想想要复杂的多,这里有一个很好的Guide,可以从上面找到相关学习的链接。
我也没有全部研读过,所以只能浅述一下了,呵呵。
我们通常看到的RSS,无论哪种版本都是属于RDF的词汇表。而更多的命名空间给他赋予了更多的语义,比如我们常用的dc,例如dc:creator用来描述一篇blog的作者。而且需要说明的一点,我们常见的RSS多为xml,其实这个不是必须的,RDF并没有说只有用XML才能描述……不过通常习惯XML的开发者可能并不一定习惯RDF,因为有那么多的词汇,反正我刚开始看的时候是很容易就晕了。
RDF描述的模型实际上是一系列逻辑语句组成的无序集合,用来描述一个加注标签的有向图:

  • 加注标签:图中的每条弧都有标签
  • 有向:每条弧都有方向
  • 另外,节点之间允许多条弧(违背图的定义,呵呵)

再看RSS的例子,例如这个Blog包括了这片文章,这片文章是由Winters Mi发表的,时间是20050929,正文是,利用RDF来描述这个话,就可以是

this blog -- {Contains} --> this essay
this essay --{has title}--> \"浅述RDF,畅想一下FOAF应用\"
this essay --{created by}--> \"Winters Mi\"
this essay --{has content}--> \"blahblah......\"

不妨找出一份RSS的原始XML文件出来看看,就能发现,RSS其实是使用XML的方式列出了这样的逻辑语句,而这样的逻辑语句也都是由三部分组成:主体、谓词和对象。例子中,this blog就是主体,Contains就是谓词,this essay就是对象。有点AI lab的影子了哈,呵呵。
显然,如果我们这么来描述RSS的话,或者是Internet信息资源的话,肯定是没有任何意义的,于是就有了规范,也就有了词汇表和描述方式。所以,dc:creator就是对应着created by的谓词了。

看到这里大家可能会觉得RDF跟XML之间并没有太大的区别,这可能是RSS带给大家的一种错觉,因为RSS之中已经淡化了这种逻辑语句的概念了,看到的跟描述Data的XML并没有什么不同。首先说,RDF是完全可以用XML描述的,但是俩者之间又有着本质的不同。XML是更加倾向于描述数据的,XML的设计目标就是轻便的可应用于各种类型的数据之上的,尤其是用来描述层次的自包含的文档数据等等,XML不仅仅是一种文件格式,更多的是一个平台无关的数据描述方法,是统一数据描述的“普通话”;RDF则描述了一个通用的方法来将互联网中的信息组织起来,要是说得更专业一点就是描述了“知识”的组织方法,并且通过规则将这些知识组织成为语义,提供给应用程序/计算机使用。这也是我想说的关于RDF的第一点:RDF是为了描述知识而设计的,不是为了描述数据。
RDF并没有绑定在XML之上,象前面提到的RDF/XML Sucks的问题也很让人头疼,而习惯了XML的开发人员可能并不习惯RDF这种组织方式。其实如果你要我说究竟RDF和XML之间的关系如何,我也不能说得很清楚,可能要放到整个Semantic Web还有一系列技术的范围之内,RDF这种基于AI的逻辑性才能够得以体现。
从另外的角度来说,RDF是整个Internet的Metadata,类似于曾经在众多Blog中提出的Meta Content等等的概念。从RDF本身的特性可以看出,RDF的语句其实构成了Internet中各种信息资源之间的逻辑关系,构成了互联网的元知识。
这样的浅谈肯定是不能满足要求的,官方的资料比较多,RDF Primer是一个比较好的入口。

畅谈FOAF的应用

现在我们已经看到了RSS在Web2.0中的重要地位,RSS提供了一个简单却非常意义深远的方式,互联网中的各种信息可以通过RSS简单的集成、序列化以及搜索,RSS的应用更是很快的被应用到互联网的每个角落,人们可以通过你的RSS来定位到你提供的Blog或者是网络服务……RSS描述了互联网中的内容实体,而FOAF则描述了互联网的个人实体,尤其是为基于社区服务的应用提供了方便的管理和联系手段。
FOAF是现在RDF社区中讨论比较多的一个词汇表,他描述了互联网的个人(包括Group)实体,以及各实体之间的伙伴关系,所以叫做Friend of a Friend(此外还有一个词汇表也是被讨论的很多,就是DOAP,Discription of a project)。具体请参考FOAF的Spec。这里先简单介绍FOAF能够描述的基本概念。
FOAF可以描述个人实体的基本属性:


  Winters Mi
  
  m-Jee
  
  

FOAF可以描述多个个人实体之间的伙伴关系:


  Winters Mi
  
  ...
  
     
       
       Elan Meng
       http://xerdoc.com/elan_foaf.xml
     
  

同样,FOAF可以描述一个人拥有的RSS Feed,具有的兴趣,现在正在看的书、电影等等。用FOAF官方网站上的描述就是

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.

网络中最基本的无非就是用户,而用户依赖的就是社区,FOAF可以是组成这个社区最基本的元素,Web2.0强调用户的参与,不同的用户自然就应该拥有不同的服务,FOAF完全可以描述用户的这些倾向。举个例子,最近新推出的一个学院派项目叫做SIMAC,IT网站上介绍他的大标题叫做“New Music Recommendation System Is Based On FOAF Personal Profiling”,大致意思就是通过用户FOAF里面的兴趣一项,该网站自动推荐类似的歌曲、专辑、歌手。由此想到,如果豆瓣土豆要是能……
其实,前阵子在学习Ruby on Rails的时候就想做基于FOAF搜索网友的一个示范网站,能够聚合FOAF,根据用户的FOAF来作RSS的Aggregator,来作各种应用……,畅想一下,FOAF可能会有什么样的应用?
作为用户在Web2.0世界中的数字签名?任何人都可以根据FOAF的词汇表来写自己的FOAF描述,然后放到网站中,类似于RSS一样,也可以被自动发现,比如


这个过程当然可以由BSP提供,从而适合进一步的应用。事实上,现在JXTA社区中知名的MyJXTA项目正在把FOAF写入代码,作为用户之间交流搜索定位的基础。
类似于RSS的订阅一样,你可以通过FOAF搜索跟自己爱好相同的人?比如豆瓣,把最近看的书加入到FOAF中,可以类似于RSS搜索一样找到跟自己看同一本书的人,当然也就可以看到他的网站Blog,以便今后做进一步的交流。
FOAF可以是个人的聚合器?记得前阵子有个Firefox的插件是基于GreaseMonkey的,假设每个人在各种服务网站上的ID相同,例如Delicious、Flickr等等,然后来聚合这个人的所有资源,当时看了一个体会是,如果要是有了FOAF,就不会出现不同服务之间ID不同的状况了,个人的资源信息自然也就能够聚合在一起了……
总的来说,人毕竟是互联网的主体,尤其是组成各个社区,我想对于豆瓣、土豆网这样的社区是有很大的意义和价值的。只是目前来说FOAF本身还有很多问题,定义还在扩充及标准化,但是更为艰辛的一点就是,FOAF作为RDF的一部分过于复杂,一个FOAF定义可能有64种XML的写法,对于程序而言很难进行解析,这也是我没有继续做下去的原因,希望FOAF能够进一步简化,最终能够像RSS那样简单易用,我相信FOAF最终作为描述个人的媒介也能够像RSS一样有很多Web2.0的应用浮现出来,像一个老外说得,这个夏天,会有很多基于Semantic Web和Web2.0的毕业设计出现的,呵呵。

后记:这篇短文本来是想十一回家之前写的,不过只写了一半,现在又补充了,所以,可能有很多言语错乱的地方,呵呵,敬请原谅。
http://xerdoc.com/blog/archives/204.html

posted @ 2005-11-06 18:46 张善友 阅读(...) 评论(...) 编辑 收藏