The Prajna Project was conceived as an effort to provide a comprehensive set of tools and utilities to help discover and understand the concepts and relationships within various sources of data. Prajna includes components for visualization, data retrieval and fusion, and semantic reasoning.
Prajna was created to provide capabilities from a variety of technologies, selectively blending toolkits and techniques where appropriate. Rather than attempt to create yet another visualization toolkit, semantic reasoner, or data storage, Prajna provides a set of utilities and a common framework to enable the various components to work together. In this fashion, Prajna allows a developer to select visualization techniques appropriate for a data set, rather than trying to coerce the data to conform to a particular visual tool. Similarly, a developer can include a semantic reasoning toolkit, or access data stored in a particular format.
Prajna provides lightweight but highly extensible visualization capabilities that are able to display graphs, trees, and other structures of data. Prajna does not tie these visualization techniques to any particular representation of data. Instead, a layer of abstraction allows custom renderers to provide specific displays of data.
Prajna also supports a wide range of Geographic functions. These geographic functions include both geographic displays and support for various common geographic formats, such as KML and ESRI shape files. The geographic utilities also include some filtering and selection techniques.
Prajna also supports statistical charting through its software bridge to the JFreeChart software library.
For semantic reasoning, the Prajna Project adopts a similar architecture. It provides lightweight capabilities for ontological inference and ontology creation. A developer can use this lightweight capability, or again use software bridges to access similar utilities in other toolkits.
For data retrieval and fusion, Prajna offers data accessors which can retrieve data from a variety of formats and storage systems. Again, Prajna capabilities can be easily extended for custom data stores. Data format descriptor files enable data to be mapped from one data storage system to another. These files also enable Prajna to identify fields within a data store which can be used to construct more significant knowledge topologies, such as networks or trees of data.
The Prajna data components are designed so that a developer does not need to create a new data storage mechanism. A developer may access an existing data source, without modification. The Prajna design for its data components is non-invasive, and Prajna has various data accessors for a variety of storage services. A JSQL-based accessor can retrieve data from standard databases. Prajna also provides a Solr accessor for faceted navigation, and a Dbpedia accessor for retrieving information from Dbpedia. Prajna also can access other formats for data, supporting various XML schemas or even unstructured text. Prajna also includes a FusionAccessor which enables the data from different data sources to be combined into a single cohesive set of information.
Using these tools, a developer can retrieve data from a variety of data sources, fuse the data into a cohesive body of data, and derive structures such as trees or graphs. This augmented data can also include some of the semantic reasoning components, so the data can include inferences provided from one or more ontologies.
While Prajna provides lightweight, extensible capabilities in each of these technology areas, it also provides software bridges to other software toolkits where appropriate. For visualizations, Prajna provides a software bridge to the Prefuse visualization toolkit, which can provide sophisticated visual displays. Prajna also provides a software bridge to the JFreeChart charting library for displays of statistical data.
Prajna also includes a software bridge to the Endeca Information Access Platform (IAP), which is a robust commercial faceted navigation engine.
The developers of Prajna have attempted to follow the best practices of the software development industry, approaching the development process with a high degree of rigor. Coding styles, examples, and inline code documentation should enable developers to easily apply Prajna to their problems, despite the toolkit's complexity. Prajna was not designed hastily, but evolved over a number of years, during which time it has undergone many refactorings and enhancements. It has been used to develop a number of different prototypes, some of which have been released as examples.
In addition, the core set of Prajna classes are independent of other packages. Prajna compiles and runs without any external Jars aside from javaee.jar, removing the need for a long dependency trail of external jar files. The only classes which rely upon external jar files are the software bridges, which typically rely upon jar files for the software or toolkit. These have been separated into separate sub-projects, so a developer may selectively add sub-projects without introducing a long unwanted dependency tail.