目录
本篇内容
本篇主要介绍RDF(资源描述框架),包括RDF概念,语法,RDFS等等。
准备
HTML和其他交换语言都拥有以下三个组成元素:
- 语法:语法告诉我们如何撰写数据
- 数据模型:数据模型告诉我们数据的结构或组织形式
- 语义:语义告诉我们如何解释数据
RDF提供了一个灵活且领域无关的数据模型,它的基础构件式一个实体-属性-取值的三元组,称为声明。
一、RDF:数据模型
RDF中的基本概念包括资源、属性、声明和图
资源就是一个对象,每一个资源都有一个URI,一种唯一的标识符。使用 URI 是 RDF背后的一个关键设计方案。它允许全球唯一的命名方案的存在。 使用这种机制能够大幅缓解迄今为止困扰分布式数据表示的一词多义问题。
属性描述了资源之间的关系,比如:friend of,written by,located in。属性也由URI标识,可以解引用属性的URL来找到它们的描述。
声明断言了资源的属性。 一个声明是一个实体-属性-取值的三元组,由一个资源、一个属性和一个属性值组成。属性值要么是一个资源,要么是一个文字。 文字是原子值,例如,数字、字符串或日期。我们经常使用主语一词来指称三元组里的实体,而使用宾语来指称其取值。
我们可以用图形化的方式来书写声明。
一个声明的宾语可以是另一个声明的主语
有时我们需要声明一个声明的创建者,其中有一种方法叫做具体化,我们以人民大会堂位于北京为例:
二、RDF语法
Turtle - Terse RDF Triple Language
应该是使用得最多的一种RDF序列化方式了。它比RDF/XML紧凑,且可读性比N-Triples好。
RDF/XML
顾名思义,就是用XML的格式来表示RDF数据。之所以提出这个方法,是因为XML的技术比较成熟,有许多现成的工具来存储和解析XML。然而,对于RDF来说,XML的格式太冗长,也不便于阅读,通常我们不会使用这种方式来处理RDF数据。
RDFa
即“The Resource Description Framework in Attributes”,是HTML5的一个扩展,在不改变任何显示效果的情况下,让网站构建者能够在页面中标记实体,像人物、地点、时间、评论等等。也就是说,将RDF数据嵌入到网页中,搜索引擎能够更好的解析非结构化页面,获取一些有用的结构化信息。读者可以去这个页面感受一下RDFa,其直观展示了普通用户看到的页面,浏览器看到的页面和搜索引擎解析出来的结构化信息。
N-Triples
即用多个三元组来表示RDF数据集,是最直观的表示方法。在文件中,每一行表示一个三元组,方便机器解析和处理。开放领域知识图谱DBpedia通常是用这种格式来发布数据的。
JSON-LD
即“JSON for Linking Data”,用键值对的方式来存储RDF数据。
以下具体实例转自知乎知识图谱基础之RDF,RDFS与OWL
Example1 N-Triples:
<http://www.kg.com/person/1> <http://www.kg.com/ontology/chineseName> "罗纳尔多·路易斯·纳萨里奥·德·利马"^^string.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/career> "足球运动员"^^string.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/fullName> "Ronaldo Luís Nazário de Lima"^^string.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/birthDate> "1976-09-18"^^date.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/height> "180"^^int.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/weight> "98"^^int.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/nationality> "巴西"^^string.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/hasBirthPlace> <http://www.kg.com/place/10086>.
<http://www.kg.com/place/10086> <http://www.kg.com/ontology/address> "里约热内卢"^^string.
<http://www.kg.com/place/10086> <http://www.kg.com/ontology/coordinate> "-22.908333, -43.196389"^^string.
用Turtle表示的时候我们会加上前缀(Prefix)对RDF的IRI进行缩写。
Example2 Turtle:
@prefix person: <http://www.kg.com/person/> .
@prefix place: <http://www.kg.com/place/> .
@prefix : <http://www.kg.com/ontology/> .
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改为:
Example3 Turtle:
@prefix person: <http://www.kg.com/person/> .
@prefix place: <http://www.kg.com/place/> .
@prefix : <http://www.kg.com/ontology/> .
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的表达能力有限,无法区分类和对象,也无法定义和描述类的关系/属性。引用博主的理解是,RDF是对具体事物的描述,缺乏抽象能力,无法对同一个类别的事物进行定义和描述。就以罗纳尔多这个知识图为例,RDF能够表达罗纳尔多和里约热内卢这两个实体具有哪些属性,以及它们之间的关系。但如果我们想定义罗纳尔多是人,里约热内卢是地点,并且人具有哪些属性,地点具有哪些属性,人和地点之间存在哪些关系,这个时候RDF就表示无能为力了。不论是在智能的概念上,还是在现实的应用当中,这种泛化抽象能力都是相当重要的;同时,这也是知识图谱本身十分强调的。RDFS和OWL这两种技术或者说模式语言/本体语言(schema/ontology language)解决了RDF表达能力有限的困境。
三、RDFS:添加语义
RDF 是一种通用语言, 它允许用户使用他们自己的词汇表来描述资源。 RDF 既不假设与任何特定应用领域有关,也不定义任何领域的语义。为了指明语义,一个开发者或用户需要通过 RDF 模式中定义的一组基本的领域无关的结构来定义其词汇表的含义。
RDFS/OWL序列化方式和RDF没什么不同,其实在表现形式上,它们就是RDF。其常用的方式主要是RDF/XML,Turtle。另外,通常我们用小写开头的单词或词组来表示属性,大写开头的表示类。数据属性(data property,实体和literal字面量的关系)通常由名词组成,而对象属性(object property,实体和实体之间的关系)通常由动词(has,is之类的)加名词组成。剩下的部分符合驼峰命名法。为了将它们表示得更清楚,避免读者混淆,之后我们都会默认这种命名方式。读者实践过程中命名方式没有强制要求,但最好保持一致。
RDFS,即“Resource Description Framework Schema”,是最基础的模式语言。还是以罗纳尔多知识图为例,我们在概念、抽象层面对RDF数据进行定义。下面的RDFS定义了人和地点这两个类,及每个类包含的属性。
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <http://www.kg.com/ontology/> .
### 这里我们用词汇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几个比较重要,常用的词汇:
-
rdfs:Class. 用于定义类。
-
rdfs:domain. 用于表示该属性属于哪个类别。
-
rdfs:range. 用于描述该属性的取值类型。
-
rdfs:subClassOf. 用于描述该类的父类。比如,我们可以定义一个运动员类,声明该类是人的子类。
-
rdfs:subProperty. 用于描述该属性的父属性。比如,我们可以定义一个名称属性,声明中文名称和全名是名称的子类。
其实rdf:Property和rdf:type也是RDFS的词汇,因为RDFS本质上就是RDF词汇的一个扩展。我们在这里不罗列进去,是不希望读者混淆。
为了让读者更直观地理解RDF和RDFS/OWL在知识图谱中所代表的层面,我们用下面的图来表示例子中的数据层和模式层。
Data层是我们用RDF对罗纳尔多知识图的具体描述,Vocabulary是我们自己定义的一些词汇(类别,属性),RDF(S)则是预定义词汇。从下到上是一个具体到抽象的过程。图中我们用红色圆角矩形表示类,绿色字体表示rdf:type,rdfs:domain,rdfs:range三种预定义词汇,虚线表示rdf:type这种所属关系。另外,为了减少图中连线的交叉,我们只保留了career这一个属性的rdf:type所属关系,省略了其他属性的此关系。
四、RDFS:语言
定义RDFS的建模原语:
4.1 核心类
rdfs:Resource, 所有资源的类。
rdfs:Class, 所有类的类。
rdfs:Literal, 所有文字(字符串) 的类。
rdf:Property, 所有属性的类。
rdf:Statement, 所有具体化声明的类。
4.2 定义联系的核心属性
rdf:type, 将一个资源关联到它的类。该资源被声明为该类的一个实例。
rdfs:subClassOf, 将一个类关联到它的超类。一个类的所有实例都是它的超类的实例。注意, 一个类可能是多个类的子类。例如,类 femaleProfessor 可能同时是 female
和 professor 的子类。
rdfs:subPropertyOf, 将一个属性关联到它超属性中的一个。
4.3 限制属性的核心属性
rdfs:domain, 指定一个属性P的定义域, 声明任何拥有某个给定属性的资源是定义域类的一个实例。
rdfs:range, 指定一个属性P的值域,声明一个属性的取值是值域类的实例。
以下这个例子说明,address的定义域是一个unit(单元),值域是一个文字。
swp:address rdfs:domain swp:Unit.
swp:address rdfs:range rdf:Literal.
4.4 对具体化有用的属性
rdf:subject, 将一个具体化声明关联到它的主语。
rdf:predicate, 将一个具体化声明关联到它的谓语。
rdf:object , 将一个具体化属性关联到它的宾语。
4.5 容器类
RDF 还允许用一个标准的方式表达容器。可以表达包 、序列或选择。
rdf:Bag, 包的类。
rdf:Seq, 序列的类。
rdf:Alt, 选择的类。
rdfs Container, 所有容器类的超类,包括前面提到的 3 种。
4.6 效用属性
一个资源可以在万维网上的许多地方被定义和描述。 下列属性允许我们定义链接到这些地址:
rdfs:seeAlso, 将一个资源关联到另一个解释它的资源。
rdfs:isDefinedBy, 它是 rdfs:seeAlso 的一个子属性,将一个资源关联到它的定义之处,一般是一个 RDF 模式。
为方便阅读,可以通过定义以下属性来实现:
rdfs:comment, 注释, 一般是长的文本, 可以与一个资源关联。
rdfs:label, 将一个易读的标签(名字) 与一个资源关联。其中的一个目的是用作RDF文档的图形化表示中节点的名称。
4.7 住房示例
©prefix swp: <http://www.semanticwebprimer.org/ontology/apartments.
©prefix rdf: <http://www.w3.Org/1999/02/22-rdf-syntax-ns#>.
©prefix rdfs: <http://www.w3.Org/2000/01/rdf-schema#>.
swp:Person rdf:type rdfs:Class.
swp:Person rdfs:comment "The class of people".
swp:Unit rdf:type rdfs:Class.
swp:Unit rdfs:comment "A self-contained section of accommodations in a larger building or group of buildings.".
swp:ResidentialUnit rdf:type rdfs:Class.
swp:ResidentialUnit rdfs:subClassOf swp:Unit.
swp:ResidentialUnit rdfs:comment "The class of all units or places where people live.".
swp:Apartment rdf:type rdfs:Class.
swp;Apartment rdfs:subClassOf swp:ResidentialUnit.
swp:Apartment rdfs:comments "The class of apartments".
swp:House rdf:type rdfs:Class.
swp:House rdfs:subClassOf swp:ResidentialUnit.
swp:House rdfs:comment "The class of houses".
swp.residesAt rdf:type rdfs:Property.
swp:residesAt rdfs:comment "Relates persons to their residence".
swp:residesAt rdfs:domain swp:Person.
swp:residesAt rdfs:range swp:ResidentialUnit.
swp:rents rdf:type rdfs:Property.
swp.rents rdfs:comment "It inherits its domain (swp:Person) and range (swp:ResidentialUnit) from its superproperty (swp:residesAt)".
swp:rents rdfs:subPropertyOf swp:residesAt.
swp:address rdf:type rdfs;Property.
swp:address rdfs:comment "Is a property of units and takes literals as its value".
swp:address rdfs:domain swp:Unit.
swp:address rdfs:range rdf:Literal.
4.8 汽车示例
©prefix rdf: <http://www.w3.Org/1999/02/22-rdf-syntax-ns#>.
©prefix rdfs: <http://www.w3.Org/2000/01/rdf-schema#>.
<#miniVan> a rdfs:Class ;
rdfs:subClassOf <#passengerVehicle>, <#van>.
<#motorVehicle> a rdfs:Class.
<#passengerVehicle> a rdfs:Class;
rdfs:subClassOf <#motorVehicle>.
<#truck> a rdfs:Class ;
rdfs:subClassOf <#motorVehicle> .
<#van> a rdfs:Class ;
rdfs:subClassOf <#motorVehicle> .
五、RDF和RDFS的公理化语义
5.1 RDF
一个RDF声明(三元组)表示为PropVal(P,R,V),属性P,资源R,取值V。
Type(R,T)是PropVal(Type,R,T)的缩写,它指出一个资源R的类型是T。
我们的语言中有四大常量:
class
resource
property
literal
这个class是所有具体的class的个父类。比如动物类,植物类都是class的子类。同样的,这四大常量也都是class的子类。
而一切所有皆资源(resource):所有类(class)都是资源,所有属性(property)都是资源,所有literal都是资源。
5.2 RDFS
1.子类和子属性
subClassOf 是一个属性:Type(subClassOf, Property)
如果一个类 C是另一个类D的子类,那么C的所有实例也都是D的实例
2.约束
每个约束资源是一个资源:
ProVal(subClassOf,ConstraintResource,Resource)
约束的属性既是属性,也是约束资源
domain 和 range 是约束属性
Type(domain,ConstraintProperty)
Type(range,ConstraintProperty)
六、小结
- RDF 为表示和处理机器可理解的数据提供了基础。
- RDF 使用基于图的数据模型。它的核心概念包括资源、属性、声明和图,一个声明是一个资源- 属性- 值的三元组。
- RDF 拥有多种标准语法(如Turtle、 RDF/XML 和 RDFa) 来支持语法层的互操作性。
- RDF 使用分布式思想,允许递增式的构建知识,以及知识的共享和复用。
- RDF 是领域无关的。 RDF 模式提供了一种描述特定领域的机制。
- RDF 模式是一种基本的本体语言。它提供一组具有固定含义的建模原语。 RDF 模式的核心概念有类、子类关系、属性、子属性关系,以及定义域和值域限制。