一、知识图谱的基础概念1:RDF
RDF(Resource Description FrameWork),就是资源描述框架,它的本质是一个数据模型(Data Model)。它提供了一个统一的标准,用于描述实体/资源。简单来说,就是表示事物的一种手段和方法。RDF在形式上表示为SPO三元组,有时候也称为一条语句(statment),在知识图谱中我们称之为一条知识)
Subject ---------------------------Predicate-------------------------------->Object
其中RDF由节点和边组成,节点表示实体/资源、属性,边则表示实体和实体之间以及实体和属性之间的关系。
二、RDF序列化的方法
RDF的表示形式和类型有了,那我们如何创建EDF数据集,将其序列化呢(Serialization)呢?换句话说,就是我们怎么存储和传输RDF数据。目前,RDF序列化的主要方式有:RDF/XML,N-Triples,Turtle,RDFa,JSON-LD等几种方式。
(1)RDF/XML,顾名思义,就是XML的格式来表示RDF数据,之所以用到这个方法就是因为XML技术比较成熟,有很多现成的工具来存储和进行解析XML。然而,对于RDF来说,XML的格式太冗长,也不便于阅读,通常我们不会使用这种方式来处理RDF数据。
(2)N-Triples,就是用三元组的方式来表示RDF数据集,是最直观的表述方法。在文件中每一行表示一个三元组,方便机器的解析和处理。开放知识领域的图谱DBpedia通常是用这种格式来发布数据的。
(3)Turtle,是用的最多的一种RDF序列化的方式了。他比RDF/XML紧凑,并且可读性比N-Triple要好一些。
(4)RDFa,即"The Resource Description Framework in Attributes",是HTML5的一个扩展,在不改变任何显示效果的情况下,能够让网站构建者在页面中标记实体,像人物、时间、地点、评论等等。也就是说,将RDF数据嵌入到网页中,搜索引擎能够更好的解析非结构化的页面,获取一些有用的结构化信息。
(5)JSON-LD,j就是"JSON for Linking Data",用键值对的方式来存储RDF数据
接下来我们结合罗纳尔多的例子,进行N-Triples和Turtle的具体表示。
N-Triples; <http://www.kg.com/person/1<http://www.kg.com/ontology/chineseName>"罗纳尔多.路易斯"
Proteger工具介绍使用
1.Protege简介:
(1)Protege软件是斯坦福大学医学院生物信息中心基于java语言开发的本体编辑和本体开发工具,也是基于知识的编辑器,属于开放的源代码软件
(2)这个软件主要用于语义网中本体的构建,是语义网中本体构建的核心开发工具。
2.Protege使用:
(1)Protege是一组自由开源的工具软件,用于构建模型与基于知识的文本化应用程序。
(2)Protege提供了大量的知识模型架构与动作,用于创建、可视化、操纵各种表现形式的本体
(3)可以通过用户定制实现域-友好(领域相关)的支持,用于创建知识模型并填充数据。
(4)相比于其他的本体构建工具而言,Protege最大的好处是在于支持中文,在插件上,用OntoGraf可以实现中文关系的显示。
3.Protege用途
(1)类建模:Protege提供了一个图形化用户界面来建模类(领域概念)和他们的属性以及关系
(2)示例编辑(Instance editing):从这些类中,Protege自动产生交互式的形式,全用户或领域转件进行有效的实例编辑成为可能。
(3)模型处理:Protege有一些插件库,可以定义语义、解答查询以及定义逻辑行为。
(4)模型交换(Model exchange):最终的模型(类和实例)能以各种各样的格式被装在和保存,包括XML、UML和资源描述框架RDF
4.Protege的使用
(1)建立新的本体。
第一步:建立新的本体。
打开Protege软件之后(界面上显示如图所示),便是新建文本的界面;
或者,可以在菜单里面的选择File->New ... 新建一个本体
第二步:构建类。
1.Protege的主页面中,点击Entities页面,进入本体的编辑界面;
2.在Entities页面,选择Classes标签(默认情况下用户看到的是该标签的页面),进入类及其层次的编辑页面
3.在Classes页面,右键点击owl:Thing,选择Add Subclasses...,在出现的对话框中Name标签后输入类的名字,然后点击确定;
4.在Classes页面点击一个类名,在protege右侧Description部分修改跟该类相关的属性值
第三步:建立子类。
1.在"人物"上右键点击,选择Add subclass...;
2.在弹出的对话框中输入子类的名称,如"禅师",点击确定,在Classes界面显示类的层次
3.如果需要就删除某个类,点击该类,然后点击删除图案进行相应的删除
第四步构建类之间的关系。
因为人物和地点是不同的事物,即他们具有排他性,下面定义该关系。
1.在选中"人物"的状态下,在Entities界面的右侧Description部分点击DisjointWith后面 的加号
2.在弹出的界面中,展开owl:Thing,选择"地点",然后点击确定。这样人物和地点就有相互排斥的属性了
第五步 建立对象属性
添加属性名称:
1:在Entities界面选择Object properties标签,进入对象属性的编辑界面
2.在owl:topObjectProperty上右键点击,选择"Add Sub-Properties.."
3.在弹出的界面中,输入属性的名称,例如"曾住",点击"Continue",再点击"Finish",便建好了属性。
为属性添加domain和range属性值
1.在Object properties界面,选择一个属性,例如"曾住";
2.在Entities界面的右侧Description模块中点击Domain后的加号;
3.在弹出的界面中选择"人物",点击确定,这样为"曾住"加了domain约束;
4.类似地,点击Description中后的加号,选择"地点"。
第六步:建立数据属性:
1.在Entities界面选择Data properties标签,进入数据属性的编辑界面;
2.在owl:topDataProperty上右键点击,选择"Add sub-properties...";
3.在弹出的界面中,输入属性名称,例如法号,点击"Continue",再点击"Finish",便已经建好了属性;
4.在Data properties界面,选择一个属性,例如"法号";
5.在Entities界面的右侧Description模块中点击Range后的加号;
6.在弹出的界面中,选择"Built indataypes",从中挑选xsd:string,再点击确定,即限制该属性的取值范围是字符串;建立数据属性类似于建立对象属性,主要是在家range时的约束条件不同。
第七步:建立实例
添加实例机及其类型
1.在Entities界面选择Individual标签,进入实例的编辑界面
2.单机Individuals界面的菱形图标,在弹出的界面输入实例的名字,如"佛印大师",点击确定
3.在Entities的右侧界面的Description部分,点击Types后面的加号,在出现的界面中选择Class Hierarchy标签,从类层次中选择"禅师"。这样实例就有了类型约束。
添加实例之间的关系,以"佛印禅师"为例
1.在Individuals界面选择实例"佛印禅师",在Entities界面右侧的Property assertions部分点击Object property assrttions旁边的加号
2.在弹出的界面分别输入一个对象属性的名字(如"曾住")和一个实例名字(如"镇江金山寺"),点击确定。这样,使得"佛印禅师"与"镇江金山寺"通过"曾住"关联起来了。
添加实例添加属性值,以"苏轼"为例
1.在Individuals界面选择"苏轼",在Entities界面右侧的"Property assertions"部分点击Data property assertions旁边的加号(类似添加是李建关系的操作);
2.在弹出的界面中,在左侧选择数据属性(如"别名"),右侧填写属性值(如"苏东坡、东坡"),点击确定。这样,便为实例"苏轼"的属性"别名"添加了具体的值,即"苏东坡、东坡"
第八步:保存本体
1.在菜单选择File--->Save;
2.在弹出的界面中,选择"RDF/XML Syntax"
3.在新出现的界面中,在在文件名处输入本体的名字,例如kgexample,文件类型是"OWL File",点击保存
第九步:可视化。
1.在菜单中选择Windows->Tabs->OntoGraf;
2.在出现的界面中,点击加号可以进行展开,鼠标移到线上,可以显示此线代表的关系名称。
第十步:推理
1.在菜单中选择Reasoner
2.在出现的界面中,选择HermiT,然后点击Start reason
3.推理得到的信息就会在对应的描述中显示出来
例如:本体中给出裴文德和裴林是人物的实例,裴林是裴文德的父亲,父亲的domain是人物,range是男人,因此可以推导出裴林是男人的一个实例。
4.对于推理出来的信息,如果想知道为什么能被推理机推到出来,可以点击推到信息后面的问号
5.解释的原因会在新的对话框中进行显示