本体建模学习笔记

article/2025/9/6 15:31:51

目录

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次的人” 

参考文献


 

1. 语义网 & 语义网络

语义网络指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. 领域知识图谱多采用自顶向下的方法来构建本体。

  • 一方面,相对于开放域知识图谱,领域知识图谱涉及的概念和范围都是固定或者可控的;另一方面,对于领域知识图谱,我们要求其满足较高的精度。

     1.3 知识图谱数据的来源

  • 主要有三个:结构化数据、半结构化数据和非结构化的数据。
  • 用于将关系型数据库的数据转换为RDF格式的数据的两个标准:

       ①直接映射Direct mapping缺点是不能把数据库的数据映射到我们自己定义的本体上:
          1. 数据库的表作为本体中的类(Class)。
         2. 表的列作为属性(Property)。
         3. 表的行作为实例/资源。
         4. 表的单元格值为字面量。
         5. 如果单元格所在的列是外键,那么其值为IRI,或者说实体/资源。

      ②R2RML,可以让用户更灵活的编辑和设置映射规则。
         rr:template指定实体/资源的IRI生成模板,括号中的字符串是对应表中的某个列名。
         rr:predicate指定谓语,即属性。
         rr:objectMap指定该属性的值是来源于哪一列。

0. RDF、OWL 与RDFS

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层)进行定义;

0.2 关系 / 属性

    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 哺乳动物

0.4 本体映射词汇(Ontology Mapping)

 OWL的本体映射词汇主要用在融合多个独立的Ontology(Schema)。
1. owl:equivalentClass. 相同的类。
2. owl:equivalentProperty. 属性相同。
3. owl:sameAs. 同一个实体。

 

2. Protege实现本体建模示例

2.0 下载与安装

   本体建模的两种方式 :Frame-based 、 OWL;

   Protege是一个斯坦福大学开发的本体编辑和知识获取软件。【网页版   Protege :可直接登录使用】

   官网下载Protege —> 配置java的运行时环境 —>直接运行Protege.exe即可使用。

  • 安装时选择 “Basic+OWL”.
  • 出现DOT error时,File-〉Preferences ,设置Dot.exe的安装路径。
  • 先安装 graphviz :  OWLViz查看Class的结构图
  • protege教程:【强烈推荐】一个protege4 的教程链接,只有40页的PPT, 提取码:7u7o
     ProtegeOWLTutorialP4_v1_3.pdf 【官方文档110页】    protege-tutorial  、protegewiki
  • 本文涉及的owl本体示例[豆瓣电影、pizza、智能茶食店] 网盘 - 链接 提取码:ie9c

2.1 功能说明

 

  • Class Name显示中文/ 英文,加入label后显示成中文:切换到Classes面板,选中要加标签的类,在右侧的子面板Annotations,对应label的值 填入中文名称。

  • 查看本体结构的另一种方式:直接切换OntoGraf 面板
  • protege可视化本体结构 :   点击"Window"——>"Tabs"——>"OntoGraf",然后"Entities"旁边就多了一个标签页。在右侧窗口中移动元素,可以很直观地观察本体之间的关系。

protege会根据页面宽度动态调整各个面板的位置:

  • Active ontology:以URI的形式显示当前的实体名称;
  • Entities:创建实体的一些主要信息

  • Classes: 本体模型中定义类之间的层次关系,相互之间的关系;

  • Object properties:实体和实体之间的关系。

  • Data properties: 数据属性,用来定义实体本身所具有的属性以及属性值。

  • Annotation Properties:标注属性,是w3c定义的一些常用的属性,根据URI可以看到这些属性的具体说明。

  • Individuals by class:根据class创建的实例,用来编辑实例信息,类似于java程序中的对象要归于某个类别。

  • OntoGraf,本体关系图,用来展示我们创建的本体里面各个实体之间的层次关系。

  • SPARQL Query,SPARQL查询,使用SPARQL语言,对创建的本体进行查询,获取查询结果。

  • Thing是所有类型的根节点 / 基类,所有的类型都是从Thing派生出来的。双击左侧的owl:Thing,在右侧区域会显示本体信息,将展示的信息中,有加号的都双击展开,就会看到整个本体的关系图。
  • owl:topObjectProperty,  最顶层的实体关系

2.1  数据属性、对象属性

  • OWL还拥有 Annotation Properties:把标注信息增加到class,properties或individual中。
  • OWL中,属性用于约束属于某一class的individuals。
  • 数据属性 相当于树的叶子节点,只有入度,而没有出度。
  • 区分数据属性和对象属性的直观方法,看"range"取值范围:对象属性 的取值范围是类,而数据属性的取值范围则是字面量
  •   "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,表示“字”的属性值类型是个字符串;

 

2.2  描述属性特征的词汇

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。

2.3 属性约束

eg. 为Pizza添加"hasBase  PizzaBase "的约束:

2.4 示例

参考 Protege里怎样用推理机进行推理? - Esperanza的回答 - 知乎

0. 用or表示Spiciness 有Hot、Medium 、Mild三者之一

1. 描述 购买记录bill中有甜食:

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的子类"。用于计数“有多少账单有甜食”.

2. 表示“买甜食超过2次的人” 

  •    在person下建立子类”likeSweet",表示喜欢甜食的人
  •  定义该类equivalent to "Person and (hasBill min 3 sweetBill)",拥有超过2个含甜食的购物记录之人,如下图所示

 

参考文献

1.知乎专栏:知识图谱-给AI装个大脑

2.  知识图谱学习与实践(4)——Protégé使用入门
3. GitHub SimmerChan/KG-demo-for-movie

 


http://chatgpt.dhexx.cn/article/pbynD7Cy.shtml

相关文章

知识元与知识本体

元数据(Metadata)就是“关于数据的数据”,是对数据进行组织和处理的基础。元数据法就是对信息单元及其集合进行规范描述从而形成元数据,并依其将分布式的信息资源整合成有机信息体系的基准、方法和工具。主题词表:也称叙词表。它是…

本体语言 OWL

万维网本体语言OWL2 文章目录 万维网本体语言OWL2一、引言二、本体语言的需求三、OWL2和RDF/RDFS的兼容性3.1 OWL2 Full:基于RDF的语义3.2 OWL2 DL:直接语义 四、OWL语言五、OWL2 概要六、实验 OWL的构造七、总结 一、引言 通俗的讲,RDF被限…

本体概述

目录1.定义2.本体的目标和作用3.本体构成要素4.领域本体与上层本体5.本体语言6. 构造Ontology 的规则 7.本体在信息检索的应用 1.定义 – 1991/Neches 等:给出构成相关领域词汇的基本术语和关系,以及利用这些术语和关系构成的规定这些词汇外延的规则…

本体 摘抄笔记

一、本体的一些介绍 (来源:https://blog.csdn.net/shendeguang/article/details/8241164) 1. 本体论语义学的特点: 本体论语义学与其他人工智能理论、自然语言加工系统相比有自己的一些鲜明特点。 其一,它强调对意义…

图构建:领域本体设计原则与动态本体

图构建:领域本体设计原则与动态本体 前文《思考总结:领域知识图谱平台构建与业务应用》中提到:“本体设计是图应用中的重中之重,一切的图展示、图计算、图分析、图挖掘、图模式匹配…的基础在图构建,而图构建的核心是…

常用本体建模工具

常用本体建模工具: Apollo、OntoStudio、TopBraid Composer、Semantic Turkey、Knoodl、Chimaera、OliEd、WebODE、Kmgen和DOME Protg Protg[1]是一款由斯坦福大学编写并维护的开源本体建模和编辑工具,其支持Web版本和PC版本,使用OWL语言…

本体(Ontology)

我是在撰写毕业论文中接触到知识表示方面的内容,有时需要理论与实践相结合,关于这方面的理论知识学习,除了网页资料、书籍、另外推荐一个网站:熊猫学术(https://sc.panda321.com/),可以查阅很多相关的学术论文&#xf…

知识图谱初步学习(一)——本体+Protege新手学习

文章目录 前言(本体详解)1.本体概念2.本体分类3.本体组成4.本体构建方法5.本体构建的原则6.本体应用 一、protege简介二、软件使用步骤1.安装2.使用3.案例 三、问题解决方案汇总 前言(本体详解) 在开始学习知识图谱的过程中&…

本体调研

1.1本体概念 本体是用于描述一个领域的术语集合,其组织结构是层次结构化的,可以作为一个知识库的骨架和基础。 本体不等同于个体,它是相应领域内公认的概念集合。 1.2 本体分类 依照领域依赖程度: (1)顶层本体&…

知识图谱初步学习(零)——本体是什么

知识图谱初步学习(零)——本体是什么 文章目录 知识图谱初步学习(零)——本体是什么前言一、 哲学层面理解二、 引申到语义层面理解三、学术层面四、其他层面- 术语- 语义网 五、本体与类、本源、实体、符号的区别六、用语义三角形…

本体(Ontology)概述

认识本体 本体(Ontology)的概念源自于哲学领域,在哲学中的定义为“对世界上客观事物的系统描述,即存在论”。哲学中的本体关心的是客观现实的抽象本质。而在计算机领域,本体可以在语义层次上描述知识,可以看…

区块链 Vs. 互联网,创新在哪里?

本文转载自共识未来公众号 引言:最近关于区块链革命的提法少了很多,我们很少再听到“区块链即将颠覆互联网”的提法,这似乎也寓意着区块链技术(加密技术)正在进入一个理性发展的阶段,如果按照Gartner的技术…

js提交form表单

【背景】 前段时间将边用边学javascript.pdf书看完了,其中之前最不熟悉的也是这次印象最深刻的就是提交form表单,所以在这里总结一下js提交form表单,以及表单中对应的一些扩展知识O(∩_∩)O~ 【概念】 表单在网页中主要负责数据采集功能;一个表单偶三个基本组成部分&am…

JavaScript笔记-点击button提交form表单

功能如下&#xff1a; 点击购买后&#xff0c;点击确定。 确定调用了一个js函数&#xff0c;提交form表达给后端 代码如下&#xff1a; <div class"modal-footer"><button type"button" class"btn text-white border bg-dark" data-b…

yeild函数

1、把函数变成一个生成器 2、起到延迟的作用&#xff0c;在需要的时候产生结果&#xff0c;节省资源 3、声明一个序列不同的是生成器在不使用的情况下&#xff0c;是不占内存的 def getNum(n):i 0while i < n:print(i)i 1getNum(5)def getNum(n):i 0while i < n:retu…

Python关键字------yeild

文章目录 yeild例子 在阅读python程序源码的时候&#xff0c;发现yeild关键字&#xff0c;产生了疑惑&#xff0c;看了很多博客感觉没有能够讲清楚的。 yeild yeild其实可以理解成return&#xff0c;不够有点区别的是return是不会执行下面的语句&#xff0c;而yeild在满足一定…

join(),sleep() 和 yeild() 方法的区别

目录 1、join() 方法&#xff1a;释放锁 2、sleep() 方法&#xff1a;不释放锁 3、yeild() 方法&#xff1a;不释放锁 1、join() 方法&#xff1a;释放锁 使用场景&#xff1a; 等待调用 join() 方法的线程结束之后&#xff0c;程序再继续执行&#xff0c;一般用于等待异步…

C#中关于Task.Yeild()的探究

在与同事讨论async/await内部实现的时候&#xff0c;突然想到Task.Yeild()这个函数&#xff0c;为什么呢&#xff0c;了解一点C#async/await内部机制的都知道&#xff0c;在await一个异步任务&#xff08;函数&#xff09;的时候&#xff0c;它会先判断该Task是否已经完成&…

python yeild next使用注意事项

关于得带的基本使用方法&#xff0c;可以往上查一下。这里主要记录下在编码中可能遇到的报错&#xff0c;和处理方式。 import timedef func3():for i in range(5):yield iwhile True:a next(func3())print(a)time.sleep(1) 如果使用上面这种取值方式&#xff0c;你会发现会…

Java多线程礼让yeild()和插队join()方法案例

一. yeild()和join()方法 1.yeild():线程礼让&#xff0c;让当前正在执行的线程可能暂停&#xff0c;但不阻塞 2.yeild():当前正在执行的线程可能暂停&#xff0c;也可能不暂停。 3.yeild():是静态方法&#xff0c;而join()是非静态方法 4.join():能…