rdflib 兼容性
Python 的 rdflib 是该生态中既有的主流 RDF 库,PurRDF 以两个层级与之对接:一个显式的兼容模块,以及一个需主动启用的直接替换(drop-in)影子包。
第 1 层:显式兼容层
主 purrdf wheel 附带一个由原生引擎支撑的 rdflib 兼容层:
from purrdf.compat.rdflib import Graph
g = Graph()
g.parse(data="<https://example.org/a> <https://example.org/b> <https://example.org/c> .",
format="turtle")
对于希望在 PurRDF 引擎上使用 rdflib 风格 API 的新代码,这是推荐路径:导入名称如实反映其身份,并且它可以与真正的 rdflib 安装共存。
Graph.query、SPARQL 处理器、Dataset 和 ConjunctiveGraph 采用编译到原生求值器中的上下文初始绑定语义。查询赋值可以替换初始值,而初始映射仍可供外层操作使用。命名图视图和 default_union 决定查询的图作用域。直接使用 purrdf.Store.query 和 Store.prepare 接口时,仍遵循原生预绑定规则。
第 2 层:purrdf[rdflib] 影子发行包
若要让 import rdflib 字面上零改动即可使用,请安装这个需主动启用的 extra:
pip install "purrdf[rdflib]"
这会拉入独立的 purrdf-rdflib 分发包,其顶层 rdflib 包重新导出兼容层的接口,于是现有第三方代码中的 import rdflib / from rdflib.namespace import RDF 便透明地运行在 PurRDF 之上。注意:该影子包占用了 rdflib 这一导入名,绝不可与真正的 rdflib 同时安装——二者无法共存于同一环境。它是一个独立的分发包(从不打进主 purrdf wheel),正是为了让需要真实 rdflib 的环境直接不装它即可。
兼容性如何得到保证
该兼容层并非「尽力而为」——它在 CI 中作为单一一致性矩阵(docs/CONFORMANCE.md)的一部分受到把关:
- rdflib 直接替换(LSP)检查针对 purrdf 直接替换包运行 rdflib 7.6 自身的、随库固化的测试套件。
- 对等性测试套件针对真正的 rdflib 7.6 运行
purrdf.compat的第一方差分测试。
两者都使用严格的预期失败台账:每个已知分歧都连同逐测试的原因一起列出,意外失败会使构建失败,而被静默修复的分歧同样会使构建失败,直到台账缩减为止。台账列明当前的分歧,并区分尚不支持的配置执行与有意采用的术语和查询准入差异。
性能
一个仅用于报告的基准测试框架,在解析、序列化、SPARQL 与三元组模式迭代上,对以原生引擎为后端的 purrdf.compat.rdflib 直接替换包与真正的 rdflib 进行计时(make bench-python)。方法说明以及一张有代表性的(依宿主而异的)结果表见 docs/BENCHMARKS.md——数字因宿主而异,因此请在本地复现,而不要相信某个固定的倍数。其理念见性能。