Overview
SchemaLink repositories are available within the AnacletoLAB organization. Each repository provides a README to explain its characteristics.
The webapp
- Webapp: https://schemalink.anacleto.di.unimi.it/
- Repository: https://github.com/AnacletoLAB/schemalink-webapp
- Main technologies: Node, Vite, TypeScript, JavaScript, React, Redux and Semantic UI React
Run locally - requires Node and npm:
npm install npx nx serve arrows-ts
The webapp code was originally forked from Neo4j’s Arrows repository. It maintains the same structure although we introduced new features. The repository is structured as a monorepo, hosting both apps and libraries in the same codebase.
Apps
SchemaLink uses only one app, stored in the apps/arrows-ts directory. The arrows-ts app contains (mostly) TypeScript code that handles the visual React components, as well as the Redux store.
Libraries
There are many libraries hosted in the webapp repository, in the libs directory. Specifically:
- The
apilibrary is an adapter to theschemalink-apiproject - The
graphicslibrary provides the logic for rendering and interacting with the canvas - The
linkmllibrary handles LinkML schemas, converting the graph in the SchemaLink’s canvas from and to this language - The
modellibrary implements the data model for the main entities that are needed to run the webapp - The
ontology-searchlibrary is an adapter to an ontology search engine. Right now the search engine that the library uses is https://www.ebi.ac.uk/ols4/ - The
selectorslibrary gathers someReduxselectors that are generic enough to be useful for any app
The API
- Swagger docs: https://schemalink.anacleto.di.unimi.it/api/docs
- Repository: https://github.com/AnacletoLAB/schemalink-api
- Main technologies: Python and FastAPI
Run locally - requires Python:
pip install -r requirements fastapi dev main.py
The API project runs alongside the webapp and provides useful endpoints to enable the webapp’s features. This includes exposing useful functionalities from the linkml python library, to assist the webapp in handling linkml schemas.
The deployment
- Repository: https://github.com/AnacletoLAB/schemalink-deploy
- Main technologies: Ansible, Docker, Traefik.
SchemaLink is deployed as a docker compose project. To achieve that, both the webapp and the api offer a Dockerfile. On each tag on the main branch, the docker image is built by a GitHub action and pushed to the GitHub container registry. A Traefik container can also be included in the docker compose project, acting as a reverse proxy and taking care of routing and securing the connection. The deployment is automated using an Ansible playbook.
The docs
- Repository: https://github.com/AnacletoLAB/schemalink-docs
- Main technologies: Jekyll, Markdown, Just the Docs.
Run locally - requires Ruby:
gem install jekyll bundler bundle exec jekyll serve
Just the Docs is used to generate this website. To update this website, it is enough to commit and push changes to the docs project. A GitHub action will run on the latest commit on the main branch, building the website using Jekyll and deploying it using GitHub pages.