docs: 勘误——跨仓路径 ttl/gen_nquads → ttl/src/gen_nquads(拍平笔残留笔误)
thy1016/jsonld 是一个用 MoonBit 编写的 JSON-LD 1.1 通用库: expand / compact / flatten / frame / toRDF / fromRDF 六算法全链, 外加 RDFC-1.0 数据集规范化、JCS(RFC 8785) 规范化 JSON, 以及 HTML application/ld+json 脚本抽取。
thy1016/jsonld
application/ld+json
processing_mode
json_canonical
render_json
parse_json
JsonValue
JsonLdError
derive(Eq + Debug)
SHA256SUMS
确保环境中已安装 MoonBit 工具链,然后在模块根目录:
moon add thy1016/jsonld
再在用到它的包的 moon.pkg import 块中添加 "thy1016/jsonld", 代码内以 @jsonld 前缀使用。
moon.pkg
import
"thy1016/jsonld"
@jsonld
JsonLdOptions 为全字段显式构造(MoonBit 跨包构造规则):
JsonLdOptions
let opts = @jsonld.JsonLdOptions::{ base: None, expand_context: None, processing_mode: @jsonld.ProcessingMode::JsonLd11, load_context: None, rdf_direction: None, produce_generalized_rdf: false, compact_arrays: true, compact_to_relative: true, frame_expansion: false, omit_graph: false, use_native_types: false, use_rdf_type: false, }
let doc = "{\"@context\": {\"name\": \"http://schema.org/name\"}, \"name\": \"Ada\"}" match @jsonld.expand_document(doc, opts) { Ok(expanded) => println(@jsonld.render_json(expanded)) Err(err) => println("expand failed: \{err}") }
let context = "{\"name\": \"http://schema.org/name\"}" match @jsonld.compact_document(doc, context, opts) { Ok(compacted) => println(@jsonld.render_json(compacted)) Err(err) => println("compact failed: \{err}") }
to_rdf_document 产出 JsonLdQuad 数组(术语为 N-Quads 形字符串); from_rdf_document 的输入为 N-Quads 文本。
to_rdf_document
JsonLdQuad
from_rdf_document
match @jsonld.to_rdf_document(doc, opts) { Ok(quads) => println("quads: \{quads.length()}") Err(err) => println("toRDF failed: \{err}") } let nq = "<http://example.org/s> <http://example.org/p> \"v\" .\n" match @jsonld.from_rdf_document(nq, opts) { Ok(node_object) => println(@jsonld.render_json(node_object)) Err(err) => println("fromRDF failed: \{err}") }
match @jsonld.rdfc10_canonicalize_with_hash(nq, @jsonld.C14nHashAlgorithm::Sha384) { Ok((canonical, hashes)) => { for id, hash in hashes { println("\{id} => \{hash}") } } Err(err) => println("canonicalize failed: \{err}") }
match @jsonld.parse_json("{\"b\": 1.0, \"a\": 2}") { Ok(parsed) => println(@jsonld.render_json(@jsonld.json_canonical(parsed))) Err(err) => println("parse failed: \{err}") }
库内不做网络 I/O;远程上下文经 load_context 回调由调用方注入:
load_context
// ((String) -> Result[String, String])? let loader = url => fetch_document(url) // 构造 options 时:load_context: Some(loader)
expand_document
compact_document
flatten_document
frame_document
html_script_source
<script type="application/ld+json">
rdfc10_canonicalize_with_hash
canonical_for_suite
isomorphic_for_suite
jsonld_iri_routes
jsonld_keyword_routes
JsonLdError 九变体:Syntax / InvalidContext / InvalidIri / InvalidValue / InvalidList / Unsupported / ContextOverflow / LoadingDocumentFailed / InvalidScriptElement。
Syntax
InvalidContext
InvalidIri
InvalidValue
InvalidList
Unsupported
ContextOverflow
LoadingDocumentFailed
InvalidScriptElement
定位裁定与全证据链见仓内 spec.md §9。
spec.md
库随附可执行薄壳(不接网络,上下文一律本地文件):
moon run cmd/main -- <command> [options] <inputs>
八命令:expand / compact / flatten / frame / to-rdf / from-rdf / canonicalize / json-canonical;选项 --base <iri>、--mode <1.0|1.1>、 --hash <sha256|sha384>。错误文案走 stderr,数据走 stdout。
expand
compact
flatten
frame
to-rdf
from-rdf
canonicalize
json-canonical
--base <iri>
--mode <1.0|1.1>
--hash <sha256|sha384>
# 例:展开并直出 N-Quads moon run cmd/main -- to-rdf doc.jsonld # 例:RDFC-1.0 规范化(sha384 档) moon run cmd/main -- canonicalize --hash sha384 dataset.nq
moon test
输出八面自报行 [<面>] entries=N plain=N deferred=N(下数计于 2026-10-06):
[<面>] entries=N plain=N deferred=N
语料 = W3C json-ld-api / json-ld-framing / rdf-canon(.rdf-tests/, SHA256SUMS 完整性锁版)。
.rdf-tests/
版本沿革见 CHANGELOG.md。
CHANGELOG.md
LICENSE
Apache License, Version 2.0(LICENSE)。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
mbt.jsonld
thy1016/jsonld是一个用 MoonBit 编写的 JSON-LD 1.1 通用库: expand / compact / flatten / frame / toRDF / fromRDF 六算法全链, 外加 RDFC-1.0 数据集规范化、JCS(RFC 8785) 规范化 JSON, 以及 HTMLapplication/ld+json脚本抽取。特性
processing_mode支持 1.0 / 1.1 双档; flatten 的上下文为可选参数(展平 + 压缩一步到位)。json_canonical树规范化(键序 + 数词形)+render_json序列化出口(带转义门)。parse_json/JsonValueAST;产品面仅依赖 MoonBit 标准库(core)。JsonLdError九变体,derive(Eq + Debug),可 match 分型。SHA256SUMS锁版)。安装
确保环境中已安装 MoonBit 工具链,然后在模块根目录:
再在用到它的包的
moon.pkgimport块中添加"thy1016/jsonld", 代码内以@jsonld前缀使用。快速上手
JsonLdOptions为全字段显式构造(MoonBit 跨包构造规则):展开(expand)
压缩(compact)
toRDF / fromRDF
to_rdf_document产出JsonLdQuad数组(术语为 N-Quads 形字符串);from_rdf_document的输入为 N-Quads 文本。RDFC-1.0 规范化
JCS 规范化 JSON
远程上下文注入
库内不做网络 I/O;远程上下文经
load_context回调由调用方注入:API 总览
parse_jsonJsonValueAST)expand_documentcompact_documentflatten_documentframe_documentto_rdf_documentJsonLdQuad)from_rdf_documenthtml_script_source<script type="application/ld+json">抽取rdfc10_canonicalize_with_hashjson_canonical/render_jsoncanonical_for_suite/isomorphic_for_suitejsonld_iri_routes/jsonld_keyword_routes错误面
JsonLdError九变体:Syntax/InvalidContext/InvalidIri/InvalidValue/InvalidList/Unsupported/ContextOverflow/LoadingDocumentFailed/InvalidScriptElement。设计边界(圈外 = 设计裁定,非缺口)
load_context注入; W3C remote-doc 套件例按设计排除。定位裁定与全证据链见仓内
spec.md§9。命令行工具(cmd/main 薄壳)
库随附可执行薄壳(不接网络,上下文一律本地文件):
八命令:
expand/compact/flatten/frame/to-rdf/from-rdf/canonicalize/json-canonical;选项--base <iri>、--mode <1.0|1.1>、--hash <sha256|sha384>。错误文案走 stderr,数据走 stdout。测试与验证
输出八面自报行
[<面>] entries=N plain=N deferred=N(下数计于 2026-10-06):语料 = W3C json-ld-api / json-ld-framing / rdf-canon(
.rdf-tests/,SHA256SUMS完整性锁版)。版本沿革见
CHANGELOG.md。许可证声明(W3C 语料)
LICENSE)。.rdf-tests/(顶层点目录 ⇒ 留在仓库、 不进发布包),原始文件逐字节未修改,SHA256SUMS锁版。许可证
Apache License, Version 2.0(
LICENSE)。