属性图和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 属性图与RDF图的区别

数据模型

  • 属性图:属性图是一种图数据模型,侧重于节点(实体)和边(关系)之间的关联。节点可以包含属性,每个属性是一个键值对,用于存储节点的属性信息。边表示节点之间的有向关系,可以带有属性来描述关系的特性。

  • RDF图:RDF是一种语义网数据模型,用于描述资源之间的语义关系。RDF图由三元组(主语-谓词-对象)组成,主语和对象通常是资源的统一资源标识符(URI),谓词表示主语和对象之间的关系。

属性和关系表示
  • 属性图:属性图中,每个节点都可以包含多个属性。这些属性可以是键值对,用于存储节点的详细信息。边也可以带有属性,这样可以在边上附加关于关系的附加信息。

  • RDF图:在RDF图中,属性信息通常不是直接附加到主语和对象上,而是通过描述主语和对象之间的谓词来表示关系。属性信息被视为其他资源,通过将其标识符作为对象来表示。

语义网络构建
  • 属性图:属性图对于关系和属性建模非常有用,但在构建复杂的语义网络时可能需要额外的语义层次。

  • RDF图:RDF图专门设计用于构建语义网络,资源之间的关系和语义可以通过RDF三元组明确地表示,使得构建和推理更为直接。

语义表示和推理能力
  • 属性图:属性图通常强调节点和边的实际连接、不过多关注语义表示和推理。属性图数据库通常提供基于模式和查询的高性能操作。

  • RDF图:RDF图支持语义表示和推理,允许通过RDF Schema和OWL(Web Ontology Language)等语义技术来定义资源之间的层次关系和逻辑规则,以实现更高级的推理和语义表达能力。

查询语言

  • 属性图:属性图数据库通常使用图查询语言(如Cypher、Gremlin)来支持复杂的图查询和分析。这些查询语言专注于图模式匹配和路径遍历,适用于寻找节点之间的关联。

  • RDF图:RDF图的查询语言主要是SPARQL(SPARQL Protocol and RDF Query Language),它是用于查询RDF数据的标准查询语言。SPARQL允许用户在RDF图中进行图模式匹配、关系查询和语义推理。

数据交互和共享
  • 属性图:属性图通常在内部用于应用程序,对于数据交换和共享可能需要进行转换和映射。

  • RDF图:RDF图的设计目标之一是促进数据在不同系统之间的交换和共享。采用统一的URI标识资源,使得不同RDF数据源可以相互链接和整合。

可扩展性和分布式性
  • 属性图:属性图数据库在处理大规模数据时可能需要面临一些挑战,但现代的图数据库系统提供了分布式架构来应对可扩展性需求。

  • RDF图:RDF图的分布式处理和查询在语义网领域已经得到了广泛的研究和实践,支持处理分布式数据集。

同一数据下,属性图与RDF图的展现示意:

04 总结

综上所述,属性图和RDF图在数据模型、关系表示、语义推理和应用领域等方面存在不同。属性图适用于实体属性和复杂关系建模,通常强调关联和属性分析。RDF图则强调语义关系和语义推理,在构建语义网络和数据互操作性方面具有优势。

同时,RDF的优势在于足够简单,所有数据都是三元组形式,而且是无模式(schema-free)的数据建模,灵活性高,也有统一的查询语言SPARQL,而属性图的优势在于可以通过边属性描述更多的信息,更加紧凑。

随着时间的推移,属性图的弊端和RDF图的优势正在不断显现出来,许多使用者也正经历着从属性图数据库向RDF图数据库转变的过程,希望这个推送可以让大家对于两者的关联与差异有更多的认识,更加了解这两种图数据结构。最终,选择使用哪种图模型,可以根据数据的性质、需求以及所在的应用环境来确定。


关于途普智能
途普智能科技(北京)有限公司是一家专注于图数据库系统研发、知识图谱应用的高科技创新企业,由北京大学科技成果转化所创立。公司致力于打造国产图数据库的“中国芯”,提供从知识构建、管理到服务系统为一体的TopGraph企业知识中台产品和行业解决方案,目前已部署于工业质量管控、金融风险分析、政务大数据、智能问答机器人、电信欺诈检测等多个场景,并在金融、政务、工业、教育、医疗等行业广泛应用。

来源:本文部分内容来自公众号【图谱学苑】,作者:葛钤

作者:途普智能 www.topgraph.cn 

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是一个简单的示例: 1. 首先,你需要准备一个csv文件。我们假设这个文件名为example.csv,它包含三列数据:id、name和age。 2. 接下来,你需要编写一个RML规则文件,将csv文件中的数据转换为RDF格式。可以使用文本编辑器创建一个新文件,命名为example.rml。以下是一个示例规则: ``` @prefix rr: <http://www.w3.org/ns/r2rml#>. @prefix rml: <http://semweb.mmlab.be/ns/rml#>. @prefix ql: <http://semweb.mmlab.be/ns/ql#>. @prefix xsd: <http://www.w3.org/2001/XMLSchema#>. @prefix ex: <http://example.com/>. <#TriplesMap> rr:logicalTable [ rr:tableName "example.csv"; ]; rr:subjectMap [ rr:template "http://example.com/person/{id}"; rr:class ex:Person; ]; rr:predicateObjectMap [ rr:predicate ex:name; rr:objectMap [ rml:reference "name"; ]; ]; rr:predicateObjectMap [ rr:predicate ex:age; rr:objectMap [ rml:reference "age"; rml:datatype xsd:integer; ]; ]. ``` 这个规则文件定义了一个RML三元组映射(TriplesMap),它将csv文件中的数据转换为RDF格式。规则文件中定义了一个逻辑表(logicalTable)来指定csv文件的名称。它还定义了一个主语映射(subjectMap),该映射使用id列来创建一个人的URI,同时指定了Person类作为该URI的类型。规则文件还定义了两个谓语对象映射(predicateObjectMap),分别将name列和age列映射到ex:name和ex:age属性。 3. 安装并运行rmlmapper.jar工具。你可以从https://github.com/RMLio/rmlmapper-java/releases下载最新版本的rmlmapper.jar文件,并运行以下命令: ``` java -jar rmlmapper.jar -m example.rml -o example.rdf ``` 这将使用example.rml规则文件将csv文件转换为RDF格式,并将结果写入example.rdf文件中。 4. 验证RDF文件。你可以使用RDF工具(如Apache Jena或Protege)加载生成的example.rdf文件,并验证其是否包含预期的三元组。 ### 回答2: RML(RDF Mapping Language)是一种用于将非RDF数据转换成RDF格式的规则语言。rmlmapper.jar是一个用于执行RML规则的工具。 使用rmlmapper.jar工具编写RML规则来将csv文件转换为RDF格式,主要需要以下步骤: 1. 定义数据源:使用RML规则定义数据源,包括csv文件的位置、分隔符、编码方式等信息。 2. 定义三元组映射规则:根据csv文件的结构,定义数据字段和RDF三元组之间的映射关系。这些规则需要指定数据字段、RDF主题、谓词等信息。 3. 编写RML规则文件:根据上述定义的数据源和三元组映射规则,编写RML规则文件。RML规则文件是一个基于XML的定义文件,可以使用任何XML编辑器编写。 4. 执行RML映射:使用rmlmapper.jar工具执行RML规则文件,将csv文件中的数据转换为RDF格式。执行命令可以类似于以下形式: java -jar rmlmapper.jar [RML规则文件] [输出RDF文件] 5. 检查转换结果:检查生成的RDF文件,确保数据按照预期转换为RDF格式。可以使用RDF编辑器或查询工具来验证RDF数据的正确定义。 总结来说,使用rmlmapper.jar工具编写RML规则可以将csv文件转换为RDF格式。在这个过程中,需要定义数据源、三元组映射规则,编写RML规则文件,使用rmlmapper.jar工具执行RML规则,最后检查生成的RDF文件。这样就可以将非RDF的csv数据转换为RDF格式,以便在语义网中进行进一步的数据处理和查询。 ### 回答3: RMLmapper.jar是一个Java编写的工具,用于将CSV文件转换为RDF格式。以下是使用RMLmapper.jar编写RML规则来完成文件转换的步骤: 1. 下载和安装RMLmapper.jar。你可以从官方网站或代码托管平台如GitHub上找到该工具的最新版本。安装完毕后,确保已将其添加到系统的环境变量中。 2. 创建一个空的文本文件,用于编写RML规则。可以使用任何文本编辑器,如Notepad++。 3. 在文本文件中,首先声明RML命名空间,例如:@prefix rml: <http://semweb.mmlab.be/ns/rml#>。 4. 创建一个RML逻辑映射块。示例格式如下: rr:TriplesMap rml:logicalSource [ rml:source "example.csv"; rml:referenceFormulation ql:CSV; rml:iterator "$" ]; rml:subjectMap [ rml:template "http://example.org/resource/{id}"; rml:class ex:ExampleClass ]; rml:predicateObjectMap [ rml:predicate ex:property1; rml:objectMap [ rml:reference "column1"; rml:datatype xsd:string ] ]; rml:predicateObjectMap [ rml:predicate ex:property2; rml:objectMap [ rml:reference "column2"; rml:datatype xsd:integer ] ]. 在逻辑映射块中,你需要设置逻辑来源(CSV文件路径),迭代器以及主语映射和谓语对象映射等规则。你可以根据CSV文件的结构进行调整。 5. 保存文件,并按照所设定的路径在命令行中执行以下命令以进行转换: java -jar rmlmapper.jar -m your-rml-file.txt -o output-file.rdf 将"your-rml-file.txt"替换为你保存RML规则的文件路径,将"output-file.rdf"替换为RDF输出文件的路径。在成功转换后,输出文件将包含转换后的RDF数据。 这是使用RMLmapper.jar编写RML规则将CSV文件转换为RDF格式的基本步骤。你可以根据你的具体数据和需要进一步调整和扩展规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值