[tracker/sam/ontology-docs: 16/22] docs: Fix cross references in ontology docs



commit 6dc46f22ca7135ca581327222ff8443627e02c10
Author: Sam Thursfield <sam afuera me uk>
Date:   Sun Apr 12 20:57:21 2020 +0200

    docs: Fix cross references in ontology docs
    
    We didn't have all the prefixes available so we couldn't always resolve
    them. Now we use the Turtle @prefix statements to ensure that we do.

 docs/tools/ttl2xml.c                        | 14 ++++---------
 docs/tools/ttl_loader.c                     | 31 ++++++++++++-----------------
 src/libtracker-data/tracker-turtle-reader.c |  8 ++++++++
 src/libtracker-data/tracker-turtle-reader.h |  2 ++
 4 files changed, 27 insertions(+), 28 deletions(-)
---
diff --git a/docs/tools/ttl2xml.c b/docs/tools/ttl2xml.c
index bc6ab3a1c..3089aa1a8 100644
--- a/docs/tools/ttl2xml.c
+++ b/docs/tools/ttl2xml.c
@@ -104,7 +104,6 @@ gint
 main (gint argc, gchar **argv)
 {
        GOptionContext *context;
-       Ontology *ontology = NULL;
        OntologyDescription *description = NULL;
        GList *description_files, *l;
        g_autoptr(GFile) ontology_file = NULL, output_file = NULL;
@@ -146,10 +145,8 @@ main (gint argc, gchar **argv)
        g_mkdir_with_parents (path, 0755);
        g_free (path);
 
-       ontology = ttl_loader_new_ontology ();
-
        for (l = description_files; l; l = l->next) {
-               Ontology *file_ontology = NULL;
+               Ontology *ontology = NULL;
                g_autoptr(GFile) ttl_file = NULL, ttl_output_file = NULL;
                gchar *filename;
 
@@ -160,20 +157,17 @@ main (gint argc, gchar **argv)
                ttl_output_file = g_file_get_child (output_file, filename);
                g_free (filename);
 
-               file_ontology = ttl_loader_new_ontology ();
+               ontology = ttl_loader_new_ontology ();
 
                ttl_loader_load_ontology (ontology, ttl_file);
-               ttl_loader_load_ontology (file_ontology, ttl_file);
-               ttl_loader_load_prefix_from_description (ontology, description);
 
-               ttl_xml_print (description, file_ontology, ttl_output_file, description_dir);
+               ttl_xml_print (description, ontology, ttl_output_file, description_dir);
 
-               ttl_loader_free_ontology (file_ontology);
+               ttl_loader_free_ontology (ontology);
                ttl_loader_free_description (description);
        }
        g_list_free_full (description_files, (GDestroyNotify) g_object_unref);
 
-       ttl_loader_free_ontology (ontology);
        g_option_context_free (context);
 
        return 0;
diff --git a/docs/tools/ttl_loader.c b/docs/tools/ttl_loader.c
index 6cd336d35..103f04e26 100644
--- a/docs/tools/ttl_loader.c
+++ b/docs/tools/ttl_loader.c
@@ -42,7 +42,6 @@
 #define TRACKER_NOTIFY TRACKER_NS "notify"
 #define TRACKER_FTS_INDEXED TRACKER_NS "fulltextIndexed"
 #define TRACKER_FTS_WEIGHT TRACKER_NS "weight"
-#define TRACKER_PREFIX TRACKER_NS "prefix"
 #define TRACKER_DEPRECATED TRACKER_NS "deprecated"
 
 /* Ontology description */
@@ -168,12 +167,6 @@ load_in_memory (Ontology    *ontology,
 
                prop->weight = g_strdup (turtle_object);
 
-       } else if (!g_strcmp0 (turtle_predicate, TRACKER_PREFIX)) {
-               /* A tracker:prefix on a tracker:Namespace */
-               g_hash_table_insert (ontology->prefixes,
-                                    g_strdup (turtle_subject),
-                                    g_strdup (turtle_object));
-
        } else if (!g_strcmp0 (turtle_predicate, RDFS_COMMENT)) {
                OntologyClass *klass;
                OntologyProperty *prop;
@@ -364,6 +357,8 @@ ttl_loader_load_ontology (Ontology    *ontology,
 {
        TrackerTurtleReader *reader;
        const gchar *subject, *predicate, *object;
+       const gchar *base_url, *prefix;
+       GHashTableIter iter;
        GError *error = NULL;
 
        g_return_if_fail (G_IS_FILE (ttl_file));
@@ -377,6 +372,17 @@ ttl_loader_load_ontology (Ontology    *ontology,
                load_in_memory (ontology, subject, predicate, object);
        }
 
+       g_hash_table_iter_init (&iter, tracker_turtle_reader_get_prefixes (reader));
+       while (g_hash_table_iter_next (&iter, (gpointer *) &prefix, (gpointer *) &base_url)) {
+               gchar *prefix_no_colon;
+
+               prefix_no_colon = g_strdup (prefix);
+               if (strrchr (prefix_no_colon, ':'))
+                       *strrchr (prefix_no_colon, ':') = '\0';
+
+               g_hash_table_insert (ontology->prefixes, g_strdup (base_url), prefix_no_colon);
+       }
+
        g_clear_object (&reader);
 
        if (error) {
@@ -385,17 +391,6 @@ ttl_loader_load_ontology (Ontology    *ontology,
        }
 }
 
-void
-ttl_loader_load_prefix_from_description (Ontology            *ontology,
-                                         OntologyDescription *description)
-{
-       if (!g_hash_table_lookup (ontology->prefixes, description->baseUrl)) {
-               g_hash_table_insert (ontology->prefixes,
-                                    g_strdup (description->baseUrl),
-                                    g_strdup (description->localPrefix));
-       }
-}
-
 OntologyDescription *
 ttl_loader_load_description (GFile *file)
 {
diff --git a/src/libtracker-data/tracker-turtle-reader.c b/src/libtracker-data/tracker-turtle-reader.c
index 28725725f..545d95475 100644
--- a/src/libtracker-data/tracker-turtle-reader.c
+++ b/src/libtracker-data/tracker-turtle-reader.c
@@ -678,3 +678,11 @@ tracker_turtle_reader_next (TrackerTurtleReader  *reader,
 
        return TRUE;
 }
+
+GHashTable *
+tracker_turtle_reader_get_prefixes (TrackerTurtleReader *reader)
+{
+       g_return_val_if_fail (TRACKER_IS_TURTLE_READER (reader), FALSE);
+
+       return reader->prefixes;
+}
diff --git a/src/libtracker-data/tracker-turtle-reader.h b/src/libtracker-data/tracker-turtle-reader.h
index d7c8c841b..892d2c46a 100644
--- a/src/libtracker-data/tracker-turtle-reader.h
+++ b/src/libtracker-data/tracker-turtle-reader.h
@@ -41,4 +41,6 @@ gboolean tracker_turtle_reader_next (TrackerTurtleReader  *reader,
                                      gboolean             *object_is_uri,
                                      GError              **error);
 
+GHashTable *tracker_turtle_reader_get_prefixes (TrackerTurtleReader *reader);
+
 #endif /* __TRACKER_TURTLE_READER_H__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]