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 |
|
#54 在 压缩
24 每月下载量
用于 rickview
130KB
2.5K SLoC
HDT
HDT库是一个用于Header Dictionary Triples压缩RDF格式的Rust库,包括
但是它不能
- 加载其他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
- 需要将 persondata_en.hdt 放置在
tests/resources
。
iai基准测试
cargo bench --bench iai
- 需要将 persondata_en_10k.hdt 放置在
tests/resources
。 - 需要安装Valgrind
比较基准测试套件
独立的基准测试套件比较了此库和一些其他RDF库的性能。
社区指南
问题和支持
如果您在软件中遇到问题,想报告错误或有功能请求,请使用 问题跟踪器。如果您有其他类型的请求,请随时发送电子邮件至 Konrad。
引用
如果您在研究中使用此库,请引用我们在《开源软件杂志》上的论文。我们还提供了一个 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