Overview

A lightweight application for visualising and exploring RDF graphs. You upload an RDF file, it extracts metadata and statistics, you choose which properties to draw, and it renders an interactive network you can search, rearrange and query.

It runs on your own machine: a small Python program that starts a local web server and opens in your browser. Nothing is uploaded anywhere.

Two editions: this is the desktop edition. The web edition is a newer generation built on this one. Both are available: use this one to keep files on your own machine, the web one to work without installing anything.

Built for ontoterminologies

The viewer includes features specifically for displaying ontoterminologies built in Tedi. That matters because those graphs are hard for general-purpose RDF viewers: they combine the RDF, RDFS, SKOS, OWL, OntoLex-Lemon and OTV vocabularies, and they use punning — treating classes as instances. That combination is what motivated writing this program rather than using an existing tool.

Requirements

Operating systemWindows 10 or later, macOS 10.15 or later, or Linux (Ubuntu/Debian recommended)
Python3.8 or later
RAM4 GB minimum; 8 GB for large graphs
Disk space2 GB for Python and its libraries
BrowserAny current Chrome, Firefox, Edge or Safari

Installation

1. Install Python

Windows: download the installer from python.org and tick Add Python to PATH before installing. That box is the single most common cause of the tool failing to start later.

macOS: brew install python, or download from python.org.

Linux: sudo apt update then sudo apt install python3 python3-pip.

Check it worked with python --version (or python3 --version).

2. Install the libraries

pip install flask rdflib pyvis

Or put those three names in a requirements.txt and run pip install -r requirements.txt.

3. Download the program

Save Talos_RDF_Viewer.py into a folder of its own, for example Documents/TALOS/RDF_Viewer. The source archive is on the tool's own page.

Launching

From a terminal, change into the folder and run the program:

cd /path/to/TALOS/RDF_Viewer
python Talos_RDF_Viewer.py

On Windows you can also right-click the file and choose Open with → Python, or make a .bat shortcut that does the cd and the python call for you.

After a few seconds your browser opens at http://127.0.0.1:5000. If it does not open by itself, paste that address in.

Updating

Replace Talos_RDF_Viewer.py with the newer file and refresh the dependencies:

pip install --upgrade flask rdflib pyvis

Workflow

  1. Select RDF File: choose a .rdf, .xml, .ttl or .jsonld file. The format is detected from the extension.
  2. Upload and Analyze: the file is parsed, and statistics, Dublin Core metadata and declared namespaces are extracted.
  3. Select Properties: tick only the properties you want drawn, then Generate Graph.
  4. View Graph: explore the network: drag, search, freeze, delete.
  5. SPARQL Endpoint: query the same graph directly.

Choose properties first: View Graph draws every property at once and can be extremely slow. Selecting a handful before generating is almost always the right move.

Metadata

Show Metadata reports three things about the loaded file.

Graph statisticsTotal triples, and counts of object properties (relations between URIs), data properties (relations to literals) and annotation properties (labels, comments)
Dublin CoreRead only from owl:Ontology declarations, under the dc: namespace
NamespacesTaken from the xmlns attributes on the <rdf:RDF> element — declared namespaces only, never inferred ones

The distinction in that last row is worth noting: if a namespace was never declared in the header it will not appear, even if the graph uses it.

Selecting properties

Properties are sorted automatically into three kinds, each with its own icon:

  • Object properties: the object is a URI reference; these are the relations between resources.
  • Data properties: the object is a literal: a string, a number, a date.
  • Annotation properties: identified by label or comment in the URI; human-readable descriptions.

Tick properties individually, or use Select All and Deselect All per category. The generate button sits at the foot of the page.

A worked example from the manual: displaying an ontoterminology of kraters, selecting otv:isA alone gives the concept hierarchy; adding otv:denotedByTerm brings in the terms denoting each concept. Two properties, two very different readings of the same file.

Reading the graph

Node labels

Labels are chosen in order of preference: otv:shortConceptName first, then rdfs:label, and failing both the final fragment of the URI. Anything over 35 characters is truncated to the first 15, an ellipsis, and the last 15, so the distinguishing end of a URI stays visible.

Hovering a node gives the full concept name, the complete URI, and the full literal value where there is one.

Node colours

RootAppears as an object but never as a subject
TerminalAppears as a subject but never as an object
IntermediateAppears as both
LiteralA data value: string, number, date

Edges take a unique colour per property type, are labelled with the final URI fragment, show the full property URI on hover, and carry arrows for direction.

Searching

Search runs over both the visible labels and the tooltip content, so a URI or concept name will match even when it is not what is drawn on the node. * works as a wildcard — concept* finds everything beginning with “concept” — and matching is case-insensitive. Matches are highlighted in yellow, selected, centred in the view, and counted.

Freeze, reset, delete

  • Freeze switches the physics simulation off. With physics on, the layout settles itself and recentres; with it off, you place nodes by hand and they stay put which is what you want when preparing a figure.
  • Reset clears the search and reloads the page, discarding colours, selections and manual positions.
  • Delete node removes exactly one selected node and all its edges, after a confirmation.

The graph resizes with the browser window and works on mobile.

Troubleshooting

Startup

“Python is not recognized”

Python is not on your PATH. Reinstall and tick Add Python to PATH.

Windows
Startup

“Module not found”

A library is missing. Run pip install [module_name] for each one named, or pip install --upgrade flask rdflib pyvis.

Dependencies
Startup

Port already in use

Something else is on port 5000. Change the last line of the script to app.run(port=NEW_PORT, debug=False) and open http://127.0.0.1:NEW_PORT.

Port 5000
Slow

Visualisation crawls or hangs

Too many properties, or too large a file. Select fewer properties before generating, and try a smaller graph.

Graph size

Licence & credits

Written by Prof. Christophe Roche, TALOS ERA Chair Holder, University of Crete, within the Horizon Europe project grant agreement 101087269.

Licence

Released under the PolyForm Noncommercial 1.0.0. You may use, modify and share it for any purpose that is not primarily intended for commercial advantage or monetary compensation: research, teaching and personal use all qualify. Copies and modified versions must carry the licence and the notices that came with them. The software is provided as is, without warranty.

PolyForm Noncommercial is a source-available licence rather than an open source one: the noncommercial restriction is not permitted under the Open Source Definition.

Citation

Roche, C. (2025). RDF Viewer (1.0).
TALOS AI4SSH Laboratory, University of Crete.
http://talos-ai4ssh.eu/RDF_Viewer.