summaryrefslogtreecommitdiffstats
path: root/src/world.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/world.c')
-rw-r--r--src/world.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/src/world.c b/src/world.c
index d4d47b2..90a604f 100644
--- a/src/world.c
+++ b/src/world.c
@@ -46,6 +46,11 @@ slv2_world_new()
world->plugin_classes = slv2_plugin_classes_new();
+ // Add the ever-present lv2:Plugin to classes
+ static const char* lv2_plugin_uri = "http://lv2plug.in/ontology#Plugin";
+ raptor_sequence_push(world->plugin_classes, slv2_plugin_class_new(
+ world, NULL, lv2_plugin_uri, "Plugin"));
+
world->plugins = slv2_plugins_new();
return world;
@@ -169,12 +174,14 @@ slv2_world_load_plugin_classes(SLV2World world)
// FIXME: This will need to be a bit more clever when more data is around
// then the ontology (ie classes which aren't LV2 plugin_classes)
+ // FIXME: This loads things that aren't plugin categories
+
unsigned char* query_string = (unsigned char*)
"PREFIX : <http://lv2plug.in/ontology#>\n"
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"
- "SELECT DISTINCT ?class ?label WHERE {\n"
+ "SELECT DISTINCT ?class ?parent ?label WHERE {\n"
//" ?plugin a :Plugin; a ?class .\n"
- " ?class a rdfs:Class; rdfs:label ?label\n"
+ " ?class a rdfs:Class; rdfs:subClassOf ?parent; rdfs:label ?label\n"
"} ORDER BY ?class\n";
librdf_query* q = librdf_new_query(world->world, "sparql",
@@ -183,21 +190,25 @@ slv2_world_load_plugin_classes(SLV2World world)
librdf_query_results* results = librdf_query_execute(q, world->model);
while (!librdf_query_results_finished(results)) {
- librdf_node* class_node = librdf_query_results_get_binding_value(results, 0);
- librdf_uri* class_uri = librdf_node_get_uri(class_node);
- librdf_node* label_node = librdf_query_results_get_binding_value(results, 1);
- const char* label = (const char*)librdf_node_get_literal_value(label_node);
-
- //printf("CLASS: %s (%s)\n", librdf_uri_as_string(class_uri), label);
+ librdf_node* class_node = librdf_query_results_get_binding_value(results, 0);
+ librdf_uri* class_uri = librdf_node_get_uri(class_node);
+ librdf_node* parent_node = librdf_query_results_get_binding_value(results, 1);
+ librdf_uri* parent_uri = librdf_node_get_uri(parent_node);
+ librdf_node* label_node = librdf_query_results_get_binding_value(results, 2);
+ const char* label = (const char*)librdf_node_get_literal_value(label_node);
+
+ printf("CLASS: %s / %s\n", librdf_uri_as_string(parent_uri), librdf_uri_as_string(class_uri));
- SLV2PluginClass plugin_class = slv2_plugin_class_new(
+ SLV2PluginClass plugin_class = slv2_plugin_class_new(world,
+ (const char*)librdf_uri_as_string(parent_uri),
(const char*)librdf_uri_as_string(class_uri),
label);
raptor_sequence_push(world->plugin_classes, plugin_class);
librdf_query_results_next(results);
}
-
+
+ // FIXME: filter list here
}
@@ -309,6 +320,13 @@ slv2_world_serialize(const char* filename)
#endif
+SLV2PluginClass
+slv2_world_get_plugin_class(SLV2World world)
+{
+ return raptor_sequence_get_at(world->plugin_classes, 0);
+}
+
+
SLV2PluginClasses
slv2_world_get_plugin_classes(SLV2World world)
{