Soprano  2.9.2
Writing Soprano Plugins

Soprano has five kinds of plugins: Soprano::Backend, Soprano::Parser, Soprano::Serializer, Soprano::Query::Parser, and Soprano::Query::Serializer.

Creating a new plugin for Soprano is pretty easy. Imagine, for example, we want to write a new Backend plugin. We simply create a class that inherits from QObject and the Soprano::Backend interface and use the Q_INTERFACES macro to tell Qt's meta-object system about the new plugin. We then export the plugin via the Q_EXPORT_PLUGIN2 macro in the source file.

An example would look as follows:

* class MyBackend : public QObject, public Soprano::Backend
* {
* Q_OBJECT
* Q_INTERFACES(Soprano::Backend)
*
* public:
* StorageModel* createModel( const QStringList& options = QStringList() ) const;
* bool deleteModelData( const BackendSettings& settings ) const;
* BackendFeatures supportedFeatures() const;
* };
*

In the implementation file, export the plugin so that it can be picked up by the plugin loading framework:

* Q_EXPORT_PLUGIN2(soprano_mybackend, MyBackend)
*

The plugin then needs to be linked as a library and installed into the lib/soprano target folder.

Finally we need to create a desktop file describing the plugin. The minimal desktop file looks as follows (for details see Soprano Plugin Desktop Files):

* [Desktop Entry]
* Encoding=UTF-8
* X-Soprano-Library=libsoprano_mybackend
* X-Soprano-Version=2.2
* Type=Service
* ServiceTypes=Soprano/Backend
* Name=MyBackend
* Comment=My very cool and fast Soprano backend
*

The desktop file should be installed into share/soprano/plugins so the Soprano::PluginManager will find it.

All plugin interfaces inherit from Soprano::Error::ErrorCache for error handling and subclasses should use Soprano::Error::ErrorCache::clearError() and Soprano::Error::ErrorCache::setError() to report the status.