You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RDFlib序列化JSON-LD时未生成@context和@graph的问题排查

RDFLib 6.2.0导出JSON-LD缺少@context和@graph的解决办法

问题原因

RDFLib默认的JSON-LD序列化输出是扁平化的节点数组,这是因为默认未启用紧凑模式(compact),也没有指定上下文(context)或使用框架(frame)来触发包含@context和@graph的结构。

解决方法

1. 启用紧凑模式并自动生成@context

通过设置compact=True并指定上下文(或让RDFLib自动提取命名空间),可以生成包含@context的紧凑JSON-LD结构:

from rdflib import Graph
from pathlib import Path

myGraph = Graph()
# 此处省略向图中添加三元组的代码

# 方式1:指定基础词汇URI,自动映射命名空间
myGraph.serialize(
    destination=Path(outputpath),
    format="json-ld",
    context={"@vocab": "http://your-base-uri/"},
    compact=True,
    indent=2  # 可选,格式化输出便于阅读
)

# 方式2:让RDFLib自动从图中提取命名空间生成@context
myGraph.serialize(
    destination=Path(outputpath),
    format="json-ld",
    context=None,  # 设为None自动收集命名空间
    compact=True,
    indent=2
)

2. 使用框架(Frame)强制生成@graph结构

如果需要明确的外层@graph数组,可以通过frame参数指定一个简单框架:

frame = {
    "@context": {"@vocab": "http://your-base-uri/"},
    "@graph": []
}

myGraph.serialize(
    destination=Path(outputpath),
    format="json-ld",
    frame=frame,
    indent=2
)

这种方式会输出包含@context和@graph的标准JSON-LD结构,所有节点都会被包裹在@graph数组中。

3. 手动构建自定义@context(使用Context类)

如果需要精细控制命名空间前缀映射,可以用rdflib_jsonld.context.Context类手动构建上下文:

from rdflib_jsonld.context import Context
from rdflib import Namespace, Graph
from pathlib import Path

EX = Namespace("http://example.org/")
MY_ONTO = Namespace("http://your-ontology.org/")

# 构建自定义上下文
my_context = Context()
my_context.bind("ex", EX)
my_context.bind("onto", MY_ONTO)

# 序列化时传入自定义上下文
myGraph = Graph()
# 省略添加三元组代码

myGraph.serialize(
    destination=Path(outputpath),
    format="json-ld",
    context=my_context,
    compact=True,
    indent=2
)

关键参数说明

  • compact=True:启用紧凑模式,将扁平化的节点转换为使用上下文的紧凑结构,同时生成@context。
  • context:可以是字典、Context实例或None,用于定义命名空间前缀与URI的映射。设为None时,RDFLib会自动从图中提取所有命名空间生成@context。
  • frame:通过框架定义JSON-LD的输出结构,强制生成@graph数组。

内容的提问来源于stack exchange,提问作者O-U-O

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:50:32