这个系列的文章主要是Practical RDF的学习笔记,中间有Practical RDF书中的内容的翻译,有自己学习的内容的,也有其他地方看到的知识的概述和自己对一些问题的想法。因为接触RDF的时间不长,所以才需要学习,所以错误的理解也不能避免,希望有闲情逸致的同学们指正。
什么是RDF?
说到RDF,就必须说说我们的Web和所谓的下一代Web:语义网(Semantic Web,SW)。现有的Web和未来的Web之间的一个主要的区别就是,与现有的Web包含的那种大量的毫无组织的并且访问困难的数据不同,一些类似RDF的东西为下一代的Web让计算机能够组织这些数据,并让他们成为计算机对知识描述——关于Web上可以访问的资源的断言。
“毫无组织并且访问困难”,不,事实看起来并不是这样的。我们每天流连在Web上,看新闻,看视频,买东西,上论坛。我们总能找到我们想要的东西,而且通过网站的导航系统和搜索引擎,我们能比较顺利的游走在不同的网站之间。
可是事实真的是如此吗?对于每一个想要找到事实真相的人,他们可能都会发现找到他们想要的东西并不那么简单。比如你想知道Gaint的07款XTC和XTC Team山地车车架的质量差别到底有多大(这个时候你关心的可能不仅仅是公司或者销售网站上的官方评语,而更多的是论坛中车友们的实际使用心得),或者XX姐姐那么喜欢在公共场合出风头和她小的时候的遭遇到底有什么关系,以及这种行为是否是一种某种意义上的精神上的疾病。这个时候现有的Web以及搜索引擎可能就不能满足你膨胀的欲望了。在第一个例子里面,同样是对一个产品的评价,你的搜索引擎可能不能很好的帮助你区分那些是官方的说法,而哪些是车友的评论。而在第二个例子里面,实际上你关心的内容已经跨越了知识的领域了,从花边娱乐新闻到“名人”历史,再到心理医学学领域。当然,我们可以使用专门的论坛搜索引擎来找关于XTC Team的评论,或者搜索“XX姐姐 过去”,“XX姐姐 心理”来获得大量的查询结果,然后翻上几页,看看网页快照并得到一些支离破碎的信息,但是更多的人似乎喜欢点击他看到的页面的下面的“相关新闻”提供的链接来看看接下来还有什么有趣的东西——现在的视频网站正是通过这种方法来留住宝贵的用户让他们能看更多的视频的。
但是,我们还忽略了一个问题,那就是我们是人,而且在这个过程中我们是主角,所有的痛苦的搜索,结果筛选工作都是我们自己完成的。当你面对着面前那个让你花了大价钱,有好几个核心和巨大内存的设备的时候,是否会发现更多的时候他用几个毫秒就返回的,好像没有经过大脑处理的东西却需要我们花几分钟来处理并告诉他接下来应该干什么是一件不太公平的事情?可是问题就在于,对于我们来说,我们的Web是可以自由访问的,并且他们具有不相同的漂亮的外观。虽然有的时候搜索的结果可能不尽人意,但是还是可以接受的。可是对于我们那一丝不苟的计算机来说,那漂亮的外观和并不精确的其他计算机同胞返回的结果就太可怕了——相信所有开发搜索引擎和页面抓取的人都知道让计算机知道应该处理页面的哪个部分的信息什么而不应该处理什么实在是太郁闷了。我们亲爱执着于页面分块程序的
kafka0102先生就曾经无数次用迷茫的眼光望着坐在不远处的我,然后一声叹息,接下来开始对那些制作垃圾的页面和网站破口大骂。很多人一定也有过类似的经历,而这也是“毫无组织并且访问困难”这句话的来历,我想。这句话其实更多的是针对网络上的计算机来说的,而不是我们,因为我们希望计算机能够为我们做更多的事情。
根据W3C(World Wide Web Consortium,万维网论坛)的语义网行动说明,RDF具有如下的定义:
RDF(Resource Description Framework,资源描述框架)是设计用来支持语义网的语言,其作用就像HTML如何帮助建立了原始Web。RDF是一个用于为Web描述资源或者元数据的框架。RDF提供了可以用于XML数据交换的公共基础。
RDF也许不为大家所熟知,但是RDF却是W3C标准中比较早的一个。早在1997年就已经有第一版草案出炉,而在1999年,RDF的第一个推荐标准就已经上线。2000年,RDF Schema候选标准出台,同时W3C成立了RDF兴趣小组(Interest Group)。
2001年5月出版的《科学美国人》杂志上,Tim Berners-Lee写到:
语义网将给网页上的有意义的内容带来结构组织,创造一个让游走在一个又一个页面之间的自动计算机程序能够执行复杂的任务的环境。这样的一个程序如果找到了一个诊所的网页,他将不仅仅能够发现网页上具有类似“医疗、药品”等等关键字,同时也能在页面上找到Hartman医生在周一、周三和周四出诊,并且这个页面接受一个固定格式的日期范围,并能够返回一个预约时间。
当然我相信Tim Berners-Lee的意思不是说计算机程序能够跑到网页上,通过分析这个页面的内容发现,哇,诊所的页面。等等,这里有一个form标签,还有两个input,让我猜猜是什么内容,日期?不,是日期范围。让我填写一个数据,看看返回结果是什么……好,他好像说我可以在什么什么时候去和他见面,就是说如果我填写了一个日期范围,我就能得到一个见面时间……
我并不觉得让Hartman医生去在那天给一位计算机代理程序看病是一件很愉快的事情,但是如果代理真的是这么工作的,那么他一定是病了。所以我在想,Tim Berners-Lee的意思应该是,页面应该会用某种方式来说明,Hartman的出诊日期,以及页面接受什么输入以及返回什么输出。
当然这只是愿景。作为一个初学者,虽然我不能确定RDF能不能做到上面那么好(不过我觉得应该不可以),但是RDF确实可以做到其他的一些事情。比如,其他人还有一篇关于RDF的文章,在某某地址,现在仍旧能够访问,作者是某某,他的电子邮件地址是什么,当然是以一种计算机可以处理的方式,因为对于人来说,分辨这些内容太容易了,可是对于计算机来说却不是那样的。
就像RDF的名字一样,他是用来描述资源的,并帮助只能程序找到这些东西,这样人就能少做一些事情。
但是如同其他技术一样,RDF不能替代其他的技术。误用RDF就像误用设计模式一样可怕,因此在正确的场合运用RDF是十分重要的。
更多的时候我们看到的RDF是以RDF XML的形式存在的。但是RDF和XML是有本质上的区别的。对于XML来说,树形结构是他的本质。而对于RDF来说,图才是他的本质。说道这里有必要了解一下RDF的基本知识。关于RDF最好的入门教程是
《RDF入门》。不过如果你懒得看这篇文档,听我唠叨一下也是一个不错的选择。
上图是一个RDF图,描述了一个页面的作者。这就是RDF图,RDF最本质的表达方式。如果将RDF以三元组的方式进行表示,那么就是:
<http://www.example.org/index.html> <http://purl.org/dc/elements/1.1/creator> <http://www.example.org/staffid/85740> .
上面的东西应该写在一行上,并且不要忘记最后的那个“.”。
而如果使用RDF XML来描述上面的图,则可能是类似下面的一段XML。
<example:page rdf:about=”http://www.example.org/index.html”>
<dc:creator rdf:resource=”http://www.example.org/staffid/85740” />
</example:page>
这里只是一段样例,这段代码可能不正确,并且也没有设置XML Namespace,只是用于展示一下RDF XML的样子而作。
因此,无论是RDF XML还是三元组,都是描述RDF图本质的一种方式而已。所以在研究探讨RDF的时候一定要从RDF的图本质来着眼。
所以,XML是XML,RDF是RDF。他们之间的联系是,RDF可以使用RDF XML来以XML的形式来描述。