📜主要是知识的存储和数据库的选型
😅其实这部分的内容我在学习的时候觉得挺枯燥的,其实主要用到的是Neo4j图数据库,也就是第3部分往后的内容,其他的感觉不是很重要
综述
![](https://img.haomeiwen.com/i2469805/dc3dcbb542e7373f.png)
1.知识存储模型
1.知识存储模型
![](https://img.haomeiwen.com/i2469805/4cc11c72f771c97c.png)
- 关系型数据库——适用于体量比较小的知识图谱的存储
- 三元组——因语义网而产生的,适用于体量比较小的,网页的
- 图数据库——体量比较大的知识图谱的存储
2.存储模型选择原则一
![](https://img.haomeiwen.com/i2469805/4223c2700b2cdd9a.png)
![](https://img.haomeiwen.com/i2469805/7a76616bbaaae5e3.png)
💡注:如果一个对象本身,没有研究它与其他对象之间的关系,那就没有必要进行图谱存储; 统计类的,常规需要去计算的内容没有必要存储在图谱中,也就是不需要基于知识存储的模型来进行存储;
3.1.关系型数据库:三元组表
![](https://img.haomeiwen.com/i2469805/1412b0c93e0fd8e6.png)
💡S为对象
,P为属性
,O为取值
读取对象多个属性的时候,会有大量的自连接操作
3.2.关系型数据库:属性表
![](https://img.haomeiwen.com/i2469805/6bb9559a8bd10dd0.png)
💡属性表的优点:RDF的灵活性;缺点:要查询一个人(属性未定时),需要遍历所有的表
3.3.关系型数据库:垂直分割
![](https://img.haomeiwen.com/i2469805/021ca9dc97616175.png)
💡垂直分割的缺点:一个属性就需要一个数据表;删除一个对象需要遍历所有的表
💡以上三种传统型数据库存储知识图谱,小数量的情况下没有问题,但是数据量规模大就不适用了
4.RDF三元组
RDF三元组是基于XML进行描述的
![](https://img.haomeiwen.com/i2469805/8cc6fd69fd1f9bb8.png)
![](https://img.haomeiwen.com/i2469805/28caa2465c906da4.png)
![](https://img.haomeiwen.com/i2469805/402e428973474fea.png)
5.图数据库
![](https://img.haomeiwen.com/i2469805/2fcc93a8ee73d9ee.png)
2.图数据库选型
1.RDF数据库排行
https://db-engines.com/en/ranking/rdf+store
![](https://img.haomeiwen.com/i2469805/f33144dbfd2f9912.png)
💡MarkLogic商用,Jena是基于Java的开源框架
2.Jena:开源Java框架,本体处理工具
![](https://img.haomeiwen.com/i2469805/45d5efc2038ff69a.png)
💡通常使用Protege和Jena相结合来处理本体对象;基于本体对象构建知识图谱时,使用Protege进行本体对象的设计,用Jena进行开发
3.Neo4j:嵌入式、基于磁盘、可视化的图数据库
![](https://img.haomeiwen.com/i2469805/6f64059b79b8c505.png)
4.Titan:分布式图形数据库
![](https://img.haomeiwen.com/i2469805/abb3ccf79f694627.png)
工业级的应用或者大量级数据的应用一般使用Titan
3.Neo4j开发环境
官网下载客户端,本地启动服务即可
![](https://img.haomeiwen.com/i2469805/5ea76ec06b3a698b.png)
Hello World
收藏中有Hello World示例
![](https://img.haomeiwen.com/i2469805/fdd471893191dd2b.png)
💡database和message为两个节点,r为关系
-
Graph
-
Table
-
Text
-
Code
4.Neo4j-CQL语法基础
1.概念
![](https://img.haomeiwen.com/i2469805/a3d0b13dff278945.png)
实例
![](https://img.haomeiwen.com/i2469805/c9397a85a54e00b4.png)
💡同一个类型的节点的属性可以是不一样的
2.关键字词汇表
![](https://img.haomeiwen.com/i2469805/27dca8aed3a902ed.png)
![](https://img.haomeiwen.com/i2469805/7cf2c0194c7d862d.png)
3.DDL-创建节点
![](https://img.haomeiwen.com/i2469805/3d6f61eecdf725d2.png)
4.DDL-创建关系
![](https://img.haomeiwen.com/i2469805/110296eeb65752f2.png)
5.语法实践
1.调出CQL语法
:play cypher
![](https://img.haomeiwen.com/i2469805/4a5be3ce3d429f3b.png)
2.创建
![](https://img.haomeiwen.com/i2469805/82ac11b7771741ee.png)
// 创建一个人的节点,对他的属性赋值
CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
💡最后加RETURN
和不加会有显示的区别
![](https://img.haomeiwen.com/i2469805/8266d23752803691.png)
![](https://img.haomeiwen.com/i2469805/a514617f5d326e35.png)
3.查询
![](https://img.haomeiwen.com/i2469805/784b81c3a7c5664c.png)
// 查询名字叫Emil的人
MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;
![](https://img.haomeiwen.com/i2469805/f2d2b988f4b673b7.png)
如果想创建唯一的节点对象
// 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.创建多个节点
![](https://img.haomeiwen.com/i2469805/53db22556a914036.png)
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
![](https://img.haomeiwen.com/i2469805/4dd8ebaba60c1a2a.png)
2.开始示例
![](https://img.haomeiwen.com/i2469805/d7f07bb1dc7fc5d1.png)
![](https://img.haomeiwen.com/i2469805/59c49e88aec5b576.png)
- Movie Graph 如何系统性地创建图谱的
- Northwind Graph 如何从其他形式的内容转换过来的
3.创建各个节点和关系
![](https://img.haomeiwen.com/i2469805/b2c2a8e0ed08b11a.png)
// 创建节点
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)
![](https://img.haomeiwen.com/i2469805/6493fce6922225f4.png)
4.1.查询
![](https://img.haomeiwen.com/i2469805/7a3d793e9c02e1e0.png)
💡查询所得对象的属性在下面显示
![](https://img.haomeiwen.com/i2469805/55743533568421de.png)
4.2.查询
![](https://img.haomeiwen.com/i2469805/5f57b84e2d4adc56.png)
7.系统监控(暂时没有用到)
![](https://img.haomeiwen.com/i2469805/fbb5bdf473d25c44.png)
![](https://img.haomeiwen.com/i2469805/b0f7a744eea15b64.png)
网友评论