A web‑based, RDF‑native platform for managing linked data based on OWL/RDF ontologies.
Semantta is built around a three‑layer architecture:
- Ontology Layer: Provides capability to import semantics that represent knowledge about a domain, including concepts in the domian and relationships among them.
- Application Profile (AP) Layer: Provides capability to tailor the semantics from the Ontology Layer to the needs of a specific application.
- Metadata Layer: Provides capability to apply the tailored semantics from the AP Layer to real data.
- Import OWL/RDF ontologies and metadata in standard RDF formats (RDF/XML, Turtle, N‑Triples, JSON‑LD, …)
- Build a SHACL‑based, ontology‑aware Application Profile (AP)
- Create, import, edit, delete, and validate linked data against the AP and ontologies
- Generate a profile automatically from existing metadata
- Explore the dataset publicly with label‑first display and an interactive graph
- Switch between dark, light, and system theme modes
- Extend the system with plugins and themes
- Progressive Web App (PWA)
Semantta is domain‑independent and can host data from any domain.
| Layer | Technology |
|---|---|
| Data | RDF, RDFS, OWL, SHACL, XSD, SPARQL |
| Backend | FastAPI, rdflib, owlrl, pyshacl, httpx |
| Frontend | Nuxt 4 (Vue 3, TypeScript), Pinia, Tailwind CSS 4, SortableJS, vis‑network, Phosphor Icons, vue‑sonner |
- Python 3.10+ with
pip - Node.js 18+ with
npm - Apache Jena Fuseki 5+ (requires Java 17+)
clone the repository:
git clone https://github.com/eaoui/semantta.git
cd semanttaor just download a release.
Start an existing (or create a new) Fuseki dataset by running the fuseki-server script with a TDB2 location:
# Linux/Mac
./fuseki-server --update --tdb2 --loc /path/to/database /dataset_name
# Windows
.\fuseki-server --update --tdb2 --loc path\to\database /dataset_nameThe default port is 3030 and the default dataset name is obmms.
If you use a different port or name, set FUSEKI_DATASET_URL in a backend/.env file:
cd backend
cp .env.example .env # Windows: copy .env.example .evn
# then edit FUSEKI_DATASET_URL# 1. move to the /backend directory
cd backend
# 2. create a virtual environment named .venv
python -m venv .venv
# 3. activate the virtual environment
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 4. install Python dependencies
pip install -r requirements.txt
# 5. start the API server (default port number is 8000)
uvicorn main:app --host 0.0.0.0 --port 8000 --reloadNext time you only need stepts 1, 3, and 5.
# 1. move to the /frontend directory
cd frontend
# 2. install Node.js packages
npm install
# 3. start the development server
npm run devNext time you only need steps 1 and 3.
The app will be available at http://localhost:3000.
- Import an ontology: Upload an RDF/XML, Turtle, or other supported format via the admin interface. The system applies OWL‑RL reasoning and caches the result.
- Build the Application Profile: Open the “Application Profile” page, activate the entities you need, and fine‑tune the SHACL constraints.
- Create or import metadata: Create instances manually via the dynamic form, or upload RDF-based metadata files. Instances are validated against the AP.
- Explore publicly: You can search or browser the existing dataset. The
/datasetpage indexes all instances. Click any instance to see its description, syntax, and interactive graph.
semantta/
├── backend/
│ ├── main.py # FastAPI app, endpoints, core logic
│ ├── fuseki_store.py # Async Fuseki client
│ ├── utils.py # URI helpers
│ ├── vocab/ # OWL vocabulary for reasoning
│ ├── data/ # Runtime data (cache, uploads, settings)
│ └── plugins/ # User‑installed plugins
├── frontend/
│ └── app/
│ ├── components/ # Vue components
│ ├── composables/ # Reusable logic
│ ├── layouts/ # Admin and public layouts
│ ├── pages/ # Nuxt pages (admin & public)
│ ├── stores/ # Pinia store
│ ├── types/ # TypeScript interfaces
│ └── ...
└── docs
Contributions are welcome! Please open an issue to discuss your idea before submitting a pull request.
Semantta 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.
Have you built a public project on top of Semantta? Add it below!
View all screenshots in docs/screenshots






