目录

MoonRDFS

thy1016/moonrdfs 是一个用 MoonBit 编写的 RDF 数据集存储库:实现 owned 词项字典(RDF 1.2,含三元组词项嵌套)、三元组/四元组双面索引、 BGP 图模式匹配连接核与 BGP 执行器,提供内存核与 RocksDB 物理面两种 后端——两者同吃一份连接逻辑(单连接核),并有差分对拍门锁定行为一致。 查询语言的降阶适配器不在本库范围内:本库不依赖任何查询语言模块, 只锁 pattern 自持的匹配面。

特性

  • 零查询语言依赖:不 import sparql;查询降阶适配器(Op→pattern) 住消费方仓库,本仓只锁 exec_bgp / exec_bgp_quads 上料与匹配面。
  • 排布数据化:索引排布 = TOML 策略表数据(domain/index_layout.toml), 词→规格 of_name,择径 choose_triple_index_pos / choose_quad_index_pos 完美前缀;物理面 CF 族随排布数据——换排布 = 换表,零代码改动。
  • 单连接核,差分对拍:内存核与 RocksStore 同吃一份 join 逻辑 (pub(open) trait TripleEngine / QuadEngine,exec_bgp_on / exec_bgp_quads_on 单真源);同料两店全 API 对拍门按规范形行集判定。
  • 图感知 BGP 面:QuadPattern / QuadBgp(g/s/p/o 四槽,图变元 与主谓宾同权进连接序);数据集分账——默认图走 exec_bgp(三元组 侧),命名图走 exec_bgp_quads(四元组侧)。
  • 迭代器纪律:批返回 + limit? 上界参数,禁无界流。
  • 错误面独立族:RdfStoreError 政策/完整性/外部三分, of_face 统一翻译口——不污染调用方错误语义。

安装

确保环境中已安装 MoonBit 工具链,然后在模块根目录:

moon add thy1016/moonrdfs

模块源码正式地址:gitlink https://gitlink.org.cn/thy7/mbt.rdfs;工作区 多模块场景可直接以本地树路径引用。

再在用到它的包的 moon.pkg import 块中按需添加 "thy1016/moonrdfs/core"(@core)与 "thy1016/moonrdfs/store" (@store),代码内以前缀使用。rocks 包为 native 门 + C FFI 基础设施(链接面 -lrocksdb),仅链接了 rocksdb 的宿主消费。

快速上手

内存 Dataset:上料 → BGP 匹配 → 规范形行读出:

let ds = @store.MemoryDataset::new()
let _ = ds.insert(@core.Triple::{
  s: @core.Term::Iri("http://example/s"),
  p: @core.Term::Iri("http://example/p"),
  o: @core.Term::Literal("v", None, None),
})
let rows = ds.exec_bgp(@core.Bgp::{
  patterns: [
    @core.TriplePattern::{
      s: @core.PatternTerm::Var("s"),
      p: @core.PatternTerm::Fixed(@core.Term::Iri("http://example/p")),
      o: @core.PatternTerm::Var("o"),
    },
  ],
})
// rows : Array[Map[String, @core.Term]]——变元名 → 规范形词项

命名图面(图变元与主谓宾同权连接;解行 = 变元绑定表,定词槽不入行):

let _ = ds.insert_quad(@core.Quad::{
  s: @core.Term::Iri("http://example/s"),
  p: @core.Term::Iri("http://example/p"),
  o: @core.Term::Iri("http://example/o"),
  g: @core.Named(@core.Term::Iri("http://example/g")),
})
let qbgp = @core.QuadBgp::{
  patterns: [
    @core.QuadPattern::{
      g: @core.PatternTerm::Var("g"),
      s: @core.PatternTerm::Var("x"),
      p: @core.PatternTerm::Fixed(@core.Term::Iri("http://example/p")),
      o: @core.PatternTerm::Var("o"),
    },
  ],
}
let qrows = ds.exec_bgp_quads(qbgp)
// 图变元 ?g 解出 Named 图名词项

物理面(RocksDB,排布走缺省策略表):

let rs = @rocks.RocksStore::open(
  path="/tmp/rdfs-db",
  triple_layout=@core.default_triple_layout(),
  quad_layout=@core.default_quad_layout(),
)
// 与内存核同一份连接核;同料对拍门保证两店逐位同形
rs.close()

API 总览

入口 作用
Term / TermDictionary owned 词项(Iri / BNode / Literal / TripleTerm 嵌套)与规范形字典(term↔id 双向,判等经规范形)
TriplePattern / Bgp 三元组模式与图模式组(s/p/o 槽,定词或变元)
QuadPattern / QuadBgp 四元组模式与命名图面图模式组(g/s/p/o 四槽)
plan_bgp / plan_quad_bgp 连接序规划(纯函数,贪心:已绑多者先排)
choose_triple_index_pos / choose_quad_index_pos 排布完美前缀择径(纯函数)
TripleIndexSpec / QuadIndexSpec 索引规格(of_name 词→规格;缺省排布 default_*_layout)
load_index_layout domain/index_layout.toml 策略表解析(新键可选/未知键忽略)
MemoryDataset 数据集门面(默认图/named 分账,字典两侧共享)+ 前缀册
MemoryDataset::exec_bgp / exec_bgp_quads 默认图面 / 命名图面 BGP 执行
MemoryStore / QuadStore 内存三索引 / G 前缀族四索引引擎
exec_bgp_on / exec_bgp_quads_on 单连接核执行器(TripleEngine / QuadEngine 喂料口)
RocksStore RocksDB 物理面(CF 族名 = 排布 spec.name;键 = id 定长 8B 大端;TT 自描述编码)
RdfStoreError 错误族:PolicyRejected / Corrupt / ExternalFailed

设计边界

  • 拆包形 = Oxigraph,不是 Jena——分层污点反例锚 = Jena tdb2 solver import ARQ 型。血统明示:Jena TDB2 五层对位(NodeId/字典 → TupleIndex → 表层 → Dataset 门面 → solver)与 Oxigraph 拆包分层, 思想与分层参考,实现全自研(clean-room,Apache-2.0)。
  • 翻译门 adapter 住消费方:moonttl / jelly 等上游格式到本库词项的 适配器住消费侧装配包;本仓零上游依赖。
  • RDF 1.2 注解(annotation / reifies)的专用索引未立; TripleTerm 词项嵌套已支持。
  • 物理面消费前提:宿主链接 rocksdb C 库;非 native 后端不可见 (per-file targets 门)。

定位与契约的完整说明见 spec.md。

测试与验证

moon test -p core
moon test -p store
moon test -p rocks --target native

门读数(2026-11-03):core 22 / store 24 / rocks 14,合计 60。 注意 rocks 包为 native 门包,裸 moon test 会静默跳过——必须 --target native 分包跑(0 读数 ≠ 包绿)。差分对拍门同料两店 (内存核 vs 物理面)逐 API 按规范形行集判定,quad-BGP 束行集节 含跨案图变元连接钉值。

版本沿革见 CHANGELOG.md。

许可证

本项目代码采用 Apache License 2.0(见 LICENSE)。实现为 clean-room 自研:参考的只有上游系统的公开分层思想,未复制任何代码; 上文套件通过计数是本项目自测结果,不代表任何第三方认证或背书。

关于
144.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号