Accessing Multiple Data Formats with the Dojo Data API

As a GIS web application developer you have many choices when it comes to developing web based mapping applications. The new JavaScript APIs including ArcGIS Server, Google Maps, Bing Maps (still can’t get used to calling Virtual Earth by its new name), OpenLayers, and others have opened up a treasure chest of opportunities for developers. These JavaScript APIs excel at quickly accessing and displaying geographic data to your end users. But there are many times when you need to display additional non-geographic data in your applications and this data can come in many formats including database tables, JSON, XML, CSV, images, and others. This data may be displayed in a variety of user interface components including grids, trees, combo boxes, image galleries, and others. Dojo not only provides the user interface widgets for displaying the data, but also a data abstraction layer for accessing data in various formats.

Dojo provides extensive utilities for reading and writing data in various formats through its Data API. The Data API is actually composed of four abstract API’s including the Read, Write, Identity, and Notification APIs. These abstract APIs are implemented by various core implementations called stores that read specific dataset types including JSON, XML, CSV and web services from Google, Flickr, and others. For example, the GoogleSearchStore is a core implementation of the abstract Read and Write Data APIs that can be used to perform a search against Google’s Search Service. In the next few posts we will examine several of the core implementations of the Data API including stores used to read data in JSON, XML, and CSV formats. For today though we’ll simply get a high level overview of the abstract Data APIs.

Dojo.data provides a uniform data access layer that removes the concepts of database drivers, service endpoints, and unique data formats. All data, whether the format be JSON, XML, CSV, or something else, is represented by items (rows in database terminology) and attributes (columns in database terminology) of an item. These items are returned via fetches or queries against a data set. The basic implementation of dojo.data gives you access to ItemFileReadStore which provides read access to JSON format data and ItemFileWriteStore which provides write access to in-memory JSON format data. Additional stores including XmlStore, CsvStore, and endpoint specific stores for Flickr, Google, Amazon, and others are provided through the DojoX project (dojox.data). Obviously you will want to do something with the data once it has been retrieved. Normally you’ll want to display the data in some way. Dojo widgets (called dijits) such as grids, trees, combo boxes, and others are data store aware and can easily be hooked into your data store.

Data can be stored either locally or remotely. It is treated the same either way. The Data API also removes the need for you as a programmer to acquire boilerplate code that retrieves data, writes updates to the server, maintains synchronicity with the server, and handle variable formats. Dojo provides a standardized way of interacting with whatever data source you need to work with. In the Data API, a data store is the main object for each implementation and is created as a driver for one and only one dataset. For instance, the ItemFileReadStore object is a core implementation of the Data API which is used to read data in a JSON format.

In the figure below you will see a visual representation of the Dojo Data API. As you can see the Dojo.Data API acts as an abstract layer containing the Read, Write, Notify, and Identify API’s. The Core Data API implementations are know as stores and they handle a specific type of data whether that be XML, JSON, CSV, or some other data type. In any case all data stores provide a common interface for interfacing data that is stored either locally or remotely.

As I mentioned previously the Dojo Data API is actually a set of four APIs which are interfaces or abstractions. They are not implementations, but rather blue-prints for a core implementation of the APIs. For example, ItemFileReadStore is a core implementation of the API and implements the Read and Identity APIs. A core implementation only implements the APIs it needs. So, let’s briefly discuss each of the abstract data APIs.

Read

The Read API is implemented by all data stores. Obviously you need to retrieve data before you can do anything else so it is essentially a prerequisite for all other operations. Some data stores are read-only type objects so they need to implement this API as well so that they can read data and pass it off for display.

IdentityThe Identity API is very similar to the Read API, but provides a few additional capabilities such as the ability to perform random access of an item within a dataset. Identity also returns unique data items which is important when using certain user interface Dijits such as combo boxes, filtering selecting, and tree dijits which need unique items.

Write

The Write API also builds on the Read API by providing additional capabilities for creating, updating, and deleting items from a store. The in-memory copy of data is changed, but the Write API can also handle the synching of datasets between in-memory copies of the data and their data sources.

NotificationThe Notification API builds on the Read API and complements the Write API. It provides a unified interface for responding to create, update, and delete events.

In the next post we’ll examine how you can read and write JSON format data using the ItemFileReadStore and ItemFileWriteStore objects.

More Information
We still have 6 seats remaining for our August 3rd – September 11th session of “Mastering the ArcGIS Server JavaScript API“. In this course we cover a number of introductory and advanced Dojo techniques as they related to ArcGIS Server application development.

Dojo.data provides a uniform data access layer that removes the concepts of database drivers, service endpoints, and unique data formats. All data, whether the format be JSON, XML, CSV, or something else, is represented by items and attributes of an item. These items are returned via fetches or queries against a data set. The basic implementation of dojo.data gives you access to ItemFileReadStore which works with JSON format data. Additional stores including XmlStore, CsvStore, and endpoint specific stores for Flickr, Google, Amazon, and others are provided through the DojoX project. Obviously you will want to do something with the data once it has been retrieved. Widgets (dijits) such as grids, trees, combo boxes, and others are data store aware and can easily be hooked into your data store.