=============
CollectionKit
=============


:Maintainer: Yen-Ju Chen <yjchenx at gmail dot com>
:License: LGPL as Addresses for GNUstep.
:Version: 0.1

CollectionKit provides a common storage facility for records with properties,
such as contact information, playlist, bookmark, etc.
These records have defined structure (property-value relationship) 
which can be handled better than general property list.
But values of these properties are too flexible to be stored in database,
for example, a contact information may have multipe home phone numbers.
Records can be grouped and groups can have groups inside.
AddressBook framework from Apple provides a good machenism of handling 
these kind of records and Addresses for GNUstep implements the same interface.
CollectionKit aims to provide a general storage facility based on 
Addresses for GNUstep so that other applications and frameworks 
can easily handle their information in the same manner.
CollectionKit provide very little  pre-defined properties.
Therefore, a framework on top of CollectionKit is needed
if the information is intended to be shared by many applications.

CollectionKit is based on Addresses for GNUStep 
made by Bjoern Giesler <bjoern@giesler.de>.
Therefore, it uses LGPL as Addresses for GNUstep.

Developer
---------

* Each item has a unique ID in the collection. If an item is moved from
  one collection into another, it is COPIED, not just retained.
  Therefore, they have different unique ID.

* All the records in collection are stored in flat. In another word,
  there is no hierarchical relationship between records.
  Groups are merely records which refer to other records.
  When adding a record into a group, the record MUST be in collection already. 
  Groups do not retain other records. If a group is added into collection
  and the records it refers to does not, an inconsistency erorr occurs.

* Currently, collection is stored in a property list of NSDictionary.
  All items are under the key CKItemsKey, and all groups are under 
  the key CKGroupsKey. Both items and groups can be initialized with
  -initWithContentDictionary: and saved with -contentDictionary. 

* CollectionKit is a file-based storage system, just like database,
  instead of property list, which can exist solely on memory.
  Although CollectionKit use property list for now,
  the storage system may change in the future.

