#graph #obo #data-model #ontology #codec #serde

fastobo-graphs

OBO Graphs data model, decoder and encoder in Rust

14 releases

0.4.8 Dec 5, 2022
0.4.7 May 4, 2022
0.4.5 Apr 21, 2022
0.4.4 Jan 20, 2022
0.1.2 Aug 27, 2019

#1221 in Parser implementations

Download history 8/week @ 2024-07-29 19/week @ 2024-09-23

57 downloads per month

MIT license

70KB
1.5K SLoC

fastobo-graphs Star me

OBO Graphs decoder and encoder in Rust.

Actions Codecov License Source Crate Documentation Changelog GitHub issues DOI

Overview

This library provides an implementation of the OBO Graphs schema specified by the Gene Ontology to provide developers with a data format easier to use than plain ontology files in OBO or OWL format.

  • Data structures - the complete OBO Graphs schema is reproduced into Rust data structures with public fields for direct access to the graphs nodes. See fastobo_graphs::model to see the comprehensive list of data structures.
  • I/O - structures use serde to implement serialization and deserialization from both YAML and JSON.
  • Errors - fallible operations can return an Error with informative messages as well as an std::error::Error implementation.
  • Conversion traits - OBO Graphs can be (partially) converted to and from plain OBO documents, using the FromGraph and IntoGraph traits.

Usage

Add fastobo_graphs to the [dependencies] sections of your Cargo.toml manifest:

[dependencies]
fastobo-graphs = "0.4"

Then use one of the top-level functions in fastobo_graphs to load a JSON or YAML serialized OBO Graph:

extern crate fastobo_graphs;
extern crate ureq;

fn main() {
    let response = ureq::get("http://purl.obolibrary.org/obo/zeco.json").call();

    match fastobo_graphs::from_reader(response.unwrap().into_reader()) {
        Ok(doc) => println!("Number of ZECO nodes: {}", doc.graphs[0].nodes.len()),
        Err(e) => panic!("Could not parse ZECO OBO Graph: {}", e),
    }
}

Features

The following feature is enabled by default, but can be disabled if needed:

Feedback

Found a bug ? Have an enhancement request ? Head over to the GitHub issue tracker of the project if you need to report or ask something. If you are filling in on a bug, please include as much information as you can about the issue, and try to recreate the same bug in a simple, easily reproducible situation.

About

This project was developed by Martin Larralde as part of a Master's Degree internship in the BBOP team of the Lawrence Berkeley National Laboratory, under the supervision of Chris Mungall. Cite this project as:

Larralde M. Developing Python and Rust libraries to improve the ontology ecosystem [version 1; not peer reviewed]. F1000Research 2019, 8(ISCB Comm J):1500 (poster) (https://doi.org/10.7490/f1000research.1117405.1)

Dependencies

~2.2–4MB
~79K SLoC