Concepts
	basic
		key
		| a basic global identification mechanism.
		| each entity in the system has a key.
		|
		| NOTE: a good key should be uniquely calculable from an entity.
		item
		| a basic element in the system.
		| an item is represented by a URL
		group (item)
		| a special item that unifies several items
		list
		| a representation of several items
		tag
		| a piece of text connected with an item
		action
		| a user defined command or script
	constructed
		state (tag)
		| a named state of an item
		stack (group)
		| a set of versions or states of an item
		| a stack behaves like an item
		collection/list
		| a special list defined manually or with a search that is maintained in the filesystem
		tag chain
		| a special tag that consists of several tags
		event
		| a condition that can be bound to an action
		workflow
		| a named sequence/graph of states and transitions (actions)
	structural
		URL
		index
		| contains:
			metadata
			item data
				GID
				metadata
				GIDs of available local sub-items (thumbs, previews, ...)
				GIDs of available remote sub-items (thumbs, previews, ...)
				URLs (optional)
				| URLs are only local...
					store
					cache
		cache
		store
		clone/remote (???)




structure
	configuration (archive-wide)
		general settings
		actions
		scripts
		remote refs
		clone settings
	index (metadata)
	item store (URLs)
	local cache (previews)
	version info


index directory structure
	.ig/
		items/
		| item store. 
		| contains refs to original objects.
			<item-id>.json
			| contains refs to original data (remote)
			...
			<pack-id>.pack
			...
		meta/		XXX
		| metadata and tag store
		| XXX this is not final...
			<tag-name>.json
			...
		cache/
		| cache configuration and listings
			<cache-id>/
				<cache-id>.json
				| contains specific cache configuration
				| 	- query
				| 	- generator configuration
				| 		- image resolution
				| 		- ...
				| 	- output dir (default: .ig/cache/<cache-id>)
				...
				<image-id>.jpg
				...
			<item-id>.json
			| contains refs to specific <cache-id> and location.
			| NOTE: a single item may appear in several caches, hence a 
			| 		single place to keep the item-specific refs and multiple 
			| 		cache dirs.
			...
			<pack-id>.pack
			...
		config/		XXX
		history/	XXX
		| this directory is dependant on what VCS is used.
		scripts/	XXX
			actions/
				<action-name>
				...
			<script-name>
			...
		events/		XXX
			<event-name>/
				<priority>.<action-name>
				...
			...
	<catalogue-name>/
	...
	



requirements
	index external data (represented by URLs and groups of URLs)
		indexing is done via tags (metadata)
	provide generic data operations
		search/select
		import
		copy/move/...
		...
	provide data-specific operations
		import
		thumbnails/previews (for images)
		...
	provide archive-level operations
		clone
		push/pull
		commit
		...
	provide trivial configurability
		data-specific actions
		domain-specific archive actions

stored data
| the main idea behind this is to make a git like management system 
| suited for a slightly different data, characterised as:
	very large umbers of elements/files
	continually increasing number of elements
	elements rarely change (almost no diffing needed)
	metadata is constantly changed
	large elements
		span more than one storage media
	indirect as well as direct element cloning
		copy / backup
		preview
		thumbnail
	data is constantly searched or accessed
basic requirements
	safe originals



main workflows
	import new data
	

.
| vim:set spell ts=4 sw=4 :
