Snorql — A Browser-Based UI for Exploring Multiple SPARQL Endpoints

https://nakamura196.github.io/snorql/

Introduction

Have you ever wanted a quick, easy way to try out SPARQL endpoints?

SPARQL is the standard query language for searching Linked Open Data (LOD), but each endpoint often has a different UI — or none at all. To solve this, I published Snorql, a tool that lets you switch between multiple endpoints from a single, unified UI.

https://nakamura196.github.io/snorql/

What is Snorql?

Snorql is originally based on kurtjx/SNORQL, a SPARQL Explorer significantly extended by @masaka for Japan Search. This repository reorganizes the codebase into a multi-tenant architecture that supports multiple SPARQL endpoints.

Key Features

FeatureDescription
CodeMirror EditorSPARQL editor with syntax highlighting and bracket matching
Multiple Result ViewsThree output formats: Browse (table), JSON, XML
Resource Detail ViewClick a URI to expand its details via DESCRIBE
Leaflet Map ViewPlot results with coordinates on a Leaflet map
Sample QueriesOne-click sample queries from the sidebar

Supported Endpoints

The following four endpoints are preconfigured:

EndpointTypeDescription
Japan SearchVirtuosoIntegrated search for Japanese cultural heritage metadata
Hieratische Palaeographie DBDydraHieratic palaeography database
e-Stat Statistics LODOracle RDFJapanese government statistics as LOD
Local FusekiFusekiFor local development and testing

Simply select a card from the landing page to navigate to the Explorer for each endpoint.

Architecture

Directory Structure

The project uses docs/ as the root, enabling direct publishing via GitHub Pages.

docs/icjijdefnssmpysuds/gsdtse///raexssssuatk.npnnt//ihoaooi/trrrrlmqqqq.lllllj-.._smjjlossddbe.rjns.css###########LSSCEUSJDeFahPoxthay-unaArtiapdSsdrReelrarteieQnienaakndLUstdtigIiiScscoeieoccptonsmanooaymsarfnnglmgciffeeu(ehgiisnasggigccgoarntefigioagntion,maps,etc.)

Separation of Shared Code and Endpoint-Specific Config

Shared JS and CSS live in js/ and css/, while each endpoint folder contains only three configuration files specific to that endpoint:

jps/issnnnnadoomerrexqqs.llph__atdecmexelfas.m.jpjslses.js####LESSonaPadmAdppRsolQieLsnhtqpaurrUeeeRrfdLiiexJaseSns/dCSbSehfarvoimors/ejtst/i,ngs/css/

With this structure, adding a new endpoint is just a folder copy + editing 3 files.

Handling Endpoint Differences

Although the SPARQL specification is common, response formats and supported query types differ across endpoint implementations. Snorql absorbs these differences through configuration in snorql_def.js alone.

There are two main differences:

1. How to request JSON responses

MethodUsed byMechanism
output=json parameterVirtuoso, Dydra, Oracle RDFAppend output=json to URL
Accept headerFusekiRequest via HTTP Accept header

This is automatically determined by endpoint_type: "fuseki" uses the Accept header, while others ("virtuoso", "any") use the output=json parameter.

2. DESCRIBE query support

TypeDESCRIBE behavior
Virtuoso (JPS)DESCRIBE errors; internally converted to CONSTRUCT
DydraWorks as-is
FusekiWorks as-is
Oracle RDFDESCRIBE/CONSTRUCT cannot return JSON; internally converted to SELECT

These differences are controlled by endpoint_type and a few flags in snorql_def.js, so users only need to specify the endpoint URL and these settings.

How to Use

Try Online

Just visit the URL below to start exploring:

https://nakamura196.github.io/snorql/

Run Locally

gcp#idyttOshpcnoelonnor3nqhel-tmthpth:tt/pt/spl:.o/sc/eagrlivhteohrsutb-:.d8c0od0mo0/c/nsa/iknamyuoruar19b6r/oswnsoerrql.git

Add Your Own Endpoint

#c#######p12345.-....rCE-WAAoddrddpoi__eiddyctepntsnodepaa/sdwprnfnpeosecuooriafaesrienmirxeqndtpxdikltB_lesi_:ytestt/dLyoieSapqindfPbeundgo.Ae:eocjRlrncfssQ:Eiaso/Lnem/lmDdseidyeipsneensoipdrndpinaedplncxpoatse.oiynshinto.tntnyrjmtapqsl/UmelRe_Levxiarmtpuloesso.,jsfuseki,any)

Local Development with Fuseki

You can start Apache Jena Fuseki with Docker Compose:

d##ocFSkunesorerkqcilo:mApdhomtsitenp:uU/pI/:l-odhctatlph:s/tl:o8c0a0l0hfsuts:e3k0i3/0/

Tech Stack

  • Pure CSS, no framework — A single snorql-modern.css handles all styles without Bootstrap or Tailwind. Zero external dependencies means it always works.

  • CodeMirror 5 (CDN) — SPARQL syntax highlighting

  • Leaflet (CDN) — Map display

  • GitHub Pages — Publish the docs/ folder directly

Summary

Snorql is a lightweight Explorer UI for casually trying out SPARQL endpoints.

  • Switch between multiple endpoints in one UI
  • Add new endpoints by simply copying a folder
  • Publish directly on GitHub Pages
  • No framework needed — Pure CSS + Vanilla JS

If you want to explore LOD or need an Explorer for your own endpoint, give it a try.

GitHub: https://github.com/nakamura196/snorql Demo: https://nakamura196.github.io/snorql/

Acknowledgments