summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS3
-rw-r--r--src/lilv_internal.h3
-rw-r--r--src/world.c31
3 files changed, 22 insertions, 15 deletions
diff --git a/NEWS b/NEWS
index cef9739..2ed7018 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,7 @@ lilv (0.21.3) unstable;
* Add lilv_state_get_uri()
* Add lilv_state_delete() for deleting user saved presets
* Fix creation of duplicate manifest entries when saving state
+ * Load discovered owl ontologies as specifications
* Expose lilv_world_load_specifications() and
lilv_world_load_plugin_classes()
* Tolerate passing NULL to lilv_state_restore()
@@ -16,7 +17,7 @@ lilv (0.21.3) unstable;
* Windows fixes (thanks John Emmas)
* Minor documentation improvements
- -- David Robillard <d@drobilla.net> Sat, 07 Mar 2015 03:31:04 -0500
+ -- David Robillard <d@drobilla.net> Mon, 16 Mar 2015 00:06:31 -0400
lilv (0.20.0) stable;
diff --git a/src/lilv_internal.h b/src/lilv_internal.h
index cd4a621..e2444d3 100644
--- a/src/lilv_internal.h
+++ b/src/lilv_internal.h
@@ -176,7 +176,7 @@ struct LilvWorldImpl {
SordNode* lv2_requiredFeature;
SordNode* lv2_symbol;
SordNode* lv2_prototype;
- SordNode* null_uri;
+ SordNode* owl_Ontology;
SordNode* pset_value;
SordNode* rdf_a;
SordNode* rdf_value;
@@ -189,6 +189,7 @@ struct LilvWorldImpl {
SordNode* xsd_decimal;
SordNode* xsd_double;
SordNode* xsd_integer;
+ SordNode* null_uri;
} uris;
LilvOptions opt;
};
diff --git a/src/world.c b/src/world.c
index 2855885..a25d810 100644
--- a/src/world.c
+++ b/src/world.c
@@ -46,6 +46,7 @@ lilv_world_new(void)
#define NS_DCTERMS "http://purl.org/dc/terms/"
#define NS_DYNMAN "http://lv2plug.in/ns/ext/dynmanifest#"
+#define NS_OWL "http://www.w3.org/2002/07/owl#"
#define NEW_URI(uri) sord_new_uri(world->world, (const uint8_t*)uri)
@@ -71,6 +72,7 @@ lilv_world_new(void)
world->uris.lv2_requiredFeature = NEW_URI(LV2_CORE__requiredFeature);
world->uris.lv2_symbol = NEW_URI(LV2_CORE__symbol);
world->uris.lv2_prototype = NEW_URI(LV2_CORE__prototype);
+ world->uris.owl_Ontology = NEW_URI(NS_OWL "Ontology");
world->uris.pset_value = NEW_URI(LV2_PRESETS__value);
world->uris.rdf_a = NEW_URI(LILV_NS_RDF "type");
world->uris.rdf_value = NEW_URI(LILV_NS_RDF "value");
@@ -186,7 +188,7 @@ lilv_world_find_nodes(LilvWorld* world,
LILV_ERROR("Both subject and object are NULL\n");
return NULL;
}
-
+
return lilv_world_find_nodes_internal(world,
subject ? subject->node : NULL,
predicate->node,
@@ -594,7 +596,7 @@ lilv_world_load_bundle(LilvWorld* world, LilvNode* bundle_uri)
lilv_node_free(manifest);
return;
}
-
+
// ?plugin a lv2:Plugin
SordIter* plug_results = sord_search(world->model,
NULL,
@@ -609,17 +611,20 @@ lilv_world_load_bundle(LilvWorld* world, LilvNode* bundle_uri)
lilv_world_load_dyn_manifest(world, bundle_node, manifest);
- // ?specification a lv2:Specification
- SordIter* spec_results = sord_search(world->model,
- NULL,
- world->uris.rdf_a,
- world->uris.lv2_Specification,
- bundle_node);
- FOREACH_MATCH(spec_results) {
- const SordNode* spec = sord_iter_get_node(spec_results, SORD_SUBJECT);
- lilv_world_add_spec(world, spec, bundle_node);
+ // ?spec a lv2:Specification
+ // ?spec a owl:Ontology
+ const SordNode* spec_preds[] = { world->uris.lv2_Specification,
+ world->uris.owl_Ontology,
+ NULL };
+ for (const SordNode** p = spec_preds; *p; ++p) {
+ SordIter* i = sord_search(
+ world->model, NULL, world->uris.rdf_a, *p, bundle_node);
+ FOREACH_MATCH(i) {
+ const SordNode* spec = sord_iter_get_node(i, SORD_SUBJECT);
+ lilv_world_add_spec(world, spec, bundle_node);
+ }
+ sord_iter_free(i);
}
- sord_iter_free(spec_results);
lilv_node_free(manifest);
}
@@ -833,7 +838,7 @@ lilv_world_load_file(LilvWorld* world, SerdReader* reader, const LilvNode* uri)
LILV_ERRORF("Error loading file `%s'\n", lilv_node_as_string(uri));
return st;
}
-
+
zix_tree_insert((ZixTree*)world->loaded_files,
lilv_node_duplicate(uri),
NULL);