5 个版本

0.2.2 2021年2月14日
0.2.1 2021年2月14日
0.2.0 2021年2月6日
0.1.1 2020年8月13日
0.1.0 2020年8月13日

#1173解析实现

MIT 许可证

50KB
1K SLoC

rust-gedcom

用 rust 编写的 gedcom 解析器 🦀

关于此项目

GEDCOM 是一种用于共享家谱信息(如家谱)的文件格式!它正被 GEDCOM-X 所取代,但仍在许多家谱程序中广泛使用。

我想通过 Rust 来玩解析器和表示树结构,并注意到还没有为 Rust 编写的解析器。因此,这个项目诞生了!这是一个有趣的实验,用来练习我的 Rust 能力。

它希望与 Gedcom 5.5.1 规范 大部分兼容。

我发现这个 5.5.2 规范 在评估哪些标签值得支持或不值得支持方面很有用。

用法

这个 crate 包含两部分。第一部分是一个名为 parse_gedcom 的二进制文件,主要用于我的测试和开发。它打印出 GedcomData 对象以及传入的 gedcom 文件的一些统计信息

parse_gedcom ./tests/fixtures/sample.ged

# outputs tree data here w/ stats
# ----------------------
# | Gedcom Data Stats: |
# ----------------------
#   submitters: 1
#   individuals: 3
#   families: 2
#   repositories: 1
#   sources: 1
#   multimedia: 0
# ----------------------

第二部分是一个包含解析器的库。

使用 serde 进行 JSON 序列化和反序列化

这个 crate 有一个可选特性 json,它实现了 gedcom 数据结构的 SerializeDeserialize。这使得您可以轻松地将它与网络集成。

有关 serde 的更多信息,请 查看它们

默认情况下不启用此特性。仅使用 gedcom 解析功能时没有依赖项。

通过在 Cargo.toml 中添加以下内容来使用 json 特性,版本 > = 0.2.1

gedcom = { version = "<version>", features = ["json"] }

🚧 进度 🚧

规范中仍有部分尚未实现,该项目可能发生变化。我一直在开发的方法是获取一个 gedcom 文件,尝试解析它,并处理发生的任何错误或遗漏。在其当前状态下,它可以完整地解析 sample.ged 文件。

以下是关于解析数据和标签的一些说明。页面引用的是 Gedcom 5.5.1 规范

顶级标签

  • HEAD.SOUR - 第42页 - 当前跳过了标题中的源信息。
  • SUBMISSION_RECORD - 第28页 - 没有对此进行处理。
  • MULTIMEDIA_RECORD - 第26页 - 多媒体(OBJE)目前未解析。
  • NOTE_RECORD - 第27页 - 注释(NOTE)也未被处理。(除标题外)

处理了家族(FAM)、个人(IND)、仓库(REPO)、源(SOUR)和提交者(SUBM)的标签。这些标签的大多数常见子标签都已处理,但有些可能尚未解析。效果可能会有所不同。

个人备注

  • 考虑创建一些特性来处理更改日期、注释、源引用和其他常见字段。

许可证

© 2021, Robert Pirtle. 在 MIT 许可下。

依赖项

~0–300KB