Skip to content

Architecture and Development

GraNa-GraNo is a containerized application that is split into a web-based frontend and a backend that performs normalization and connects to graph stores, for which currently Neo4j and Memgraph are supported.

The architecture of GraNa-GraNo
The architecture of GraNa-GraNo

Configuration

The following environment variables need to be set in a .env file in order to run GraNa-GraNo:

  • USERNAME: The username, which the Neo4j graph store should use
  • PASSWORD: The password, which the Neo4j graph store should use

Frontend

Web GUI

The frontend is a Next.js-based web-app that communicates with the backend trough a REST API. For visualizing the graphs and the dependencies cytoscape.js is used. The frontend is included into GraNa-GraNo as a submodule. The source code can be found at https://github.com/dmki-tuwien/lpg-normalization-demo.

To develop the frontend, node.js is required. The frontend can be run in development mode by executing npm install and npm run dev in the submodule's root folder.

Backend

Python core

The REST API is provided by a Python-based core, which is - as the frontend - contained in a submodule. The source code can be found at https://github.com/dmki-tuwien/lpg-normalization.

To develop the backend Python version 3.14 or higher is required. The backend can be run in development mode by executing pip install -r requirements.txt followed by fastapi dev restapi/restapi.py, which runs the REST API in development mode.

Graph stores

The Python core currently supports the normalization of Cypher-based LPGs stored in Neo4j and Memgraph. Both graph stores are used in the form of Docker containers. For development purposes, the container running Neo4j binds on bolt://localhost:7687 and the container running Memgraph binds on bolt://localhost:7688.

Documentation

This documentations is based on Material for MkDocs. To preview it locally mkdocs serve in the root folder of GraNa-GraNo's GitHub repository. To deploy it to GitHub Pages run mkdocs gh-deploy.