Structure#
Server#
The server is responsible for executing clingo and computing the information required to define the UI. This process unfolds in two distinct steps:
The domain-state is computed using the domain-specific encodings difined in the domain-files. These information include user-selected atoms, potential selections, and inferred atoms.
The server utilizes the provided UI encoding to generate the ui-state, defining the layout, style, and functionality of the interface.
To allow flexibility, further separation is done to have interchangeable functionalities.
Backend
The part of the server that defines the control and functionality, allowing users to interact with the clingo control in different ways. It offers the option to define and overwrite operations, as well as customize how the UI is updated and the contextual information in the domain-state. Users can create their own Backend to increase functionality (Creating your own backend).
We provide the following π§ Backends with the system:
ClingoBackend: Basic clingo functionality using single-shot solving
ClingoBackend: clingo functionality using multi-shot solving
ClingraphBackend: ClingoBackend enhanced with the option to render and interact with Clingraph images
ExplanationBackend: ClingoBackend enhanced with explanation functionalities via Minimal Unsatisfiable Cores
ClingoDLBackend: ClingoBackend enhanced with clingod-dl
Client#
The client is responsible for rendering the UI and responding to the userβs actions. When it is loaded, it requests the ui-state from the server. Upon receiving the ui-state in JSON format (JSON UI), the client utilizes a front-end language to render the corresponding UI.
To allow flexibility, further separation is done to have interchangeable UIs and functionalities.
Frontend
The part of the client that generates the layout based on the JSON UI and displays the UI.
We provide the following π¨ Frontends with the system:
AngularFrontend: UI using Angular to generate a web interface
TkinterFrontend: UI using Tkinter an OS-dependent interface