moonrdfs

    MoonRDFS —— RDF Store(三元组/四元组存储+BGP 匹配纯核;Oxigraph 拆包形,零查询语言依赖,owned Term 字典+索引策略表)

    rdf
    store
    quad
    triple
    moonbit
    Download zip
    Author
    Version
    0.0.1
    License
    Apache-2.0
    Last updated
    13 hours ago
    Downloads
    3

    #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 / TermDictionaryowned 词项(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_layoutdomain/index_layout.toml 策略表解析(新键可选/未知键忽略)
    MemoryDataset数据集门面(默认图/named 分账,字典两侧共享)+ 前缀册
    MemoryDataset::exec_bgp / exec_bgp_quads默认图面 / 命名图面 BGP 执行
    MemoryStore / QuadStore内存三索引 / G 前缀族四索引引擎
    exec_bgp_on / exec_bgp_quads_on单连接核执行器(TripleEngine / QuadEngine 喂料口)
    RocksStoreRocksDB 物理面(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 自研:参考的只有上游系统的公开分层思想,未复制任何代码; 上文套件通过计数是本项目自测结果,不代表任何第三方认证或背书。

    Powered by MoonBit

    Site sourceReport issueModulesSkillsBuild queueStatistics

    © 2026 mooncakes.io