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。若图片中节点与边数量、标签与上述三元组完全一致,则判定通过。
预期输出
脚本执行后终端显示可视化图已保存为: rdf_graph.png。生成的PNG图片内容与上方SVG示意图结构一致:三个节点(Alice、Bob、Book1)和三条有向边(两条wrote指向Book1,一条knows从Alice指向Bob)。