-------------------------------------------------------------------------------
DojoX Data
-------------------------------------------------------------------------------
Version 1.1
Release date: 03/18/2008
-------------------------------------------------------------------------------
Project state: production
-------------------------------------------------------------------------------
Project authors
	Jared Jurkiewicz (jared.jurkiewicz@gmail.com) (FileStore, HtmlStore, XmlStore, FlickrStore, CssRuleStore, CssClassStore, AppStore, others).
	Shane O'Sullivan (shaneosullivan1@gmail.com) (FlickrRestStore, AtomReadStore, GoogleSeachStore, GoogleFeedStore)
	Wolfram Kriesing (wolfram@kriesing.de) (QueryReadStore)
	Dustin Machi (dmachi@dojotolkit.org) (jsonPathStore);
	Russell Jones (KeyValueStore) (CLA)
	Benjamin Schell (KeyValueStore, CssRuleStore, CssClassStore, AppStore, OpenSearchStore) (Corporate CLA)
	Kurt Stutsman (kurt@snaplogic.org) (SnapLogicStore)
	Kris Zyp (kzyp@dojotoolkit.org) (JsonRestStore, PersevereStore, S3JsonRestStore, CouchDBRestStore)
	Frank Fortson (frank.fortson@equorum.com) (AndOrReadStore, AndOrWriteStore)


-------------------------------------------------------------------------------
Project description

The DojoX Data project is a container for extensions and extra example stores
that implement the dojo.data APIs.  It may also contain utility functions for
working with specific types of data.

-------------------------------------------------------------------------------
Dependencies:

DojoX Data has dependencies on core dojo (dojo.data), dojox.xml for XmlStore 
and dojox.data.dom(deprecated) and the D.O.H. unit test framework
-------------------------------------------------------------------------------
Documentation:

See the Dojo API tool (http://dojotoolkit.org/api)
-------------------------------------------------------------------------------
Contributions:

For contributions to be committed into the dojox repository, the datastore 
should have basic unit tests that exercise the API's that the store declares it
implements.  Documentation and demos are a plus, but unit tests are required
to be committed into this sub-package.  This is necessary to help keep the 
provided datastores as stable as possible.

-------------------------------------------------------------------------------
Installation instructions

Grab the following from the Dojo SVN Repository:
http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/data/*

Install into the following directory structure:
/dojox/data/

...which should be at the same level as your Dojo checkout.

/dojox/data/*

Require in the dojox.data stores you wish to use.
-------------------------------------------------------------------------------
Additional Notes: 
	dojox.data.AtomReadStore - Reads Atom XML documents.

	dojox.data.CvsStore - comma-separated (spreadsheet output)
	datastore implementation 
	
	dojox.data.FlickrRestStore - advanced version of: dojox.data.FlickrStore 
	(Caching + user key support) 
	
	dojox.data.FlickrStore - data store driven by Flickr.com public API. 
	
	dojox.data.HtmlTableStore - Implementation of an HTML Table reading 
	datastore
	
	dojox.data.HtmlStore - Implementation of an HTML reading datastore.  Can 
	handle tables, ordered and un-ordered lists, and lists of divs.
	
	dojox.data.OpmlStore - Store for reading OMPL formatted data
	
	dojox.data.XmlStore - datastore for XML based services or  
	documents.

	dojox.data.QueryReadStore - datastore to provide serverside URL query
	matching.  Similar to the 0.4.X ComboBox dataUrl parameter.	         

	dojox.data.jsonPathStore - datastore that takes an arbitrary js object
	and uses it as the store. Pre-Alpha at the moment.

	dojox.data.KeyValueStore - datastore that mimics a key/value property
	file format.

	dojox.data.SnapLogicStore - Store to interface to SnapLogic data services.

	dojox.data.JsonRestStore - Store to interface with RESTful HTTP/JSON web services.
	dojox.data.PersevereStore - Extension of JsonRestStore for Persevere
	dojox.data.CouchDBRestStore - Extension of JsonRestStore for CouchDB
	dojox.data.S3JsonRestStore - Extension of JsonRestStore for Amazon S3
	dojox.data.GoogleSearchStore - Store to interface Google's AJAX search services.  
		There are many subclasses of this store for particular types of searches:
		dojox.data.GoogleWebSearchStore
		dojox.data.GoogleBlogSearchStore
		dojox.data.GoogleLocalSearchStore
		dojox.data.GoogleVideoSearchStore
		dojox.data.GoogleNewsSearchStore
		dojox.data.GoogleBookSearchStore
		dojox.data.GoogleImageSearchStore

	dojox.data.AndOrReadStore - Demonstrating a more complex query format allowing AND/OR.  
	Based directly on dojo.data.ItemFileReadStore.

	dojox.data.AndOrWriteStore - Demonstrating a more complex query format allowing AND/OR.  
	Based directly on dojo.data.ItemFileWriteStore.

	dojox.data.FileStore - A lazy-loading store designed for searching filesystems with a provided
	PHP back end.  Implements dojo.data.api.Read and dojo.data.api.Identity

	dojox.data.CssRuleStore - A store that allows searching/querying over Css rules loaded in the page in
	the browser.

	dojox.data.CssClassStore - A store that allows searching/querying over what classes are defined in the page in
	the browser.

	dojox.data.AppStore - A store that implements full read, write, and identity APIs for working with ATOM documents.
	The store uses the full APP protocol.
        
	dojox.data.OpenSearchStore - A store that implements OpenSearch provider search capability.

