MoonTTL is a high-performance RDF parsing and serialization library for MoonBit.
Dependencies
{
"name": "your_username/your_project",
"deps": [
"thy1016/moonttl"
]
}moon run src/cmd/main -- "<http://example.org/s> <http://example.org/p> <http://example.org/o> ."echo '<http://example.org/s> <http://example.org/p> <http://example.org/o> .' > test.nq
moon run src/cmd/main -- -f test.nqmoon run src/cmd/main -- -v -f test.nq<http://example.org/s> <http://example.org/p> <http://example.org/o> .
let content = "<http://example.org/s> <http://example.org/p> <http://example.org/o> .\n"
let data = @utf8.encode(content).to_array()
let lexer = @lib.Lexer::Lexer(
@lib.RdfLexer::RdfLexer(@lib.RdfMode::NTriples, false, []),
data,
true,
@lib.MIN_BUFFER_SIZE,
@lib.MAX_BUFFER_SIZE,
Some(b"#"),
0,
0,
)
let logger = @lib.make_console_logger()
let machine = @lib.NQuadsRecognizer::{
current_state: @lib.NQuadsState::ExpectSubject,
stack: [@lib.NQuadsState::ExpectSubject],
emit_quad: false,
temp_literal: None,
lenient: false,
debug_logger: logger,
last_range: @lib.Range::default(),
errors: [],
}
let context = @lib.RdfContext::NQuadsRecognizerContext(@lib.NQuadsRecognizerContext::{
with_graph_name: true,
lexer_options: { base_iri: None },
})
let generic_machine = @lib.GenericStateMachine::GenericStateMachine(
machine,
context,
debug_logger=logger,
)
let parser = @lib.Parser::{
lexer,
engine: generic_machine,
context,
errors: [],
}
for ;; {
match parser.parse_next() {
Some(Ok(quad)) => println("Parsed: \{quad}")
Some(Err(e)) => println("Error: \{e}")
None => break
}
}src/
├── gen_nquads/ # N-Quads/N-Triples 解析器(生成契约 + 用户层;含词法器/物化/序列化/套件)
├── gen_trig/ # TriG/Turtle 解析器(同上;TriG 超集 + Turtle 方言开关)
├── gen_n3v2/ # N3 解析器(同上;公式/规则/量化/路径/@keywords)
├── cmd/main/ # 命令行工具(`moon run src/cmd/main -- <file>`)
├── examples/ # 三方言可运行示例:nquads / trig / n3
├── bench/ # 基准程序
└── quick_machine/ # 快测机(表驱动的模型执行对照)moon run src/examples/nquadsWritten N-Quads content to: ./example.nq
Parsing N-Quads file...
[1] Quad<http://example.org/s1, http://example.org/p1, http://example.org/o1>
[2] Quad<http://example.org/s2, http://example.org/p2, http://example.org/o2>
[3] Quad<http://example.org/s3, http://example.org/p3, http://example.org/o3>
[4] Error: InvalidTurtleToken - Unexpected end of input turtle .
=== Summary ===
Total quads parsed: 3moon run src/examples/trigmoon run src/examples/n3moon test # 全模块:507/507(默认档);--target native 521/521
moon test src/gen_nquads # 146/146(W3C N-Quads 89/89、rdf12-nt 29/29、rdf12-nq 27/27、ntriples 72/72)
moon test src/gen_trig # 105/105(rdf-trig 357/357、rdf-turtle 316/316、rdf12 36/36 + 75/75)
moon test src/gen_n3v2 # 122/122(turtle 316/316、rdf12 75/75、N3Tests neg 23ok/0miss + pos+eval 205 clean) 实现 解析时间 每秒解析 每条耗时
━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━ ━━━━━━━━━━━ ━━━━━━━━━━━
MoonTTL (MoonBit) 0.56 ms 1,786,445 0.00056 ms
──────────────────── ────────── ─────────── ───────────
Oxigraph (Rust) 0.77 ms 1,294,934 0.00077 ms
──────────────────── ────────── ─────────── ───────────
rdflib (Python) 17.89 ms 55,900 0.0179 ms
──────────────────── ────────── ─────────── ───────────
Apache Jena (Java) 2,734 ms 36,576 0.0273 ms
──────────────────── ────────── ─────────── ───────────
no-brain-scan (C) 0.16 ms 6,250,000 0.0002 ms
### MoonTTL 性能分析
=== MoonBit 解析 test_1000.nq ===
文件: test_1000.nq
文件大小: 103670 bytes
=== 性能数据 ===
Lexer: 515.532 µs (5000 tokens)
ParserE: 575.14 µs (1000 quads)
验证: 1448.353 µs (1000 quads, 0 errors)
物化: 310.314 µs (1000 quads, 0 errors)
=== 总计 ===
总时间: 1.76 ms
三元组数量: 1000
每秒解析: 568,612
每三元组: 0.0018 ms
cd src/bench
./run_all.sh// 严格(默认,不变)
let slice = @nquads.SliceParser::new(engine, data)
let (quads, errs) = slice.parse_all()
let (emits, merrs) = mat.materialize_all(quads) // 默认 Deep
// 轻验(显式;只要速度时用)
let slice = @nquads.SliceParser::new(engine, data, mode=@nquads.ValidateMode::Light)
let (quads, errs) = slice.parse_all()
let (emits, merrs) = @nquads.materialize_all(quads) // nquads 物化 = 自由函数;n3v2/trig 走方法并接 `mode=`
// n3v2 / trig 同形:`N3SliceParser::new(...)` / `TrigSliceParser::new(...)` 亦接 `mode=`Install
Download zipMoonTTL is a high-performance RDF parsing and serialization library for MoonBit.
Dependencies