[tracker-miners/wip/carlosg/graphs: 5/18] tracker-miner-fs: Split nie:DataObject and nie:InformationElement



commit 792bab4103d2c3bb0a569190cdea2bd477126159
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Apr 23 17:38:51 2020 +0200

    tracker-miner-fs: Split nie:DataObject and nie:InformationElement
    
    Perform a full split, that applies to all files. We no longer use
    the same resource for both classes, and rely on the nie:isStoredAs
    and nie:interpretedAs relationships being properly set up.
    
    The nfo:FileDataObjects use the file URI as the resource URN, to
    make it straightforward to look those up. This involves some changes
    in how monitor events are handled though:
    
    - Move events involve the full deletion of the nie:FileDataObject
      and creation with the new URI. Properties are preserved, and so
      is are the related nie:InformationElements (and their nie:isStoredAs
      backlinks fixed).
    
      This applies recursively for directories being moved.
    
    - Update events involve a deletion of the nie:InformationElement,
      which will be rebuilt by tracker-extract.

 src/libtracker-miner/tracker-decorator.c         |   7 +-
 src/libtracker-miner/tracker-file-notifier.c     |  10 +-
 src/miners/fs/tracker-miner-files-index.c        |   2 +-
 src/miners/fs/tracker-miner-files.c              | 170 +++++++++--------------
 src/tracker-extract/tracker-extract-decorator.c  |  18 +--
 tests/functional-tests/extractor-decorator.py    |   6 +-
 tests/functional-tests/fixtures.py               |  20 +--
 tests/functional-tests/miner-basic.py            |   4 +-
 tests/functional-tests/miner-resource-removal.py |   5 +-
 tests/libtracker-miner/tracker-miner-fs-test.c   |   3 +
 10 files changed, 104 insertions(+), 141 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-decorator.c b/src/libtracker-miner/tracker-decorator.c
index b51aaca71..a381dc718 100644
--- a/src/libtracker-miner/tracker-decorator.c
+++ b/src/libtracker-miner/tracker-decorator.c
@@ -720,8 +720,9 @@ create_query_string (TrackerDecorator  *decorator,
                        g_string_append_printf (query,
                                                "{ ?urn a rdfs:Resource;"
                                                "       a ?type ;"
-                                               "       tracker:available true ."
-                                               "  FILTER (! EXISTS { ?urn nie:dataSource <%s> } ",
+                                               "       nie:isStoredAs ?do . "
+                                               "  ?do tracker:available true ."
+                                               "  FILTER (! EXISTS { ?do nie:dataSource <%s> } ",
                                                priv->data_source);
 
                        query_add_blacklisted_filter (decorator, query);
@@ -753,7 +754,7 @@ create_remaining_items_query (TrackerDecorator *decorator)
        gchar *clauses[] = {
                "?urn",
                "tracker:id(?urn)",
-               "nie:url(?urn)",
+               "nie:isStoredAs(?urn)",
                "nie:mimeType(?urn)",
                NULL
        };
diff --git a/src/libtracker-miner/tracker-file-notifier.c b/src/libtracker-miner/tracker-file-notifier.c
index 81dc129b2..9a28f7b96 100644
--- a/src/libtracker-miner/tracker-file-notifier.c
+++ b/src/libtracker-miner/tracker-file-notifier.c
@@ -802,14 +802,15 @@ sparql_contents_compose_query (GFile *directory)
        gchar *sparql, *uri;
 
        uri = g_file_get_uri (directory);
-       sparql = g_strdup_printf ("SELECT ?url ?u ?lastModified ?isFolder "
+       sparql = g_strdup_printf ("SELECT ?url ?ie ?lastModified ?isFolder "
                                  "FROM <" TRACKER_OWN_GRAPH_URN "> {"
                                  " ?u nfo:belongsToContainer ?f ;"
                                  "    nfo:fileLastModified ?lastModified ;"
+                                 "    nie:interpretedAs ?ie ;"
                                  "    nie:url ?url ."
-                                 " OPTIONAL { ?u nie:mimeType ?mimeType . "
+                                 " OPTIONAL { ?ie nie:mimeType ?mimeType . "
                                  "            BIND (IF (?mimeType = \"inode/directory\", true, false) AS 
?isFolder) } ."
-                                 " ?f nie:url ?folderUrl ."
+                                 " ?f nie:isStoredAs/nie:url ?folderUrl ."
                                  " FILTER (?folderUrl = \"%s\")"
                                  "}", uri);
        g_free (uri);
@@ -900,10 +901,11 @@ sparql_files_compose_query (GFile **files,
        gchar *uri;
        gint i = 0;
 
-       str = g_string_new ("SELECT ?url ?u ?lastModified "
+       str = g_string_new ("SELECT ?url ?ie ?lastModified "
                            "FROM <" TRACKER_OWN_GRAPH_URN "> {"
                            "  ?u a rdfs:Resource ;"
                            "     nfo:fileLastModified ?lastModified ;"
+                           "     nie:interpretedAs ?ie ;"
                            "     nie:url ?url . "
                            "  FILTER (?url IN (");
        for (i = 0; i < n_files; i++) {
diff --git a/src/miners/fs/tracker-miner-files-index.c b/src/miners/fs/tracker-miner-files-index.c
index e2c3093af..9ddabb783 100644
--- a/src/miners/fs/tracker-miner-files-index.c
+++ b/src/miners/fs/tracker-miner-files-index.c
@@ -272,7 +272,7 @@ tracker_miner_files_index_reindex_mime_types (TrackerMinerFilesIndex *miner,
        query = g_string_new ("SELECT ?url "
                              "WHERE {"
                              "  ?resource nie:url ?url ;"
-                             "  nie:mimeType ?mime ."
+                             "  nie:interpretedAs/nie:mimeType ?mime ."
                              "  FILTER(");
 
        for (i = 0; i < len; i++) {
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index eb8538da6..940a8f64a 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -534,7 +534,8 @@ tracker_miner_files_init (TrackerMinerFiles *mf)
                                                     "  GRAPH <" TRACKER_OWN_GRAPH_URN "> {"
                                                     "    ?u a nfo:FileDataObject ;"
                                                     "       tracker:available true ; "
-                                                    "       a ?class . "
+                                                    "       nie:interpretedAs ?ie . "
+                                                    "    ?ie a ?class . "
                                                     "    FILTER (?class IN (%s) && "
                                                     "            NOT EXISTS { ?u nie:dataSource <" 
TRACKER_EXTRACT_DATA_SOURCE "> })"
                                                     "  }"
@@ -2323,25 +2324,6 @@ index_applications_changed_cb (GObject    *gobject,
        }
 }
 
-static const gchar *
-miner_files_get_file_urn (TrackerMinerFiles *miner,
-                          GFile             *file,
-                          gboolean          *is_iri)
-{
-       const gchar *urn;
-
-       urn = tracker_miner_fs_get_urn (TRACKER_MINER_FS (miner), file);
-       *is_iri = TRUE;
-
-       if (!urn) {
-               /* This is a new insertion, use anonymous URNs to store files */
-               urn = "_:file";
-               *is_iri = FALSE;
-       }
-
-       return urn;
-}
-
 static void
 miner_files_add_to_datasource (TrackerMinerFiles *mf,
                                GFile             *file,
@@ -2454,9 +2436,9 @@ process_file_cb (GObject      *object,
                  gpointer      user_data)
 {
        TrackerMinerFilesPrivate *priv;
-       TrackerResource *resource;
+       TrackerResource *resource, *element_resource;
        ProcessFileData *data;
-       const gchar *mime_type, *urn;
+       const gchar *mime_type;
        gchar *parent_urn;
        gchar *delete_properties_sparql = NULL, *mount_point_sparql;
        GFileInfo *file_info;
@@ -2464,7 +2446,6 @@ process_file_cb (GObject      *object,
        GFile *file, *parent;
        gchar *uri, *sparql_str, *sparql_update_str, *time_str;
        GError *error = NULL;
-       gboolean is_iri;
        gboolean is_special;
        gboolean is_directory;
 
@@ -2495,44 +2476,36 @@ process_file_cb (GObject      *object,
 
        uri = g_file_get_uri (file);
        mime_type = g_file_info_get_content_type (file_info);
-       urn = miner_files_get_file_urn (TRACKER_MINER_FILES (data->miner), file, &is_iri);
 
        data->mime_type = g_strdup (mime_type);
 
-       if (is_iri) {
-               /* Update: delete all statements inserted by miner except:
-                *  - rdf:type statements as they could cause implicit deletion of user data
-                *  - nie:contentCreated so it persists across updates
+       if (tracker_miner_fs_get_urn (TRACKER_MINER_FS (data->miner), file)) {
+               /* Update: delete all information elements for the given data object
+                * and delete dataSources, so we ensure the file is extracted again.
                 */
                delete_properties_sparql =
-                       g_strdup_printf ("DELETE {"
-                                        "  GRAPH <%s> {"
-                                        "    <%s> ?p ?o"
-                                        "  } "
-                                        "} "
-                                        "WHERE {"
-                                        "  GRAPH <%s> {"
-                                        "    <%s> ?p ?o"
-                                        "    FILTER (?p != rdf:type && ?p != nie:contentCreated)"
-                                        "  } "
+                       g_strdup_printf ("WITH <" TRACKER_OWN_GRAPH_URN "> "
+                                        "DELETE {"
+                                        "  <%s> nie:interpretedAs ?ie ; "
+                                        "       nie:dataSource ?ds . "
+                                        "  ?ie a rdfs:Resource . "
+                                        "} WHERE {"
+                                        "  <%s> nie:interpretedAs ?ie ."
+                                        "  OPTIONAL { <%s> nie:dataSource ?ds } "
                                         "} ",
-                                        TRACKER_OWN_GRAPH_URN, urn,
-                                        TRACKER_OWN_GRAPH_URN, urn);
+                                        uri, uri, uri);
        }
 
-       resource = tracker_resource_new (NULL);
-
-       if (is_iri) {
-               tracker_resource_set_identifier (resource, urn);
-       }
+       resource = tracker_resource_new (uri);
+       element_resource = tracker_resource_new (NULL);
 
        tracker_resource_add_uri (resource, "rdf:type", "nfo:FileDataObject");
-       tracker_resource_add_uri (resource, "rdf:type", "nie:InformationElement");
+       tracker_resource_add_uri (element_resource, "rdf:type", "nie:InformationElement");
 
        is_directory = (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY ?
                        TRUE : FALSE);
        if (is_directory) {
-               tracker_resource_add_uri (resource, "rdf:type", "nfo:Folder");
+               tracker_resource_add_uri (element_resource, "rdf:type", "nfo:Folder");
        }
 
        parent = g_file_get_parent (file);
@@ -2560,21 +2533,17 @@ process_file_cb (GObject      *object,
        g_free (time_str);
 
        /* Laying the link between the IE and the DO. We use IE = DO */
-       if (is_iri) {
-               tracker_resource_add_uri (resource, "nie:isStoredAs", urn);
-       } else {
-               tracker_resource_add_relation (resource, "nie:isStoredAs", resource);
-       }
+       tracker_resource_add_relation (element_resource, "nie:isStoredAs", resource);
+       tracker_resource_add_relation (resource, "nie:interpretedAs", element_resource);
 
        /* The URL of the DataObject (because IE = DO, this is correct) */
        tracker_resource_set_string (resource, "nie:url", uri);
 
-       tracker_resource_set_string (resource, "nie:mimeType", mime_type);
+       tracker_resource_set_string (element_resource, "nie:mimeType", mime_type);
 
        miner_files_add_to_datasource (data->miner, file, resource);
 
-       if (g_file_info_get_size (file_info) > 0)
-               miner_files_add_rdf_types (resource, file, mime_type);
+       miner_files_add_rdf_types (element_resource, file, mime_type);
 
        mount_point_sparql = update_mount_point_sparql (data);
        sparql_update_str = tracker_resource_print_sparql_update (resource, NULL, TRACKER_OWN_GRAPH_URN),
@@ -2642,13 +2611,11 @@ process_file_attributes_cb (GObject      *object,
 {
        TrackerResource *resource;
        ProcessFileData *data;
-       const gchar *urn;
        GFileInfo *file_info;
        guint64 time_;
        GFile *file;
        gchar *uri, *time_str, *sparql_str;
        GError *error = NULL;
-       gboolean is_iri;
 
        data = user_data;
        file = G_FILE (object);
@@ -2662,20 +2629,7 @@ process_file_attributes_cb (GObject      *object,
        }
 
        uri = g_file_get_uri (file);
-       urn = miner_files_get_file_urn (TRACKER_MINER_FILES (data->miner), file, &is_iri);
-
-       /* We MUST have an IRI in attributes updating */
-       if (!is_iri) {
-               error = g_error_new_literal (miner_files_error_quark,
-                                            0,
-                                            "Received request to update attributes but no IRI available!");
-               /* Notify about the error */
-               tracker_miner_fs_notify_finish (TRACKER_MINER_FS (data->miner), data->task, NULL, error);
-               process_file_data_free (data);
-               return;
-       }
-
-       resource = tracker_resource_new (urn);
+       resource = tracker_resource_new (uri);
 
        /* Update nfo:fileLastModified */
        time_ = g_file_info_get_attribute_uint64 (file_info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
@@ -2851,15 +2805,13 @@ miner_files_move_file (TrackerMinerFS *fs,
 {
        TrackerMinerFilesPrivate *priv = TRACKER_MINER_FILES (fs)->private;
        GString *sparql = g_string_new (NULL);
-       const gchar *new_parent_iri;
-       gchar *uri, *source_uri, *display_name;
-       gchar *source_iri;
+       const gchar *new_parent_iri = NULL;
+       gchar *uri, *source_uri, *display_name, *container_clause = NULL;
        gchar *path, *basename;
        GFile *new_parent;
 
        uri = g_file_get_uri (file);
        source_uri = g_file_get_uri (source_file);
-       source_iri = tracker_miner_fs_query_urn (fs, source_file);
 
        if (priv->thumbnailer) {
                GFileInfo *file_info;
@@ -2909,50 +2861,54 @@ miner_files_move_file (TrackerMinerFS *fs,
        g_free (basename);
        g_free (path);
 
+       /* Get new parent information */
+       new_parent = g_file_get_parent (file);
+       if (new_parent)
+               new_parent_iri = tracker_miner_fs_query_urn (fs, new_parent);
+       if (new_parent_iri)
+               container_clause = g_strdup_printf ("; nfo:belongsToContainer <%s>", new_parent_iri);
+
        g_string_append_printf (sparql,
                                "WITH <" TRACKER_OWN_GRAPH_URN "> "
                                "DELETE { "
-                               "  <%s> nfo:fileName ?f ; "
-                               "       nie:url ?u ; "
-                               "       nfo:belongsToContainer ?b"
+                               "  <%s> a rdfs:Resource . "
+                               "  ?ie nie:isStoredAs <%s> "
+                               "} INSERT { "
+                               "  <%s> a nfo:FileDataObject ; "
+                               "       nfo:fileName \"%s\" ; "
+                               "       nie:url \"%s\" "
+                               "       %s ; "
+                               "       ?p ?o . "
+                               "  ?ie nie:isStoredAs <%s> "
                                "} WHERE { "
-                               "  <%s> nfo:fileName ?f ; "
-                               "       nie:url ?u . "
-                               "       OPTIONAL { <%s> nfo:belongsToContainer ?b }"
+                               "  <%s> ?p ?o ; "
+                               "       nie:interpretedAs ?ie . "
+                               "  FILTER (?p != nfo:fileName && ?p != nie:url && ?p != 
nfo:belongsToContainer) . "
                                "} ",
-                               source_iri, source_iri, source_iri);
-
-       /* Get new parent information */
-       new_parent = g_file_get_parent (file);
-       new_parent_iri = tracker_miner_fs_query_urn (fs, new_parent);
-
-       g_string_append_printf (sparql,
-                               "INSERT INTO <" TRACKER_OWN_GRAPH_URN "> {"
-                               "  <%s> nfo:fileName \"%s\" ; "
-                               "       nie:url \"%s\" ",
-                               source_iri, display_name, uri);
-
-       if (new_parent && new_parent_iri) {
-               g_string_append_printf (sparql, "; nfo:belongsToContainer \"%s\"",
-                                       new_parent_iri);
-       }
-
-       g_string_append (sparql, "}");
+                               source_uri, source_uri,
+                               uri, display_name, uri, container_clause, uri,
+                               source_uri);
+       g_free (container_clause);
 
        if (recursive) {
                g_string_append_printf (sparql,
                                        "WITH <" TRACKER_OWN_GRAPH_URN "> "
                                        " DELETE { "
-                                       "  ?u nie:url ?url "
+                                       "  ?u a rdfs:Resource . "
+                                       "  ?ie nie:isStoredAs ?u "
                                        "} INSERT { "
-                                       "  GRAPH <" TRACKER_OWN_GRAPH_URN "> {"
-                                       "    ?u nie:url ?new_url "
-                                       "  }"
-                                       "} WHERE {"
-                                       "  ?u a rdfs:Resource;"
-                                       "     nie:url ?url ."
+                                       "  ?new_url a nfo:FileDataObject ; "
+                                       "           nie:url ?new_url ; "
+                                       "           ?p ?o ."
+                                       "  ?ie nie:isStoredAs ?new_url . "
+                                       "} WHERE { "
+                                       "  ?u a rdfs:Resource; "
+                                       "     nie:url ?url ; "
+                                       "     nie:interpretedAs ?ie ; "
+                                       "     ?p ?o . "
                                        "  BIND (CONCAT (\"%s/\", SUBSTR (?url, STRLEN (\"%s/\") + 1)) AS 
?new_url) ."
-                                       "  FILTER (STRSTARTS (?url, \"%s/\"))"
+                                       "  FILTER (STRSTARTS (?url, \"%s/\")) . "
+                                       "  FILTER (?p != nie:url) . "
                                        "} ",
                                        uri, source_uri, source_uri);
        }
diff --git a/src/tracker-extract/tracker-extract-decorator.c b/src/tracker-extract/tracker-extract-decorator.c
index 819b319ff..df48f517d 100644
--- a/src/tracker-extract/tracker-extract-decorator.c
+++ b/src/tracker-extract/tracker-extract-decorator.c
@@ -148,7 +148,7 @@ decorator_save_info (TrackerExtractDecorator *decorator,
                      TrackerExtractInfo      *info)
 {
        const gchar *urn;
-       TrackerResource *resource = NULL;
+       TrackerResource *resource = NULL, *file_resource;
 
        g_set_object (&resource, tracker_extract_info_get_resource (info));
 
@@ -163,10 +163,12 @@ decorator_save_info (TrackerExtractDecorator *decorator,
        }
 
        urn = tracker_decorator_info_get_urn (decorator_info);
-
        tracker_resource_set_identifier (resource, urn);
-       tracker_resource_add_uri (resource, "nie:dataSource",
+
+       file_resource = tracker_resource_new (tracker_decorator_info_get_url (decorator_info));
+       tracker_resource_add_uri (file_resource, "nie:dataSource",
                tracker_decorator_get_data_source (TRACKER_DECORATOR (decorator)));
+       tracker_resource_add_take_relation (resource, "nie:isStoredAs", file_resource);
 
        return resource;
 }
@@ -195,7 +197,7 @@ get_metadata_cb (TrackerExtract *extract,
                sparql = g_strdup_printf ("INSERT DATA { GRAPH <" TRACKER_OWN_GRAPH_URN "> {"
                                          "  <%s> nie:dataSource <" TRACKER_EXTRACT_DATA_SOURCE ">;"
                                          "       nie:dataSource <" TRACKER_EXTRACT_FAILURE_DATA_SOURCE ">."
-                                         "}}", tracker_decorator_info_get_urn (data->decorator_info));
+                                         "}}", tracker_decorator_info_get_url (data->decorator_info));
 
                tracker_decorator_info_complete (data->decorator_info, sparql);
        } else {
@@ -587,12 +589,10 @@ decorator_ignore_file (GFile    *file,
        g_message ("Extraction on file '%s' has been attempted too many times, ignoring", uri);
 
        conn = tracker_miner_get_connection (TRACKER_MINER (decorator));
-       query = g_strdup_printf ("INSERT { GRAPH <" TRACKER_OWN_GRAPH_URN "> {"
-                                "  ?urn nie:dataSource <" TRACKER_EXTRACT_DATA_SOURCE ">;"
+       query = g_strdup_printf ("INSERT DATA { GRAPH <" TRACKER_OWN_GRAPH_URN "> {"
+                                "  <%s> nie:dataSource <" TRACKER_EXTRACT_DATA_SOURCE ">;"
                                 "       nie:dataSource <" TRACKER_EXTRACT_FAILURE_DATA_SOURCE ">."
-                                "} } WHERE {"
-                                "  ?urn nie:url \"%s\""
-                                "}", uri);
+                                "}}", uri);
 
        tracker_sparql_connection_update (conn, query, G_PRIORITY_DEFAULT, NULL, &error);
 
diff --git a/tests/functional-tests/extractor-decorator.py b/tests/functional-tests/extractor-decorator.py
index d77c035c9..1afb7f5db 100755
--- a/tests/functional-tests/extractor-decorator.py
+++ b/tests/functional-tests/extractor-decorator.py
@@ -57,13 +57,15 @@ class ExtractorDecoratorTest(fixtures.TrackerMinerTest):
                 ' WHERE { GRAPH ?g { <%s> nie:title ?title } }' % (file_urn, file_urn))
             assert not store.ask('ASK { <%s> nie:title ?title }' % file_urn)
 
+            file_uri = 'file://' + os.path.join(self.indexed_dir, file_path)
+
             # Request re-indexing (same as `tracker index --file ...`)
             # The extractor should reindex the file and re-add the metadata that we
             # deleted, so we should see the nie:title property change.
             with self.tracker.await_insert(f'nie:title "{VALID_FILE_TITLE}"'):
-                miner_fs.index_file('file://' + os.path.join(self.indexed_dir, file_path))
+                miner_fs.index_file(file_uri)
 
-            title_result = store.query('SELECT ?title { <%s> nie:title ?title }' % file_urn)
+            title_result = store.query('SELECT ?title { <%s> nie:interpretedAs/nie:title ?title }' % 
file_uri)
             assert len(title_result) == 1
             self.assertEqual(title_result[0][0], VALID_FILE_TITLE)
         finally:
diff --git a/tests/functional-tests/fixtures.py b/tests/functional-tests/fixtures.py
index 076a5e8bb..570868a7c 100644
--- a/tests/functional-tests/fixtures.py
+++ b/tests/functional-tests/fixtures.py
@@ -110,7 +110,7 @@ class TrackerMinerTest(ut.TestCase):
 
                 for tf in monitored_files:
                     url = self.uri(tf)
-                    self.tracker.ensure_resource(f"a nfo:Document ; nie:url <{url}>")
+                    self.tracker.ensure_resource(f"a nfo:Document ; nie:isStoredAs <{url}>")
             except Exception:
                 self.sandbox.stop()
                 raise
@@ -170,7 +170,7 @@ class TrackerMinerTest(ut.TestCase):
 
         expected = [
             'a nfo:Document',
-            f'nie:url <{url}>',
+            f'nie:isStoredAs <{url}>',
         ]
 
         if content:
@@ -184,15 +184,15 @@ class TrackerMinerTest(ut.TestCase):
         from_url = self.uri(from_path)
         to_url = self.uri(to_path)
         return self.tracker.await_update(resource_id,
-                                         f'nie:url <{from_url}>',
-                                         f'nie:url <{to_url}>')
+                                         f'nie:isStoredAs <{from_url}>',
+                                         f'nie:isStoredAs <{to_url}>')
 
     def await_photo_inserted(self, path):
         url = self.uri(path)
 
         expected = [
             'a nmm:Photo',
-            f'nie:url <{url}>',
+            f'nie:isStoredAs <{url}>',
         ]
 
         return self.tracker.await_insert('; '.join(expected))
@@ -225,7 +225,7 @@ class TrackerMinerFTSTest (TrackerMinerTest):
                 path.write_text(text)
         else:
             url = self.uri(self.testfile)
-            expected = f'a nfo:Document; nie:url <{url}>; nie:plainTextContent "{text_escaped}"'
+            expected = f'a nfo:Document; nie:isStoredAs <{url}>; nie:plainTextContent "{text_escaped}"'
             with self.tracker.await_insert(expected):
                 path.write_text(text)
 
@@ -237,7 +237,7 @@ class TrackerMinerFTSTest (TrackerMinerTest):
         results = self.tracker.query("""
                 SELECT ?url WHERE {
                   ?u a nfo:TextDocument ;
-                      nie:url ?url ;
+                      nie:isStoredAs ?url ;
                       fts:match '%s'.
                  }
                  """ % (word))
@@ -257,7 +257,7 @@ class TrackerMinerFTSTest (TrackerMinerTest):
         self.assertIn(self.uri(self.testfile), results)
 
     def _query_id(self, uri):
-        query = "SELECT tracker:id(?urn) WHERE { ?urn nie:url \"%s\". }" % uri
+        query = "SELECT tracker:id(?urn) WHERE { ?urn nie:isStoredAs/nie:url \"%s\". }" % uri
         result = self.tracker.query(query)
         assert len(result) == 1
         return int(result[0][0])
@@ -446,7 +446,7 @@ class TrackerWritebackTest (TrackerMinerTest):
         url = path.as_uri()
 
         # Copy and wait. The extractor adds the nfo:duration property.
-        expected = f'a nfo:Audio ; nie:url <{url}> ; nfo:duration ?duration'
+        expected = f'a nfo:Audio ; nie:isStoredAs <{url}> ; nfo:duration ?duration'
         with self.tracker.await_insert(expected):
             shutil.copy(path, self.indexed_dir)
         return path
@@ -456,7 +456,7 @@ class TrackerWritebackTest (TrackerMinerTest):
         url = dest_path.as_uri()
 
         # Copy and wait. The extractor adds the nfo:width property.
-        expected = f'a nfo:Image ; nie:url <{url}> ; nfo:width ?width'
+        expected = f'a nfo:Image ; nie:isStoredAs <{url}> ; nfo:width ?width'
         with self.tracker.await_insert(expected):
             shutil.copy(source_path, self.indexed_dir)
         return dest_path
diff --git a/tests/functional-tests/miner-basic.py b/tests/functional-tests/miner-basic.py
index 6774ce47a..a48f83ba1 100755
--- a/tests/functional-tests/miner-basic.py
+++ b/tests/functional-tests/miner-basic.py
@@ -50,7 +50,7 @@ class MinerCrawlTest(fixtures.TrackerMinerTest):
         return self.tracker.query("""
           SELECT ?url WHERE {
               ?u a nfo:TextDocument ;
-                 nie:url ?url.
+                 nie:isStoredAs/nie:url ?url.
           }
           """)
 
@@ -66,7 +66,7 @@ class MinerCrawlTest(fixtures.TrackerMinerTest):
 
     def __get_file_urn(self, filepath):
         result = self.tracker.query("""
-          SELECT ?u WHERE {
+          SELECT nie:interpretedAs(?u) WHERE {
               ?u a nfo:FileDataObject ;
                  nie:url \"%s\" .
           }
diff --git a/tests/functional-tests/miner-resource-removal.py 
b/tests/functional-tests/miner-resource-removal.py
index 91a08f1f1..d54c4fb36 100755
--- a/tests/functional-tests/miner-resource-removal.py
+++ b/tests/functional-tests/miner-resource-removal.py
@@ -39,10 +39,9 @@ class MinerResourceRemovalTest(TrackerMinerTest):
 
     def create_test_content(self, file_urn, title):
         sparql = "WITH %s INSERT { \
-                    _:ie a nmm:MusicPiece ; \
+                    <%s> a nmm:MusicPiece ; \
                          nie:title \"%s\" ; \
-                         nie:isStoredAs <%s> \
-                  } " % (TRACKER_OWN_GRAPH_URN, title, file_urn)
+                  } " % (TRACKER_OWN_GRAPH_URN, file_urn, title)
 
         with self.tracker.await_insert(f'a nmm:MusicPiece; nie:title "{title}"') as resource:
             self.tracker.update(sparql)
diff --git a/tests/libtracker-miner/tracker-miner-fs-test.c b/tests/libtracker-miner/tracker-miner-fs-test.c
index 0c6c7bd30..def2c8f47 100644
--- a/tests/libtracker-miner/tracker-miner-fs-test.c
+++ b/tests/libtracker-miner/tracker-miner-fs-test.c
@@ -59,6 +59,9 @@ test_miner_process_file (TrackerMinerFS *miner,
        }
 
        tracker_resource_add_uri (resource, "rdf:type", "nfo:FileDataObject");
+       tracker_resource_add_uri (resource, "rdf:type", "nie:InformationElement");
+       tracker_resource_add_relation (resource, "nie:interpretedAs", resource);
+       tracker_resource_add_relation (resource, "nie:isStoredAs", resource);
 
        modification_time = g_file_info_get_modification_date_time (info);
        if (modification_time) {


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