1.2.2 知识图谱数据模型
从数据模型的角度来看,概念网络——知识图谱本质上是一种图数据,数据模型规范依据知识图谱的领域特征而定,主要有RDF图和属性图两种形式,两者的逻辑视图如图1-3所示。其中,属性图具备RDF图所没有的节点和边的内部结构,可以表达实体/关系的属性。
图1-3 RDF图和属性图的逻辑视图
1.RDF图
RDF是2004年万维网联盟(W3C)制定的语义网中机器可理解信息表示和交换的标准数据模型,也可作为知识图谱的国际标准。作为Web上表示和发布知识图谱最主要的数据格式之一,RDF明确了描述网络信息资源及资源间语义关系的模型和语法,以三元组<subject, predicate, object>(s,p,o)即主谓宾的方式表示知识,主语表示类的实例——个体(Individual),谓语既可以是连接两个个体的关系,也可以是连接个体和数据类型的实例,宾语为相应个体或者属性值。RDF三元组集合即为图中的有向边集合,集合中每个资源具有统一资源定位符(Uniform Resource Identifier, URI)作为其唯一的id,通常情况下主语和谓语都要用HTTP URI表示,宾语可以是某种数据类型的值Literal(字面量),也可以是另一资源的HTTP URI。需要说明的是,RDF主语和宾语也可以是空节点类型,即没有URI和Literal的资源或匿名资源,RDF图对节点和边上的属性没有内置的支持。RDF图数据模型常用于学术领域的语义知识图谱构建。
RDF支持不同的书写格式,也称序列化(Serializations)方法,如RDF/XML、Notation3(N3)、Turtle、N-Triples、RDFa、JSON-LD等[20],下面以图1-4为例进行说明。
图1-4 RDF不同的序列化格式[20]
图1-4中分别给出了“论文ja.00001的标题(title)是Learning representation by back-propagating errors,主题(subject)是Neural Networks”这一RDF三元组集的三种序列化格式。RDF/XML(.rdf)指用XML格式表示RDF数据,是树状文档和基于三元组图的混合体,表达较为冗长;N-Triples(.nt)则是指用多个三元组来表示RDF数据集,每行表示一个三元组,这种表示方式最为直观,有利于机器的解析和处理,开放领域知识图谱DBpedia及学术知识图谱SciGraph均采用这种方式发布数据;Turtle(.ttl)是目前应用最为广泛的序列化格式,数据紧凑、可读性好,使用@prefix对RDF的URI前缀进行缩写,Turtle与N-Triples相比解析成本更高;其他格式如JSON-LD(.json)是轻量级链接数据格式,在工程应用方面更具优势。
知识图谱需要借助查询语言进行查询等应用操作,RDF图数据中常用的是W3C指定的标准查询语言——SPARQL协议与RDF查询语言(SPARQL Protocol and RDF Query Language),类似于关系数据库中的SQL查询语言,其核心处理单元是三元组模式。作为一套知识服务标准体系,SPARQL 1.1版本提供查询、更新(Update)、联邦查询(Federated Query)、查询结果格式和接口协议等服务,设计了三元组模式、子图模式、属性路径等多种查询机制,且可用于跨数据源的查询。SPARQL查询可用Q={GP, DS, SM, R}表示,其中GP是表达查询意图的图模式;DS是RDF数据集源;SM是指定结果集约束条件的解修饰符;R是查询结果,通常为结果集或RDF图。SPARQL在查询操作方面的友好特性是本书在知识图谱构建工具及存储应用方面的重要技术基础。
例如,查询scigraph图中2019年发表的主题为Neural Networks的论文的标题(?title),SPARQL查询语句语法分析如图1-5所示。除简单查询外,SPARQL还支持多字段匹配和数据属性匹配,根据需求可搭配CONCAT函数、FILTER关键字等联合使用,实现检索结果的字符串拼接、条件过滤等。
图1-5 SPARQL查询语句语法分析
2.属性图
属性图(Property Graph, PG)是图数据库领域使用最为广泛的一种图数据模型,是由节点(Vertex或Node)、边(Edge或Relationship)组成的有向图,其具备如下特性:
(1)每个节点都具有唯一的id、若干条出边和入边,以及一组属性,每个属性都是一个键值对(Key-Value Pairs),属性值可以是标量类型或数组。
(2)每条边都具有唯一的id、一个头节点、一个尾节点、一个表示联系的标签,以及一组属性值,每个属性都是一个键值对。
以图1-6所示的属性图样例为例进行说明,根据属性图的要素,software、person分别代表类为软件、人员的节点,created、knows分别代表关系为开发、认识的边,软件节点的属性包括名称和开发语言,人员节点的属性包括姓名和年龄。这个属性图描述了2个软件节点和4个人员节点的关系,如节点3的入边集合为{边9,边11,边12},属性集合为{name=lop, lang=java},表示节点3的软件由人员节点1、4、6开发,软件名称是lop,开发语言是java;节点4的入边集合为{边8},出边集合为{边10,边11},属性集合为{name=josh, age=32},表示节点1的人员认识节点4的人员,节点4的人员姓名是josh,年龄32岁,开发了节点3和节点5的软件。
图1-6 属性图样例
属性图上的查询语言通常是Cypher和Gremlin,其中Cypher最初是图数据库Neo4j中实现的开源声明式查询语言,提供通过可视化和逻辑方式匹配图中节点和关系的模式,支持创建、读取、更新、删除等功能,目前主流的图数据库如Memgraph、AgensGraph等均支持Cypher。
表1-3给出了RDF图和属性图的对比。
表1-3 RDF图和属性图的对比