Pure MoonBit toolkit for parsing, validating, and transforming MARC 21 / ISO 2709 bibliographic records
当前版本已完成 ISO 2709 解析与序列化内核、MARC 字段查询表达式、ISBN/ISSN 校验、基础书目语义校验、JSON/MARCXML 双向转换、隐私扫描与最小脱敏、数据统计和 CLI 集成。Wasm 查看器和更完整的 MARC 21 语义规则仍属于后续增强。
24-byte Leader
Directory entries
Field terminator (0x1E)
Variable fields
Record terminator (0x1D)let records = @moonmarc.parse_records(bytes)
for result in records {
match result {
Err(error) => println(error.to_string())
Ok(record) => {
println(record.title().unwrap_or("Untitled"))
println(record.control_number().unwrap_or(""))
for isbn in record.isbn_list() {
println(isbn)
}
}
}
}///|
let record = @moonmarc.parse_record(raw).unwrap()
///|
let encoded = @moonmarc.serialize_record(record).unwrap()
// 可将多个记录合并为连续的 .mrc 数据流。
///|
let stream = @moonmarc.serialize_records([record]).unwrap()record.leader()
record.fields()
record.fields_by_tag("650")
record.subfields("245", 'a')
record.first_subfield("245", 'a')
record.control_number()
record.title()
record.subtitle()
record.primary_author()
record.other_authors()
record.publisher()
record.publication_year()
record.languages()
record.subjects()
record.summary()
record.isbn_list(){
"leader": "00000nam a2200000 i 4500",
"fields": [
{ "tag": "001", "value": "book-0001" },
{
"tag": "245",
"indicators": ["1", "0"],
"subfields": [
{ "code": "a", "value": "MoonBit 编程实践" },
{ "code": "c", "value": "示例作者" }
]
}
]
}///|
let json_text = @moonmarc.record_to_json_text(record, indent=2)
///|
let record = @moonmarc.record_from_json_text(json_text).unwrap()
///|
let records_text = @moonmarc.records_to_json_text([record])
///|
let records = @moonmarc.records_from_json_text(records_text).unwrap()///|
let xml = @moonmarc.record_to_xml(record)
///|
let record = @moonmarc.record_from_xml(xml).unwrap()
///|
let collection = @moonmarc.records_to_xml([record])
///|
let records = @moonmarc.records_from_xml(collection).unwrap()# 查看记录数和解析错误
moon run cmd/main -- inspect books.mrc
# 输出有效/错误数量和诊断
moon run cmd/main -- validate books.mrc
# 查看第 1 条记录(支持位置参数或 --record 形式)
moon run cmd/main -- show books.mrc --record 1
# 查询每条记录的 245$a
moon run cmd/main -- query books.mrc '245$a'
# 三格式转换
moon run cmd/main -- convert books.mrc --format json --pretty
moon run cmd/main -- convert books.json --format mrc --output books.mrc
moon run cmd/main -- convert books.mrc --format marcxml --output books.xml
moon run cmd/main -- convert books.xml --format mrc --output books-from-xml.mrc
# 隐私扫描、脱敏和数据统计
moon run cmd/main -- privacy books.mrc
moon run cmd/main -- redact books.mrc --drop-9xx --mask-email --output public.mrc
moon run cmd/main -- stats books.mrc///|
pub(all) enum MarcField {
ControlField(tag~ : String, value~ : String)
DataField(
tag~ : String,
indicator1~ : Char,
indicator2~ : Char,
subfields~ : Array[Subfield]
)
}
///|
pub(all) struct MarcRecord {
leader : Leader
fields : Array[MarcField]
}moon fmt
moon check --target all
moon test
moon infobinary/ 有界二进制读取器和字节工具
leader/ MARC 21 Leader
directory/ ISO 2709 Directory
record/ 记录、字段、子字段和高层查询
iso2709/ 单记录和多记录解析
formats/marcjson/ JSON 双向转换
formats/marcxml/ JSON/MARCXML 核心转换
privacy/ 隐私扫描与最小脱敏
stats/ 数据集统计
identifiers/ ISBN 与 ISSN 校验
query/ MARC 子字段查询表达式
validation/ 书目语义校验和诊断
cmd/main/ CLI
fixtures/ 验收用有效和畸形数据
scripts/ 自动化验收脚本MoonMARC 的隐私扫描只能提供技术辅助,不能保证识别全部个人信息。公开数据前仍需人工审核。
powershell -ExecutionPolicy Bypass -File scripts/acceptance.ps1fn redact_records(records : Array[MarcRecord], drop_9xx? : Bool, mask_email? : Bool) -> Array[MarcRecord]Install
Download zipPure MoonBit toolkit for parsing, validating, and transforming MARC 21 / ISO 2709 bibliographic records