diff --git a/.gitignore b/.gitignore index 8063d5a5..7f29effb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ -target/ +**/target **/*.rs.bk Cargo.lock .idea *.iml js/node_modules lib/tests/rockdb_bc_data -lib/tests/sled_bc_data \ No newline at end of file +lib/tests/sled_bc_data +venv \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..3e2cdcd9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,8 @@ +## [0.1.0-rc.1] - 2020-08-01 + +### Added +- `oxigraph` Rust library with SPARQL 1.1 query support and memory, Sled and RocksDB stores. +- `oxigraph_server` standalone SPARQL server. +- `oxigraph_wikibase` standalone SPARQL server loading data from a Wikibase instance. +- `pyoxigraph` Python library based on Oxigraph. +- `oxigraph` NodeJS library based on Oxigraph. diff --git a/README.md b/README.md index 9a80084b..28e1a7b5 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,31 @@ Oxigraph ======== +[![Latest Version](https://img.shields.io/crates/v/oxigraph.svg)](https://crates.io/crates/oxigraph) +[![Released API docs](https://docs.rs/oxigraph/badge.svg)](https://docs.rs/oxigraph) +[![npm](https://img.shields.io/npm/v/oxigraph)](https://www.npmjs.com/package/oxigraph) [![actions status](https://github.com/oxigraph/oxigraph/workflows/build/badge.svg)](https://github.com/oxigraph/oxigraph/actions) [![Gitter](https://badges.gitter.im/oxigraph/community.svg)](https://gitter.im/oxigraph/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) Oxigraph is a graph database implementing the [SPARQL](https://www.w3.org/TR/sparql11-overview/) standard. -There is no released version yet. - Its goal is to provide a compliant, safe and fast graph database based on the [RocksDB](https://rocksdb.org/) and [Sled](https://sled.rs/) key-value stores. It is written in Rust. 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. + It is split into multiple parts: * The `lib` directory contains the database written as a Rust library. +[![Latest Version](https://img.shields.io/crates/v/oxigraph.svg)](https://crates.io/crates/oxigraph) +[![Released API docs](https://docs.rs/oxigraph/badge.svg)](https://docs.rs/oxigraph) * The `python` directory contains bindings to use Oxigraph in Python. See [its README](https://github.com/oxigraph/oxigraph/blob/master/python/README.md) for the Python bindings documentation. * The `js` directory contains bindings to use Oxigraph in JavaScript with the help of WebAssembly. See [its README](https://github.com/oxigraph/oxigraph/blob/master/js/README.md) for the JS bindings documentation. +[![npm](https://img.shields.io/npm/v/oxigraph)](https://www.npmjs.com/package/oxigraph) * The `server` directory contains a stand-alone binary of a web server implementing the [SPARQL 1.1 Protocol](https://www.w3.org/TR/sparql11-protocol/). It uses the [RocksDB](https://rocksdb.org/) key-value store. +[![Latest Version](https://img.shields.io/crates/v/oxigraph_server.svg)](https://crates.io/crates/oxigraph_server) * The `wikibase` directory contains a stand-alone binary of a web server able to synchronize with a [Wikibase instance](https://wikiba.se/). +[![Latest Version](https://img.shields.io/crates/v/oxigraph_wikibase.svg)](https://crates.io/crates/oxigraph_wikibase) Oxigraph implements the following specifications: * [SPARQL 1.1 Query](https://www.w3.org/TR/sparql11-query/). @@ -29,16 +37,19 @@ A preliminary benchmark [is provided](bench/README.md). ## Run the web server -### Build +### Installation You need to have [a recent stable version of Rust and Cargo installed](https://www.rust-lang.org/tools/install). You also need [clang](https://clang.llvm.org/) to build RocksDB. -If it's done, executing `cargo build --release` in the root directory of this repository should compile the full server after having downloaded its dependencies. +To download, build and install the latest released version run `cargo install oxigraph_server`. +There is no need to clone this git repository. + +To compile the server from source, clone this git repository, and execute `cargo build --release` in the `server` directory to compile the full server after having downloaded its dependencies. It will create a fat binary in `target/release/oxigraph_server`. ### Usage -Run `./oxigraph_server` to start the server. It listen by default on `localhost:7878`. +Run `oxigraph_server` to start the server. It listens by default on `localhost:7878`. The server provides an HTML UI with a form to execute SPARQL requests. @@ -82,11 +93,14 @@ You could easily build your own Docker image by running `docker build -t oxigrap ## Run the Wikibase server -### Build +### Installation + +You need to have [a recent stable version of Rust and Cargo installed](https://www.rust-lang.org/tools/install). You also need [clang](https://clang.llvm.org/) to build RocksDB. -You need to have [a recent stable version of Rust and Cargo installed](https://www.rust-lang.org/tools/install). +To download, build and install the latest released version run `cargo install oxigraph_wikibase`. +There is no need to clone this git repository. -If it's done, executing `cargo build --release` in the root directory of this repository should compile the full server after having downloaded its dependencies. +To compile the server from source, clone this git repository, and execute `cargo build --release` in the `wikibase` directory to compile the full server after having downloaded its dependencies. It will create a fat binary in `target/release/oxigraph_wikibase`. ### Usage diff --git a/js/Cargo.toml b/js/Cargo.toml index 48106693..ce91ce01 100644 --- a/js/Cargo.toml +++ b/js/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "oxigraph_js" -version = "0.0.2" +version = "0.1.0-rc.1" authors = ["Tpt "] license = "MIT/Apache-2.0" readme = "README.md" @@ -9,13 +9,15 @@ repository = "https://github.com/oxigraph/oxigraph/tree/master/js" description = "JavaScript bindings of Oxigraph" edition = "2018" - [lib] crate-type = ["cdylib"] name = "oxigraph" +[package.metadata.wasm-pack.profile.release] +wasm-opt = false + [dependencies] -oxigraph = {path = "../lib"} +oxigraph = {version = "0.1.0-rc.1"} wasm-bindgen = "0.2" js-sys = "0.3" console_error_panic_hook = "0.1" diff --git a/js/README.md b/js/README.md index 11dee41c..0c4cf685 100644 --- a/js/README.md +++ b/js/README.md @@ -1,8 +1,8 @@ Oxigraph for JavaScript ======================= -[![actions status](https://github.com/oxigraph/oxigraph/workflows/build/badge.svg)](https://github.com/oxigraph/oxigraph/actions) [![npm](https://img.shields.io/npm/v/oxigraph)](https://www.npmjs.com/package/oxigraph) +[![actions status](https://github.com/oxigraph/oxigraph/workflows/build/badge.svg)](https://github.com/oxigraph/oxigraph/actions) [![Gitter](https://badges.gitter.im/oxigraph/community.svg)](https://gitter.im/oxigraph/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) This package provides a JavaScript API on top of Oxigraph compiled with WebAssembly. @@ -163,4 +163,9 @@ The Oxigraph bindings are written in Rust using [the Rust WASM toolkit](https:// The [The Rust Wasm Book](https://rustwasm.github.io/docs/book/) is a great tutorial to get started. -To build the JavaScript bindings, run `wasm-pack build`, to run the tests of the JS bindings written in JS run `npm test`. +To run the tests of the JS bindings written in JS run `npm test`. + +To publish a new version on npm run: +```bash +npm run build && npm run release +``` diff --git a/js/package.json b/js/package.json index d7166095..f1acc9fd 100644 --- a/js/package.json +++ b/js/package.json @@ -1,6 +1,6 @@ { "name": "oxigraph_tests", - "description": "Build a tests for Oxigraph JS", + "description": "Oxigraph JS build and tests", "private": true, "devDependencies": { "mocha": "^8.0.1", diff --git a/lib/Cargo.toml b/lib/Cargo.toml index b5ef71c1..cbb7e601 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "oxigraph" -version = "0.1.0" +version = "0.1.0-rc.1" authors = ["Tpt "] license = "MIT/Apache-2.0" readme = "../README.md" -keywords = ["RDF", "N-Triples", "Turtle", "RDF/XML", "SPARQL"] +keywords = ["RDF", "SPARQL", "graph-database", "database"] categories = ["database-implementations"] repository = "https://github.com/oxigraph/oxigraph" description = """ -An RDF and SPARQL library in Rust +a SPARQL database and RDF toolkit """ edition = "2018" diff --git a/python/Cargo.toml b/python/Cargo.toml index 20333c25..ced83729 100644 --- a/python/Cargo.toml +++ b/python/Cargo.toml @@ -1,13 +1,13 @@ [package] name = "pyoxigraph" -version = "0.1.0" +version = "0.1.0-rc.1" authors = ["Tpt "] license = "MIT/Apache-2.0" readme = "README.md" -keywords = ["RDF", "N-Triples", "Turtle", "RDF/XML", "SPARQL"] +keywords = ["RDF", "SPARQL", "graph-database", "database"] repository = "https://github.com/oxigraph/oxigraph/tree/master/python" description = """ -Python bindings of Oxigraph +Python bindings of Oxigraph, a SPARQL database and RDF toolkit """ edition = "2018" @@ -17,16 +17,20 @@ name = "pyoxigraph" doctest = false [dependencies] -oxigraph = {path = "../lib", features=["sled"]} -pyo3 = {version="0.11", features = ["extension-module"]} +oxigraph = {version = "0.1.0-rc.1", features = ["sled"]} +pyo3 = {version = "0.11", features = ["extension-module"]} [package.metadata.maturin] classifier = [ - "Development Status :: 2 - Pre-Alpha", + "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", "Programming Language :: Rust", "Topic :: Database :: Database Engines/Servers" ] \ No newline at end of file diff --git a/python/README.md b/python/README.md index 91369cea..e121bc70 100644 --- a/python/README.md +++ b/python/README.md @@ -1,10 +1,13 @@ Oxigraph for Python (`pyoxigraph`) ================================== +[![PyPI](https://img.shields.io/pypi/v/pyoxigraph)](https://pypi.org/project/pyoxigraph/) +![PyPI - Implementation](https://img.shields.io/pypi/implementation/pyoxigraph) +![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pyoxigraph) [![actions status](https://github.com/oxigraph/oxigraph/workflows/build/badge.svg)](https://github.com/oxigraph/oxigraph/actions) [![Gitter](https://badges.gitter.im/oxigraph/community.svg)](https://gitter.im/oxigraph/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -This Python package provides a Python API on top of Oxigraph named `pyoxigraph`. +Pyoxigraph is a Python library on top of Oxigraph. Oxigraph is a graph database implementing the [SPARQL](https://www.w3.org/TR/sparql11-overview/) standard. @@ -20,13 +23,14 @@ The stores are also able to load and dump RDF data serialized in [N-Quads](https://www.w3.org/TR/n-quads/) and [RDF/XML](https://www.w3.org/TR/rdf-syntax-grammar/). -## Install +It is distributed on Pypi using the [`pyoxigraph` package](https://pypi.org/project/pyoxigraph/). +Run `pip install pyoxigraph` to install it. -To install the development version of Oxigraph you need first to install the build tool [Maturin](https://github.com/PyO3/maturin). -This could be done using the usual `pip install maturin`. -`maturin build release` allows build a release Oxigraph Python wheel. -This wheel could be installed using `pip install PATH` in the current Python environment where `PATH` is the path to the built Oxigraph wheel. +## Build the development version + +To build and install the lastest version of pyoxigraph you need to clone this git repository +and to run `pip install .` in the `python` directory (the one this README is in). ## How to contribute @@ -39,3 +43,8 @@ To install development version of Oxigraph just run `maturin develop`. The Python bindings tests are written in Python. To run them use the usual `python -m unittest` in the `tests` directory. + +To release a new version of `pyoxigraph` run: +```bash +docker run --rm -v $(pwd):/io konstin2/maturin publish +``` diff --git a/python/docs/index.rst b/python/docs/index.rst index 03af302a..7d531b2f 100644 --- a/python/docs/index.rst +++ b/python/docs/index.rst @@ -1,6 +1,17 @@ Oxigraph Python (``pyoxigraph`` |release|) ========================================== +.. image:: https://img.shields.io/pypi/v/pyoxigraph + :alt: PyPI + :target: https://pypi.org/project/pyoxigraph/ +.. image:: https://img.shields.io/pypi/implementation/pyoxigraph + :alt: PyPI - Implementation +.. image:: https://img.shields.io/pypi/pyversions/pyoxigraph + :alt: PyPI - Python Version +.. image:: https://img.shields.io/pypi/l/pyoxigraph + :alt: PyPI - License + + Oxigraph is a graph database implementing the `SPARQL `_ standard. It offers two stores with `SPARQL 1.1 Query `_ capabilities. @@ -15,6 +26,9 @@ The stores are also able to load and dump RDF data serialized in `N-Quads `_ and `RDF/XML `_. +Oxigraph Python is distributed on Pypi using the `pyoxigraph `_ package. +It can be installed using the usual ``pip install pyoxigraph``. + Oxigraph source code is on `GitHub `_. diff --git a/server/Cargo.toml b/server/Cargo.toml index a37e0f92..5c1f8465 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "oxigraph_server" -version = "0.1.0" +version = "0.1.0-rc.1" authors = ["Tpt "] license = "MIT/Apache-2.0" readme = "../README.md" @@ -16,5 +16,5 @@ async-std = { version = "1", features = ["attributes"] } async-h1 = "2" http-client = { version = "4", features = ["h1_client"] } http-types = "2" -oxigraph = { path = "../lib", features = ["rocksdb"] } +oxigraph = { version = "0.1.0-rc.1", features = ["rocksdb"] } url = "2" diff --git a/testsuite/Cargo.toml b/testsuite/Cargo.toml index faef551a..196dad42 100644 --- a/testsuite/Cargo.toml +++ b/testsuite/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "oxigraph_testsuite" -version = "0.1.0" +version = "0.1.0-rc.1" authors = ["Tpt "] license = "MIT/Apache-2.0" readme = "../README.md" @@ -14,7 +14,7 @@ publish = false [dependencies] anyhow = "1" chrono = "0.4" -oxigraph = { path = "../lib" } +oxigraph = { version = "0.1.0-rc.1" } [dev-dependencies] criterion = "0.3" diff --git a/wikibase/Cargo.toml b/wikibase/Cargo.toml index 65c6950a..242b8c9d 100644 --- a/wikibase/Cargo.toml +++ b/wikibase/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "oxigraph_wikibase" -version = "0.1.0" +version = "0.1.0-rc.1" authors = ["Tpt "] license = "MIT/Apache-2.0" readme = "../README.md" @@ -17,6 +17,6 @@ async-h1 = "2" chrono = "0.4" http-client = { version = "4", features = ["h1_client"] } http-types = "2" -oxigraph = { path = "../lib", features = ["rocksdb"] } +oxigraph = { version = "0.1.0-rc.1", features = ["rocksdb"] } serde_json = "1" url = "2" \ No newline at end of file