语义网的高级语言

2015年3月14日 05:08 阅读 1378
//baojie.org/blog/2012/11/27/advanced-language-of-semantic-web/

语义网的高级语言

Posted on 2012-11-27 by BAOJIE

在谈论语义网的时候,要和RDF路线区分开来。

和一些人谈到语义网,他们说:“语义网死了”。如果从RDF的角度来说,是的——虽然W3C路线的支持者还不承认。

但是这种观点,就如同计算机在只有机器语言,没有高级语言的时候就断言:“计算机死了”。

我大胆提出两个假设

  • RDF是一门低级语言,只适合机器使用——如同机器语言或者汇编语言
  • 语义网需要一门高级语言,面向工程师(人),用来做大规模知识库的写作、重用

为什么说RDF是低级机器语言?

  • 用URL来寻址并不错。但是把精确寻址的任务交给人,要求人来设计URL,就如同在C编程中要求人对每个变量赋予内存地址。
  • RDF是一个“平坦”(flat)的语言,缺少内部的组织单元。有很多建议,引入诸如package, named graph这样的组织单元,但目前还没有达成共识或广泛采用。
  • RDF的语法,即使是Turtle,也没有可读性,理解和重用起来非常困难。
  • RDF缺少“宏”或者构造高层次组织的能力。其实SPARQL弥补了一点,就是graph pattern;一些语言如SPIN,把graph pattern作为可重用的单元,甚至可以生成新的数据。如果把这个能力作为RDF原生的能力就好了。

2010年RDF Working Group开预备会议,我也与会了。现在回来看,我那时的想法是错误的:为RDF引入更精确的语义,基于上下文(context)的组织和寻址,并不合适——虽然Pat Hayes后来很喜欢这个想法并在工作组内推一个类似的想法。

RDF的问题不是逻辑太少了,而是逻辑太多了。

知识工程的问题往往是太多考虑机器的需要,而不太考虑人的需要。而知识工程的瓶颈,又恰恰在人而不在机器。

RDF 1.1现在的几个努力方向:JSON语法,Named Graph, Turtle Syntax,这些都是好的。但是还不够。我甚至怀疑,在RDF框架内能不能达到易用性的目的。

因为从一开始,RDF就被设计成machine understandable语言。这本是好的,至少在1999年。但是一个缺少高级语言的情况,就好像编程语言的早期。结果就是知识工程的人月神话。

现在的情况也很象Web发明的时候:在Internet上,TCP/IP是面向机器的低级语言,而HTML和URL是面向人的高级语言。我觉得,现在有一个强烈的需要来设计一个Semantic Web的高级语言。

这样的高级语言要有什么特征呢?我觉得大体有这样几点

  • 支持多粒度的知识/数据组织和重用
  • 用字符串而不是URL来寻址。不追求addressing uniqueness, 而是probable and eventual addressing uniqueness
  • 支持知识的分布式传输(按一定粒度)
  • 使用目前主流程序员熟悉的语法形式。
  • 尽可能少重新发明轮子——比如rdf:plainLiteral(我是作者之一)这样的字符串类型就没什么必要
  • 支持结构化和非结构化数据的混合表达(RDF有Literal,不过,那个太局限了)
  • 这个语言的文档不要提什么“语义”(有几个程序员关心SQL的语义?),不要规定什么schema
  • 把推理转化为图的操作或者编程语言内置的运算。在这之外的推理都先不考虑。
  • 从一开始就设计成在cluster上能运行的语言
  • 拜托,用程序员看的懂的语言和例子写文档。

其实这样的语言雏形的一些部分,在不同的技术平台上都已经自发出现了。语义维基,图数据库,新一代检索引擎,都包含了上述部分概念。有心人要做的,就是一个有机的组合。我想,在我写这一段的时候,大概已经有人开始做了。

P.S. 我甚至觉得,都没有必要引入一个新的高级语言语法,就在现有的某种贴近RDF的编程语言里,做少量的增加就能实现目的。最理想的就是Python。为什么这么说?JSON本身就是Python的数据结构。而几乎所有的数据API都吃JSON。Python的类与属性定义与关系就是RDF的翻版。

其实更合适的是Lisp。但是Lisp对抽象思维要求太高,社区又太小。做面向Web的开发,为了工程经济性(人力上的),还是Python比较合适。

P.S. 2 2013-03-04 最近在用PyDatalog和Fuxi,两个Python的推理工具。感觉有了PyDatalog,真的可以用Python直接表达语义数据了,各种传统RDF/OWL/RIF的弱点都被克服了。我fork了一份PyDatalog在Github上 https://github.com/baojie/pydatalog