知识图谱:知识表示之RDF、RDFS、OWL

# 前言 

  • XML与RDF(S)的关系

   XML提供了元数据的组织结构,达到了与平台无关性,也即语法基础;RDF(S)则提供了一种通用性的数据描述方式,解决如何无二义性地描述资源对象的问题,使得描述的资源的元数据信息成为机器可以理解的信息,也即语义基础。RDF要解决的是如何采用XML标准语法无二义性的描述资源对象的问题。

知识图谱:知识表示之RDF、RDFS、OWL_第1张图片

  • 知识表示框架

    RDFRDFSOWL都是基于语义网(Semantic Web)的知识表示框架,还有一种知识表示框架称为分布式表示,即把知识表示为低维稠密向量,例如知识图谱中的TransE模型。

    RDF 是用于描述资源之间关系的语言规范,它对信息内容进行语义化描述,使得描述的资源的元数据信息可被计算理解,实现语义基础。

# RDF

    RDF(Resource Description Framework),即资源描述框架,其本质是一个数据模型(Data Model),而不是一种数据格式。它提供了一个统一的标准,用于描述实体/资源。简单来说,就是表示事物的一种方法和手段。

    RDF三元组 <主体(subject),谓词(predicate),宾语(object)>

知识图谱:知识表示之RDF、RDFS、OWL_第2张图片

  ## RDF序列化方法

    我们怎么存储和传输RDF数据呢?RDF序列化的方式主要有:RDF/XMLN-TriplesTurtleRDFaJSON-LD等几种。

      1)RDF/XML,顾名思义,就是用XML的格式来表示RDF数据。然而,对于RDF来说,XML的格式太冗长,也不便于阅读,通常我们不会使用这种方式来处理RDF数据。

    缺点:有时需要提供足够详细的XML解释文档,否则一些自定义、个性化标签的语义便难以知晓。

    注:Protege工具默认生成的本体格式为RDF/XML Syntax格式

      2)N-Triples,即用多个三元组来表示RDF数据集,是最直观的表示方法。在.nt文件中,每一行表示一个三元组,方便机器解析和处理。开放领域知识图谱DBpedia通常是用这种格式来发布数据的。

      3)Turtle,应该是使用得最多的一种RDF序列化方式了。它比RDF/XML紧凑,且可读性比N-Triples好

      4)RDFa,即“The Resource Description Framework in Attributes”,表示RDF in HTML attributes,是HTML5的一个扩展,在不改变任何显示效果的情况下,让网站构建者能够在页面中标记实体,像人物、地点、时间、评论等等。也就是说,将RDF数据嵌入到网页中,搜索引擎能够更好的解析非结构化页面,获取一些有用的结构化信息。(可以参考这个页面)

      5)JSON-LD,即“JSON for Linking Data”,用键值对的方式来存储RDF数据(可以参考此网站)

    以罗纳尔多知识图的例子,给出其 N-TriplesTurtle 的具体表示。

知识图谱:知识表示之RDF、RDFS、OWL_第3张图片

    # Example1 N-Triples

  "罗纳尔多·路易斯·纳萨里奥·德·利马"^^string.
  "足球运动员"^^string.
  "Ronaldo Luís Nazário de Lima"^^string.
  "1976-09-18"^^date.
  "180"^^int.
  "98"^^int.
  "巴西"^^string.
  .
  "里约热内卢"^^string.
  "-22.908333, -43.196389"^^string.

    # Example2 Turtle:

    用Turtle表示的时候我们会加上前缀(Prefix)对RDF的IRI进行缩写。

    @prefix行为前缀行,即为取一个前缀person:,也就是别名,避免每次命名时都要写这个长长的字符,句子最后的.可写可不写,写上后便于阅读。是IRI

@prefix person:  .
@prefix place:  .
@prefix :  .

person:1 :chineseName "罗纳尔多·路易斯·纳萨里奥·德·利马"^^string.
person:1 :career "足球运动员"^^string.
person:1 :fullName "Ronaldo Luís Nazário de Lima"^^string.
person:1 :birthDate "1976-09-18"^^date.
person:1 :height "180"^^int. 
person:1 :weight "98"^^int.
person:1 :nationality "巴西"^^string. 
person:1 :hasBirthPlace place:10086.
place:10086 :address "里约热内卢"^^string.
place:10086 :coordinate "-22.908333, -43.196389"^^string.

    同一个实体拥有多个属性(数据属性)或关系(对象属性),我们可以只用一个subject来表示,使其更紧凑。我们可以将上面的Turtle改为:

@prefix person:  .
@prefix place:  .
@prefix :  .
 
person:1 :chineseName "罗纳尔多·路易斯·纳萨里奥·德·利马"^^string;
         :career "足球运动员"^^string;
         :fullName "Ronaldo Luís Nazário de Lima"^^string;
         :birthDate "1976-09-18"^^date;
         :height "180"^^int;
         :weight "98"^^int;
         :nationality "巴西"^^string; 
         :hasBirthPlace place:10086.
place:10086 :address "里约热内卢"^^string;
            :coordinate "-22.908333, -43.196389"^^string.

    即将一个实体用一个句子表示(这里的句子指的是一个英文句号“.”)而不是多个句子,属性间用分号隔开。

  ## 扩展内容

  • 类型化文字

    RDF借助类型化文字(typed literal)提供数据类型

    使用“^^”标记来标明文字的类型,使用XML Schema预定义的数据类型。在RDF文档中允许使用任何外部定义的数据类型模式(如geosparql引入wktLiteral),但在实际应用中,最广泛使用的数据类型模式是用XML Schema定义的。它预定义了大量数据类型,包括布尔值、整数、浮点数、时间和日期。 

  • URI和URL

    URIURL是两个相近的概念,但URL只是URI的一种。
    URL就是我们常说的网址,英文全称为Uniform Resource Locators,是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
    URI的英语全称为Uniform Resource Identifier,是统一资源标识符。在RDF三元组中,主语、谓语必须属于某个特定的命名空间,避免相似的名字发生混淆,因此需要使用URI

    换句话说:URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是一种语义上的抽象概念 

知识图谱:知识表示之RDF、RDFS、OWL_第4张图片

     浅谈什么是 URL、URI、IRI、URN 及之间的区别

  ## RDF的表达能力

    RDF的表达能力有限,无法区分概念(类)和对象也无法定义和描述类的关系/属性。RDF是对具体事物的描述(如罗纳尔多),缺乏抽象能力,无法对同一个类别的事物进行定义和描述(如人、地点)。就以罗纳尔多这个知识图为例,RDF能够表达罗纳尔多和里约热内卢这两个实体具有哪些属性,以及它们之间的关系。但如果我们想定义罗纳尔多是人,里约热内卢是地点,并且人具有哪些属性,地点具有哪些属性,人和地点之间存在哪些关系,这个时候RDF就表示无能为力了,这是由于其本身预定义的词汇有限导致的。

  多元关系表示

    有时需要表示的参数超过两个,三元组不便直接表示这种情况,可以通过RDF定义的一组二元谓词来表示。

    如:“马克1858年出生在丹麦”

通过引入额外资源“出生信息111”(也可定义为其他名称,只要遵循URI唯一性原则即可)

    <出生信息111,人物,马克>

    <出生信息111,时间,1858年>

    <出生信息111,地点,丹麦>

    以上表述虽然是多元关系的无损转化,但引入的中间变量“出生信息111”使得“出生”的论元不能直接相连,这样增加了表示的复杂性,也加大了后续处理的难度。如何很好地扩展RDF的表达形式仍是一个开放的问题。

  ## SPARQL

    SPARQL的英文全称为SPARQL Protocol and RDF Query Language,是为RDF开发的一种查询语言和数据获取协议,它是为W3C所开发的RDF数据模型所定义,但是可以用于任何可以用RDF来表示的信息资源。

    从SPARQL的全称我们可以知道,其由两个部分组成:协议查询语言

    1、查询语言很好理解,就像SQL用于查询关系数据库中的数据,XQuery用于查询XML数据,SPARQL用于查询RDF数据。

    2、协议是指我们可以通过HTTP协议在客户端和SPARQL服务器(SPARQL endpoint)之间传输查询和结果,这也是和其他查询语言最大的区别。

    ARQ是SPARQL处理器。它是Apache Jena框架的一部分,Jena是一个用java编写的免费软件 [下载地址]

    # Example test.rq:

PREFIX ab:  

SELECT ?craig_email
WHERE
{ ab:craig ab:email ?craig_email . }

    注解:PREFIX ab: http://learningsparql.com/ns/addressbook# 表示使用哪个URI,并取别名。后续的查询语句类似于SQL,是对三元组做查询,?craig_email为变量(?不构成名称的一部分),查询三元组中的宾语。这是通过将WHERE子句中的三元组模式与RDF图中的三元组进行匹配来实现的。三元组的谓词和对象是固定值,因此模式将仅将三元组与那些值匹配。主题是变量,并且对该变量没有其他限制。模式与这些谓词和对象值匹配任何三元组,并且与craig_email的解匹配。

    题外话:关于知识图谱,有一个非常重要的概念,即开放世界假定(Open-world assumption,OWA)。这个假定的意思是当前没有陈述的事情是未知的,或者说知识图谱没有包含的信息是未知的。怎么理解?首先我们要承认知识图谱无法包含所有完整的信息。以电影数据的例子而言,很明显,它的数据十分残缺。即使我们拥有一个十分完整的电影知识图谱,包含了当下所有的电影、演员等信息,在现实世界中,信息也是动态变化和增长的。即,我们要承认知识图谱的信息本身就是残缺的。基于我们构建的电影知识图谱,提问:周星驰出演了《卧虎藏龙》吗?根据OWA,我们得到的答案是“不知道”,相反,如果是封闭世界假定(Closed-world assumption),我们得到的答案是“没有出演”。我们在设计本体和开发相关应用的时候需要考虑开放世界假定。如果我们知道问题答案,我们会给出肯定的回答,不知道的话,我们往往倾向于回复“我不知道”,“我不太清楚”,“我查查看”,而不是信誓旦旦地回答“没有出演”。毕竟,大多数人都有“自知之明”,知道自己总有不了解的东西。从这个角度上说,人和知识图谱类似,我们都存在于OWA的世界中。

    其他:RDF 和 SPARQL 初探:以维基数据为例

    其他:知识图谱:SPARQL的基本语法示例

# RDFS/OWL

    RDFS和OWL这两种技术或者说模式语言/本体语言(schema/ontology language)解决了RDF表达能力有限的困境(无法区分类和对象、无法定义概念属性)

    RDFS/OWL本质上是一些预定义词汇(vocabulary)构成的集合,用于对RDF进行类似的类定义及其属性的定义。

    RDFS/OWL序列化方式和RDF没什么不同,其实在表现形式上,它们就是RDF。其常用的方式主要是RDF/XML、Turtle。另外,通常我们用小写开头的单词或词组来表示属性(如weight、height),大写开头的表示类(如Person、Place)。属性包括数据属性对象属性:①数据属性(data property,实体和literal字面量的关系)通常由名词组成,而②对象数据(object property,实体和实体之间的关系)通常由动词(has,is之类的)加名词组成。剩下的部分符合驼峰命名法。

  ## 轻量级的模式语言——RDFS(RDF Schema)

    RDFS,即“Resource Description Framework Schema”,是最基础的模式语言。还是以罗纳尔多知识图为例,我们在概念、抽象层面对RDF数据进行定义。下面的RDFS定义了人和地点这两个类,及每个类包含的属性。

@prefix rdfs:  .
@prefix rdf:  .
@prefix :  .

### 这里我们用词汇rdfs:Class定义了“人”和“地点”这两个类。
:Person rdf:type rdfs:Class.
:Place rdf:type rdfs:Class.

### rdfs当中不区分数据属性和对象属性,词汇rdf:Property定义了属性,即RDF的“边”。

:chineseName rdf:type rdf:Property;
		rdfs:domain :Person;
		rdfs:range xsd:string .

:career rdf:type rdf:Property;
		rdfs:domain :Person;
		rdfs:range xsd:string .

:fullName rdf:type rdf:Property;
		rdfs:domain :Person;
		rdfs:range xsd:string .

:birthDate rdf:type rdf:Property;
		rdfs:domain :Person;
		rdfs:range xsd:date .

:height rdf:type rdf:Property;
		rdfs:domain :Person;
		rdfs:range xsd:int .

:weight rdf:type rdf:Property;
		rdfs:domain :Person;
		rdfs:range xsd:int .

:nationality rdf:type rdf:Property;
		rdfs:domain :Person;
		rdfs:range xsd:string .

:hasBirthPlace rdf:type rdf:Property;
		rdfs:domain :Person;
		rdfs:range :Place .

:address rdf:type rdf:Property;
		rdfs:domain :Place;
		rdfs:range xsd:string .

:coordinate rdf:type rdf:Property;
		rdfs:domain :Place;
		rdfs:range xsd:string .

    RDFS几个比较重要,常用的词汇:

  1. rdfs:Class. 用于定义类
  2. rdfs:domain. 用于表示该属性属于哪个类别
  3. rdfs:range. 用于描述该属性的取值类型
  4. rdfs:subClassOf. 用于描述该类的父类。比如,我们可以定义一个运动员类,声明该类是人的子类。
  5. rdfs:subProperty. 用于描述该属性的父属性。比如,我们可以定义一个名称属性,声明中文名称和全名是名称的子类。

    其实 rdf:Property rdf:type 也是RDFS的词汇,因为RDFS本质上就是RDF词汇的一个扩展。我们在这里不罗列进去,是不希望读者混淆。RDFS其他的词汇及其用法请参考W3C官方文档。

知识图谱:知识表示之RDF、RDFS、OWL_第5张图片

    Data层是我们用RDF对罗纳尔多知识图的具体描述,Vocabulary是我们自己定义的一些词汇(类别,属性),RDF(S)则是预定义词汇。从下到上是一个具体到抽象的过程。图中我们用红色圆角矩形表示类,绿色字体表示rdf:type,rdfs:domain,rdfs:range三种预定义词汇,虚线表示rdf:type这种所属关系。

  ##  RDFS的扩展——OWL

    RDFS本质上是RDF词汇的一个扩展。后来人们发现RDFS的表达能力还是相当有限,因此提出了OWL。我们也可以把OWL当做是RDFS的一个扩展,其添加了额外的预定义词汇RDFS当中不区分数据属性对象属性,而OWL区分数据属性对象属性(F:在RDFS中属性均表示为 rdf:Property,而OWL中数据属性为 owl:DatatypeProperty,对象属性为 owl:ObjectProperty)

    OWL,即“Web Ontology Language”,语义网技术栈的核心之一。OWL有两个主要的功能:

      1)提供快速、灵活的数据建模能力。

      2)高效的自动推理。

    用OWL对罗纳尔多知识图进行语义层的描述:

@prefix rdfs:  .
@prefix rdf:  .
@prefix :  .
@prefix owl:  .

### 这里我们用词汇owl:Class定义了“人”和“地点”这两个类。
:Person rdf:type owl:Class.
:Place rdf:type owl:Class.

### owl区分数据属性和对象属性(对象属性表示实体和实体之间的关系)。词汇owl:DatatypeProperty定义了数据属性,owl:ObjectProperty定义了对象属性。
:chineseName rdf:type owl:DatatypeProperty;
		rdfs:domain :Person;
		rdfs:range xsd:string .

:career rdf:type owl:DatatypeProperty;
		rdfs:domain :Person;
		rdfs:range xsd:string .

:fullName rdf:type owl:DatatypeProperty;
		rdfs:domain :Person;
		rdfs:range xsd:string .

:birthDate rdf:type owl:DatatypeProperty;
		rdfs:domain :Person;
		rdfs:range xsd:date .

:height rdf:type owl:DatatypeProperty;
		rdfs:domain :Person;
		rdfs:range xsd:int .

:weight rdf:type owl:DatatypeProperty;
		rdfs:domain :Person;
		rdfs:range xsd:int .

:nationality rdf:type owl:DatatypeProperty;
		rdfs:domain :Person;
		rdfs:range xsd:string .

:hasBirthPlace rdf:type owl:ObjectProperty;
		rdfs:domain :Person;
		rdfs:range :Place .

:address rdf:type owl:DatatypeProperty;
		rdfs:domain :Place;
		rdfs:range xsd:string .

:coordinate rdf:type owl:DatatypeProperty;
		rdfs:domain :Place;
		rdfs:range xsd:string .

    schema层的描述语言换为OWL后,层次图表示为:

知识图谱:知识表示之RDF、RDFS、OWL_第6张图片

    owl区分数据属性和对象属性(对象属性表示实体和实体之间的关系)。词汇owl:DatatypeProperty定义了数据属性,owl:ObjectProperty定义了对象属性。上图中,数据属性用青色表示,对象属性由蓝色表示。

    罗纳尔多这个例子不能展现OWL丰富的表达能力(可以看出owl表达跟rdfs相比没什么太大的区别),我们这里简单介绍一下owl常用的词汇:

    描述属性特征的词汇(注:owl的推理体现在这里)

      1. owl:TransitiveProperty:表示该属性具有传递性质。例如,我们定义“位于”是具有传递性的属性,若A位于B,B位于C,那么A肯定位于C。

      2. owl:SymmetricProperty:表示该属性具有对称性。例如,我们定义“认识”是具有对称性的属性,若A认识B,那么B肯定认识A。

      3. owl:FunctionalProperty:表示该属性取值的唯一性,即规定一个属性对任何对象最多只能取一个值。 例如,我们定义“母亲”是具有唯一性的属性,若A的母亲是B,在其他地方我们得知A的母亲是C,那么B和C指的是同一个人。

      4. owl:InverseFunctionalProperty:定义逆函数性,即规定一个属性对不同的对象不能取相同的值,例如身份证号。

      5. owl:inverseOf:定义某个属性的相反关系。例如,定义“父母”的相反关系是“子女”,若A是B的父母,那么B肯定是A的子女。

    本体映射词汇(Ontology Mapping)

  1. owl:equivalentClass. 表示某个类和另一个类是相同的。
  2. owl:equivalentProperty. 表示某个属性和另一个属性是相同的。
  3. owl:sameAs. 表示两个实体是同一个实体。

    本体映射主要用在融合多个独立的Ontology(Schema)。举个例子,张三自己构建了一个本体结构,其中定义了Person这样一个类来表示人;李四则在自己构建的本体中定义Human这个类来表示人。当我们融合这两个本体的时候,就可以用到OWL的本体映射词汇。而语义网中提到的Linked Open Data,如果没有OWL,我们将无法融合这些知识图谱。

  ## RDFS → OWL

    一般来说,表达能力越强的语言,推理的效率就越低,甚至是不可计算的。这就需要一个兼顾两方面需求的语言,在能够高效推理的同时又有描述各种本体和知识的充分表达能力。理想情况下,OWL应是RDFS的一个扩展,以便继续使用RDFS中类和属性的含义,并增加一些建模原语提供更强的表达能力,遗憾的是,对RDFS的简单扩展不能同时保证表达能力和推理效率。这促使网络本体工作组定义了OWL的三个不同的子语言,每个子语言在不同层次(程度)上实现整体需求。

  ①OWL Full

    完整的OWL语言称为OWL Full,使用了OWL的所有原语。它的优点是语法和语义上都相对于RDF完全向上兼容——任何合法的RDF文档都是合法的OWL Full文档;任何有效的RDF/RDFS推论都是有效的OWL Full推论。缺点是OWL Full的表达能力过于强大,以致于是不可判定的,从而排除了完备或高效推理支持的任何希望

  ②OWL DL

    OWL DL(DL是描述逻辑的缩写)的优点是保证了高效率推理支持,缺点是不能与RDF完全兼容——合法的RDF文档一般需通过一些扩展或限制才能成为合法的OWL DL 文档,但每个合法的OWL DL文档都是合法的RDF文档。

  ③OWL Lite

    OWL Lite 是对OWL DL的构造施加了进一步限制的子语言。优点是容易掌握(对用户而言)和实现(对开发工具),缺点是表达能力有限。

    注:OWL有两个预定义的类:owl:Thing 和 owl:Nothing,前者是最一般的类,包含所有东西,后者是空类。每个类都是 owl:Thing 的子类和 owl:Nothing 的父类。

  • OWL 2

    目前,OWL的最新版本是OWL 2,在兼容OWL的基础上添加了新的功能,有兴趣的读者可以查阅W3C文档。另外,OWL 2包含了三个标准,或者三种配置(Profile),它们是OWL 2完整标准(OWL 2/Full)的一个子集。读者目前不用考虑它们之间的差别,只有当我们要用到OWL自动推理功能的时候才需要考虑到底使用哪一种配置。且在大多数情况下,我们需要知道哪种配置才是最合适的。下面简单说说它们使用的场景:

    1. OWL 2/EL 使用场景:本体结构中有大量相互链接的类和属性,设计者想用自动推理机得到里面复杂的关系。

    2. OWL 2/QL 使用场景:有大量的实例数据。OWL 2 QL本体可以被改写为SQL查询,适用于使用OBDA(ontology based data access)的方式来访问关系数据库。也就是说我们不用显式地把关系数据库中的数据转为RDF,而是通过映射的方式,将数据库转为虚拟RDF图进行访问。

    3. OWL 2/RL 使用场景:需要结合基于规则的推理引擎(rule-based reasoning engine)的场合。

# 推理机(reasoner)

    知识图谱的推理主要分为两类:基于本体的推理和基于规则的推理。我们这里谈的是基于本体的推理。 RDFS同样支持推理,由于缺乏丰富的表达能力,推理能力也不强。举个例子,我们用RDFS定义人和动物两个类,另外,定义人是动物的一个子类。此时推理机能够推断出一个实体若是人,那么它也是动物。OWL当然支持这种基本的推理,除此之外,凭借其强大的表达能力,我们能进行更有实际意义的推理。想象一个场景,我们有一个庞大数据库存储人物的亲属关系。里面很多关系都是单向的,比如,其只保存了A的父亲(母亲)是B,但B的子女字段里面没有A,如果我们用 owl:inversOf 来表示 hasParent 和 hasChild 互为逆关系,可以推理得到B的子女A。

知识图谱:知识表示之RDF、RDFS、OWL_第7张图片

    绿色的关系表示是我们RDF数据中真实存在的,红色的关系是推理得到的。通过这个例子,相信读者应该初步了解了OWL的推理功能和能力。 

# 参考

    知识图谱—RDF、RDFS、OWL

    知识图谱学习笔记(1)

    知识图谱基础之RDF,RDFS与OWL--知乎   

    ⭐语义网知识表示方法:RDF,RDFS与OWL

    SPARQL入门(一)SPARQL简介与简单使用

    sparql入门-中文教程

    sparql 查询语句快速入门


你可能感兴趣的:(知识图谱,知识图谱)