📜主要是知识的存储和数据库的选型
😅其实这部分的内容我在学习的时候觉得挺枯燥的,其实主要用到的是Neo4j图数据库,也就是第3部分往后的内容,其他的感觉不是很重要
综述
1.知识存储模型
1.知识存储模型
- 关系型数据库——适用于体量比较小的知识图谱的存储
- 三元组——因语义网而产生的,适用于体量比较小的,网页的
- 图数据库——体量比较大的知识图谱的存储
2.存储模型选择原则一
💡注:如果一个对象本身,没有研究它与其他对象之间的关系,那就没有必要进行图谱存储; 统计类的,常规需要去计算的内容没有必要存储在图谱中,也就是不需要基于知识存储的模型来进行存储;
3.1.关系型数据库:三元组表
💡S为对象
,P为属性
,O为取值
读取对象多个属性的时候,会有大量的自连接操作
3.2.关系型数据库:属性表
💡属性表的优点:RDF的灵活性;缺点:要查询一个人(属性未定时),需要遍历所有的表
3.3.关系型数据库:垂直分割
💡垂直分割的缺点:一个属性就需要一个数据表;删除一个对象需要遍历所有的表
💡以上三种传统型数据库存储知识图谱,小数量的情况下没有问题,但是数据量规模大就不适用了
4.RDF三元组
RDF三元组是基于XML进行描述的
5.图数据库
2.图数据库选型
1.RDF数据库排行
https://db-engines.com/en/ranking/rdf+store
💡MarkLogic商用,Jena是基于Java的开源框架
2.Jena:开源Java框架,本体处理工具
💡通常使用Protege和Jena相结合来处理本体对象;基于本体对象构建知识图谱时,使用Protege进行本体对象的设计,用Jena进行开发
3.Neo4j:嵌入式、基于磁盘、可视化的图数据库
4.Titan:分布式图形数据库
工业级的应用或者大量级数据的应用一般使用Titan
3.Neo4j开发环境
官网下载客户端,本地启动服务即可
Hello World
收藏中有Hello World示例
💡database和message为两个节点,r为关系
-
Graph
-
Table
-
Text
-
Code
4.Neo4j-CQL语法基础
1.概念
实例
💡同一个类型的节点的属性可以是不一样的
2.关键字词汇表
3.DDL-创建节点
4.DDL-创建关系
5.语法实践
1.调出CQL语法
:play cypher
2.创建
// 创建一个人的节点,对他的属性赋值
CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
💡最后加RETURN
和不加会有显示的区别
3.查询
// 查询名字叫Emil的人
MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;
如果想创建唯一的节点对象
// Create unique property constraint
// Replace:
// 'LabelName' with node label
// 'propertyKey' with property that should be unique
CREATE CONSTRAINT ON (n:<LabelName>) ASSERT n.<propertyKey> IS UNIQUE
4.创建多个节点
MATCH (ee:Person) WHERE ee.name = "Emil"
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ir:Person { name: "Ian", from: "England", title: "author" }),
(rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }),
(ally:Person { name: "Allison", from: "California", hobby: "surfing" }),
(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)
6.案例操作
1.内置案例movie graph
2.开始示例
- Movie Graph 如何系统性地创建图谱的
- Northwind Graph 如何从其他形式的内容转换过来的
3.创建各个节点和关系
// 创建节点
CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
// 创建关系
CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix)
4.1.查询
💡查询所得对象的属性在下面显示
4.2.查询