XML提供了元数据的组织结构,达到了与平台无关性,也即语法基础;RDF(S)则提供了一种通用性的数据描述方式,解决如何无二义性地描述资源对象的问题,使得描述的资源的元数据信息成为机器可以理解的信息,也即语义基础。RDF要解决的是如何采用XML标准语法无二义性的描述资源对象的问题。
RDF、RDFS与OWL都是基于语义网(Semantic Web)的知识表示框架,还有一种知识表示框架称为分布式表示,即把知识表示为低维稠密向量,例如知识图谱中的TransE模型。
RDF 是用于描述资源之间关系的语言规范,它对信息内容进行语义化描述,使得描述的资源的元数据信息可被计算理解,实现语义基础。
RDF(Resource Description Framework),即资源描述框架,其本质是一个数据模型(Data Model),而不是一种数据格式。它提供了一个统一的标准,用于描述实体/资源。简单来说,就是表示事物的一种方法和手段。
RDF三元组 <主体(subject),谓词(predicate),宾语(object)>
我们怎么存储和传输RDF数据呢?RDF序列化的方式主要有:RDF/XML,N-Triples,Turtle,RDFa,JSON-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-Triples 和 Turtle 的具体表示。
# 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行为前缀行,即为
@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是两个相近的概念,但URL只是URI的一种。
URL就是我们常说的网址,英文全称为Uniform Resource Locators,是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
URI的英语全称为Uniform Resource Identifier,是统一资源标识符。在RDF三元组中,主语、谓语必须属于某个特定的命名空间,避免相似的名字发生混淆,因此需要使用URI。
换句话说:URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是一种语义上的抽象概念
浅谈什么是 URL、URI、IRI、URN 及之间的区别
RDF的表达能力有限,无法区分概念(类)和对象,也无法定义和描述类的关系/属性。RDF是对具体事物的描述(如罗纳尔多),缺乏抽象能力,无法对同一个类别的事物进行定义和描述(如人、地点)。就以罗纳尔多这个知识图为例,RDF能够表达罗纳尔多和里约热内卢这两个实体具有哪些属性,以及它们之间的关系。但如果我们想定义罗纳尔多是人,里约热内卢是地点,并且人具有哪些属性,地点具有哪些属性,人和地点之间存在哪些关系,这个时候RDF就表示无能为力了,这是由于其本身预定义的词汇有限导致的。
有时需要表示的参数超过两个,三元组不便直接表示这种情况,可以通过RDF定义的一组二元谓词来表示。
如:“马克1858年出生在丹麦”
通过引入额外资源“出生信息111”(也可定义为其他名称,只要遵循URI唯一性原则即可)
<出生信息111,人物,马克>
<出生信息111,时间,1858年>
<出生信息111,地点,丹麦>
以上表述虽然是多元关系的无损转化,但引入的中间变量“出生信息111”使得“出生”的论元不能直接相连,这样增加了表示的复杂性,也加大了后续处理的难度。如何很好地扩展RDF的表达形式仍是一个开放的问题。
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这两种技术或者说模式语言/本体语言(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,即“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几个比较重要,常用的词汇:
其实 rdf:Property 和 rdf:type 也是RDFS的词汇,因为RDFS本质上就是RDF词汇的一个扩展。我们在这里不罗列进去,是不希望读者混淆。RDFS其他的词汇及其用法请参考W3C官方文档。
Data层是我们用RDF对罗纳尔多知识图的具体描述,Vocabulary是我们自己定义的一些词汇(类别,属性),RDF(S)则是预定义词汇。从下到上是一个具体到抽象的过程。图中我们用红色圆角矩形表示类,绿色字体表示rdf:type,rdfs:domain,rdfs:range三种预定义词汇,虚线表示rdf:type这种所属关系。
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后,层次图表示为:
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)
本体映射主要用在融合多个独立的Ontology(Schema)。举个例子,张三自己构建了一个本体结构,其中定义了Person这样一个类来表示人;李四则在自己构建的本体中定义Human这个类来表示人。当我们融合这两个本体的时候,就可以用到OWL的本体映射词汇。而语义网中提到的Linked Open Data,如果没有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的最新版本是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)的场合。
知识图谱的推理主要分为两类:基于本体的推理和基于规则的推理。我们这里谈的是基于本体的推理。 RDFS同样支持推理,由于缺乏丰富的表达能力,推理能力也不强。举个例子,我们用RDFS定义人和动物两个类,另外,定义人是动物的一个子类。此时推理机能够推断出一个实体若是人,那么它也是动物。OWL当然支持这种基本的推理,除此之外,凭借其强大的表达能力,我们能进行更有实际意义的推理。想象一个场景,我们有一个庞大数据库存储人物的亲属关系。里面很多关系都是单向的,比如,其只保存了A的父亲(母亲)是B,但B的子女字段里面没有A,如果我们用 owl:inversOf 来表示 hasParent 和 hasChild 互为逆关系,可以推理得到B的子女A。
绿色的关系表示是我们RDF数据中真实存在的,红色的关系是推理得到的。通过这个例子,相信读者应该初步了解了OWL的推理功能和能力。
知识图谱—RDF、RDFS、OWL
知识图谱学习笔记(1)
知识图谱基础之RDF,RDFS与OWL--知乎
⭐语义网知识表示方法:RDF,RDFS与OWL
SPARQL入门(一)SPARQL简介与简单使用
sparql入门-中文教程
sparql 查询语句快速入门