5个版本

0.2.0 2024年4月12日
0.1.8 2024年2月20日
0.1.7 2024年1月26日
0.1.6 2023年12月13日
0.0.5 2022年11月30日

#54压缩

24 每月下载量
用于 rickview

MIT 许可证

130KB
2.5K SLoC

HDT

Latest Version Lint and Test Documentation Benchmarks HDT Rust @ LD Party Video DOI

HDT库是一个用于Header Dictionary Triples压缩RDF格式的Rust库,包括

  • 加载由hdt-cpp创建的HDT默认格式
  • 通过三元组模式进行高效查询
  • 使用Sophia适配器将数据序列化为其他格式,如RDF Turtle和N-Triples

但是它不能

  • 加载其他RDF格式
  • 加载其他HDT变体

有关此功能以及所有原始作者的认可,请参阅https://github.com/rdfhdt组织提供的C++和Java的参考实现。

它也不能

  • 将数据交换到磁盘
  • 在内存中修改RDF图
  • 运行SPARQL查询

如果您需要这些功能之一,请考虑使用SPARQL端点。

示例

use hdt::Hdt;

let file = std::fs::File::open("example.hdt").expect("error opening file");
let hdt = Hdt::new(std::io::BufReader::new(file)).expect("error loading HDT");
// query
let majors = hdt.triples_with_pattern(Some("http://dbpedia.org/resource/Leipzig"), Some("http://dbpedia.org/ontology/major"),None);
println!("{:?}", majors.collect::<Vec<_>>());

您还可以使用Sophia适配器来加载HDT文件,并减少基于Sophia的现有应用程序的内存消耗,其中Sophia作为 hdt::sophia 重新导出

use hdt::{Hdt,HdtGraph};
use hdt::sophia::api::graph::Graph;
use hdt::sophia::api::term::{IriRef, SimpleTerm, matcher::Any};

let file = std::fs::File::open("dbpedia.hdt").expect("error opening file");
let hdt = Hdt::new(std::io::BufReader::new(file)).expect("error loading HDT");
let graph = HdtGraph::new(hdt);
let s = SimpleTerm::Iri(IriRef::new_unchecked("http://dbpedia.org/resource/Leipzig".into()));
let p = SimpleTerm::Iri(IriRef::new_unchecked("http://dbpedia.org/ontology/major".into()));
let majors = graph.triples_matching(Some(s),Some(p),Any);

如果您不想引入Sophia依赖项,可以排除适配器

[dependencies]
hdt = { version = "...", default-features = false }

还有一个可运行的示例在示例文件夹中,您可以使用 cargo run --example query 运行。

API文档

请参阅 docs.rs/latest/hdt 或使用以下命令自行生成:cargo doc --no-deps,无需禁用默认功能。

性能

查询性能取决于图的大小、三元组模式类型和结果集大小。在使用大型HDT文件时,请确保启用发布配置文件,例如通过cargo build --release,因为这将比使用开发配置文件快得多。

性能分析

如果您想优化代码,可以使用性能分析器。提供的数据集很小,以保持crate的大小;在本地修改测试以使用大型HDT文件可以返回更有意义的结果。

使用perf和Firefox Profiler的示例

$ cargo test --release
[...]
Running unittests src/lib.rs (target/release/deps/hdt-2b2f139dafe69681)
[...]
$ perf record --call-graph=dwarf target/release/deps/hdt-2b2f139dafe69681 hdt::tests::triples
$ perf script > /tmp/test.perf

然后转到 https://profiler.firefox.com/ 并打开 /tmp/test.perf

Criterion基准测试

cargo bench --bench criterion

iai基准测试

cargo bench --bench iai

比较基准测试套件

独立的基准测试套件比较了此库和一些其他RDF库的性能。

社区指南

问题和支持

如果您在软件中遇到问题,想报告错误或有功能请求,请使用 问题跟踪器。如果您有其他类型的请求,请随时发送电子邮件至 Konrad

引用

DOI

如果您在研究中使用此库,请引用我们在《开源软件杂志》上的论文。我们还提供了一个 CITATION.cff 文件。

BibTeX条目

@article{hdtrs,
  doi = {10.21105/joss.05114},
  year = {2023},
  publisher = {The Open Journal},
  volume = {8},
  number = {84},
  pages = {5114},
  author = {Konrad Höffner and Tim Baccaert},
  title = {hdt-rs: {A} {R}ust library for the {H}eader {D}ictionary {T}riples binary {RDF} compression format},
  journal = {Journal of Open Source Software}
}

引用字符串

Höffner等,(2023)。hdt-rs:用于Header Dictionary Triples二进制RDF压缩格式的Rust库。开源软件杂志,8(84),5114,https://doi.org/10.21105/joss.05114

贡献

我们很高兴接受pull请求。请在提交之前使用 cargo fmt,确保 cargo test 成功,并且代码在稳定和夜间工具链上都可以编译,无论是激活还是不激活 "sophia" 功能。 cargo clippy 应该不会报告任何警告。

依赖关系

~9MB
~181K SLoC