编者按
2020年5月,在由哥伦比亚大学主办的Knowledge Graph Conference 2020在线会议上,来自Oracle公司的三位研究院做了题为“Modeling Evolving Data in Graphs While Preserving Backward Compatibility: The Power of RDF Quads”的报告。
该报告介绍了RDF四元组作为数据模型具有的可向后兼容的优良特性,以及创建、管理、查询和分析RDF数据的基本方法。
本文作者北京大学庞悦,将对该报告进行概要阐述。
文末提供获取PPT获取方式。
01
动态图中的向后兼容性和RDF四元组
数据的向后兼容性指的是随着数据的动态演化,旧查询能够保持其有效性的性质。处理数据演化的不同方式决定了数据是否具有向后兼容性。其中一种处理方式是在演化发生时重写数据,如下图:
显然,这种方式无法保证向后兼容性,因为随着重写的发生数据的结构发生了根本的改变。
如何在数据演化的同时保持其结构不变,从而保证向后兼容性呢?本文由此引入了RDF四元组的概念。RDF四元组由图名(graph),主语(subject),谓词(predicate)和宾语(object)构成。相比一般的RDF三元组,它多出了图名这一可选部件,用于对三元组进行命名。每条RDF四元组表示一个事实(fact)。通过命名已有的事实,数据演化产生的新事实可以由已有的事实组合而成,这样就避免了重写,数据的结构得以延续统一性。如下图的第三个事实是由第一个事实(:donation)和第二个事实(:admission)分别作为主语和宾语组合而成,第四个事实的宾语又是第三个事实(:helping):
每个RDF四元组的图名可以附带于谓词上,从而仍然写成三元组的形式,这被称为RDF#语法。下图是一个例子:
在SPARQL查询中,可以采用相同的方式对三元组进行命名,从而表示任意多层嵌套的关系(每一条边都可以成为新边的端点)。如下图左侧查询中的graph语句即是对紧随其后的大括号中的三元组进行命名:
相应地,可以将图名附带于谓词上,称为SPARQL#语法,如下:
在SPARQL更新语言中同样可以使用这种机制来添加或删除以RDF三元组为主语或宾语的三元组:
在本次教程中,使用了Oracle Database19.3演示了动态RDF数据的查询和分析功能。其他提供同种功能的软件包括:Oracle GraphServer and Client 20.1, Oracle Support for Apache Jena 3.1.0, 和Java 11.
02
RDF数据的查询语言SPARQL
主流的图数据模型包括RDF和属性图模型。RDF数据的查询语言为SPARQL系列语言,包括SPARQL 1.1, SPARQL 1.2和SPARQL*。属性图数据的查询语言包括PGQL,G-CORE,Cypher,GQP,GSQL和Gremlin等。
SPARQL的全称是SPARQL协议和RDF查询语言(SPARQL Protocol and RDF Query Language)。它包含以下部件:
-
查询语言(Query Language)
用于对RDF数据进行查询,包含丰富的功能,如可选匹配、聚合函数、嵌套查询、否定式、属性路径、各种内建函数等。
-
更新语言(Update)
用于创建、修改和删除RDF图。
-
协议(Protocol)
用于向SPARQL端点发送查询或更新语句、通过HTTP获取返回结果的协议。
-
服务描述(Service Description)
定义用于描述SPARQL端点所提供的特性的RDF词汇集和机制。
-
JSON格式的查询结果(Query Results JSON Format)。
-
CSV和TSV格式的查询结果(Query Results CSV andTSV Format)。
-
XML格式的查询结果(Query Results XML Format)。
-
联合式查询(Federated Query)
SPARQL的扩展,用于在多个SPARQL端点上分布式执行查询。
-
蕴含推理规则(EntailmentRegimes)
SPARQL的扩展,使得显式三元组逻辑蕴含的隐式三元组也能在查询中被匹配。
-
图存储HTTP协议(Graph Store HTTP Protocol)
SPARQL 1.1 更新语言的简化替代版本,为一系列HTTP操作,可用于管理未存储在SPARQL 1.1图数据库中的RDF图数据。
与属性图的查询语言相比,SPARQL具有更多针对多源数据整合场景的特性,如标准协议、可选匹配、联合式查询和蕴含推理规则。属性图的查询语言则更多地将图视为数据结构,而非三元组或四元组的集合,因此提供更多路径探索和图算法相关的特性,如取顶点度数、求最短路径等。
由于SPARQL对图分析的支持较为有限,Oracle系列产品提供了从RDF图数据中提取等价的属性图,从而在得到的属性图上使用PGQL执行图分析任务的功能。这样就能够在保持向后兼容性的同时,进行较复杂的图分析任务。
03
R2RML:将关系数据转换为RDF数据的映射语言
R2RML由W3C定义,为用于表达从关系数据库到RDF数据集的自定义映射的标准语言。运用R2RML编写映射文件,可以自定义目标RDF数据的词汇集和结构。如此一来,现有的关系数据也可具有向后兼容的优良特性,并可以使用SPARQL进行查询和更新。R2RML映射文件本身是Turtle格式的RDF数据。
构建一个R2RML映射文件至少分为以下步骤(每个步骤构成映射文件的一个部分):
1. 逻辑表(Logical table):
即为将会被转换为RDF数据的对象,它可以是一个基本表,也可以是一个视图、或一个有效的SQL查询。下图中的rr:logicalTable即为用于指定逻辑表的谓词,上下两个框中所指定的逻辑表都是基本表:(rr:为前缀<http://www.w3.org/ns/r2rml#>的缩写,ex:为前缀<http://example.com/ns#>的缩写)
2. 三元组映射(Triples map):
将逻辑表的每一行映射到若干RDF三元组的规则,由两部分组成:一个主语映射(Subject map),一般将逻辑表的主关键字(Primary key)映射到一系列IRI;若干个谓词-宾语映射。下面两张图分别给出PERSON表的主语映射和谓词-宾语映射:
在构建宾语映射时,还可以通过对逻辑表进行连接,构造出主体之间的关系,即主语和宾语均为IRI的RDF三元组。此时需要使用谓词rr:parentTriplesMap来指定宾语主体所在的逻辑表,使用谓词rr:joinCondition来指定连接条件,如下图:
在编写R2RML映射文件时,同样可以对生成的三元组进行命名。只需使用谓词rr:graph,即可指定由这一组映射规则生成的三元组将拥有的图名。如由下图映射生成的三元组都将属于名为:moneyMattersGraph的图,从而使:moneyMattersGraph作为整体可以成为后续三元组的主语或宾语:
白皮书获取可点击阅读原文,或至链接获取:
https://blogs.oracle.com/oraclespatial/kgc-2020-tutorial3a-modeling-evolving-data-in-graphs-while-preserving-backward-compatibility