[tracker-miners/wip/carlosg/split-dataobject-informationelement: 35/38] tracker-miner-fs: Split nie:DataObject and nie:InformationElement
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker-miners/wip/carlosg/split-dataobject-informationelement: 35/38] tracker-miner-fs: Split nie:DataObject and nie:InformationElement
- Date: Thu, 30 Apr 2020 11:18:32 +0000 (UTC)
commit 27542e1f3c9b96ad8d925935c5b4b9ac59e435df
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]