#### Overview

TinySPARQL is a light-weight RDF triple store implementation, with a SPARQL 1.1 interface. TinySPARQL is implemented as a library, and may be used to create private databases, in addition to connecting to remote endpoints for federated queries or creating such public endpoints.

TinySPARQL is the data storage backend for the Tracker Miner FS filesystem indexer, and is also used by apps that want to store, query and publish structured data using SPARQL.

## Advantages

TinySPARQL offers the following advantages over other traditional databases:

- It is based on open standards. SPARQL is a W3C recommendation. So is the RDF data model and the various file formats available for import/export (Turtle, Trig, JSON-LD).
- Database format and schema updates are automatically managed. The user just needs to write and update the ontology defining the structure of the contained data. Databases will be created and implicitly updated to format changes without the need to write supporting code.
- It has versatile serialization capabilities. TinySPARQL is able to export RDF data into the same formats it can import and load into databases. It is possible to perform backups, data mirroring, data synchronization…
- A complete set of CLI tools is included. TinySPARQL databases are fully introspectable and can be opened with no additional supporting files, the command line tools can do anything the library could do, and a number of utilities is provided.
- Distributed data is a first class citizen. SPARQL has builtin capabilities to operate in a distributed environment, which may make it desirable to manage data that is naturally open to multiple users. TinySPARQL may interoperate with other SPARQL implementations.

The TinySPARQL library is written in C, but may be used from a number of languages through GObject introspection, including Rust, Python, or Javascript (through GJS).

TinySPARQL is designed to be small, fast, and scalable. It is also robust and fully ACID. There are ready-made examples on how the TinySPARQL library is put to use.

## Dependencies

TinySPARQL depends on the following libraries:

- GLib: General-purpose utility library. GLib provides many useful data types, macros, type conversions, string utilities, file utilities, a main loop abstraction, and so on. More information available on the GLib API documentation.
- GObject: A library that provides a type system, a collection of fundamental types including an object type, and a signal system. More information available on the GObject API documentation.
- GIO: A modern, easy-to-use VFS API including abstractions for files, drives, volumes, stream I/O, as well as network programming and IPC though D-Bus. More information available on the GIO API documentation.
- SQLite: SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world. More information available on the SQLite website.
- Soup: libsoup is an HTTP and HTTP/2 client/server library for GNOME. It uses GObjects and the GLib main loop to integrate well with GNOME applications. More information available on the Soup API documentation
- LibXML2: Libxml2 is the XML C parser and toolkit developed for the GNOME project. More information at the libXML2 website.
- JSON-GLib: JSON-GLib is a library providing serialization and deserialization support for the JavaScript Object Notation (JSON) format. More information at the API documentation.

## Connection methods

It is possible to create private databases in local storage, or to connect to remote HTTP or D-Bus SPARQL endpoints. See `TrackerSparqlConnection` and its different constructors for each of these methods.

It is also possible to create public SPARQL endpoints, see `TrackerEndpoint` and its subclasses. TinySPARQL can interoperate with any other SPARQL endpoint over HTTP, such as Wikidata or DBpedia.