Some applications need to push large quantities of data into Nepomuk. They are typically called "feeder" applications as they provide Nepomuk with the data it requires. A database is only as powerful as the data it holds.
While one can use the
Resource class to push the data. It'll be slow as the
Resource class is synchronous and writes back into the database after each command. What one requires is an asynchronous API to push the application can just write all the data, and then Nepomuk can process and merge all of the data provided with its internal database.
Applications can use the
SimpleResource class to model the data that they want to push. The
SimpleResource class is not connected to the Nepomuk database, and is just a convenience wrapper around a
QMultiHash. Any changes made to these SimpleResources are not reflected back to the database, unless explicitly specified.
An example -
Nepomuk2::SimpleResource coldplay; coldplay.addType( NCO::Contact() ); coldplay.addProperty( NCO::fullname(), "Coldplay" ); Nepomuk2::SimpleResource album; album.addType( NMM::MusicAlbum() ); album.addProperty( NIE::title(), "X&Y" ); Nepomuk2::SimpleResource fileRes; fileRes.addType( NFO::FileDataObject() ); fileRes.addType( NMM::MusicPiece() ); fileRes.addProperty( NMM::performer(), coldplay ); fileRes.addProperty( NMM::musicAlbum(), album ); fileRes.addProperty( NIE::url(), fileUrl ); fileRes.addProperty( NIE::title(), "What If" );
In the above example we wish to push data about a song "What If" by the popular english artist "Coldplay". We create a different SimpleResource for each resource that we want to push into Nepomuk, and then add the relevant metadata. These
SimpleResources can reference each other.
All of this data is currently just stored in memory in a hash table. In order to push the data into Nepomuk, we group it all together using a
SimpleResourceGraph. After which was can push the data by calling
Nepomuk2::SimpleResourceGraph graph; graph << coldplay << album << fileRes; KJob* job = graph.save();
The save operation returns a KJob which has already begun execution. This operation will continue asynchronously, and on completion will emit the signal completed.
The completed signals also return the respective KJob. This job can then be checked for errors, which may have occurred if we tried to save invalid data. It is up to the programmer to make sure that the data is valid. Invalid valid data is completely ignored and an error is given.
Who else is using it?
The SimpleResource API is currently the de facto method of pushing data into Nepomuk. It is being heavily utilized by our own file indexer, and KDE PIM. PIM uses the SimpleResource api in order to push emails, contacts and event information into Nepomuk.
For more examples on how to use SimpleResource, we suggest you look at our comprehensive tests present in the datamanagementmodel. Add link!!
Most developers do not need to worry about graphs present in Nepomuk. However, for the sake of completion we're documenting what happens internally. Hopefully, this will help you better understand the intricacies on Nepomuk.
SimpleResourceGraph is saved or passed onto
storeResources, each statement in the graph is checked for existance in the database. If that triple already exists, it is set aside and specially handled. All other triples are pushed into this one big graph that is created with each call to
That graph contains the following data -
<nepomuk:/ctx/some-graph> a nrl:Graph .
get some data!!