# JSBML

JSBML (Java Systems Biology Markup Language) is an open-source Java (API) for the SBML (Systems Biology Markup Language) format. Its API strives to attain a strong similarity to the Java binding of the corresponding library libSBML, but is entirely implemented in Java and therefore platform independent. JSBML provides an elaborated abstract type hierarchy, whose data types implement or extend many interfaces and abstract classes from the standard Java library. In this way, JSBML integrates smoothly into existing Java projects, and provides methods to read, write, evaluate, and manipulate the content of SBML documents.

## Development

In May 2009 the SBML team conducted a community survey for requests of potential further software development. It turned out that, even though the library libSBML provides a generated binding for the programming language Java, its internal C code makes it difficult to implement platform independent or Web Start applications.
Around that time, several groups from multiple institutes had already implemented small Java versions of libSBML, each being a customized library covering the needs of the particular research project. In order to avoid unnecessary duplications of work and to unify existing development, the international community project JSBML was launched in September 2009, mainly by groups from EBI, Caltech, and a team of students at the University of Tübingen led by Andreas Dräger.
Since JSBML has been implemented considerably later than the first version of libSBML, it could therefore benefit from the existence of the specifications of SBML in the Levels 1–3. Hence, JSBML has not just been developed by porting existing C code from the libSBML project into a new Java. Instead, the developers used this as a chance to completely redesign the class and API structure. This is why JSBML provides a much richer abstract type hierarchy compared to libSBML. Furthermore, the development of JSBML enabled making design decisions that are not possible in libSBML because no backward compatibility had to be considered at this time.
The first stable release version 0.8 of JSBML was made publicly available for download in February 2011. Since then, support for multiple SBML extension packages is being implemented and will be included with the release of JSBML 1.0.

## Aims

The development of JSBML is driven by three aims:
* Provide a pure Java API without any native dependency.
* Achieve the highest possible compatibility to libSBML but at the same time make the library behave like other native Java libraries, i.e., as expected by experienced Java developers.
* Support for all level/version combinations and extension packages of SBML

## Usage

The following example assumes that a JAR file of JSBML has been included into the class path and that a local installation of a Java Virtual Machine is available on the platform where the code is executed.
| The following coding example shows how an SBML file can be parsed and its content can be displayed in form of a tree in a window. The result can look, e.g., as the image on the right. It can be seen that the actual parsing of SBML is done in a single line, by calling a static method in the class SBMLReader. The creation of the tree for the display is also trivial, because the entire data structure in JSBML is organized as a tree. import javax.swing.*; import org.sbml.jsbml.*; /** Displays the content of an SBML file in a {@link JTree} */ public class JSBMLvisualizer extends JFrame { /** @param document The sbml root node of an SBML file */ public JSBMLvisualizer(SBMLDocument document) { super(document.getModel.getId); getContentPane.add(new JScrollPane(new JTree(document))); pack; // make the frame compact setLocationRelativeTo(null); // Place it at the center of the screen setVisible(true); } /** @param args Expects a valid path to an SBML file. */ public static void main(String args) throws Exception { new JSBMLvisualizer(SBMLReader.read(args[0])); } } | Example output when reading an SBML file with the code on the left from the SBML Test Suite with JSBML (on Mac OS X) |