Mercurial > hg > piper-cpp
changeset 223:a29ce4af17bc
More filling in the RDF type loading code
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Fri, 09 Jun 2017 15:18:32 +0100 |
parents | e0e3d9efa774 |
children | 16655424db89 |
files | Makefile vamp-support/RdfTypes.h |
diffstat | 2 files changed, 94 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile Fri Jun 09 13:56:34 2017 +0100 +++ b/Makefile Fri Jun 09 15:18:32 2017 +0100 @@ -2,11 +2,11 @@ VAMPSDK_DIR := ../vamp-plugin-sdk PIPER_DIR := ../piper -INCFLAGS := -Iext -Iext/sord -Iext/serd -I$(VAMPSDK_DIR) -I. -I/usr/local/include +INCFLAGS := -Iext -I/usr/include/sord-0 -I/usr/include/serd-0 -I$(VAMPSDK_DIR) -I. -I/usr/local/include CXXFLAGS := -Wall -Wextra -Werror -Wno-error=unused-parameter -g3 -std=c++11 $(INCFLAGS) #LDFLAGS := -L$(VAMPSDK_DIR) -L/usr/local/lib -lvamp-hostsdk -lcapnp -lkj -LDFLAGS := $(VAMPSDK_DIR)/libvamp-hostsdk.a -lcapnp -lkj +LDFLAGS := $(VAMPSDK_DIR)/libvamp-hostsdk.a -lcapnp -lkj -lsord-0 -lserd-0 LDFLAGS += -ldl @@ -57,7 +57,10 @@ # DO NOT DELETE vamp-capnp/piper-capnp.o: vamp-capnp/piper.capnp.c++ vamp-capnp/piper.capnp.h -vamp-server/convert.o: vamp-json/VampJson.h vamp-support/PluginStaticData.h +vamp-server/convert.o: vamp-json/VampJson.h +vamp-server/convert.o: vamp-support/StaticOutputDescriptor.h +vamp-server/convert.o: vamp-support/PluginStaticData.h +vamp-server/convert.o: vamp-support/StaticOutputDescriptor.h vamp-server/convert.o: vamp-support/PluginConfiguration.h vamp-server/convert.o: vamp-support/RequestResponse.h vamp-server/convert.o: vamp-support/PluginStaticData.h @@ -74,7 +77,9 @@ vamp-server/convert.o: vamp-support/PluginHandleMapper.h vamp-server/convert.o: vamp-support/PreservingPluginOutputIdMapper.h vamp-server/simple-server.o: vamp-json/VampJson.h +vamp-server/simple-server.o: vamp-support/StaticOutputDescriptor.h vamp-server/simple-server.o: vamp-support/PluginStaticData.h +vamp-server/simple-server.o: vamp-support/StaticOutputDescriptor.h vamp-server/simple-server.o: vamp-support/PluginConfiguration.h vamp-server/simple-server.o: vamp-support/RequestResponse.h vamp-server/simple-server.o: vamp-support/PluginStaticData.h @@ -92,6 +97,7 @@ vamp-server/simple-server.o: vamp-support/AssignedPluginHandleMapper.h vamp-server/simple-server.o: vamp-support/DefaultPluginOutputIdMapper.h vamp-server/simple-server.o: vamp-support/LoaderRequests.h +vamp-server/simple-server.o: vamp-support/RdfTypes.h vamp-support/RdfTypes.h ext/json11/json11.o: ext/json11/json11.hpp ext/json11/test.o: ext/json11/json11.hpp test/vamp-client/tst_PluginStub.o: vamp-client/Loader.h @@ -102,6 +108,7 @@ test/vamp-client/tst_PluginStub.o: vamp-support/PluginConfiguration.h test/vamp-client/tst_PluginStub.o: vamp-client/PiperVampPlugin.h test/vamp-client/tst_PluginStub.o: vamp-support/PluginStaticData.h +test/vamp-client/tst_PluginStub.o: vamp-support/StaticOutputDescriptor.h test/vamp-client/tst_PluginStub.o: vamp-client/PluginClient.h vamp-client/qt/test.o: vamp-client/qt/ProcessQtTransport.h vamp-client/qt/test.o: vamp-client/SynchronousTransport.h @@ -114,6 +121,7 @@ vamp-client/qt/test.o: vamp-client/PluginClient.h vamp-client/qt/test.o: vamp-client/PiperVampPlugin.h vamp-client/qt/test.o: vamp-support/PluginStaticData.h +vamp-client/qt/test.o: vamp-support/StaticOutputDescriptor.h vamp-client/qt/test.o: vamp-support/PluginConfiguration.h vamp-client/qt/test.o: vamp-client/SynchronousTransport.h vamp-client/qt/test.o: vamp-support/AssignedPluginHandleMapper.h
--- a/vamp-support/RdfTypes.h Fri Jun 09 13:56:34 2017 +0100 +++ b/vamp-support/RdfTypes.h Fri Jun 09 15:18:32 2017 +0100 @@ -43,14 +43,94 @@ #include <sord/sord.h> +#include <mutex> + namespace piper_vamp { -// NB not thread-safe class RdfTypes { public: - StaticOutputInfo loadStaticOutputInfo(Vamp::HostExt::PluginLoader::PluginKey) { - return {}; + RdfTypes() : + m_world(sord_world_new()) + {} + + ~RdfTypes() { + sord_world_free(m_world); + } + + StaticOutputInfo loadStaticOutputInfo(Vamp::HostExt::PluginLoader::PluginKey + pluginKey) { + + StaticOutputInfo info; + SordModel *model = sord_new(m_world, SORD_SPO|SORD_OPS|SORD_POS, false); + if (loadRdf(model, candidateRdfFilesFor(pluginKey))) { + // we want to find a graph like + // :plugin vamp:output :output1 + // :plugin vamp:output :output2 + // :plugin vamp:output :output3 + // :output1 vamp:computes_event_type :event + // :output2 vamp:computes_feature :feature + // :output3 vamp:computes_signal_type :signal + } + sord_free(model); + return info; + } + +private: + SordWorld *m_world; + + bool loadRdf(SordModel *targetModel, std::vector<std::string> filenames) { + for (auto f: filenames) { + if (loadRdfFile(targetModel, f)) { + return true; + } + } + return false; + } + + bool loadRdfFile(SordModel *targetModel, std::string filename) { + std::string base = "file://" + filename; + SerdURI bu; + if (serd_uri_parse((const uint8_t *)base.c_str(), &bu) != + SERD_SUCCESS) { + std::cerr << "Failed to parse base URI " << base << std::endl; + return false; + } + SerdNode bn = serd_node_from_string(SERD_URI, + (const uint8_t *)base.c_str()); + SerdEnv *env = serd_env_new(&bn); + SerdReader *reader = sord_new_reader(targetModel, env, SERD_TURTLE, 0); + SerdStatus rv = serd_reader_read_file + (reader, (const uint8_t *)filename.c_str()); + bool success = (rv == SERD_SUCCESS); + if (!success) { + std::cerr << "Failed to import RDF from " << filename << std::endl; + } else { + std::cerr << "Imported RDF from " << filename << std::endl; + } + serd_reader_free(reader); + serd_env_free(env); + return success; + } + + std::vector<std::string> candidateRdfFilesFor(Vamp::HostExt:: + PluginLoader::PluginKey key) { + + std::string library = Vamp::HostExt::PluginLoader::getInstance()-> + getLibraryPathForPlugin(key); + + auto li = library.rfind('.'); + if (li == std::string::npos) return {}; + auto withoutSuffix = library.substr(0, li); + + std::vector<std::string> suffixes { "ttl", "TTL", "n3", "N3" }; + std::vector<std::string> candidates; + + for (auto suffix : suffixes) { + candidates.push_back(withoutSuffix + "." + suffix); + } + + return candidates; } };