summaryrefslogtreecommitdiff
path: root/src/libtracker-sparql
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2022-07-11 20:40:03 +0200
committerCarlos Garnacho <carlosg@gnome.org>2023-01-10 13:02:31 +0100
commita54bbd0b7fdb843782227dd6505ac11bb3b74e0b (patch)
tree9d4992e1780da116b71606a274da78a92ad717d0 /src/libtracker-sparql
parent833e016debb9936144fd618a43173a094349dcd6 (diff)
downloadtracker-a54bbd0b7fdb843782227dd6505ac11bb3b74e0b.tar.gz
libtracker-sparql: Deprecate tracker_resource_print_jsonld()
And reimplement it using tracker_resource_print_rdf() and TRACKER_RDF_FORMAT_JSON_LD.
Diffstat (limited to 'src/libtracker-sparql')
-rw-r--r--src/libtracker-sparql/tracker-resource.c150
-rw-r--r--src/libtracker-sparql/tracker-resource.h2
2 files changed, 5 insertions, 147 deletions
diff --git a/src/libtracker-sparql/tracker-resource.c b/src/libtracker-sparql/tracker-resource.c
index 461544b5c..f61155f8c 100644
--- a/src/libtracker-sparql/tracker-resource.c
+++ b/src/libtracker-sparql/tracker-resource.c
@@ -1500,116 +1500,6 @@ tracker_resource_print_sparql_update (TrackerResource *resource,
return g_string_free (context.string, FALSE);
}
-typedef struct {
- TrackerNamespaceManager *all_namespaces, *our_namespaces;
- JsonBuilder *builder;
- GList *done_list;
-} GenerateJsonldData;
-
-static void generate_jsonld_foreach (gpointer key, gpointer value_ptr, gpointer user_data);
-
-static void
-tracker_resource_generate_jsonld (TrackerResource *self,
- GenerateJsonldData *data)
-{
- TrackerResourcePrivate *priv = GET_PRIVATE (self);
- JsonBuilder *builder = data->builder;
-
- /* The JSON-LD spec says it is "important that nodes have an identifier", but
- * doesn't mandate one. I think it's better to omit the ID for blank nodes
- * (where the caller passed NULL as an identifier) than to emit something
- * SPARQL-specific like '_:123'.
- */
- if (!tracker_resource_is_blank_node (self)) {
- json_builder_set_member_name (builder, "@id");
- json_builder_add_string_value (builder, priv->identifier);
- }
-
- g_hash_table_foreach (priv->properties, generate_jsonld_foreach, data);
-}
-
-static void
-generate_jsonld_value (const GValue *value,
- GenerateJsonldData *data)
-{
- JsonNode *node;
-
- if (G_VALUE_HOLDS (value, TRACKER_TYPE_RESOURCE)) {
- TrackerResource *resource;
-
- resource = TRACKER_RESOURCE (g_value_get_object (value));
-
- if (g_list_find (data->done_list, resource) == NULL) {
- data->done_list = g_list_prepend (data->done_list, resource);
- json_builder_begin_object (data->builder);
-
- tracker_resource_generate_jsonld (resource, data);
-
- json_builder_end_object (data->builder);
- } else {
- json_builder_add_string_value (data->builder, tracker_resource_get_identifier(resource));
- }
- } else if (G_VALUE_HOLDS (value, TRACKER_TYPE_URI)) {
- /* URIs can be treated the same as strings in JSON-LD provided the @context
- * sets the type of that property correctly. However, json_node_set_value()
- * will reject a GValue holding TRACKER_TYPE_URI, so we have to extract the
- * string manually here.
- */
- const char *uri = g_value_get_string (value);
- maybe_intern_prefix_of_compact_uri (data->all_namespaces, data->our_namespaces, uri);
- node = json_node_new (JSON_NODE_VALUE);
- json_node_set_string (node, uri);
- json_builder_add_value (data->builder, node);
- } else if (G_VALUE_HOLDS (value, G_TYPE_UINT)) {
- node = json_node_new (JSON_NODE_VALUE);
- json_node_set_int (node, g_value_get_uint(value));
- json_builder_add_value (data->builder, node);
- } else {
- node = json_node_new (JSON_NODE_VALUE);
- json_node_set_value (node, value);
- json_builder_add_value (data->builder, node);
- }
-}
-
-static void
-generate_jsonld_foreach (gpointer key,
- gpointer value_ptr,
- gpointer user_data)
-{
- const char *property = key;
- const GValue *value = value_ptr;
- GenerateJsonldData *data = user_data;
- JsonBuilder *builder = data->builder;
-
- if (strcmp (property, "rdf:type") == 0) {
- property = "@type";
- } else {
- maybe_intern_prefix_of_compact_uri (data->all_namespaces, data->our_namespaces, property);
- }
-
- json_builder_set_member_name (builder, property);
-
- if (G_VALUE_HOLDS (value, G_TYPE_PTR_ARRAY)) {
- json_builder_begin_array (builder);
- g_ptr_array_foreach (g_value_get_boxed (value), (GFunc) generate_jsonld_value, data);
- json_builder_end_array (builder);
- } else {
- generate_jsonld_value (value, data);
- }
-}
-
-static void
-generate_jsonld_namespace_mapping_foreach (gpointer key,
- gpointer value,
- gpointer user_data)
-{
- GenerateJsonldData *data = user_data;
-
- json_builder_set_member_name (data->builder, key);
- json_builder_add_string_value (data->builder, value);
-}
-
-
/**
* tracker_resource_print_jsonld:
* @self: a #TrackerResource
@@ -1626,15 +1516,14 @@ generate_jsonld_namespace_mapping_foreach (gpointer key,
* from the connection that is the intended recipient of this data.
*
* Returns: a newly-allocated string containing JSON-LD data.
+ *
+ * Deprecated: 3.5: Use tracker_resource_print_rdf()
*/
char *
tracker_resource_print_jsonld (TrackerResource *self,
TrackerNamespaceManager *namespaces)
{
- GenerateJsonldData context;
- JsonNode *json_root_node;
- JsonGenerator *generator;
- char *result;
+ g_return_val_if_fail (TRACKER_IS_RESOURCE (self), "");
if (namespaces == NULL) {
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
@@ -1642,38 +1531,7 @@ tracker_resource_print_jsonld (TrackerResource *self,
G_GNUC_END_IGNORE_DEPRECATIONS
}
- context.all_namespaces = namespaces;
- context.our_namespaces = tracker_namespace_manager_new ();
- context.builder = json_builder_new ();
- context.done_list = g_list_prepend (NULL, self);
-
- maybe_intern_prefix_of_compact_uri (context.all_namespaces, context.our_namespaces, tracker_resource_get_identifier (self));
-
- json_builder_begin_object (context.builder);
-
- tracker_resource_generate_jsonld (self, &context);
-
- json_builder_set_member_name (context.builder, "@context");
- json_builder_begin_object (context.builder);
- tracker_namespace_manager_foreach (context.our_namespaces, generate_jsonld_namespace_mapping_foreach, &context);
- json_builder_end_object (context.builder);
-
- json_builder_end_object (context.builder);
-
- json_root_node = json_builder_get_root (context.builder);
-
- generator = json_generator_new ();
- json_generator_set_root (generator, json_root_node);
- json_generator_set_pretty (generator, TRUE);
-
- result = json_generator_to_data (generator, NULL);
-
- g_list_free (context.done_list);
- json_node_free (json_root_node);
- g_object_unref (context.builder);
- g_object_unref (generator);
-
- return result;
+ return tracker_resource_print_rdf (self, namespaces, TRACKER_RDF_FORMAT_JSON_LD, NULL);
}
static TrackerSerializerFormat
diff --git a/src/libtracker-sparql/tracker-resource.h b/src/libtracker-sparql/tracker-resource.h
index 710a8fed0..61e126811 100644
--- a/src/libtracker-sparql/tracker-resource.h
+++ b/src/libtracker-sparql/tracker-resource.h
@@ -112,7 +112,7 @@ char *tracker_resource_print_turtle(TrackerResource *self, TrackerNamespaceManag
TRACKER_AVAILABLE_IN_ALL
char *tracker_resource_print_sparql_update (TrackerResource *self, TrackerNamespaceManager *namespaces, const char *graph_id);
-TRACKER_AVAILABLE_IN_ALL
+TRACKER_DEPRECATED_IN_3_5_FOR(tracker_resource_print_rdf)
char *tracker_resource_print_jsonld (TrackerResource *self, TrackerNamespaceManager *namespaces);
TRACKER_AVAILABLE_IN_3_4