1. 语义网 & 语义网络
1.1 链接数据与知识图谱 的区别
1.2 本体构建的两种方式
1.3 知识图谱数据的来源
0. RDF、OWL 与RDFS
0.1 RDF序列化
0.2 关系 / 属性
0.3 RDFS词汇
0.4 本体映射词汇(Ontology Mapping)
2. Protege实现本体建模示例
2.0 下载与安装
2.1 功能说明
2.1 数据属性、对象属性
2.2 描述属性特征的词汇
2.3 属性约束
2.4 示例
1. 描述 购买记录bill中有甜食:
2. 表示“买甜食超过2次的人”
参考文献
语义网络指Semantic Network,语义网指Semantic Web。不管在哪个语义网络中,表达is-a关系,我们都用rdf:type
语义网(Semantic Web)和链接数据(Linked Data)倾向于描述万维网中资源、数据之间的关系。
RDF,OWL和SPARQL称为语义网的三大核心技术。RDF本质上是一种数据模型,使用SPARQL查询RDF格式的数据。
1.1 链接数据与知识图谱 的区别
- 链接数据 更强调不同RDF数据集(知识图谱)的相互链接。
- 知识图谱 更强调有一个本体层来定义实体的类型和实体之间的关系。数据质量要求比较高且容易访问,能够提供面向终端用户的信息服务(查询、问答等等)。
1.2 本体构建的两种方式
本体主要由实例个体(Individuals),属性(Properties)和类(Classes)构成,三者之间的关系如下图【图片来源】
- 本体的构建大体有两种方式:自顶向下和自底向上。
1. 开放域知识图谱的本体构建通常用自底向上的方法,自动地从知识图谱中抽取概念、概念层次和概念之间的关系。
2. 领域知识图谱多采用自顶向下的方法来构建本体。
- 一方面,相对于开放域知识图谱,领域知识图谱涉及的概念和范围都是固定或者可控的;另一方面,对于领域知识图谱,我们要求其满足较高的精度。
①直接映射Direct mapping缺点是不能把数据库的数据映射到我们自己定义的本体上:
1. 数据库的表作为本体中的类(Class)。
2. 表的列作为属性(Property)。
3. 表的行作为实例/资源。
4. 表的单元格值为字面量。
5. 如果单元格所在的列是外键,那么其值为IRI,或者说实体/资源。
②R2RML,可以让用户更灵活的编辑和设置映射规则。
rr:template指定实体/资源的IRI生成模板,括号中的字符串是对应表中的某个列名。
rr:predicate指定谓语,即属性。
rr:objectMap指定该属性的值是来源于哪一列。
RDF(资源描述框架,Resource Description Framework, RDF),R代表页面,图片、视频等任何具有URI标识符,D标识属性、特征和资源之间的关系,F标识模型、语言和这些描述的语法。在RDF中resource(实体)和properties(属性)是以URIs的形式表示的.通过提供标准的规范,RDFS(RDF Schema)支持推理功能,但缺少诸多常用的特征。
包括对局部值域的属性定义,类、属性、个体的等价性,不相交类的定义,基数约束,关于属性特征的描述等。
资源描述框架RDF: 本质是一个数据模型。它提供了一个统一的标准,用于描述实体/资源。
RDF形式上表示为SPO三元组,RDF由节点和边组成,节点表示实体/资源、属性,边表示实体和实体之间的关系以及实体和属性的关系。
RDF是对具体事物的描述,缺乏抽象能力,无法对同一个类别的事物进行定义和描述。RDFa(Resource Description Framework in attributes)是网页标记语言。RDFa可以将RDF的三元组嵌入在XHTML文档中,它也使得符合标准的使用端可以从RDFa文件中提取出这些RDF三元组来。
RDFS/OWL都是用来描述RDF数据的。 RDFS和OWL这两种技术,或者说模式语言/本体语言(schema/ontology language)解决了RDF表达能力有限的困境。OWL比RDFS更能够表达更丰富的语义信息。
0.1 RDF序列化
- 序列化: 怎么存储和传输RDF数据
- 主要方式有:RDF/XML,N-Triples,Turtle,RDFa,JSON-LD等几种。
RDF,RDFS/OWL属于语义网技术栈,使得语义网克服了语义网络的缺点,即用 RDFS解决了如下两个问题:
1.无法区分概念节点和对象节点。
2. 无法对节点和边的标签(label,schema层)进行定义;
RDFS/OWL的其常用的序列化方式主要是RDF/XML,Turtle。
通常我们用小写开头的单词或词组来表示属性,大写开头的表示类。
- 关系也称为属性(Property),根据是实体和实体之间的关系还是实体和数据值之间的关系分为对象属性(Object Property)和数据属性(Data Property)。
- 数据属性(data property,实体和literal字面量的关系)通常由名词组成,
- 对象属性(object property,实体和实体之间的关系)通常由动词(has,is之类的)加名词组成。剩下的部分符合驼峰命名法。
0.3 RDFS词汇
rdf:Property和rdf:type也是RDFS的词汇,因为RDFS本质上是RDF词汇的一个扩展。
1. rdfs:Class. 用于定义类。
2. rdfs:domain. 用于表示该属性属于哪个类别。 eg.食肉动物主要吃的是动物类,而不是植物。
3. rdfs:range. 用于描述该属性的取值类型。 eg.人的年龄是整数型
4. rdfs:subClassOf. 用于描述该类的父类。eg 熊类是哺乳动物的子类。
5. rdfs:subProperty. 用于描述该属性的父属性。eg定义一个名称属性,声明中文名称和全名是名称的子类。6. 区分概念和对象: 即定义Class和Object(也称作Instance, Entity)。
通过RDFS也可以声明一个子类:
熊 rdf:type rdfs:Class
熊 rdfs:subClassOf 哺乳动物
或者声明一个实例
熊 rdf:type 哺乳动物
熊 a 哺乳动物
OWL的本体映射词汇主要用在融合多个独立的Ontology(Schema)。
1. owl:equivalentClass. 相同的类。
2. owl:equivalentProperty. 属性相同。
3. owl:sameAs. 同一个实体。
本体建模的两种方式 :Frame-based 、 OWL;
Protege是一个斯坦福大学开发的本体编辑和知识获取软件。【网页版 Protege :可直接登录使用】
官网下载Protege —> 配置java的运行时环境 —>直接运行Protege.exe即可使用。
protege会根据页面宽度动态调整各个面板的位置:
Entities:创建实体的一些主要信息
Classes: 本体模型中定义类之间的层次关系,相互之间的关系;
Object properties:实体和实体之间的关系。
Data properties: 数据属性,用来定义实体本身所具有的属性以及属性值。
Annotation Properties:标注属性,是w3c定义的一些常用的属性,根据URI可以看到这些属性的具体说明。
Individuals by class:根据class创建的实例,用来编辑实例信息,类似于java程序中的对象要归于某个类别。
OntoGraf,本体关系图,用来展示我们创建的本体里面各个实体之间的层次关系。
SPARQL Query,SPARQL查询,使用SPARQL语言,对创建的本体进行查询,获取查询结果。
- "Object Properties"页面:对象属性,创建类之间的关系。选中topObjectProperty就可以建立。"disjoint of": 表示该类与哪些类是互斥的。
- "domain"表示该属性是属于哪个类的,"range"表示该属性的取值范围。
- "Data properties"页面: 数据属性,创建类的属性。
eg. "hasActedIn"表示某人参演了某电影,该属性的"domain"是人,"range"是电影。该属性的逆属性是"hasActor",
即有了推理机,尽管我们的RDF数据只保存了A出演了B,我们在查询的时候也能得到B的演员有A。
eg. 古人的名、字:添加属性“字”的Domains是人物,Ranges在Built in datatypes中选择xsd:string,表示“字”的属性值类型是个字符串;
OWL-DL 不允许数据属性 具有 传递性、对称性或互逆属性。
1. owl:TransitiveProperty. 传递性属性。eg“位于”属性,若A位于B,B位于C,那么A肯定位于C。
2. owl:SymmetricProperty. 对称性属性。eg“认识”属性,若A认识B,那么B肯定认识A。
3. owl:FunctionalProperty. 属性取值唯一, 又叫single valued property。 eg“母亲”是具有唯一性的属性,若A的母亲是B,在其他地方我们得知A的母亲是C,那么B和C指的是同一个人。
4. owl:inverseOf. 属性的相反关系/互逆。 eg“父母”的相反关系是“子女”,若A是B的父母,那么B肯定是A的子女。
5. inverseFunctionalProperty. :如果Peggy 是Jean的birthmother(生母),并且 Margaret是Jean的birthmother,那么这表明Peggy和 Margaret是同一个individual。
eg. 为Pizza添加"hasBase PizzaBase "的约束:
参考 Protege里怎样用推理机进行推理? - Esperanza的回答 - 知乎
0. 用or表示Spiciness 有Hot、Medium 、Mild三者之一
a. 建立person类,描述顾客。
b. 建立bill类,它的一个实例是顾客的某次购物记录。
c. 建立object property “hasBill", 其domain为person,range为tea_food,表示顾客有购物记录。
d. 建立object property “hasSweet",其domain为bill,range为sweet,表示购物记录里有甜食。
e. 所有茶食类tea_food下,设sweet子类描述所有甜食,定义sweet equivalent to "dbo:taste some xsd:string[pattern "甜"]"
f. 把类“bill”, 属性“hasSweet" 和类”sweet“构成的声明(购物记录有甜食)定义为类”sweetBill",设该类为“bill的子类"。用于计数“有多少账单有甜食”.
1.知乎专栏:知识图谱-给AI装个大脑
2. 知识图谱学习与实践(4)——Protégé使用入门
3. GitHub SimmerChan/KG-demo-for-movie