42 releases

0.4.0-alpha.6 Mar 25, 2024
0.4.0-alpha.3 Jan 25, 2024
0.3.22 Dec 1, 2023
0.3.21 Nov 29, 2023
0.1.1 Aug 14, 2020

#7 in Database implementations

Download history 58/week @ 2024-01-01 184/week @ 2024-01-08 76/week @ 2024-01-15 33/week @ 2024-01-22 48/week @ 2024-01-29 105/week @ 2024-02-05 126/week @ 2024-02-12 267/week @ 2024-02-19 161/week @ 2024-02-26 285/week @ 2024-03-04 282/week @ 2024-03-11 290/week @ 2024-03-18 119/week @ 2024-03-25 145/week @ 2024-04-01 188/week @ 2024-04-08 84/week @ 2024-04-15

556 downloads per month
Used in 7 crates

MIT/Apache

4.5MB
101K SLoC

C++ 56K SLoC // 0.1% comments Rust 36K SLoC // 0.0% comments C 4.5K SLoC // 0.1% comments Python 2K SLoC // 0.1% comments Visual Studio Project 1K SLoC Shell 757 SLoC // 0.2% comments GNU Style Assembly 135 SLoC // 0.1% comments Visual Studio Solution 82 SLoC INI 80 SLoC // 0.1% comments Bitbake 59 SLoC // 0.2% comments

Oxigraph

Latest Version Released API docs Crates.io downloads actions status Gitter

Oxigraph is a graph database library implementing the SPARQL standard.

Its goal is to provide a compliant, safe and fast on-disk graph database. It also provides a set of utility functions for reading, writing, and processing RDF files.

Oxigraph is in heavy development and SPARQL query evaluation has not been optimized yet.

Oxigraph also provides a CLI tool and a Python library based on this library.

Oxigraph implements the following specifications:

A preliminary benchmark is provided. Oxigraph internal design is described on the wiki.

The main entry point of Oxigraph is the Store struct:

use oxigraph::store::Store;
use oxigraph::model::*;
use oxigraph::sparql::QueryResults;

let store = Store::new().unwrap();

// insertion
let ex = NamedNode::new("http://example.com").unwrap();
let quad = Quad::new(ex.clone(), ex.clone(), ex.clone(), GraphName::DefaultGraph);
store.insert(&quad).unwrap();

// quad filter
let results = store.quads_for_pattern(Some(ex.as_ref().into()), None, None, None).collect::<Result<Vec<Quad>,_>>().unwrap();
assert_eq!(vec![quad], results);

// SPARQL query
if let QueryResults::Solutions(mut solutions) =  store.query("SELECT ?s WHERE { ?s ?p ?o }").unwrap() {
    assert_eq!(solutions.next().unwrap().unwrap().get("s"), Some(&ex.into()));
}

It is based on these crates that can be used separately:

To build the library locally, don't forget to clone the submodules using git clone --recursive https://github.com/oxigraph/oxigraph.git to clone the repository including submodules or git submodule update --init to add submodules to the already cloned repository.

It is possible to disable the RocksDB storage backend to only use the in-memory fallback by disabling the rocksdb default feature:

oxigraph = { version = "*", default-features = false }

This is the default behavior when compiling Oxigraph to WASM.

License

This project is licensed under either of

  • Apache License, Version 2.0, (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>)
  • MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>)

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Oxigraph by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~5–18MB
~254K SLoC