MoonBit XML base and RDF/XML parser: spec-shaped document model, namespace-aware pull parsing with BOM/encoding detection, canonical serialization, with W3C XML Conformance and RDF/XML test-suite coverage.
moon add thy1016/moonxml// parse 以 raise 风格报错(XmlError 携行/列/字节偏移)
let doc = try @base.parse("<r><a>1</a><b x=\"2\"/></r>") catch {
_ => abort("parse failed")
}
println(doc.to_xml())// XML 1.0 四版次全表名字面(Edition5 为现行第五版紧凑面)
let opts_edition = @base.parse_edition(
source,
edition=@base.XmlEdition::Editions1to4,
)
// 非 NS 面:名字原文直通,xmlns 即普通属性
let ns_off = @base.parse_edition(
source,
edition=@base.XmlEdition::Edition5,
ns=@base.NsMode::Off,
)// BOM 嗅探 + 声明面编码决策;不支持面报 Encoding 错(raise 风格)
let text = try @base.decode_source(bytes) catch {
_ => abort("unsupported encoding")
}
println("decoded \{text.length()} chars")// resolver : &EntityResolver——实现 resolve(public_id, system_id, base)
// 返回 None 表示拒取;构造时经 parse_edition 的 resolver 参数注入。// RDF 1.1/1.2 XML → Dataset(Quad{subject, predicate, object, graph})
match @rdf.parse_rdf_xml(xml) {
Ok(dataset) =>
for quad in dataset.quads {
println(quad.predicate)
}
Err(msg) => println(msg)
}
// 带基准 IRI(xml:base 相对引用解析锚)
match @rdf.parse_rdf_xml_with_base(xml, base="https://example.org/doc") {
Ok(dataset) => println(dataset.quads.length())
Err(msg) => println(msg)
}| 入口 | 作用 |
|---|---|
| parse | 字符串 → Document(NS-aware,实体已展开) |
| parse_edition | 全参入口:版次面 + NS 面 + 实体解析器 |
| decode_source | Bytes → 文本(BOM 嗅探 + 声明面编码决策) |
| Document::to_xml | 规范化序列化(往返稳定形) |
| is_name_start_char_11 等 | 名字产生式区间表谓词(1.0 四版次 / 1.1 双面) |
| @rdf.parse_rdf_xml | RDF/XML 字符串 → Dataset |
| @rdf.parse_rdf_xml_with_base | 同上 + 基准 IRI(相对引用解析锚) |
| @rdf.resolve_reference | RFC 3986 相对引用解析(// 网络路径 / 片不继承) |
moon run src/cmd/xmlconf_flattenmoon test --target native| 面 | 读数 |
|---|---|
| W3C XML Conformance(xmlts20130923,2585 案) | 2572 passed / 13 deferred / 0 failed |
| W3C RDF/XML 套件(rdf11+rdf12,197 案) | 197 judged / 0 deferred / 0 failed |
| 单元与契约门(含 quicktest 守恒机 13 例) | 139 / 139 |
moon test -p thy1016/moonxml/quicktestInstall
Download zipMoonBit XML base and RDF/XML parser: spec-shaped document model, namespace-aware pull parsing with BOM/encoding detection, canonical serialization, with W3C XML Conformance and RDF/XML test-suite coverage.