summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2020-03-08 22:35:49 +0100
committerCarlos Garnacho <carlosg@gnome.org>2020-03-10 11:55:21 +0100
commiteec2b522a384cc3719ac29cbf824c1a36b14f938 (patch)
treef23ff21e2139ef6b22164e9d43a5bcb817bb7984 /utils
parentc8194785e9dda9094da9e8047fed23ce9620038b (diff)
downloadtracker-eec2b522a384cc3719ac29cbf824c1a36b14f938.tar.gz
libtracker-data: Rewrite TrackerTurtleReader to reuse parser grammar
Instead of tapping on the old TrackerSparqlScanner, use the grammar definitions from the new parser. Also rewrite it in C. This allows us to drop a whole bunch of the older parser code, which only stood there to parse TTL files efficiently. The new SPARQL parser code is designed to generate an intermediate expression tree, which is great to increase liberty at the time of interpreting it, but not so great at the time of deserializing randomly sized blobs of TTL data. Even though this new TTL parser doesn't 100% use the infrastructure of the new SPARQL parser, it taps on it for the essentials (parsing the subject/predicate/object terminals), and also allows incremental TTL loading without memory peaks. The advantages of the old TTL parser (and the only reason why it stuck) are now moot.
Diffstat (limited to 'utils')
-rw-r--r--utils/ontology/data-validator.c23
-rw-r--r--utils/ontology/ontology-validator.c12
2 files changed, 20 insertions, 15 deletions
diff --git a/utils/ontology/data-validator.c b/utils/ontology/data-validator.c
index 38dbd90ac..f235a27ee 100644
--- a/utils/ontology/data-validator.c
+++ b/utils/ontology/data-validator.c
@@ -26,6 +26,7 @@
#include <gio/gio.h>
#include <libtracker-data/tracker-data.h>
+#include <libtracker-data/tracker-turtle-reader.h>
static gchar *ontology_dir = NULL;
static gchar *ttl_file = NULL;
@@ -118,6 +119,7 @@ load_ontology_files (const gchar *services_dir)
conf_file = g_dir_read_name (services);
while (conf_file) {
+ const gchar *subject, *predicate, *object;
TrackerTurtleReader *reader;
GError *error = NULL;
GFile *file;
@@ -130,13 +132,13 @@ load_ontology_files (const gchar *services_dir)
fullpath = g_build_filename (dir_uri, conf_file, NULL);
file = g_file_new_for_path (fullpath);
- reader = tracker_turtle_reader_new (file, NULL);
+ reader = tracker_turtle_reader_new_for_file (file, NULL);
g_object_unref (file);
- while (error == NULL && tracker_turtle_reader_next (reader, &error)) {
- turtle_load_ontology (tracker_turtle_reader_get_subject (reader),
- tracker_turtle_reader_get_predicate (reader),
- tracker_turtle_reader_get_object (reader));
+ while (tracker_turtle_reader_next (reader,
+ &subject, &predicate, &object,
+ NULL, &error)) {
+ turtle_load_ontology (subject, predicate, object);
}
g_object_unref (reader);
@@ -162,6 +164,7 @@ load_ontology_files (const gchar *services_dir)
gint
main (gint argc, gchar **argv)
{
+ const gchar *subject, *predicate, *object;
GOptionContext *context;
TrackerTurtleReader *reader;
GError *error = NULL;
@@ -194,13 +197,13 @@ main (gint argc, gchar **argv)
load_ontology_files (ontology_dir);
file = g_file_new_for_commandline_arg (ttl_file);
- reader = tracker_turtle_reader_new (file, NULL);
+ reader = tracker_turtle_reader_new_for_file (file, NULL);
g_object_unref (file);
- while (error == NULL && tracker_turtle_reader_next (reader, &error)) {
- turtle_statement_handler (tracker_turtle_reader_get_subject (reader),
- tracker_turtle_reader_get_predicate (reader),
- tracker_turtle_reader_get_object (reader));
+ while (tracker_turtle_reader_next (reader,
+ &subject, &predicate, &object,
+ NULL, &error)) {
+ turtle_statement_handler (subject, predicate, object);
}
g_object_unref (reader);
diff --git a/utils/ontology/ontology-validator.c b/utils/ontology/ontology-validator.c
index 8d934337d..fd3123134 100644
--- a/utils/ontology/ontology-validator.c
+++ b/utils/ontology/ontology-validator.c
@@ -26,6 +26,7 @@
#include <gio/gio.h>
#include <libtracker-data/tracker-data.h>
+#include <libtracker-data/tracker-turtle-reader.h>
static gchar *ontology_dir = NULL;
@@ -178,18 +179,19 @@ turtle_load_ontology (const gchar *turtle_subject,
static void
process_file (const gchar *ttl_path)
{
+ const gchar *subject, *predicate, *object;
TrackerTurtleReader *reader;
GError *error = NULL;
GFile *ttl_file = g_file_new_for_path (ttl_path);
g_print ("Processing %s\n", ttl_path);
- reader = tracker_turtle_reader_new (ttl_file, NULL);
+ reader = tracker_turtle_reader_new_for_file (ttl_file, NULL);
- while (error == NULL && tracker_turtle_reader_next (reader, &error)) {
- turtle_load_ontology (tracker_turtle_reader_get_subject (reader),
- tracker_turtle_reader_get_predicate (reader),
- tracker_turtle_reader_get_object (reader));
+ while (tracker_turtle_reader_next (reader,
+ &subject, &predicate, &object,
+ NULL, &error)) {
+ turtle_load_ontology (subject, predicate, object);
}
g_object_unref (reader);