知识图谱里的知识表示:RDFs和OWL

1.RDFs

在我们之前文章介绍的RDF描述框架中,可以看到RDF提供了一些基本的rdf词汇以供使用(比如rdf:type用于指定资源类型),但是如果想描述某个领域里类别和属性的层级结构、包含关系是远远不够的,于是w3c又推出了RDF schema(RDFs)(定义文档:http://www.w3.org/2000/01/rdf-schema ),使用RDF语言编写,它在rdf词汇基础上扩展了一套数据建模词汇来描述数据的模式层,对rdf中的数据进行约束以及规范。

注意RDFs是对RDF的扩展,所以也包含了RDF定义的词汇比如rdf:type、rdf:Property。

在RDF定义文档中,已经采用了一部分RDFs定义的词汇来描述RDF本身具备了哪些内容。rdf:type是在最初版本的rdf语法存在的一个谓语词汇,用来说明主语实体的类型。后来有了RDFs以后,又对这个谓语词汇本身进行了更详细的解释,如下所示使用了rdfs:range和rdfs:domain等RDFs词汇对rdf:type这个词汇进行详细的解释。

rdf:type a rdf:Property ;
    rdfs:isDefinedBy <http://www.w3.org/1999/02/22-rdf-syntax-ns#> ;
    rdfs:label "type" ;
    rdfs:comment "The subject is an instance of a class." ;
    rdfs:range rdfs:Class ;
    rdfs:domain rdfs:Resource .

RDF Schema的类型属性系统类似于面向对象编程语言的类型系统。不同之处在于,RDF Schema不是根据对象可能具有的属性来定义类,而是根据属性可能归属的类型和取值范围来定义。RDFs中有两个非常重要的词汇就是domain和range

  • rdfs:domain 用来表示属性的域,即属于哪个类别,可以理解为三元组中主语的类型约束

  • rdfs:range 用来表示属性的取值类型,可以理解为三元组中宾语的类型约束

例如,我们可以将 author 这个属性定义为具有域(domain)为 Book(即所属类型) 和取值范围(range)为 Person,而经典的面向对象的系统的一般做法则是,定义一个类型 Book,这个类有一个 author的属性。

使用RDFs方法的好处在于,当一个类型被定义以后,其他人可以很容易地向其中添加额外的属性,因为添加属性可以在不需要重新修改这些类的原始描述的情况下完成。这正是以属性为中心来构建类型系统的优势所在,允许任何人扩展现有资源的描述。

比如我们已经有一条定义Person这个类的描述

有个人A向这个Person类添加一条属性:

<hometown, rdf:type, rdf:Property>
<hometown, rdfs:domain, Person>
<hometown, rdfs:range, Place>

有个人B又向这个Person类添加一条属性:

<age, rdf:type, rdf:Property>
<age, rdfs:domain, Person>
<age, rdfs:range, xsd:int>

这两个人的修改并不需要改动原来Person类的定义。

除了这rdfs:range和rdfs:domain两个词汇以外,还有一些重要的词汇比如:

  • rdfs:Class 所有RDF类型所属的类型。因此rdfs:Class也是rdfs:Class自己的一个实例.
  • rdfs:subClassOf 用来描述一个类的父类。如可以定义Person的父类为Animal。
  • rdfs:Resource RDF描述的所有内容都称为资源,并且都是类rdfs:Resource的实例。一切事物都属于这个类别,所有其他类则是此类的子类。而rdfs:Resource本身又是rdfs:Class的一个实例。

2.OWL

RDFs的表达能力比较弱,于是网络本体语言 OWL(Web Ontology Language) 又被提了出来,为网络本体的构建提供了丰富的建模原语。

什么是本体

本体是一组对世界某一部分(通常被称为本体的兴趣领域或题材)的精确的描述性陈述。精确的描述要满足几个因素:最重要的,要防止在人类交流中产生误解,要保证软件以统一且可预测的方式表现,并且能够与其他的软件很好地协同工作。 OWL不是一种编程语言:OWL是声明性的(declarative),也就是说,它用逻辑的方式描述一个事务的状态。

OWL由 W3C 的 Web 本体工作小组开发,2004 年发布为W3C 推荐标准。2009年又发布了OWL2 ,是对 OWL1 的扩展和修订版。OWL除了拥有像RDFs一样灵活的数据建模能力之外,还提供了一套可以帮助计算机进行自动推理的功能强大的词汇:

属性性质声明

  • owl:TransitiveProperty. 声明属性的传递性质。例如“位于”这种关系就具有传递性,如果我们知识库里有(华为总部,位于,深圳)和(深圳,位于,广东)这两条三元组知识,那么根据传递性质,机器就可以判定并生成(华为总部,位于,广东)这条新知识。
  • owl:inverseOf. 声明两种关系之间是互反关系,比如“父母”和“子女”就是一组互反关系。
  • owl:SymmetricProperty. 声明两种关系之间是对称关系,比如声明 “mg:friend rdf:type owl:SymmetricProperty”,则根据(mg:小明,mg:friend,mg:小红),有 (mg:小红,mg:friend,mg:小明)
  • owl:FunctionalProperty. 声明属性具有函数性(唯一性),即具体到每个实体在该属性上的取值只能有一个。

类型关系声明

OWL中还提供了一些词汇来表示在不同类型做AND,OR 和 NOT操作:

  • owl: intersectionOf 表示某些类型的交集。
mg:两栖艺人 owl: intersectionOf temp
temp rdf: type rdfs: Collection
temp rdfs member mg:歌手
temp rdfs member mg:演员

上面的三元组就是说两栖艺人这个类型是歌手和演员这两个类型的交集,其中temp表示临时资源。

此外这种类型的词汇还有:

  • owl: oneof 声明枚举类型
  • owl: disjoint with 声明两个类型不相交
  • owl: union of 声明某个类型为其他类型的并集运算

以上就是OWL中非常常见的一些词汇,但还有很多没有提及,以后碰到了我们在进行详细的介绍。