LibSBML is an application programming interface (API) library for
reading, writing and manipulating files and data streams containing content
in SBML (Systems Biology Markup Language) format.  Developers can embed the
library in their applications, saving themselves the work of implementing
their own parsing, manipulation and validation software.  At the API level,
the library provides the same interface to data structures independently of
whether the model originated in SBML Level 1, 2 or 3.  LibSBML also
fully supports all accepted SBML Level 3 packages.  
 Why not simply use a generic XML parsing library?  After all, SBML is
usually expressed in XML, and there exist plenty of XML parsers, so why not
simply tell people to use one of them, rather than develop a specialized
library?  The answer is: while it is true that developers can use
general-purpose XML libraries, there are many reasons why using a system such
as libSBML is a vastly better choice.  Here are just some of the features
offered by libSBML:
-  Full SBML Support.  All constructs in SBML Level 1, 2
  and 3 Core are supported, as are the constructs defined in the
  officially ratified SBML Level 3 packages.  
-  Unified SBML Level 3, Level 2 and Level 1 object
  models.  All objects have getSBMLDocument(),getModel(),getLevel(), andgetVersion()methods, among other things.
-  Full XML and SBML Validation.  LibSBML offers extensive
  validation against the SBML specifications; this helps verify the
  correctness of SBML models in a way that goes beyond simple schema-based
  validation.  All XML warnings and errors are logged with line and column
  number information and may be retrieved and manipulated programmatically.
  LibSBML also does not force applications to read and write valid
  models: SBML validation is something that must be invoked explicitly, which
  allows callers to do such things as store incomplete models during
  editing.
-  Dimensional analysis and unit checking.  LibSBML implements a
  thorough system for dimensional analysis and checking units of quantities
  in a model.  The validation rules for units that are specified in SBML
  Level 2 Version 2 and Version 3, as well as the equivalent
  warnings defined in SBML Level 2 Version 4 and Level 3
  Version 1, are fully implemented, including checking units in
  mathematical formulas.
-  Support for both MathML and text-string mathematical
  formulas. LibSBML offers facilities for manipulating mathematical
  expressions in both MathML form and a text-string format.  It uses an
  Abstract Syntax Trees (AST) representation of mathematical formulas,
  supporting both in-memory operations and the ability to parse and write
  either text-string or MathML representations.  It also supports
  extensibility by plug-ins for SBML Level 3 packages.
-  Facilities for converting and transforming SBML.  LibSBML
  provides various facilities that include such important functionality as
  converting between SBML Levels and Versions (when possible).  LibSBML can
  also transform within-SBML constructs, such as to expand all user-defined
  functions in-line, replace reactions with explicit differential equations,
  and many other transformations.  This makes many general SBML models
  accessible to software systems that do not directly support certain SBML
  constructs, or can only read certain Level/Version combinations of SBML.
-  Other domain-specific facilities.  LibSBML provides many other
  useful facilities relevant to developing models in SBML.  Examples of such
  operations include obtaining a count of the number of boundary condition
  species, determining the modifier species of a reaction (assuming the
  reaction provides kinetics), and constructing the stoichiometric matrix for
  all reactions in a model.
-  Access to SBML annotations and notes as XML objects.  LibSBML
  offers an API to facilitate the creation and addition of MIRIAM-compatible RDF annotations
  inside SBML <annotation>elements.  Both these kinds of
  annotations and the related SBML<notes>element content
  can be read and manipulated as XML structures or text strings.
-  Support for SBO.  LibSBML provides API methods for adding and
  working with Systems Biology Ontology
  (SBO) terms in SBML models.  Annotating a model with SBO terms adds
  semantic information that can permit better software interpretation of the
  model's mathematical structure and (potentially) the ability to translate a
  model between different mathematical frameworks.
-  Support for compressed SBML files.  If an SBML file name ends
  in .gz,.zipor.bz2, libSBML will
  automatically uncompress the file upon reading it.  Similarly, if the file
  to be written has one of those extensions, libSBML will write it out in
  compressed form.
-  XML parser abstraction.  LibSBML relies on third-party XML
  parser libraries, but thanks to its implementation of an abstraction layer,
  libSBML can use any of three different popular XML parser libraries: Expat, Apache Xerces-C++, and libxml2.  LibSBML provides
  identical functionality and checking of XML syntax is available no matter
  which one is used.  SBML Documents are parsed and manipulated in the
  Unicode codepage for efficiency; however, strings are transcoded to the
  local code page for SBML structures.
-  Interfaces for C, C++, C#, Java, JavaScript, MATLAB, Octave, Perl, PHP,
  Python, R and Ruby (as mentioned above).  The C and C++ interfaces are
  implemented natively; the C#, Java, JavaScript, Perl, PHP, Python, R and Ruby
  interfaces are implemented using SWIG,
  the Simplified Wrapper Interface Generator; and the MATLAB and Octave
  interfaces are implemented through custom hand-written code.
-  Small memory footprint and fast runtime.  The parser is
  event-based (SAX2) and loads SBML data into C++ structures that mirror the
  SBML specification.
-  Portability. LibSBML is written in ISO standard C++ and C and is
  highly portable.  It currently runs on the Linux, Mac OS X, and
  Microsoft Windows operating systems, but it has been known to run under
  FreeBSD, Solaris and iOS with little or no modifications.
-  Support for both CMake and GNU autoconfandmake.  For core libSBML, both build systems are
  supported, allowing programmers greater flexibility in configuring and
  embedding libSBML in their software.
-  Extensive testing. LibSBML has several thousand unit tests
  containing a total of over tens of thousands of individual assertions.  In
  addition to these tests, libSBML contains over 4400 hand-written SBML XML
  files containing different variations of both correctly and incorrectly
  written SBML and XML syntax.
-  Extensive documentation. Complete API documentation is
  available in the "docs" subdirectory, with individual API manuals for the
  different programming languages support by libSBML.
 Users of libSBML often find its features convenient to use for more
than simply supporting SBML.  For example, many software packages provide
users with the ability to express mathematical expressions for such things as
reaction rate expressions, and these packages' interfaces often let users
type in the formulas directly as text strings.  LibSBML's API for
mathematical formulas, with its support for text-string based input, thus
saves application programmers the work of developing their own formula
manipulation and translation facilities.
 LibSBML is distributed in both source-code form and as precompiled
dynamic libraries for the Microsoft Windows, Linux and Apple
Mac OS X operating systems; they are available from the SBML project site
on SourceForge.net.