7.2 KiB
Oxigraph Server
Oxigraph Server is a standalone HTTP server providing a graph database implementing the SPARQL standard.
Its goal is to provide a compliant, safe, and fast graph database based on the RocksDB 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 also usable as a Rust library and as a Python library.
Oxigraph implements the following specifications:
- SPARQL 1.1 Query, SPARQL 1.1 Update, and SPARQL 1.1 Federated Query.
- Turtle, TriG, N-Triples, N-Quads, and RDF XML RDF serialization formats for both data ingestion and retrieval using the Rio library.
- SPARQL Query Results XML Format, SPARQL 1.1 Query Results JSON Format and SPARQL 1.1 Query Results CSV and TSV Formats.
- SPARQL 1.1 Protocol and SPARQL 1.1 Graph Store HTTP Protocol.
A preliminary benchmark is provided.
Installation
You need to have a recent stable version of Rust and Cargo installed. You also need clang to build RocksDB.
To download, build and install the latest released version run cargo install oxigraph_server
.
There is no need to clone the 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 -f my_data_storage_directory
to start the server where my_data_storage_directory
is the directory where you want Oxigraph data to be stored in. It listens by default on localhost:7878
.
The server provides an HTML UI with a form to execute SPARQL requests.
It provides the following REST actions:
/query
allows to evaluate SPARQL queries against the server repository following the SPARQL 1.1 Protocol. For examplecurl -X POST -H 'Content-Type:application/sparql-query' --data 'SELECT * WHERE { ?s ?p ?o } LIMIT 10' http://localhost:7878/query
. This action supports content negotiation and could return Turtle, N-Triples, RDF XML, SPARQL Query Results XML Format and SPARQL Query Results JSON Format./update
allows to execute SPARQL updates against the server repository following the SPARQL 1.1 Protocol. For examplecurl -X POST -H 'Content-Type: application/sparql-update' --data 'DELETE WHERE { <http://example.com/s> ?p ?o }' http://localhost:7878/update
./store
allows to retrieve and change the server content using the SPARQL 1.1 Graph Store HTTP Protocol. For examplecurl -f -X POST -H 'Content-Type:application/n-triples' --data-binary "@MY_FILE.nt" http://localhost:7878/store?graph=http://example.com/g
will add the N-Triples file MY_FILE.nt to the server dataset inside of thehttp://example.com/g
named graph. Turtle, N-Triples and RDF XML are supported. It is also possible toPOST
,PUT
andGET
the complete RDF dataset on the server using RDF dataset formats (TriG and N-Quads) against the/store
endpoint. For examplecurl -f -X POST -H 'Content-Type:application/n-quads' --data-binary "@MY_FILE.nq" http://localhost:7878/store
will add the N-Quads file MY_FILE.nq to the server dataset.
Use oxigraph_server --help
to see the possible options when starting the server.
Using a Docker image
Display the help menu
docker run --rm oxigraph/oxigraph --help
Run the Web server
Expose the server on port 7878
of the host machine, and save data on the local ./data
folder
docker run --init --rm -v $PWD/data:/data -p 7878:7878 oxigraph/oxigraph -b 0.0.0.0:7878 -f /data
You can then access it from your machine on port 7878
:
# Open the GUI in a browser
firefox http://localhost:7878
# Post some data
curl http://localhost:7878/store?default -H 'Content-Type: text/turtle' -d@./data.ttl
# Make a query
curl -X POST -H 'Accept: application/sparql-results+json' -H 'Content-Type: application/sparql-query' --data 'SELECT * WHERE { ?s ?p ?o } LIMIT 10' http://localhost:7878/query
# Make an UPDATE
curl -X POST -H 'Content-Type: application/sparql-update' --data 'DELETE WHERE { <http://example.com/s> ?p ?o }' http://localhost:7878/update
You could easily build your own Docker image by running docker build -t oxigraph server -f server/Dockerfile .
from the root directory.
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 Futures by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.