编者按
Dataversity公司2020上半年发布了本篇白皮书,《Knowledge Graph Versus Property Graphs》。该白皮书介绍了RDF图与属性图之间的相似性与区别,并分别对二者的知识表示和应用场景进行了对比分析
本文作者北京大学葛钤,将对原文进行概要阐述。
图数据结构在今天能够得到如此广泛关注,灵活性是一个强大的驱动因素:异构数据、集成新数据源和分析都需要灵活性,而图结构则很好地满足了这一点。现如今,最主要的图数据结构模型有以下两种:属性图和RDF图,下面就将分别介绍这两种图结构并进行比较。
01、属性图(Property Graphs)
虽然属性图的实现中有一些核心的共性,但是没有真正标准的属性图数据模型,因此属性图的每个实现都有些不同。在下面,我们将重点讨论任何属性图数据库都常见的特征。
节点(Nodes):是图中的实体,用表示其类型的0到多个文本标签进行标记,相当于实体。
边(Edges):是节点之间的定向链接,也称为关系。其中对应的“from node”称为源节点,“to node”称为目标节点。边是定向的且每条边都有一个类型,它们可以在任何方向上导航和查询。相当于实体之间的关系。
属性(Properties):是一个键值对,顶点和边都具有属性。
图1显示了一个属性图的部分,其中包含有关演员、导演和他们参与的电影或电视节目的数据。其中节点用椭圆表示。例如,ID为123的节点(从其属性中看出)表示Tom Hanks。节点标签以深蓝色显示。节点123的标签是人物、演员和导演。关系用灰色箭头表示,从一个节点指向另一个节点,每个关系都有一个红色显示的类型。属性显示在带有金色的圆角矩形中,并使用红色箭头连接到它们所属的节点和关系。
图1.一个关于演员、导演和影片或电视节目的属性图
02、资源描述框架图(RDF Graphs)
RDF图使用标准的图数据模型,其技术栈的标准是由万维网联盟(W3C)管理的,这个组织也同时管理HTML、XML和许多其他网络标准。因此每个支持RDF的数据库都应该以同样的方式支持该模型。除此之外,RDF有一个标准的查询语言称为SPARQL。它既是一种功能齐全的查询语言,又是一种HTTP协议,可以通过HTTP将查询请求发送到端点。
RDF图数据模型主要是由以下两个部分组成的:
节点(Nodes):对应图中的顶点,可以是具有唯一标识符的资源,也可以是字符串、整数等有值的内容。
边(Edges):是节点之间的定向链接,也称为谓词或属性。边的入节点称为主语,出节点称为宾语,由一条边连接的两个节点形成一个主语-谓词-宾语的陈述,也称为三元组。边是定向的,它们可以在任何方向上导航和查询。
RDF的英文全称为Resource Description Framework,因为在RDF图中,一切都称为源。边和节点只是给定语句中资源所扮演的角色。基本上在RDF中,扮演边角色的资源和扮演节点角色的资源没有区别,因此一条语句中的边也可以是另一条语句中的节点。
RDF数据模型相较于属性图更加丰富,也在语义上保持一致性。图2展示了如何将上面的图1由属性图表示为RDF:
图2.图1的RDF图的形式表示
图2中的图看起来比图1中的属性图大,因为图中的所有文字都被描述为节点。而在可视化RDF图数据时,通常不会这样做,以便使图看起来更干净和更简单。所有节点都用带有浅黄色背景的圆角矩形表示。也就是说,从数据结构的角度来看,它们是图形的一部分,就像任何其他节点一样,唯一的区别是它们不能作为源节点,只能是目标节点或宾语。
RDF图中的文字值可以有数据类型,数据类型取自XML模式(如xsd:string、xsd:integer等),文本值也可以有语言标记来支持数据国际化。例如,对于纽约市的rdfs:label,我们可以有多个值,例如:“New York City” xsd:string @en 或 “NuevaYork” xsd:string @sp。
标识符也是RDF图的一个非常重要的概念。每个非文字节点都被分配一个标识符——通常是一个URI(Uniform Resource Identifier,统一资源标识符)或IRI(Internationalized Resource Identifiers,国际化资源标识符)。本地非URI标识符因为不能互操作而很少使用。而全局唯一标识符为图数据模型带来了许多好处,同时基于RDFbased的解决方案可以根据选定的URI构造规则自动生成URI。另外,在添加数据(例如加载序列化的文件)时,用户也可以提供他们想要使用的URI。标识节点的URI使用限定名(通常称为Qname表示法)显示在图中,如图2中的 rdf 就表示着:w3.org/1999/02/22-rdf-syntax-ns#,而对应的也可以使用命名空间中的内置资源定义的语义,如rdf:type. 而使用URI最大的好处之一便是可以如果不同的节点具有同样的URI,就会自动地合并,这也就使得RDF图更加简洁清晰。
03、二者的比较与转化
1.在表达的术语和能力上的不同
主要从标签(Labels)、类型(Types)和属性(Properties)三个关键概念上进行比较。
(1)标签(Labels)
在RDF图中,标签是在RDFS命名空间即rdfs:label中定义出的标准谓词,用于指向任何资源的显示名称的值。尽管也可以使用另一个谓词来实现此目的,但是rdfs:label被广泛接受为属性的惟一标识符。
在属性图中,标签用于标识节点的类型。它被称为标签而不是类型,因为它只是一个字符串或一个文本标记,在文本之外没有任何意义,且在图中不能捕捉到关于它的任何信息。
(2)类型(Types)
在RDF图中,节点的类型或属性的类型是资源,即通常在图中存在另一个节点带有与其关联的附加信息,以定义其预期的用途和语义。节点使用rdf:type来链接到它的类型。
在属性图中,属性中的边具有标识类型的标签。它被称为“类型”或“关系类型”。常被用于查询关系匹配,当图可视化显示时,它也作为边的显示名称。
图3.图2的一部分,扩展了类型和标签信息
上述图3是图2中RDF图的一部分,其中节点或边周围的绿色边框表示描述数据模型的图元素。在RDF中和在属性图中一样,节点可以属于多个集合。如图中的汤姆·汉克斯既是导演也是演员。但如果一个类是另一个类的子类,则不需要在RDF中指定“父类型”。这些信息是在类级别为属于类的所有资源提供的,因为类信息也是RDF图的一部分。如我们不会在Tom Hanks增加一个类型是人,因为导演和演员本身都是人的“子类型”。在RDF图中,我们还可以捕获关于存储在图中的数据模型的任何信息。而这些信息的存储、访问和处理方式与其他数据完全相同。如图3我们给谓语ex:actedIn增加了一个标签,事实上,我们也可以定义当关系ex:actedIn用于在相反方向(从电影到演员)时,关系的显示名称显示为actors。在RDF图中,在一个语句中用作谓词的资源可以在另一个语句中用作主语或宾语。这也体现出RDF图额外的灵活性,它允许我们存储关于谓词及其用法的信息。这一点也是属性图无法比拟的。
(3)属性(Properties)
在RDF图中,边也可称为属性(谓词),和属性指向的对象可以称为属性值,而所有属性值(文字或URI)都存储为节点。如图2中,ex:125到”The Post”有一条边,边为rdfs:label,在这个例子中,rdfs:label就是一个属性,而“The Post”是一个属性值。
在属性图中,属性只能有文字值。它们的存储和处理的方式与图中的节点不同。用数据建模的术语来说,就是属性图中的属性永远只能是属性。属性结构是键-值对的结构。这意味着属性键只能有一个值,如果它有多个值,则需要将单个值转换为一个由逗号分隔的值组成的数组(如图4所示)。而这也为查询带来了弊端,如查询所有人口数超过58000的城市,而图4中数组第一项表示2018年的人口,第二项表示2010年的人口,在属性图中是无法进行很好地区分。这也是属性图和知识图谱的一个很大的区别:如何从属性值中提取出额外的信息。
图4.属性图中多值用数组表示
2.在边上附加信息的差异
在属性图中,不同的两条边可以有相同的类型,但不同的特征。如图1中的两个不同id的ACTED_IN边,分别表示Tom Hanks和Sarah Paulson参演了电影The Post。在属性图数据模型中,边唯一地标识源点-边-目标节点组合。
在RDF中,相同类型的边都是相同的,边会被重复使用。这意味着,如果需要增加一些关于Tom Hanks和电影The Post的关系Post(例如,他在电影中扮演的角色),你不能简单地在ex:actedIn里增添一个属性,因为这样的话会在所有的参演这一谓词中增添相同的属性。为了支持在两个特定节点之间的边上附加信息的需要,RDF提供了一种方法来创建一个新的节点来唯一标识源点-边-目标节点三元组。我们就可以使用常规方法对新节点创建语句——它可以是任何语句的主语或宾语。如图5所示,我们在其中创建了一个新节点ex:126来表示语句,Tom Hanks在The Post中的表演,而扮演角色之类关于这个演出的信息都存储在ex:126引出的边中。
图5.RDF图中用新节点ex:126来唯一标识新的语句
相较于属性图,RDF增加边的方式更加方便且强大,因为能够支持以下两点:
在边中添加与其他边的关系,如图5中增添扮演的角色Ben Bradlee,而这在属性图中,如果不改变原先的图是无法做到的。
向任何属性添加更多信息,而不仅仅是关系。这对于属性图也是不可能的。
图6.属性图中增添新的节点来与Ben Bradlee产生联系
而在属性图中,想要实现上面两个功能。对于第(1)点,常用的做法是像图6那样增添一个新的节点130,这需要重新构造图并更改所有查询和逻辑,因为演员和电影之间的路径现在不同。对于(2),属性图的解决方案是改变图的结构,把一个属性变成一个边,一个值变成一个节点。而这需要重新构造一个图,并更改其处理的所有查询和逻辑,因为属性图的存储和访问与图遍历完全不同,并且是独立的。这使得属性图的可演化性和灵活性不如RDF图。
正如上述分析的结果,与RDF图相比,属性图的灵活性更弱,扩展或者根据要求进行更改也更加困难。
3.图分析算法与图的划分
图分析算法是属性图的关键应用,是指节点中心性、节点相似性、最短路径、聚类等算法。属性图以提供这些算法而闻名,且有许多应用都依赖于这些算法。话虽如此,属性图数据模型中没有任何特殊之处使这些算法成为可能,它们同样可以很好地应用于RDF图,事实上许多基于RDF的解决方案也提供类似的算法。
关系数据库使用表和视图对数据进行划分。属性图和RDF图均允许用户限定特定类型的节点集。例如,一个查询可以被限制为只与参与者或只与导演一起工作。这提供了一个非常基本的、有限的分区。
RDF数据也可以被划分称为命名图,命名图为我们提供了一种方法来说明三元组语句构成子图。然后我们可以给它一个唯一的标识名称,并将我们认为重要的其他信息与之关联,这种思想也与关系数据库中的视图相类似。
4.属性图的局限性
在属性图的应用中,以下的需求是常见的但是却难以满足:
支持对图中模式的捕获
支持验证和数据完整性
支持捕捉丰富的规则
支持继承和推理
支持全局唯一标识符
支持可替换的标识符
图之间的连通性
图形可进化性的更好解决方案
这些是属性图设计中没有解决的基本限制,原则上,在属性图中添加其中一些这样的功能是可能的——但实现起来并不容易或便捷。
5.RDF图与属性图到知识图谱之间的转化
固有的语义使RDF图到知识图谱的转化很容易:正如前几节的内容,基于RDF的图捕获的信息不仅仅是数据,还有数据的含义或语义,这其中包括丰富的约束和高度表达的规则。所有的信息都存储在一个图中,可供查询和任何其他算法,以帮助我们推理和发现基于现有知识的新知识。也满足分离但可连接这一知识图谱的关键特性。
很容易从属性图转化成一个RDF标准序列化。事实上,Neo4J提供了这样一个库。你可以很容易地得到数据,但你不能得到数据的语义,这是因为数据模型只存在于最初的设计草图中。此外,正如我们所讨论的,图数据的结构可能会受到属性图数据模型的特定限制和由于属性图数据库的体系结构而需要的优化的影响。因此最简单的方法是按原样导出属性图数据,然后用RDF创建表示数据结构的数据模型。
04、总结
随着时间的推移,属性图的弊端和RDF图的优势正在不断显现出来,许多使用者也正经历着从属性图数据库向RDF图数据库转变的过程,希望这个推送可以让大家对于两者的关联与差异有更多的认识,更加了解这两种图数据结构。