# HG changeset patch # User Chris Cannam # Date 1228470042 0 # Node ID 3176aade1a03328d4d8efc9c75003c3fb0102c2a # Parent bd7c46636bd08644d23c9e41ee2563d50ff9b290 * Make RDFTransformFactory::writeTransformToRDF write out partial library and plugin descriptions adequate to identify the plugin on disk, if no RDF description for the plugin has been found diff -r bd7c46636bd0 -r 3176aade1a03 rdf/RDFTransformFactory.cpp --- a/rdf/RDFTransformFactory.cpp Thu Dec 04 17:17:06 2008 +0000 +++ b/rdf/RDFTransformFactory.cpp Fri Dec 05 09:40:42 2008 +0000 @@ -27,6 +27,7 @@ #include "PluginRDFIndexer.h" #include "PluginRDFDescription.h" #include "base/ProgressReporter.h" +#include "plugin/PluginIdentifier.h" #include "transform/TransformFactory.h" @@ -381,22 +382,37 @@ QString str; QTextStream s(&str); - // assumes the usual prefixes are available - - s << uri << " a vamp:Transform ;" << endl; + // assumes the usual prefixes are available; requires that uri be + // a local fragment (e.g. ":transform") rather than a uri enclosed + // in <>, so that we can suffix it if need be QString pluginId = transform.getPluginIdentifier(); QString pluginUri = PluginRDFIndexer::getInstance()->getURIForPluginId(pluginId); + if (pluginUri != "") { + s << uri << " a vamp:Transform ;" << endl; + s << " vamp:plugin <" << pluginUri << "> ;" << endl; + } else { + std::cerr << "WARNING: RDFTransformFactory::writeTransformToRDF: No plugin URI available for plugin id \"" << pluginId.toStdString() << "\", writing synthetic plugin and library resources" << std::endl; + QString type, soname, label; + PluginIdentifier::parseIdentifier(pluginId, type, soname, label); + s << uri << "_plugin a vamp:Plugin ;" << endl; + s << " vamp:identifier \"" << label << "\" .\n" << endl; + s << uri << "_library a vamp:PluginLibrary ;" << endl; + s << " vamp:identifier \"" << soname << "\" ;" << endl; + s << " vamp:available_plugin " << uri << "_plugin .\n" << endl; + s << uri << " a vamp:Transform ;" << endl; + s << " vamp:plugin " << uri << "_plugin ;" << endl; + } + PluginRDFDescription description(pluginId); - QString outputUri = description.getOutputUri(transform.getOutput()); + QString outputId = transform.getOutput(); + QString outputUri = description.getOutputUri(outputId); if (transform.getOutput() != "" && outputUri == "") { - std::cerr << "WARNING: RDFTransformFactory::writeTransformToRDF: No output URI available for transform output id \"" << transform.getOutput().toStdString() << "\"" << std::endl; + std::cerr << "WARNING: RDFTransformFactory::writeTransformToRDF: No output URI available for transform output id \"" << transform.getOutput().toStdString() << "\", writing a synthetic output resource" << std::endl; } - s << " vamp:plugin <" << pluginUri << "> ;" << endl; - if (transform.getStepSize() != 0) { s << " vamp:step_size \"" << transform.getStepSize() << "\"^^xsd:int ; " << endl; } @@ -432,6 +448,8 @@ if (outputUri != "") { s << " vamp:output <" << outputUri << "> ." << endl; + } else if (outputId != "") { + s << " vamp:output [ vamp:identifier \"" << outputId << "\" ] ." << endl; } else { s << " ." << endl; }