All about virtual resources, virtual collections and searching. So far mostly a brain dump of ideas and requirements so we can come up with a nice design for all this.
- Storage collection: An Akonadi collections that represents a storage location for items.
- Virtual collection: An Akonadi collection that does represent an arbitrary set of items stored in any storage collection. Virtual collections are implemented by "linking" to existing items, comparable to symlinks in a file system.
Assumptions all the following is based on.
- An Akonadi collection can either be a storage collection or a virtual collection, i.e. it can either contain "real" items or links to items stored elsewhere, never both.
- An Akonadi resource can either contain storage collections or virtual collections, never both.
Use-Cases for Virtual Collections
- Representing the results of a persistent search:
- in a per-session scope, e.g. the currently displayed week in KOrganizer
- in a per-application scope, e.g. user-defined persistent search folders in KMail
- in a global scope, e.g. user-defined persistent search folders shared between KMail, Mailody and LionMail.
- The Nepomuk tag resource
- Representing the entire tag-tree
Ideas on the Search Infrastructure
- Delegation to resources that support search in the back-ends
- Requires query transformation
- Requires management for live searches
- Requires the ability to report search results (needs protocol extension)
- Query language still undecided, current options: XESAM, SPARQL
- Back-end still undecided, current options: XESAM, Nepomuk
Akonadi Search Infrastructure (concept)
A resource that creates virtual collections instead of storage collections.
A virtual resource can exist in two forms:
- Physical virtual resources: I.e. there is a conventional agent instance for that resource that operates like any other resource but instead creates and maintains virtual collections.
- Virtual virtual resources: These have no agent instance responsible for their collections, but are used for scoping search folders. The Akonadi server itself is responsible for maintaining those, while the applications decide about their lifetime.
We definitely need better terms for these...
The following lists properties of "normal" Akonadi::Collection objects and maps them to the corresponding semantics of virtual collections:
- UID: stays the same
- RID: for application use (currently it holds the query, but that's a dirty hack) (search folders only, still used for its original purpose by the tag resource)
- Name: stays the same, for display purposes only
- Resource Id: see virtual resources
- Content mime-types: good question actually...
- ACL: extend by link/unlink operations
- Item creation: not allowed, would lack a storage location
- Item modification: in theory possible if the storage collection allows it
- Item deletion: in theory possible if the storage location allows it
- Collection creation: depends on resources, useful for the Nepomuk tag resource, not for persistent search folders
- Collection modification
- Name: no problem
- RID: not allowed once there is a actual resource behind it, not a problem when used by the application
- Query: requires special support in the server, but no principal problem
- Parent (that is moving): tricky for the tag resource, not really a problem for search folders, moving to non-virtual resources needs to be prevented.
- Any other attribute: no problem
- Collection deletion: no effects on stored items/collections, so no problem
- Query: for search folders only, should be moved into an dedicated attribute.
- RID usage in virtual collections
- How does the ETM hide virtual collections by default?
- What are the content mime-types of a virtual collection?