桂林山水甲天下

Jacquette的技术生活

RDF:皇帝的新衣 还是 公主的嫁衣?

最近在Google Groups的Semantic Web论坛上,有个家伙说,“RDF是皇帝的新衣,因为RDF如此烦琐,而它只不过是加了一堆看上去有意义的标签而已,看上去对程序员来说,既不易读,也不易写,很难想象一个程序员手写出有用的RDF来。”此观点一出,有人马上反驳,最浅显的证据就是:当初html出来时,不也是挺烦琐吗?可是如今,手写html的程序员恐怕很少很少了,(记得硕士期间一个师兄的主页是用记事本写出来的,当时都已经很pf之了),大多数网站编辑显然是利用工具、CMS系统等自动创建html,你看新浪上那些博客们,有几个知道html的。其实如今,有关RDF的开源工具也有很多了,请看这个页面吧:http://planetrdf.com/guide/,2005年之前已经是一个RDF工具热潮,根据http://swoogle.umbc.edu(umbc的语义搜索引擎)爬出的结果,因特网的RDF数量已经有超过1,000,000个,其中77%是验证合格的RDF文档,15%是嵌入rdf的html文档,其他8%可能是不合格的RDF文档。

来自业界的RDF支持也越来越多,其中值得一提的是,Microsoft有个研究项目http://research.microsoft.com/nec/senseweb/ 也使用了本体技术(我最初从herry chen的博客上得到这条消息的),

SenseWeb is a research portal that lets users visualize and query real-time data using a geographical interface such as Windows Live Local and allows data owners to easily publish their live data using a web service interface.

这是一个当前很hot的web地图项目,它使用了本体技术来支持对各种感知数据的自动加入。根据网站介绍,它建构了一个感知类型本体:
The ontology organizes sensor types into a class hierarchy. In this example, the base class is a generic sensor. Derived from it are QuantitySensor and ImageSensor. Thermometer is a subclass of a QuantitySensor and a VideoCamera is a subclass of an ImageSensor. Aggregation operators are defined on the most abstract types. For example, COUNT applies to type Sensor. That is, we can always count the number of sensors in an area. Numerical operators, such as MIN, MAX, and AVERAGE, apply to QuantitySensors. Thus, when a new sensor, say a pressure sensor, is added as a subclass of QuantitySensor, all the appropriate operators automatically apply and their values are shown in the client UI.

在这个里面,本体的作用似乎是将一些类的定义用一种声明性的xml格式表示出来了,但和plain xml不同,例如owl定义了intersection(and)、union(or)、not等描述类之间的关系。因而它可以描述关于类的更复杂的信息。比如说定义一个类需要有下面的属性:“所有来自北京的客户,并且他至少提交了3个订单,其中一个是买书的订单,且不包括下DVD订单的客户。”,而现在我们是将这些约束条件隐含的写在代码当中的。利用owl的语法,可以规范地先描述这些约束条件,然后利用转换工具生成相应代码。

更进一步的,利用支持owl的推理工具,可以为传统的类型系统带来更多的灵活性。A Semantic Web Primer for Object-Oriented Software Developers(一个W3C的文档)上还讲了一个例子:
假设已经定义了一个DutyFreeOrder类,它包括所有来自自由贸易(free-trade)国家的PurchaseOrder。现在假设一个新的用户登陆到商店,并且将一些商品放到购物筐中,这时我们会创建Customer类的实例和PurchaseOrder类的实例,然后,当用户结帐、输入商品邮寄地址时,由推理机来对此PurchaseOrder进行分类,得出一个最低层的类:假设这里是DutyFreeOrder类。接下来,关于DutyFreeOrder的更多的领域知识就可以应用到这个对象上。

RDF/OWL类可以在运行时动态创建和修改,可以借助这个特性来增强传统语言 类型系统的动态性,例如,可以用owl定义一个临时的类,然后由推理机来查询符合这个类定义的所有实例。

posted on 2006-10-27 22:31  Jacquette.wang  阅读(1379)  评论(3编辑  收藏  举报

导航