This is a new backend implementation of the ANNIS linguistic search and visualization system (http://corpus-tools.org/annis/).
Only a sub-set of the ANNIS Query Language (AQL) from ANNIS version 3 (based on PostgreSQL) is supported yet. More operators can be added in the future, but the ones missing are the ones which have been used less frequent. There is a tutorial in the Developer Guide on how to embed graphANNIS in your own application.
The basic design ideas and data models are described in detail in the PhD-thesis "ANNIS: A graph-based query system for deeply annotated text corpora". The thesis describes a prototype implementation in C++ and not Rust, but the design ideas are the same. Notable differences/enhancements compared to the thesis are:
- Graph storages implement querying inverse edges and finding reachable nodes based on them: this allows to implement inverse operators (e.g. for precedence) and switching operands in situations where it was not possible before.
- The data model has been simplified: the inverse coverage component and inverse edges in the left-/right-most token component have been removed.
- Additional query language features are now supported.
- Developer Guide (including descriptions of the data model and tutorials for the API)
- API documentation
You need to install Rust to compile the project. We recommend installing the following Cargo subcommands for developing annis-web:
- cargo-release for creating releases
- cargo-about for re-generating the third party license file
- cargo-llvm-cov for determining the code coverage
- cargo-dist for configuring the GitHub actions that create the release binaries.
You can run the tests with the default cargo test
command.
To calculate the code coverage, you can use cargo-llvm-cov
:
cargo llvm-cov --open --all-features --ignore-filename-regex '(tests?\.rs)|(capi/.*)'
You need to have cargo-release
installed to perform a release. Execute the follwing cargo
command once to
install it.
cargo install cargo-release
To perform a release, switch to the main branch and execute:
cargo release [LEVEL] --execute
The level should be patch
, minor
or major
depending on the changes made in the release.
Running the release command will also trigger a CI workflow to create release binaries on GitHub.
This software depends on several 3rd party libraries. These are documented in the "third-party-licenses.html" file in this folder.
- Java: https://github.com/korpling/graphANNIS-java
- Python 3: https://github.com/korpling/graphANNIS-python
- Rust (this repository)
- C (this repository)
- Thomas Krause ([email protected])