Tuesday, May 13, 2014

Using Behavioral OpeN Data files in Behavoral Neuroscience

BOND is an open file text format that facilitates structured data interchange between all programming languages and all compatible applications. It is based on JSON and like JSON is syntax of braces, brackets, colons, and commas that is useful in many contexts, profiles, and applications.

The purpose is to create a universal, human and machine readable format by which neuroscience configurations, calibrations, raw data and processed data can be stored and transferred between a range of different systems and even allowing multiple systems to interface. It was originally introduced in HVS Image 2014.4 (Beryllium build) as an alternative interchange language for raw data including configurations and calibrations for use with Open Field and Elevated Plus Maze. However it does not attempt to impose any internal data representations on other programming languages or applications and so the files and the standard is universal.

BOND shares a small subset of JSON and ECMAScript’s textual representations with all other programming languages. BOND is agnostic about numbers. In any programming language, there can be a variety of number types of  various capacities and complements, fixed or floating, binary or decimal. That can make interchange between  different programming languages difficult. BOND, like JSON, instead offers only the representation of numbers that  humans use: a sequence of digits. All programming languages know how to make sense of digit sequences even if they disagree on internal representations. That is enough to allow interchange. JSON text is a sequence of Unicode code points. JSON also uses in Unicode in the hex numbers used in the \u escapement notation. Programming languages vary widely on whether they support objects, and if so, what characteristics and constraints the objects offer. The models of object systems can be wildly divergent and are continuing to evolve. JSON instead provides a simple notation for expressing collections of name/value pairs. Most programming languages will have some feature for representing such collections, which can go by names like record, struct, dict, map, hash, or object. BOND also provides support for ordered lists of values. All programming languages have some feature for representing such lists, which can go by names like array, vector, or list. Because objects and arrays can nest, trees and other complex data structures can be represented. By accepting BOND’s simple
convention, complex data structures can be easily interchanged between incompatible applications written in different programming languages.

The BOND standard strictly adheres to the JSON text format, but imposes restrictions on various encoding details. Such standards may require specific behaviors. Because it is based on JSON and is so simple, it is not expected that, like JSON, the BOND grammar will ever change. This gives BOND, as a foundational notation, tremendous stability.