It is our pleasure (Sam’s and mine) to announce the following project renames:
– The Tracker SPARQL library will now be known as TinySPARQL
– The Tracker Miners indexer will now be known as LocalSearch, or GNOME LocalSearch if you prefer.
This on one hand will meet the increasing popular demand to have the terms “Tracker” and “Miner” avoided (In case the subtleties of language evade you, these have gained some bad connotations over the years), and on the other hand fixes the blunder done when Tracker 1.x conceded its name to the SPARQL library when library and indexer were split for 2.x. This has been a source of confusion wrt the extent and intent of each component, even among GNOME peers.
I am personally hopeful for the rename of TinySPARQL, as there has been a great amount of effort spent in making it a most credible implementation of the SPARQL/RDF/RDFS sets of standards, which feels underutilized with the library being mostly typecast as a gateway to the indexer data. Perhaps the new name will help reach to wider audiences that will be appreciative of a lightweight alternative to the available enterprise-level SPARQL engines.
But I shouldn’t diminish the importance of the rename of LocalSearch, especially at a time when other operating systems are approaching search in orwellian ways in the name of convenience, it becomes important to take a stand. We think the new name is a simple enough guide of our goals and non-goals.
This is not just a superficial rename, however we the maintainers have grown wary of approaches that would require us to bump version to 4.x, and updating all the projects depending on TinySPARQL/LocalSearch in a synchronized manner. So we have gone for a soft approach that will be backwards compatible for the most part, and allow a transitional path. Here’s what you can do to “update”:
In C projects
You are encouraged to use the tinysparql-3.0.pc
file to detect the TinySPARQL library. The tracker-sparql-3.0.pc
file is still provided for backwards compatibility. In code, use #include <tinysparql.h>
to include the SPARQL library headers.
In the future we might consider an API migration scheme that deprecates all API under the old namespace and replaces with with objects in the new namespace. Meanwhile, all API objects and symbols keep the “Tracker” namespace.
From gobject-introspection bindings
You can get a “sneak peek” by using the new namespaces right away, e.g. from python code:
#!/usr/bin/python3 import gi, sys gi.require_version('Tsparql', '3.0') from gi.repository import GLib, Gio, Tsparql try: connection = Tsparql.SparqlConnection.new( Tsparql.SparqlConnectionFlags.NONE, None, # Database location, None creates it in-memory Tsparql.sparql_get_ontology_nepomuk(), # Ontology location None) # Create a resource containing RDF data resource = Tsparql.Resource.new(None) resource.set_uri('rdf:type', 'nmm:MusicPiece') # Create a batch, and add the resource to it batch = connection.create_batch() batch.add_resource(None, resource) # Execute the batch to insert the data batch.execute() connection.close() except Exception as e: print('Error: {0}'.format(e)) sys.exit(-1)
Remember to make your project depend on tinysparql-3.0.pc to ensure an up-to-date enough version to have these new binding definitions. Of course backwards compatibility is preserved, and there will be GIR/typelib files for the old namespaces.
In Vala code
There is also a new VAPI file, to describe the TinySPARQL API under the Tsparql namespace:
// valac --pkg tsparql-3.0 tsparql.vala using Tsparql; int main (string[] argv) { try { var conn = Tsparql.Connection.new (Tsparql.ConnectionFlags.NONE, null, Tsparql.get_ontology_nepomuk(), null); // Create a resource containing RDF data var resource = new Tsparql.Resource(null); resource.set_uri ("rdf:type", "nmm:MusicPiece"); // Create a batch, and add the resource to it var batch = conn.create_batch (); batch.add_resource (null, resource); // Execute the batch to insert the data batch.execute (); conn.close (); } catch (GLib.Error e) { stderr.printf ("Error: %s\n", e.message); } return 0; }
And same as before, there will be also a VAPI file with the old namespace.
Accessing LocalSearch data
The LocalSearch indexer data will now alternatively be offered via the org.freedesktop.LocalSearch3
D-Bus name, as well as through the org.freedesktop.Tracker3.Miner.Files
D-Bus name for backwards compatibility. This can be used as usual with the TinySPARQL D-Bus based connection, e.g. from Python:
#!/usr/bin/python3 import gi, sys gi.require_version('Tsparql', '3.0') from gi.repository import Tsparql conn = Tsparql.SparqlConnection.bus_new( 'org.freedesktop.LocalSearch3', None) cursor = conn.query('select ("Hello World" as ?str) {}', None) cursor.next() print(cursor.get_string(0))
Command line utilities
The command line utilities for both projects have parted ways. Instead of a single command line utility with extensible subcommands, the will be distinct tinysparql
and localsearch
command line tools, each providing their own sensible set of subcommands. We trust it will be reasonably low effort to adapt to these changes, and reasonably intuitive.
Test utilities
In order to test search-related code, some projects were using the tracker-testutils-3.0.pc
file to locate the tracker-sandbox
helper script to help them implement a test harness for search features. This has now become more of a first class citizen as a localsearch test-sandbox
subcommand. There is no longer a pkgconf file, we recommend to detect the presence of the localsearch
command in build systems.
A note to distributors
The repositories for these projects are https://gitlab.gnome.org/GNOME/tinysparql and https://gitlab.gnome.org/GNOME/localsearch, and the tarballs distributed will have tinysparql-x.y.z
and localsearch-x.y.z
filenames (starting with tinysparql-3.8.alpha and localsearch-3.8.alpha which are already out of the door). We are understanding that a project rename will involve a more changes on your end(s) than ours, but we will greatly appreciate if you help us establish the new identities and follow up on the rename.
Hey! Great renames. It made me happy to see them, as, on top of your reasons, they are not nerdy names. 😀
I also appreciate that you made it that easy to replace tracker, with keeping backwards compatibility. Thanks for this!
I didn’t even know that tracker used SPARQL! I find that really interesting. Now I really have to delve into the code…
Nice!
I have a little util to query via a rofi UI, which interacts with the org.freedesktop.Tracker3.Miner.Files dbus service. Does this include renames for the dbus interface too?
Hi Jeremy, yes there is a change that you would ideally adapt to. From the blog post:
The LocalSearch indexer data will now alternatively be offered via the org.freedesktop.LocalSearch3 D-Bus name, as well as through the org.freedesktop.Tracker3.Miner.Files D-Bus name for backwards compatibility.
Sorry, missed that bit in the post! Thanks for the info, I’ll be all set for the switch over.
That’s exactly why I searched for this project when updating Arch today. Not because I thought a modern dataminer would call itself by its actual function (lol, they behave more like trojans) but because I was curious why a project was named like so. With Linux gaining market share more quickly than it ever has on end user desktops, this is probably the best time to do this rename. Brilliant work.