quit-store
π§ Quads in Git - Distributed Version Control for RDF Knowledge Bases
Science Score: 64.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
βCITATION.cff file
Found CITATION.cff file -
βcodemeta.json file
Found codemeta.json file -
β.zenodo.json file
Found .zenodo.json file -
βDOI references
-
βAcademic publication links
Links to: arxiv.org, sciencedirect.com -
βCommitters with academic emails
1 of 7 committers (14.3%) from academic institutions -
βInstitutional organization owner
-
βJOSS paper metadata
-
βScientific vocabulary similarity
Low similarity (15.8%) to scientific vocabulary
Keywords
Repository
π§ Quads in Git - Distributed Version Control for RDF Knowledge Bases
Basic Info
- Host: GitHub
- Owner: AKSW
- License: gpl-3.0
- Language: Python
- Default Branch: master
- Homepage: http://aksw.org/Projects/Quit
- Size: 10.2 MB
Statistics
- Stars: 104
- Watchers: 26
- Forks: 23
- Open Issues: 54
- Releases: 24
Topics
Metadata Files
README.md

Quit Store
Build status of master branch:
The Quit Store (stands for Quads in Git) provides a workspace for distributed collaborative Linked Data knowledge engineering. You are able to read and write RDF Datasets (aka. multiple Named Graphs) through a standard SPARQL 1.1 Query and Update interface. To collaborate you can create multiple branches of the Dataset and share your repository with your collaborators as you know it from Git.
If you want to read more about the Quit Store we can recommend our paper:
Decentralized Collaborative Knowledge Management using Git by Natanael Arndt, Patrick Naumann, Norman Radtke, Michael Martin, and Edgard Marx in Journal of Web Semantics, 2018 [@sciencedirect] [@arXiv]
Getting Started
To get the Quit Store you have three options:
- Install via pipx
- Clone it with Git from our repository: https://github.com/AKSW/QuitStore
Use Docker and see the section Docker in the README
The binary self-contained releasses created with pyinstaller are currently broken #291 and #302. I'm happy about help.
Installation via pipx
$ pipx install git+https://github.com/AKSW/QuitStore.git
installed package quit 0.25.4, installed using Python 3.12.1
These apps are now globally available
- quitstore
done! β¨ π β¨
$ quitstore --help
Installation from Source
Install poetry.
Get the Quit Store source code:
$ git clone https://github.com/AKSW/QuitStore.git
$ cd QuitStore
If you are using virtualenvwrapper:
$ poetry install
$ poetry run quitstore --help
Git configuration
Configure your name and email for Git. This information will be stored in each commit you are creating with Git and the Quit Store on your system. It is relevant so people know which contribution is coming from whom. Execute the following command if you haven't done that before.
$ git config --global user.name "Your Name"
$ git config --global user.email "you@e-mail-provider.org"
Start with Existing Data (Optional)
If you already have data which you want to use in the quit store follow these steps:
- Create a repository which will contain your RDF data.
$ git init /path/to/repo
- Put your RDF data formatted as N-Triples and sorted (e.g. using
cat data-in.nt | LC_ALL=C sort -u > data-out.nt) into files like<graph>.ntinto this directory. - For each
<graph>.ntfile create a corresponding<graph>.nt.graphfile which must contain the IRI for the respective graph. (These.graphfiles are also used by the Virtuoso bulk loading process). - Add the data to the repository and create a commit.
$ git add β¦
$ git commit -m "init repository"
To ingest further versions of your data into the Quit Store you can add further commits by going through steps 2.-4.. Alternatively you are also able to execute SPARQL 1.1. Update operations to create new versions on the Quit Store.
Start the Quit Store
If you are using the binary:
$ chmod +x quit #
$ ./quit -t /path/to/repo
If you have it installed from the sources:
$ poetry run quitstore -t /path/to/repo
Open your browser and go to http://localhost:5000/.
Have a lot of fun!
For more command line options check out the section Command Line Options in the README.
Command Line Options
-b, --basepath
Specify a base path/application root. This will work with WSGI and docker only.
-t, --targetdir
Specify a target directory where the repository can be found or will be cloned (if remote is given) to.
-r, -repourl
Specify a link/URL to a remote repository.
-c, --configfile
Specify a path to a configuration file. (Defaults to ./config.ttl)
-nv, --disableversioning
Run Quit-Store without versioning activated
-f, --features
This option enables additional features of the store:
provenance- Enable browsing interfaces for provenance information.persistance- Store all internal data as RDF graph.garbagecollection- Enable garbage collection. With this feature enabled, git will check for garbage collection after each commit. This may slow down response time but will keep the repository size small.
-v, --verbose and -vv, --verboseverbose
Set the log level for the standard output to verbose (INFO) respective extra verbose (DEBUG).
-l, --logfile
Write the log output to the given path. The path is interpreted relative to the current working directory. The log level for the logfile is always extra verbose (DEBUG).
Configuration File
deprecated (we plan to remove the configuration file feature)
If you want to work with configuration files you can create a config.ttl file.
This configuration file consists of two parts, the store configuration and the graph configuration.
The store configuration manages everything related to initializing the software, the graph configuration maps graph files to their graph IRIs.
The graph configuration in the config.ttl is an alternative to using <graph>.nt.graph files next to the graphs.
Make sure you put the correct path to your git repository ("../store") and the IRI of your graph (<http://example.org/>) and name of the file holding this graph ("example.nt").
```
conf:store a
conf:example a
API
The Quit-Store comes with three kinds of interfaces, a SPARQL update and query interface, a provenance interface, and a Git management interface.
SPARQL Update and Query Interface
The SPARQL interface support update and select queries and is meant to adhere to the SPARQL 1.1 Protocol.
You can find the interface to query the current HEAD of your repository under http://your-quit-host/sparql.
To access any branch or commit on the repository you can query the endpoints under http://your-quit-host/sparql/<branchname> resp. http://your-quit-host/sparql/<commitid>.
Since the software is still under development there might be some missing features or strange behavior.
If you are sure that the store does not follow the W3C recommendation please file an issue.
Examples
Execute a select query with curl
curl -d "select ?s ?p ?o ?g where { graph ?g { ?s ?p ?o} }" -H "Content-Type: application/sparql-query" http://your-quit-host/sparql
curl -d "select ?s ?p ?o ?g where { graph ?g { ?s ?p ?o} }" -H "Content-Type: application/sparql-query" http://your-quit-host/sparql/develop
If you are interested in a specific result mime type you can use the content negotiation feature of the interface:
curl -d "select ?s ?p ?o ?g where { graph ?g { ?s ?p ?o} }" -H "Content-Type: application/sparql-query" -H "Accept: application/sparql-results+json" http://your-quit-host/sparql
Execute an update query with curl
curl -d "insert data { graph <http://example.org/> { <urn:a> <urn:b> <urn:c> } }" -H "Content-Type: application/sparql-update" http://your-quit-host/sparql
Provenance Interface
To use the provenance browsing feature you have to enable it with the argument --feature=provenance.
The provenance browsing feature extracts provenance meta data for the revisions and makes it available through a SPARQL endpoint and the blame interface.
The provenance interface is available under the following two URLs:
http://your-quit-host/provenancewhich is a SPARQL query interface (see above) to query the provenance graphhttp://your-quit-host/blameto get agit blamelike output per statement in the store
Git Management Interface
The git management interface allows access to some operations of quit in conjunction with the underlying git repository. You can access them with your browser at the following paths.
/commits: See commits, messages, committer, and date of commits./branch,/merge: allows to manage branches and merge branches with different strategies./pull,/fetch,/pushwork similar to the respective git commands. (These operations will only works if you have configured remotes on the repository.)
Docker
We provide a Docker image for the Quit Store on the public docker hub as well as on the github docker registry.
The image exposes port 8080 by default.
The default user within the image is the user quit with the user id 1000.
For this user a git configuration with user.name QuitStore and user.email quitstore@example.org is preset.
Without any further configuration, a git repository is initialized within the container in the /data directory (owned by the default user quit).
To store the data on the host a local directory or volume is required to store the git repository.
An host directory or volume can be linked to the directory /data.
Make sure the quit process running with the user id 1000 within the docker container has write access to this directory.
Alternatively the user id within the container can be set using the docker run --user $UID β¦ option.
In this case you have to make sure a user.name a user.email is configure using git config within the repository (.git/config) or a git config file is mounted to /.gitconfig (to /usr/src/app/.gitconfig if you are running it with user id 1000).
Example setup with the default user:
mkdir /store/repo
sudo chown 1000 /store/repo
sudo chmod u+w /store/repo
To run the image execute the following command (maybe you have to replace docker with sudo docker):
docker run -it --name containername -p 8080:8080 -v /store/repo:/data aksw/quitstore
The following example will start the quit store in the background in the detached mode.
docker run -d --name containername -p 8080:8080 -v /store/repo:/data aksw/quitstore
Now you should be able to access the quit web interface under http://localhost:8080 and the SPARQL 1.1 interface under http://localhost:8080/sparql.
The default configuration is located in /etc/quit/config.ttl, which can also be overwritten using a respective volume or by setting the QUIT_CONFIGFILE environment variable.
Further options which can be set are:
QUIT_TARGETDIR- the target repository directory on which quit should runQUIT_CONFIGFILE- the path to the config.ttl (default:/etc/quit/config.ttl)QUIT_LOGFILE- the path where quit should create its logfileQUIT_BASEPATH- the HTTP base path where quit will be servedQUIT_OAUTH_CLIENT_ID- the GitHub OAuth client id (for OAuth see also the github docu)QUIT_OAUTH_SECRET- the GitHub OAuth secret
Run the Tests
You need to have the quitstore installed from source, see section Installation from Source.
poetry run pytest
Troubleshooting
Use on Windows with restricted permissions
On Windows you might not be able to download the .exe file directly.
If so, use the curl command in the power shell.
When you start the QuitStore (e.g. with quit.exe -t .) it will try to open a port that is available from outside, which will require permission by the administrator user.
To open the port only locally you should start the QuitStore with:
quit.exe -t . -h localhost
The default port is 5000 (http://localhost:5000/).
Migrate from old Versions
Update to 2018-11-20 from 2018-10-29 and older
If you are migrating from an NQuads based repository, as used in older versions of the QuitStore (release 2018-10-29 and older), to an NTriples based repository (release 2018-11-20 and newer) you can use the following commands to migrate the graphs.
You should know that it is possible to have multiple graphs in one NQuads file, which is not possible for NTriples files.
Thus, you should make sure to have only one graph per file.
You may execute the steps for each NQuads file and replace graphfile.nq according to your filenames.
sed "s/<[^<>]*> .$/./g" graphfile.nq | LC_ALL=C sort -u > graphfile.nt
mv graphfile.nq.graph graphfile.nt.graph
git rm graphfile.nq
git add graphfile.nq.graph graphfile.nt graphfile.nt.graph
git commit -m "Migrate from nq to nt"
License
Copyright (C) 2017-2022 Norman Radtke http://aksw.org/NormanRadtke, Natanael Arndt http://aksw.org/NatanaelArndt, and contributors
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, see http://www.gnu.org/licenses. Please see LICENSE for further information.
Owner
- Name: AKSW Research Group @ University of Leipzig
- Login: AKSW
- Kind: organization
- Location: Leipzig
- Website: http://aksw.org
- Repositories: 358
- Profile: https://github.com/AKSW
Citation (CITATION.cff)
cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "Arndt"
given-names: "Natanael"
orcid: "https://orcid.org/0000-0002-8130-8677"
- family-names: "Radtke"
given-names: "Norman"
orcid: "https://orcid.org/0000-0001-9155-8920"
- family-names: "Naumann"
given-names: "Patrick"
title: "QuitStore"
version: 0.26.0
date-released: 2022-02-02
url: "https://github.com/AKSW/QuitStore"
preferred-citation:
type: article
authors:
- family-names: "Arndt"
given-names: "Natanael"
orcid: "https://orcid.org/0000-0002-8130-8677"
- family-names: "Naumann"
given-names: "Patrick"
- family-names: "Radtke"
given-names: "Norman"
orcid: "https://orcid.org/0000-0001-9155-8920"
- family-names: "Martin"
given-names: "Michael"
orcid: "https://orcid.org/0000-0003-0762-8688"
- family-names: "Marx"
given-names: "Edgard"
orcid: "https://orcid.org/0000-0002-3111-9405"
doi: 10.1016/j.websem.2018.08.002
journal: "Journal of Web Semantics"
month: 2
start: 29 # First page number
end: 47 # Last page number
title: "Decentralized Collaborative Knowledge Management using Git"
volume: 54
year: 2019
GitHub Events
Total
- Watch event: 7
- Fork event: 1
Last Year
- Watch event: 7
- Fork event: 1
Committers
Last synced: almost 3 years ago
All Time
- Total Commits: 787
- Total Committers: 7
- Avg Commits per committer: 112.429
- Development Distribution Score (DDS): 0.324
Top Committers
| Name | Commits | |
|---|---|---|
| Natanael Arndt | a****n@g****m | 532 |
| Norman Radtke | n****e@g****m | 204 |
| pna | pn@a****e | 20 |
| pna | p****n@a****e | 19 |
| BonaBeavis | g****s@g****m | 7 |
| Patrick Naumann | j****b@y****e | 4 |
| Florian RΓ€misch | r****h@u****e | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 44
- Total pull requests: 58
- Average time to close issues: 3 months
- Average time to close pull requests: about 1 month
- Total issue authors: 12
- Total pull request authors: 7
- Average comments per issue: 0.95
- Average comments per pull request: 1.43
- Merged pull requests: 45
- Bot issues: 0
- Bot pull requests: 2
Past Year
- Issues: 0
- Pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Issue authors: 0
- Pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- white-gecko (23)
- seebi (4)
- BonaBeavis (4)
- splattater (3)
- tduval-unifylogic (2)
- rmeissn (2)
- JPugetGil (1)
- retog (1)
- PaulKiddle (1)
- robertgiessmann (1)
- MartyLake (1)
- shinobu (1)
Pull Request Authors
- white-gecko (44)
- BonaBeavis (4)
- splattater (4)
- Simaris (2)
- dependabot[bot] (2)
- k00ni (1)
- olf42 (1)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 1
-
Total downloads:
- pypi 15 last-month
- Total dependent packages: 0
- Total dependent repositories: 1
- Total versions: 1
- Total maintainers: 1
pypi.org: quit-store
Distributed Version Control for RDF Knowledge Bases
- Homepage: https://github.com/AKSW/QuitStore
- Documentation: https://quit-store.readthedocs.io/
- License: GPLv3+
-
Latest release: 0.24.0
published about 6 years ago
Rankings
Maintainers (1)
Dependencies
- atomicwrites 1.4.0 develop
- attrs 21.4.0 develop
- certifi 2021.10.8 develop
- charset-normalizer 2.0.10 develop
- coverage 6.2 develop
- coveralls 3.3.1 develop
- docopt 0.6.2 develop
- idna 3.3 develop
- iniconfig 1.1.1 develop
- mccabe 0.6.1 develop
- packaging 21.3 develop
- pluggy 1.0.0 develop
- py 1.11.0 develop
- pycodestyle 2.8.0 develop
- pydocstyle 6.1.1 develop
- pyflakes 2.4.0 develop
- pylava 0.3.0 develop
- pytest 6.2.5 develop
- pytest-cov 3.0.0 develop
- requests 2.27.1 develop
- snowballstemmer 2.2.0 develop
- toml 0.10.2 develop
- tomli 2.0.0 develop
- urllib3 1.26.8 develop
- cffi 1.15.0
- click 8.0.3
- colorama 0.4.4
- flask 2.0.2
- flask-cors 3.0.10
- importlib-metadata 4.10.0
- isodate 0.6.1
- itsdangerous 2.0.1
- jinja2 3.0.3
- markupsafe 2.0.1
- pycparser 2.21
- pygit2 1.7.2
- pyparsing 3.0.6
- rdflib 6.1.1
- six 1.16.0
- sortedcontainers 2.4.0
- typing-extensions 4.0.1
- uritools 3.0.2
- uwsgi 2.0.20
- werkzeug 2.0.2
- zipp 3.7.0
- coveralls ^3.3.1 develop
- pylava ^0.3.0 develop
- pytest ^6.2.5 develop
- pytest-cov ^3.0.0 develop
- Flask ^2.0.2
- Flask-Cors ^3.0.10
- pygit2 >=1.1.0
- python ^3.7
- rdflib ^6.0.2
- sortedcontainers ^2.4.0
- uWSGI ^2.0.20
- uritools ^3.0.2
- Flask >=2.0
- Flask-Cors >=3.0
- pygit2 >=1.0.0
- rdflib >=5.0.0
- sortedcontainers >=2.4
- uritools >=3.0
- actions/checkout v2 composite
- actions/setup-python v2 composite
- actions/setup-python v1 composite
- docker/build-push-action v2 composite
- docker/login-action v1 composite
- docker/metadata-action v3.4.1 composite
- docker/setup-buildx-action v1 composite
- docker/setup-qemu-action v1 composite
- softprops/action-gh-release v1 composite
- python 3-alpine build