4. RDF图的可视化

任务说明

本案例以一份包含3个三元组的RDF图(人物与作品关系)为输入,使用Python的rdflib解析后,通过graphviz生成可视化图,并输出为PNG图片。你需要完成:给定RDF数据 → 解析 → 生成有向图 → 保存图片的完整闭环。

实现代码

import rdflib
from rdflib import Graph, Namespace, URIRef, Literal
from graphviz import Digraph

# 1. 创建RDF图并添加三元组
g = Graph()
ex = Namespace("http://example.org/")

alice = URIRef(ex + "Alice")
bob = URIRef(ex + "Bob")
book = URIRef(ex + "Book1")

g.add((alice, ex + "wrote", book))
g.add((bob, ex + "wrote", book))
g.add((alice, ex + "knows", bob))

# 2. 使用graphviz创建有向图
dot = Digraph(comment="RDF Graph Visualization", format="png")
dot.attr(rankdir="LR", bgcolor="white")

# 3. 遍历RDF三元组,添加节点和边
for s, p, o in g:
    # 节点标签:取URI最后一段或字面量值
    s_label = str(s).split("/")[-1] if isinstance(s, URIRef) else str(s)
    o_label = str(o).split("/")[-1] if isinstance(o, URIRef) else str(o)
    p_label = str(p).split("/")[-1]

    dot.node(s_label, s_label, shape="ellipse", style="filled", fillcolor="#E8F0FE")
    dot.node(o_label, o_label, shape="ellipse", style="filled", fillcolor="#E8F0FE")
    dot.edge(s_label, o_label, label=p_label, color="#1A73E8", fontcolor="#333333")

# 4. 保存并渲染为PNG
output_path = "rdf_graph"
dot.render(output_path, view=False, cleanup=True)
print(f"可视化图已保存为: {output_path}.png")

运行方式

pip install rdflib graphviz
# 需提前安装Graphviz系统库: https://graphviz.org/download/
python rdf_visualize.py

验证方法

运行脚本后,检查当前目录下是否生成rdf_graph.png。打开图片应看到:3个椭圆节点(Alice、Bob、Book1),以及3条带标签的有向边:Alice→wrote→Book1、Bob→wrote→Book1、Alice→knows→Bob。若图片中节点与边数量、标签与上述三元组完全一致,则判定通过。

Alice Bob Book1 wrote wrote knows 节点: RDF资源 边: 谓词(属性) 有向边

预期输出

脚本执行后终端显示可视化图已保存为: rdf_graph.png。生成的PNG图片内容与上方SVG示意图结构一致:三个节点(Alice、Bob、Book1)和三条有向边(两条wrote指向Book1,一条knows从Alice指向Bob)。